System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 9b62006973ec5389790959449574354a73639f69:


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 53 51 4c 69    offset += SQLi
9310: 74 65 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66  teMarshal.SizeOf
9320: 53 74 72 75 63 74 49 6e 74 28 29 3b 0d 0a 0d 0a  StructInt();....
9330: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
9340: 74 72 20 70 43 6f 6e 73 74 72 61 69 6e 74 20 3d  tr pConstraint =
9350: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52   SQLiteMarshal.R
9360: 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78  eadIntPtr(pIndex
9370: 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20  , offset);....  
9380: 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
9390: 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b   += IntPtr.Size;
93a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
93b0: 69 6e 74 20 6e 4f 72 64 65 72 42 79 20 3d 20 53  int nOrderBy = S
93c0: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61  QLiteMarshal.Rea
93d0: 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f  dInt32(pIndex, o
93e0: 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
93f0: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
9400: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 53   SQLiteMarshal.S
9410: 69 7a 65 4f 66 53 74 72 75 63 74 49 6e 74 28 29  izeOfStructInt()
9420: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9430: 20 49 6e 74 50 74 72 20 70 4f 72 64 65 72 42 79   IntPtr pOrderBy
9440: 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c   = SQLiteMarshal
9450: 2e 52 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64  .ReadIntPtr(pInd
9460: 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ex, offset);....
9470: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
9480: 78 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49 6e  x = new SQLiteIn
9490: 64 65 78 28 6e 43 6f 6e 73 74 72 61 69 6e 74 2c  dex(nConstraint,
94a0: 20 6e 4f 72 64 65 72 42 79 29 3b 0d 0a 0d 0a 20   nOrderBy);.... 
94b0: 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20             Type 
94c0: 69 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 54  indexConstraintT
94d0: 79 70 65 20 3d 20 74 79 70 65 6f 66 28 0d 0a 20  ype = typeof(.. 
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
94f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9500: 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
9510: 5f 63 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 0d  _constraint);...
9520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
9530: 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e   sizeOfConstrain
9540: 74 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e  tType = Marshal.
9550: 53 69 7a 65 4f 66 28 69 6e 64 65 78 43 6f 6e 73  SizeOf(indexCons
9560: 74 72 61 69 6e 74 54 79 70 65 29 3b 0d 0a 0d 0a  traintType);....
9570: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
9580: 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e 74  (int iConstraint
9590: 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e   = 0; iConstrain
95a0: 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b  t < nConstraint;
95b0: 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d   iConstraint++).
95c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95e0: 49 6e 74 50 74 72 20 70 4f 66 66 73 65 74 20 3d  IntPtr pOffset =
95f0: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49   SQLiteMarshal.I
9600: 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 0d  ntPtrForOffset(.
9610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9620: 20 20 20 20 20 70 43 6f 6e 73 74 72 61 69 6e 74       pConstraint
9630: 2c 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20  , iConstraint * 
9640: 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74  sizeOfConstraint
9650: 54 79 70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Type);....      
9660: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
9670: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9680: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
9690: 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69 6e  traint constrain
96a0: 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
96b0: 20 20 20 20 20 20 20 20 20 28 55 6e 73 61 66 65           (Unsafe
96c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
96d0: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
96e0: 74 72 61 69 6e 74 29 0d 0a 20 20 20 20 20 20 20  traint)..       
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9700: 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74   Marshal.PtrToSt
9710: 72 75 63 74 75 72 65 28 70 4f 66 66 73 65 74 2c  ructure(pOffset,
9720: 20 69 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74   indexConstraint
9730: 54 79 70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Type);....      
9740: 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e            index.
9750: 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  Inputs.Constrain
9760: 74 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20  ts[iConstraint] 
9770: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
9780: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
9790: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
97a0: 28 63 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 20  (constraint);.. 
97b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
97c0: 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65              Type
97d0: 20 69 6e 64 65 78 4f 72 64 65 72 42 79 54 79 70   indexOrderByTyp
97e0: 65 20 3d 20 74 79 70 65 6f 66 28 0d 0a 20 20 20  e = typeof(..   
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
9800: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9810: 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f  .sqlite3_index_o
9820: 72 64 65 72 62 79 29 3b 0d 0a 0d 0a 20 20 20 20  rderby);....    
9830: 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65          int size
9840: 4f 66 4f 72 64 65 72 42 79 54 79 70 65 20 3d 20  OfOrderByType = 
9850: 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 69  Marshal.SizeOf(i
9860: 6e 64 65 78 4f 72 64 65 72 42 79 54 79 70 65 29  ndexOrderByType)
9870: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9880: 20 66 6f 72 20 28 69 6e 74 20 69 4f 72 64 65 72   for (int iOrder
9890: 42 79 20 3d 20 30 3b 20 69 4f 72 64 65 72 42 79  By = 0; iOrderBy
98a0: 20 3c 20 6e 4f 72 64 65 72 42 79 3b 20 69 4f 72   < nOrderBy; iOr
98b0: 64 65 72 42 79 2b 2b 29 0d 0a 20 20 20 20 20 20  derBy++)..      
98c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
98d0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
98e0: 70 4f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65  pOffset = SQLite
98f0: 4d 61 72 73 68 61 6c 2e 49 6e 74 50 74 72 46 6f  Marshal.IntPtrFo
9900: 72 4f 66 66 73 65 74 28 0d 0a 20 20 20 20 20 20  rOffset(..      
9910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f                pO
9920: 72 64 65 72 42 79 2c 20 69 4f 72 64 65 72 42 79  rderBy, iOrderBy
9930: 20 2a 20 73 69 7a 65 4f 66 4f 72 64 65 72 42 79   * sizeOfOrderBy
9940: 54 79 70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Type);....      
9950: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
9960: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9970: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65  lite3_index_orde
9980: 72 62 79 20 6f 72 64 65 72 42 79 20 3d 0d 0a 20  rby orderBy =.. 
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 20 20 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65     (UnsafeNative
99b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
99c0: 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 29 0d 0a  index_orderby)..
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
99f0: 50 74 72 54 6f 53 74 72 75 63 74 75 72 65 28 70  PtrToStructure(p
9a00: 4f 66 66 73 65 74 2c 20 69 6e 64 65 78 4f 72 64  Offset, indexOrd
9a10: 65 72 42 79 54 79 70 65 29 3b 0d 0a 0d 0a 20 20  erByType);....  
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
9a30: 64 65 78 2e 49 6e 70 75 74 73 2e 4f 72 64 65 72  dex.Inputs.Order
9a40: 42 79 73 5b 69 4f 72 64 65 72 42 79 5d 20 3d 0d  Bys[iOrderBy] =.
9a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9a60: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 49       new SQLiteI
9a70: 6e 64 65 78 4f 72 64 65 72 42 79 28 6f 72 64 65  ndexOrderBy(orde
9a80: 72 42 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rBy);..         
9a90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
9aa0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
9ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9af0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
9b00: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9b10: 20 20 20 20 20 2f 2f 2f 20 50 6f 70 75 6c 61 74       /// Populat
9b20: 65 73 20 74 68 65 20 6f 75 74 70 75 74 73 20 6f  es the outputs o
9b30: 66 20 61 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65  f a pre-allocate
9b40: 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  d native sqlite3
9b50: 5f 69 6e 64 65 78 5f 69 6e 66 6f 0d 0a 20 20 20  _index_info..   
9b60: 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75       /// structu
9b70: 72 65 20 75 73 69 6e 67 20 61 6e 20 65 78 69 73  re using an exis
9b80: 74 69 6e 67 20 3c 73 65 65 20 63 72 65 66 3d 22  ting <see cref="
9b90: 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20  SQLiteIndex" /> 
9ba0: 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
9bb0: 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  /// instance... 
9bc0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
9bd0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
9be0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
9bf0: 69 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20  index">..       
9c00: 20 2f 2f 2f 20 54 68 65 20 65 78 69 73 74 69 6e   /// The existin
9c10: 67 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  g <see cref="SQL
9c20: 69 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a  iteIndex" /> obj
9c30: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e  ect instance con
9c40: 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20  taining..       
9c50: 20 2f 2f 2f 20 74 68 65 20 6f 75 74 70 75 74 20   /// the output 
9c60: 64 61 74 61 20 74 6f 20 75 73 65 2e 0d 0a 20 20  data to use...  
9c70: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
9c80: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
9c90: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e  <param name="pIn
9ca0: 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  dex">..        /
9cb0: 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
9cc0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 70 72 65  inter to the pre
9cd0: 2d 61 6c 6c 6f 63 61 74 65 64 20 6e 61 74 69 76  -allocated nativ
9ce0: 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
9cf0: 69 6e 66 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  info..        //
9d00: 2f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  / structure...  
9d10: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
9d20: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  m>..        inte
9d30: 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64  rnal static void
9d40: 20 54 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20 20   ToIntPtr(..    
9d50: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e          SQLiteIn
9d60: 64 65 78 20 69 6e 64 65 78 2c 0d 0a 20 20 20 20  dex index,..    
9d70: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
9d80: 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20  Index..         
9d90: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
9da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
9db0: 28 28 69 6e 64 65 78 20 3d 3d 20 6e 75 6c 6c 29  ((index == null)
9dc0: 20 7c 7c 20 28 69 6e 64 65 78 2e 49 6e 70 75 74   || (index.Input
9dd0: 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20  s == null) ||.. 
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
9df0: 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e  index.Inputs.Con
9e00: 73 74 72 61 69 6e 74 73 20 3d 3d 20 6e 75 6c 6c  straints == null
9e10: 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
9e20: 20 20 20 20 20 20 28 69 6e 64 65 78 2e 4f 75 74        (index.Out
9e30: 70 75 74 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  puts == null) ||
9e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e50: 20 20 28 69 6e 64 65 78 2e 4f 75 74 70 75 74 73    (index.Outputs
9e60: 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  .ConstraintUsage
9e70: 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  s == null))..   
9e80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9ea0: 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rn;..           
9eb0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9ec0: 20 20 69 66 20 28 70 49 6e 64 65 78 20 3d 3d 20    if (pIndex == 
9ed0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
9ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9ef0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
9f00: 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 20       int offset 
9f10: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
9f20: 20 20 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61      int nConstra
9f30: 69 6e 74 20 3d 20 53 51 4c 69 74 65 4d 61 72 73  int = SQLiteMars
9f40: 68 61 6c 2e 52 65 61 64 49 6e 74 33 32 28 70 49  hal.ReadInt32(pI
9f50: 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
9f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
9f70: 20 28 6e 43 6f 6e 73 74 72 61 69 6e 74 20 21 3d   (nConstraint !=
9f80: 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f   index.Inputs.Co
9f90: 6e 73 74 72 61 69 6e 74 73 2e 4c 65 6e 67 74 68  nstraints.Length
9fa0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9fb0: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
9fc0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 43            if (nC
9fd0: 6f 6e 73 74 72 61 69 6e 74 20 21 3d 20 69 6e 64  onstraint != ind
9fe0: 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74  ex.Outputs.Const
9ff0: 72 61 69 6e 74 55 73 61 67 65 73 2e 4c 65 6e 67  raintUsages.Leng
a000: 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  th)..           
a010: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
a020: 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
a030: 65 74 20 2b 3d 20 53 51 4c 69 74 65 4d 61 72 73  et += SQLiteMars
a040: 68 61 6c 2e 53 69 7a 65 4f 66 53 74 72 75 63 74  hal.SizeOfStruct
a050: 49 6e 74 28 29 20 2b 20 49 6e 74 50 74 72 2e 53  Int() + IntPtr.S
a060: 69 7a 65 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  ize +..         
a070: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72         SQLiteMar
a080: 73 68 61 6c 2e 53 69 7a 65 4f 66 53 74 72 75 63  shal.SizeOfStruc
a090: 74 49 6e 74 28 29 20 2b 20 49 6e 74 50 74 72 2e  tInt() + IntPtr.
a0a0: 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Size;....       
a0b0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e       IntPtr pCon
a0c0: 73 74 72 61 69 6e 74 55 73 61 67 65 20 3d 20 53  straintUsage = S
a0d0: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61  QLiteMarshal.Rea
a0e0: 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20  dIntPtr(pIndex, 
a0f0: 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20  offset);....    
a100: 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65          int size
a110: 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  OfConstraintUsag
a120: 65 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e  eType = Marshal.
a130: 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a  SizeOf(typeof(..
a140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a150: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a160: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
a170: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61  x_constraint_usa
a180: 67 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ge));....       
a190: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 43       for (int iC
a1a0: 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b 20 69  onstraint = 0; i
a1b0: 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43 6f  Constraint < nCo
a1c0: 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73 74  nstraint; iConst
a1d0: 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20 20  raint++)..      
a1e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a1f0: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
a200: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a210: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
a220: 72 61 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e 73  raint_usage cons
a230: 74 72 61 69 6e 74 55 73 61 67 65 20 3d 0d 0a 20  traintUsage =.. 
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a250: 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74     new UnsafeNat
a260: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a270: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
a280: 69 6e 74 5f 75 73 61 67 65 28 0d 0a 20 20 20 20  int_usage(..    
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2a0: 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74      index.Output
a2b0: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  s.ConstraintUsag
a2c0: 65 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 29  es[iConstraint])
a2d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a2e0: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 53 74 72       Marshal.Str
a2f0: 75 63 74 75 72 65 54 6f 50 74 72 28 0d 0a 20 20  uctureToPtr(..  
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a310: 20 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67    constraintUsag
a320: 65 2c 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c  e, SQLiteMarshal
a330: 2e 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74  .IntPtrForOffset
a340: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a350: 20 20 20 20 20 20 20 70 43 6f 6e 73 74 72 61 69         pConstrai
a360: 6e 74 55 73 61 67 65 2c 20 69 43 6f 6e 73 74 72  ntUsage, iConstr
a370: 61 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e  aint * sizeOfCon
a380: 73 74 72 61 69 6e 74 55 73 61 67 65 54 79 70 65  straintUsageType
a390: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
a3a0: 20 20 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d          false);.
a3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
a3d0: 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53  fset += IntPtr.S
a3e0: 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ize;....        
a3f0: 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61      SQLiteMarsha
a400: 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 70 49 6e  l.WriteInt32(pIn
a410: 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20  dex, offset,..  
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
a430: 64 65 78 2e 4f 75 74 70 75 74 73 2e 49 6e 64 65  dex.Outputs.Inde
a440: 78 4e 75 6d 62 65 72 29 3b 0d 0a 0d 0a 20 20 20  xNumber);....   
a450: 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
a460: 2b 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c  += SQLiteMarshal
a470: 2e 53 69 7a 65 4f 66 53 74 72 75 63 74 49 6e 74  .SizeOfStructInt
a480: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a490: 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c     SQLiteMarshal
a4a0: 2e 57 72 69 74 65 49 6e 74 50 74 72 28 70 49 6e  .WriteIntPtr(pIn
a4b0: 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20  dex, offset,..  
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
a4d0: 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
a4e0: 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
a4f0: 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 49 6e  index.Outputs.In
a500: 64 65 78 53 74 72 69 6e 67 29 29 3b 0d 0a 0d 0a  dexString));....
a510: 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
a520: 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a  et += IntPtr.Siz
a530: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
a540: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
a550: 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 6a 75    // NOTE: We ju
a560: 73 74 20 61 6c 6c 6f 63 61 74 65 64 20 74 68 65  st allocated the
a570: 20 49 6e 64 65 78 53 74 72 69 6e 67 20 66 69 65   IndexString fie
a580: 6c 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 77  ld; therefore, w
a590: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  e..            /
a5a0: 2f 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20  /       need to 
a5b0: 73 65 74 20 74 68 65 20 4e 65 65 64 54 6f 46 72  set the NeedToFr
a5c0: 65 65 49 6e 64 65 78 53 74 72 69 6e 67 20 66 69  eeIndexString fi
a5d0: 65 6c 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  eld to non-zero.
a5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
a600: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74  LiteMarshal.Writ
a610: 65 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f  eInt32(pIndex, o
a620: 66 66 73 65 74 2c 20 31 29 3b 0d 0a 0d 0a 20 20  ffset, 1);....  
a630: 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
a640: 20 2b 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61   += SQLiteMarsha
a650: 6c 2e 53 69 7a 65 4f 66 53 74 72 75 63 74 49 6e  l.SizeOfStructIn
a660: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
a670: 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61      SQLiteMarsha
a680: 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 70 49 6e  l.WriteInt32(pIn
a690: 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20  dex, offset,..  
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
a6b0: 64 65 78 2e 4f 75 74 70 75 74 73 2e 4f 72 64 65  dex.Outputs.Orde
a6c0: 72 42 79 43 6f 6e 73 75 6d 65 64 29 3b 0d 0a 0d  rByConsumed);...
a6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66  .            off
a6e0: 73 65 74 20 2b 3d 20 53 51 4c 69 74 65 4d 61 72  set += SQLiteMar
a6f0: 73 68 61 6c 2e 53 69 7a 65 4f 66 53 74 72 75 63  shal.SizeOfStruc
a700: 74 49 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  tInt();....     
a710: 20 20 20 20 20 20 20 69 66 20 28 6f 66 66 73 65         if (offse
a720: 74 20 25 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c  t % sizeof(doubl
a730: 65 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) != 0)..      
a740: 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
a750: 20 2b 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61   += SQLiteMarsha
a760: 6c 2e 53 69 7a 65 4f 66 53 74 72 75 63 74 49 6e  l.SizeOfStructIn
a770: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
a780: 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61      SQLiteMarsha
a790: 6c 2e 57 72 69 74 65 44 6f 75 62 6c 65 28 70 49  l.WriteDouble(pI
a7a0: 6e 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20  ndex, offset,.. 
a7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a7c0: 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 45 73 74  ndex.Outputs.Est
a7d0: 69 6d 61 74 65 64 43 6f 73 74 29 3b 0d 0a 20 20  imatedCost);..  
a7e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a7f0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
a800: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a850: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
a860: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
a870: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ies..        pri
a880: 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78  vate SQLiteIndex
a890: 49 6e 70 75 74 73 20 69 6e 70 75 74 73 3b 0d 0a  Inputs inputs;..
a8a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
a8b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
a8c0: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
a8d0: 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70  ="SQLiteIndexInp
a8e0: 75 74 73 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  uts" /> object i
a8f0: 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69  nstance containi
a900: 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
a910: 74 68 65 20 69 6e 70 75 74 73 20 74 6f 20 74 68  the inputs to th
a920: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
a930: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
a940: 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 0d  e.BestIndex" />.
a950: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74  .        /// met
a960: 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
a970: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
a980: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
a990: 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20 49  iteIndexInputs I
a9a0: 6e 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 7b  nputs..        {
a9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
a9c0: 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 70 75 74  t { return input
a9d0: 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  s; }..        }.
a9e0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
a9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa30: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
aa40: 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65  ivate SQLiteInde
aa50: 78 4f 75 74 70 75 74 73 20 6f 75 74 70 75 74 73  xOutputs outputs
aa60: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
aa70: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
aa80: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
aa90: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
aaa0: 4f 75 74 70 75 74 73 22 20 2f 3e 20 6f 62 6a 65  Outputs" /> obje
aab0: 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74  ct instance cont
aac0: 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  aining..        
aad0: 2f 2f 2f 20 74 68 65 20 6f 75 74 70 75 74 73 20  /// the outputs 
aae0: 66 72 6f 6d 20 74 68 65 20 3c 73 65 65 20 63 72  from the <see cr
aaf0: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
ab00: 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64  edModule.BestInd
ab10: 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  ex" />..        
ab20: 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  /// method...   
ab30: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
ab40: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
ab50: 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65 78 4f  lic SQLiteIndexO
ab60: 75 74 70 75 74 73 20 4f 75 74 70 75 74 73 0d 0a  utputs Outputs..
ab70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ab80: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
ab90: 75 72 6e 20 6f 75 74 70 75 74 73 3b 20 7d 0d 0a  urn outputs; }..
aba0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
abb0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
abc0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
abd0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
abe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac20: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
ac30: 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 56 69 72  region SQLiteVir
ac40: 74 75 61 6c 54 61 62 6c 65 20 42 61 73 65 20 43  tualTable Base C
ac50: 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
ac60: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
ac70: 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72   This class repr
ac80: 65 73 65 6e 74 73 20 61 20 6d 61 6e 61 67 65 64  esents a managed
ac90: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
aca0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 20  mplementation.  
acb0: 49 74 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e  It is..    /// n
acc0: 6f 74 20 73 65 61 6c 65 64 20 61 6e 64 20 73 68  ot sealed and sh
acd0: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 61 73 20  ould be used as 
ace0: 74 68 65 20 62 61 73 65 20 63 6c 61 73 73 20 66  the base class f
acf0: 6f 72 20 61 6e 79 20 75 73 65 72 2d 64 65 66 69  or any user-defi
ad00: 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 76 69 72  ned..    /// vir
ad10: 74 75 61 6c 20 74 61 62 6c 65 20 63 6c 61 73 73  tual table class
ad20: 65 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69  es implemented i
ad30: 6e 20 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d  n managed code..
ad40: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
ad50: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
ad60: 63 6c 61 73 73 20 53 51 4c 69 74 65 56 69 72 74  class SQLiteVirt
ad70: 75 61 6c 54 61 62 6c 65 20 3a 0d 0a 20 20 20 20  ualTable :..    
ad80: 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 4e          ISQLiteN
ad90: 61 74 69 76 65 48 61 6e 64 6c 65 2c 20 49 44 69  ativeHandle, IDi
ada0: 73 70 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20  sposable /* NOT 
adb0: 53 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b  SEALED */..    {
adc0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
add0: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
ade0: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nts..        ///
adf0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ae00: 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65      /// The inde
ae10: 78 20 77 69 74 68 69 6e 20 74 68 65 20 61 72 72  x within the arr
ae20: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 70 72  ay of strings pr
ae30: 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20  ovided to the.. 
ae40: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
ae50: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
ae60: 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74  agedModule.Creat
ae70: 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20  e" /> and..     
ae80: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
ae90: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
aea0: 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20  Module.Connect" 
aeb0: 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f 6e 74 61  /> methods conta
aec0: 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  ining the..     
aed0: 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66 20 74     /// name of t
aee0: 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
aef0: 65 6e 74 69 6e 67 20 74 68 69 73 20 76 69 72 74  enting this virt
af00: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
af10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
af20: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
af30: 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 4d 6f  ate const int Mo
af40: 64 75 6c 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20  duleNameIndex = 
af50: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  0;....        //
af60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afa0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
afb0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
afc0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
afd0: 69 6e 64 65 78 20 77 69 74 68 69 6e 20 74 68 65  index within the
afe0: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
aff0: 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68  s provided to th
b000: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
b010: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
b020: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43  eManagedModule.C
b030: 72 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20  reate" /> and.. 
b040: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
b050: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
b060: 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65  agedModule.Conne
b070: 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73 20 63  ct" /> methods c
b080: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20  ontaining the.. 
b090: 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20         /// name 
b0a0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
b0b0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
b0c0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
b0d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
b0e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
b0f0: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e  private const in
b100: 74 20 44 61 74 61 62 61 73 65 4e 61 6d 65 49 6e  t DatabaseNameIn
b110: 64 65 78 20 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20  dex = 1;....    
b120: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b170: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
b180: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
b190: 2f 20 54 68 65 20 69 6e 64 65 78 20 77 69 74 68  / The index with
b1a0: 69 6e 20 74 68 65 20 61 72 72 61 79 20 6f 66 20  in the array of 
b1b0: 73 74 72 69 6e 67 73 20 70 72 6f 76 69 64 65 64  strings provided
b1c0: 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
b1d0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
b1e0: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
b1f0: 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e 20  dule.Create" /> 
b200: 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  and..        ///
b210: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
b220: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
b230: 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  .Connect" /> met
b240: 68 6f 64 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hods containing 
b250: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
b260: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72   name of the vir
b270: 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
b280: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
b290: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
b2a0: 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 54  vate const int T
b2b0: 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20  ableNameIndex = 
b2c0: 32 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  2;..        #end
b2d0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b2e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b330: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
b340: 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
b350: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b360: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
b370: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
b380: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
b390: 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
b3a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b3b0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
b3c0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
b3d0: 75 6d 65 6e 74 73 22 3e 0d 0a 20 20 20 20 20 20  uments">..      
b3e0: 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e    /// The origin
b3f0: 61 6c 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  al array of stri
b400: 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20  ngs provided to 
b410: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
b420: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
b430: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
b440: 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d  .Create" /> and.
b450: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
b460: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
b470: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e  anagedModule.Con
b480: 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73  nect" /> methods
b490: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
b4a0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
b4b0: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 56 69   public SQLiteVi
b4c0: 72 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20  rtualTable(..   
b4d0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
b4e0: 5d 20 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20  ] arguments..   
b4f0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
b500: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b510: 20 20 20 74 68 69 73 2e 61 72 67 75 6d 65 6e 74     this.argument
b520: 73 20 3d 20 61 72 67 75 6d 65 6e 74 73 3b 0d 0a  s = arguments;..
b530: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b540: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b550: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
b5b0: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
b5c0: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70  rties..        p
b5d0: 72 69 76 61 74 65 20 73 74 72 69 6e 67 5b 5d 20  rivate string[] 
b5e0: 61 72 67 75 6d 65 6e 74 73 3b 0d 0a 20 20 20 20  arguments;..    
b5f0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
b600: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
b610: 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 72 61  he original arra
b620: 79 20 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f  y of strings pro
b630: 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20  vided to the..  
b640: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
b650: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
b660: 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65  gedModule.Create
b670: 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20  " /> and..      
b680: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
b690: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
b6a0: 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f  odule.Connect" /
b6b0: 3e 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20  > methods...    
b6c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b6d0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
b6e0: 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e  ic virtual strin
b6f0: 67 5b 5d 20 41 72 67 75 6d 65 6e 74 73 0d 0a 20  g[] Arguments.. 
b700: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b710: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
b720: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
b730: 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 3b 20 7d  urn arguments; }
b740: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
b750: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b7a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b7b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
b7c0: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
b7d0: 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
b7e0: 65 6d 65 6e 74 69 6e 67 20 74 68 69 73 20 76 69  ementing this vi
b7f0: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
b800: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
b810: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
b820: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72  blic virtual str
b830: 69 6e 67 20 4d 6f 64 75 6c 65 4e 61 6d 65 0d 0a  ing ModuleName..
b840: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b850: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
b860: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b870: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
b880: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
b8a0: 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74  tring[] argument
b8b0: 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a  s = Arguments;..
b8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b8d0: 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73    if ((arguments
b8e0: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20   != null) &&..  
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e    (arguments.Len
b910: 67 74 68 20 3e 20 4d 6f 64 75 6c 65 4e 61 6d 65  gth > ModuleName
b920: 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20  Index))..       
b930: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b950: 72 65 74 75 72 6e 20 61 72 67 75 6d 65 6e 74 73  return arguments
b960: 5b 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65 78  [ModuleNameIndex
b970: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
b980: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b990: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9c0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
b9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b9e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b9f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
ba00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
ba10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
ba60: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
ba70: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
ba80: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
ba90: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
baa0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
bab0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
bac0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
bad0: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73  public virtual s
bae0: 74 72 69 6e 67 20 44 61 74 61 62 61 73 65 4e 61  tring DatabaseNa
baf0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  me..        {.. 
bb00: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
bb30: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
bb40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bb50: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75     string[] argu
bb60: 6d 65 6e 74 73 20 3d 20 41 72 67 75 6d 65 6e 74  ments = Argument
bb70: 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  s;....          
bb80: 20 20 20 20 20 20 69 66 20 28 28 61 72 67 75 6d        if ((argum
bb90: 65 6e 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26  ents != null) &&
bba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bbb0: 20 20 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73        (arguments
bbc0: 2e 4c 65 6e 67 74 68 20 3e 20 44 61 74 61 62 61  .Length > Databa
bbd0: 73 65 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20  seNameIndex)).. 
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
bbf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bc00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 67        return arg
bc10: 75 6d 65 6e 74 73 5b 44 61 74 61 62 61 73 65 4e  uments[DatabaseN
bc20: 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  ameIndex];..    
bc30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
bc50: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
bc60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
bc80: 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
bc90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
bca0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
bcb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
bcc0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
bcd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
bd10: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
bd20: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
bd30: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 76  he name of the v
bd40: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
bd50: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
bd60: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
bd70: 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74  ublic virtual st
bd80: 72 69 6e 67 20 54 61 62 6c 65 4e 61 6d 65 0d 0a  ring TableName..
bd90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bda0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
bdb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bdc0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
bdd0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
bdf0: 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74  tring[] argument
be00: 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a  s = Arguments;..
be10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
be20: 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73    if ((arguments
be30: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20   != null) &&..  
be40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be50: 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e    (arguments.Len
be60: 67 74 68 20 3e 20 54 61 62 6c 65 4e 61 6d 65 49  gth > TableNameI
be70: 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20  ndex))..        
be80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
bea0: 65 74 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b  eturn arguments[
beb0: 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 3b  TableNameIndex];
bec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bed0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
bee0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
bef0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf10: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
bf40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
bf50: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
bf60: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
bf70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
bfc0: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74  egion Public Met
bfd0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
bfe0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
bff0: 20 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74       /// Attempt
c000: 73 20 74 6f 20 72 65 63 6f 72 64 20 74 68 65 20  s to record the 
c010: 72 65 6e 61 6d 69 6e 67 20 6f 66 20 74 68 65 20  renaming of the 
c020: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 61 73  virtual table as
c030: 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
c040: 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
c050: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
c060: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
c070: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
c080: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
c090: 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20  e="name">..     
c0a0: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 6e     /// The new n
c0b0: 61 6d 65 20 66 6f 72 20 74 68 65 20 76 69 72 74  ame for the virt
c0c0: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
c0d0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
c0e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
c0f0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
c100: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70   /// Non-zero up
c110: 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20  on success...   
c120: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
c130: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
c140: 6c 69 63 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c  lic virtual bool
c150: 20 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20   Rename(..      
c160: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
c170: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
c180: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
c190: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
c1a0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
c1b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72           if ((ar
c1c0: 67 75 6d 65 6e 74 73 20 21 3d 20 6e 75 6c 6c 29  guments != null)
c1d0: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
c1e0: 20 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e       (arguments.
c1f0: 4c 65 6e 67 74 68 20 3e 20 54 61 62 6c 65 4e 61  Length > TableNa
c200: 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20  meIndex))..     
c210: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c220: 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
c230: 6e 74 73 5b 54 61 62 6c 65 4e 61 6d 65 49 6e 64  nts[TableNameInd
c240: 65 78 5d 20 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20  ex] = name;..   
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c260: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
c270: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
c280: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
c290: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
c2a0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
c2b0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
c2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c300: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c310: 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69     #region ISQLi
c320: 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 4d  teNativeHandle M
c330: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
c340: 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20 6e  private IntPtr n
c350: 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 20 20  ativeHandle;..  
c360: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
c370: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
c380: 20 52 65 74 75 72 6e 73 20 74 68 65 20 75 6e 64   Returns the und
c390: 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 20 6e  erlying SQLite n
c3a0: 61 74 69 76 65 20 68 61 6e 64 6c 65 20 61 73 73  ative handle ass
c3b0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
c3c0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  s..        /// o
c3d0: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
c3e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
c3f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
c400: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
c410: 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e  IntPtr NativeHan
c420: 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  dle..        {..
c430: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
c440: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
c450: 29 3b 20 72 65 74 75 72 6e 20 6e 61 74 69 76 65  ); return native
c460: 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20 20 20  Handle; }..     
c470: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
c480: 73 65 74 20 7b 20 6e 61 74 69 76 65 48 61 6e 64  set { nativeHand
c490: 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  le = value; }.. 
c4a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c4b0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
c4c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
c510: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
c520: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
c530: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
c540: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
c550: 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f         /// Dispo
c560: 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  ses of this obje
c570: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
c580: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
c590: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
c5a0: 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73  blic void Dispos
c5b0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e()..        {..
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
c5d0: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
c5e0: 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72          GC.Suppr
c5f0: 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73  essFinalize(this
c600: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
c610: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
c620: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
c630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c670: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c680: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
c690: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
c6a0: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70  mbers..        p
c6b0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70  rivate bool disp
c6c0: 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f  osed;..        /
c6d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
c6e0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73        /// Throws
c6f0: 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 4f   an <see cref="O
c700: 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
c710: 65 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74 68  eption" /> if th
c720: 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20  is object..     
c730: 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20     /// instance 
c740: 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f 73 65  has been dispose
c750: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
c760: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
c770: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
c780: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
c790: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
c7a0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52        {..#if THR
c7b0: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c7d0: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
c7e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c7f0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
c800: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
c810: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
c820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c830: 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 56    typeof(SQLiteV
c840: 69 72 74 75 61 6c 54 61 62 6c 65 29 2e 4e 61 6d  irtualTable).Nam
c850: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
c860: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
c870: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c880: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8c0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c8d0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
c8e0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44  >..        /// D
c8f0: 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20  isposes of this 
c900: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
c910: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
c920: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
c930: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
c940: 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a  e="disposing">..
c950: 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
c960: 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74  zero if this met
c970: 68 6f 64 20 69 73 20 62 65 69 6e 67 20 63 61 6c  hod is being cal
c980: 6c 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20  led from the..  
c990: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
c9a0: 72 65 66 3d 22 44 69 73 70 6f 73 65 28 29 22 20  ref="Dispose()" 
c9b0: 2f 3e 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f  /> method.  Zero
c9c0: 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20   if this method 
c9d0: 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 0d  is being called.
c9e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 72 6f  .        /// fro
c9f0: 6d 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 2e  m the finalizer.
ca00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
ca10: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
ca20: 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
ca30: 6c 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  l void Dispose(b
ca40: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
ca50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ca60: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
ca70: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
ca80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ca90: 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70        //if (disp
caa0: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
cab0: 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
cac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
cad0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
cae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
caf0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
cb00: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
cb10: 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65  / dispose manage
cb20: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
cb30: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
cb40: 20 20 20 20 20 2f 2f 20 20 20 20 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 0d  ///////////////.
cb70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cb80: 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   //}....        
cb90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
cba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbd0: 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e  // release unman
cbe0: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
cbf0: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
cc00: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
cc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
cc30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc40: 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75    disposed = tru
cc50: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
cc60: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
cc70: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
cc80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
cce0: 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f  region Destructo
ccf0: 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  r..        /// <
cd00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
cd10: 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73 20    /// Finalizes 
cd20: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
cd30: 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
cd40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
cd50: 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65 56 69         ~SQLiteVi
cd60: 72 74 75 61 6c 54 61 62 6c 65 28 29 0d 0a 20 20  rtualTable()..  
cd70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cd80: 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c       Dispose(fal
cd90: 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  se);..        }.
cda0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
cdb0: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
cdc0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
cdd0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
cde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ce20: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
ce30: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
ce40: 75 72 73 6f 72 20 42 61 73 65 20 43 6c 61 73 73  ursor Base Class
ce50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
ce60: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
ce70: 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e  s class represen
ce80: 74 73 20 61 20 6d 61 6e 61 67 65 64 20 76 69 72  ts a managed vir
ce90: 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
cea0: 72 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  r implementation
ceb0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 74 20 69 73  ...    /// It is
cec0: 20 6e 6f 74 20 73 65 61 6c 65 64 20 61 6e 64 20   not sealed and 
ced0: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 61  should be used a
cee0: 73 20 74 68 65 20 62 61 73 65 20 63 6c 61 73 73  s the base class
cef0: 20 66 6f 72 20 61 6e 79 0d 0a 20 20 20 20 2f 2f   for any..    //
cf00: 2f 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 76  / user-defined v
cf10: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
cf20: 73 6f 72 20 63 6c 61 73 73 65 73 20 69 6d 70 6c  sor classes impl
cf30: 65 6d 65 6e 74 65 64 20 69 6e 20 6d 61 6e 61 67  emented in manag
cf40: 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  ed code...    //
cf50: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
cf60: 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53    public class S
cf70: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
cf80: 65 43 75 72 73 6f 72 20 3a 0d 0a 20 20 20 20 20  eCursor :..     
cf90: 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61         ISQLiteNa
cfa0: 74 69 76 65 48 61 6e 64 6c 65 2c 20 49 44 69 73  tiveHandle, IDis
cfb0: 70 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53  posable /* NOT S
cfc0: 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d  EALED */..    {.
cfd0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
cfe0: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
cff0: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tors..        //
d000: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
d010: 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75       /// Constru
d020: 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  cts an instance 
d030: 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a  of this class...
d040: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
d050: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
d060: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
d070: 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20  "table">..      
d080: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
d090: 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
d0a0: 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
d0b0: 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
d0c0: 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
d0d0: 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 6f 62  /// with this ob
d0e0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
d0f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
d100: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
d110: 62 6c 69 63 20 53 51 4c 69 74 65 56 69 72 74 75  blic SQLiteVirtu
d120: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28 0d 0a  alTableCursor(..
d130: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
d140: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
d150: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
d160: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
d170: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
d180: 2e 74 61 62 6c 65 20 3d 20 74 61 62 6c 65 3b 0d  .table = table;.
d190: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
d1a0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
d1b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
d1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d200: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
d210: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
d220: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
d230: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 56 69  private SQLiteVi
d240: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
d250: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
d260: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
d270: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
d280: 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
d290: 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
d2a0: 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
d2b0: 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
d2c0: 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 6f 62  /// with this ob
d2d0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
d2e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
d2f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
d300: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 53  public virtual S
d310: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
d320: 65 20 54 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  e Table..       
d330: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d340: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
d350: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 74 61  sed(); return ta
d360: 62 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ble; }..        
d370: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
d380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
d3d0: 70 72 69 76 61 74 65 20 69 6e 74 20 69 6e 64 65  private int inde
d3e0: 78 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20  xNumber;..      
d3f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
d400: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d  .        /// Num
d410: 62 65 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ber used to help
d420: 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
d430: 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54  lected index.  T
d440: 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a  his value will..
d450: 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 73          /// be s
d460: 65 74 20 76 69 61 20 74 68 65 20 3c 73 65 65 20  et via the <see 
d470: 63 72 65 66 3d 22 46 69 6c 74 65 72 22 20 2f 3e  cref="Filter" />
d480: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
d490: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
d4a0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
d4b0: 20 76 69 72 74 75 61 6c 20 69 6e 74 20 49 6e 64   virtual int Ind
d4c0: 65 78 4e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20  exNumber..      
d4d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d4e0: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
d4f0: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 69  osed(); return i
d500: 6e 64 65 78 4e 75 6d 62 65 72 3b 20 7d 0d 0a 20  ndexNumber; }.. 
d510: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d520: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d570: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
d580: 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e  tring indexStrin
d590: 67 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  g;..        /// 
d5a0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
d5b0: 20 20 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73     /// String us
d5c0: 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74  ed to help ident
d5d0: 69 66 79 20 74 68 65 20 73 65 6c 65 63 74 65 64  ify the selected
d5e0: 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 76 61   index.  This va
d5f0: 6c 75 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20  lue will..      
d600: 20 20 2f 2f 2f 20 62 65 20 73 65 74 20 76 69 61    /// be set via
d610: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
d620: 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f  Filter" /> metho
d630: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
d640: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
d650: 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75      public virtu
d660: 61 6c 20 73 74 72 69 6e 67 20 49 6e 64 65 78 53  al string IndexS
d670: 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b  tring..        {
d680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
d690: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
d6a0: 64 28 29 3b 20 72 65 74 75 72 6e 20 69 6e 64 65  d(); return inde
d6b0: 78 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20  xString; }..    
d6c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d6d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
d6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d710: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d720: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
d730: 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73  teValue[] values
d740: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
d750: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
d760: 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 73    /// The values
d770: 20 75 73 65 64 20 74 6f 20 66 69 6c 74 65 72 20   used to filter 
d780: 74 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65  the rows returne
d790: 64 20 76 69 61 20 74 68 69 73 20 63 75 72 73 6f  d via this curso
d7a0: 72 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20  r object..      
d7b0: 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 20    /// instance. 
d7c0: 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
d7d0: 20 62 65 20 73 65 74 20 76 69 61 20 74 68 65 20   be set via the 
d7e0: 3c 73 65 65 20 63 72 65 66 3d 22 46 69 6c 74 65  <see cref="Filte
d7f0: 72 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  r" />..        /
d800: 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  // method...    
d810: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d820: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
d830: 69 63 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74  ic virtual SQLit
d840: 65 56 61 6c 75 65 5b 5d 20 56 61 6c 75 65 73 0d  eValue[] Values.
d850: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d860: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
d870: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
d880: 65 74 75 72 6e 20 76 61 6c 75 65 73 3b 20 7d 0d  eturn values; }.
d890: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
d8a0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
d8b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
d8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d900: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
d910: 67 69 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d  gion Protected M
d920: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
d930: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d940: 20 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d         /// Attem
d950: 70 74 73 20 74 6f 20 70 65 72 73 69 73 74 20 74  pts to persist t
d960: 68 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65  he specified <se
d970: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61  e cref="SQLiteVa
d980: 6c 75 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a  lue" /> object..
d990: 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74          /// inst
d9a0: 61 6e 63 65 73 20 69 6e 20 6f 72 64 65 72 20 74  ances in order t
d9b0: 6f 20 6d 61 6b 65 20 74 68 65 6d 20 61 76 61 69  o make them avai
d9c0: 6c 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 0d  lable after the.
d9d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
d9e0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
d9f0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c  anagedModule.Fil
da00: 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 20 72  ter" /> method r
da10: 65 74 75 72 6e 73 2e 0d 0a 20 20 20 20 20 20 20  eturns...       
da20: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
da30: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
da40: 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73  ram name="values
da50: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
da60: 54 68 65 20 61 72 72 61 79 20 6f 66 20 3c 73 65  The array of <se
da70: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61  e cref="SQLiteVa
da80: 6c 75 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  lue" /> object i
da90: 6e 73 74 61 6e 63 65 73 20 74 6f 20 62 65 0d 0a  nstances to be..
daa0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 73          /// pers
dab0: 69 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  isted...        
dac0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
dad0: 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
dae0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
daf0: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c   The number of <
db00: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
db10: 56 61 6c 75 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Value" /> object
db20: 20 69 6e 73 74 61 6e 63 65 73 20 74 68 61 74 20   instances that 
db30: 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  were..        //
db40: 2f 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70  / successfully p
db50: 65 72 73 69 73 74 65 64 2e 0d 0a 20 20 20 20 20  ersisted...     
db60: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
db70: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  >..        prote
db80: 63 74 65 64 20 76 69 72 74 75 61 6c 20 69 6e 74  cted virtual int
db90: 20 54 72 79 50 65 72 73 69 73 74 56 61 6c 75 65   TryPersistValue
dba0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
dbb0: 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61  SQLiteValue[] va
dbc0: 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lues..          
dbd0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
dbf0: 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20  result = 0;.... 
dc00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
dc10: 61 6c 75 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  alues != null)..
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
dc40: 6f 72 65 61 63 68 20 28 53 51 4c 69 74 65 56 61  oreach (SQLiteVa
dc50: 6c 75 65 20 76 61 6c 75 65 20 69 6e 20 76 61 6c  lue value in val
dc60: 75 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ues)..          
dc70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
dc90: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
dca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dcb0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
dcc0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
dcd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
dce0: 6c 75 65 2e 50 65 72 73 69 73 74 28 29 29 0d 0a  lue.Persist())..
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd00: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2b 2b          result++
dd10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
dd20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
dd30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
dd40: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
dd50: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
dd60: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
dd70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
dd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ddb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ddc0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
ddd0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65  region Public Me
dde0: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
ddf0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
de00: 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
de10: 65 74 68 6f 64 20 73 68 6f 75 6c 64 20 6e 6f 72  ethod should nor
de20: 6d 61 6c 6c 79 20 62 65 20 75 73 65 64 20 62 79  mally be used by
de30: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
de40: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
de50: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
de60: 65 2e 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74  e.Filter" /> met
de70: 68 6f 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0d  hod in order to.
de80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 65 72  .        /// per
de90: 66 6f 72 6d 20 66 69 6c 74 65 72 69 6e 67 20 6f  form filtering o
dea0: 66 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  f the result row
deb0: 73 20 61 6e 64 2f 6f 72 20 74 6f 20 72 65 63 6f  s and/or to reco
dec0: 72 64 20 74 68 65 20 66 69 6c 74 65 72 69 6e 67  rd the filtering
ded0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72  ..        /// cr
dee0: 69 74 65 72 69 61 20 70 72 6f 76 69 64 65 64 20  iteria provided 
def0: 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  by the SQLite co
df00: 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  re library...   
df10: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
df20: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
df30: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e   <param name="in
df40: 64 65 78 4e 75 6d 62 65 72 22 3e 0d 0a 20 20 20  dexNumber">..   
df50: 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20       /// Number 
df60: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
df70: 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
df80: 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20  ed index...     
df90: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
dfa0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
dfb0: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 53  ram name="indexS
dfc0: 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20  tring">..       
dfd0: 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64   /// String used
dfe0: 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
dff0: 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
e000: 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
e010: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
e020: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
e030: 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a  name="values">..
e040: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
e050: 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e  values correspon
e060: 64 69 6e 67 20 74 6f 20 65 61 63 68 20 63 6f 6c  ding to each col
e070: 75 6d 6e 20 69 6e 20 74 68 65 20 73 65 6c 65 63  umn in the selec
e080: 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20  ted index...    
e090: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
e0a0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
e0b0: 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 46 69   virtual void Fi
e0c0: 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  lter(..         
e0d0: 20 20 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62     int indexNumb
e0e0: 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
e0f0: 20 73 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72   string indexStr
e100: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
e110: 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20    SQLiteValue[] 
e120: 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20  values..        
e130: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
e140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68  ..            Ch
e150: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
e160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
e170: 20 28 28 76 61 6c 75 65 73 20 21 3d 20 6e 75 6c   ((values != nul
e180: 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
e190: 20 20 20 20 20 20 20 28 54 72 79 50 65 72 73 69         (TryPersi
e1a0: 73 74 56 61 6c 75 65 73 28 76 61 6c 75 65 73 29  stValues(values)
e1b0: 20 21 3d 20 76 61 6c 75 65 73 2e 4c 65 6e 67 74   != values.Lengt
e1c0: 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h))..           
e1d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e1e0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
e1f0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 0d 0a  LiteException(..
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e210: 20 20 20 20 22 66 61 69 6c 65 64 20 74 6f 20 70      "failed to p
e220: 65 72 73 69 73 74 20 6f 6e 65 20 6f 72 20 6d 6f  ersist one or mo
e230: 72 65 20 76 61 6c 75 65 73 22 29 3b 0d 0a 20 20  re values");..  
e240: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
e250: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e260: 69 6e 64 65 78 4e 75 6d 62 65 72 20 3d 20 69 6e  indexNumber = in
e270: 64 65 78 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20  dexNumber;..    
e280: 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64          this.ind
e290: 65 78 53 74 72 69 6e 67 20 3d 20 69 6e 64 65 78  exString = index
e2a0: 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20  String;..       
e2b0: 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65 73       this.values
e2c0: 20 3d 20 76 61 6c 75 65 73 3b 0d 0a 20 20 20 20   = values;..    
e2d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
e2e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
e2f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
e300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e340: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
e350: 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e  ISQLiteNativeHan
e360: 64 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  dle Members..   
e370: 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 74       private Int
e380: 50 74 72 20 6e 61 74 69 76 65 48 61 6e 64 6c 65  Ptr nativeHandle
e390: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
e3a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e3b0: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
e3c0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c  e underlying SQL
e3d0: 69 74 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c  ite native handl
e3e0: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
e3f0: 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  h this..        
e400: 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  /// object insta
e410: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
e420: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
e430: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
e440: 74 75 61 6c 20 49 6e 74 50 74 72 20 4e 61 74 69  tual IntPtr Nati
e450: 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20  veHandle..      
e460: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e470: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
e480: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 6e  osed(); return n
e490: 61 74 69 76 65 48 61 6e 64 6c 65 3b 20 7d 0d 0a  ativeHandle; }..
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 65              inte
e4b0: 72 6e 61 6c 20 73 65 74 20 7b 20 6e 61 74 69 76  rnal set { nativ
e4c0: 65 48 61 6e 64 6c 65 20 3d 20 76 61 6c 75 65 3b  eHandle = value;
e4d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
e4e0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
e4f0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
e500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e550: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
e560: 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  ble Members..   
e570: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
e580: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
e590: 44 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73  Disposes of this
e5a0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
e5b0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
e5c0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
e5d0: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
e5e0: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20  ispose()..      
e5f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e600: 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d   Dispose(true);.
e610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 43 2e  .            GC.
e620: 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65  SuppressFinalize
e630: 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20  (this);..       
e640: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
e650: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
e660: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
e670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e6b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
e6c0: 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72  sposable "Patter
e6d0: 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  n" Members..    
e6e0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
e6f0: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
e700: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
e710: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
e720: 68 72 6f 77 73 20 61 6e 20 3c 73 65 65 20 63 72  hrows an <see cr
e730: 65 66 3d 22 4f 62 6a 65 63 74 44 69 73 70 6f 73  ef="ObjectDispos
e740: 65 64 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20  edException" /> 
e750: 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a  if this object..
e760: 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74          /// inst
e770: 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64 69  ance has been di
e780: 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  sposed...       
e790: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
e7a0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
e7b0: 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f   void CheckDispo
e7c0: 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a  sed() /* throw *
e7d0: 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  /..        {..#i
e7e0: 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f  f THROW_ON_DISPO
e7f0: 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SED..           
e800: 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a   if (disposed)..
e810: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e830: 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
e840: 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
e850: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
e860: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51         typeof(SQ
e870: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
e880: 43 75 72 73 6f 72 29 2e 4e 61 6d 65 29 3b 0d 0a  Cursor).Name);..
e890: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
e8a0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
e8b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e900: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
e910: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
e920: 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73        /// Dispos
e930: 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  es of this objec
e940: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
e950: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
e960: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
e970: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69   <param name="di
e980: 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20 20  sposing">..     
e990: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
e9a0: 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69  if this method i
e9b0: 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  s being called f
e9c0: 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20  rom the..       
e9d0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
e9e0: 44 69 73 70 6f 73 65 28 29 22 20 2f 3e 20 6d 65  Dispose()" /> me
e9f0: 74 68 6f 64 2e 20 20 5a 65 72 6f 20 69 66 20 74  thod.  Zero if t
ea00: 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65  his method is be
ea10: 69 6e 67 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20  ing called..    
ea20: 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68 65      /// from the
ea30: 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a 20 20 20   finalizer...   
ea40: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
ea50: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  >..        prote
ea60: 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69  cted virtual voi
ea70: 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64  d Dispose(bool d
ea80: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
ea90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
eaa0: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
eab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
eac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ead0: 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67   //if (disposing
eae0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
eaf0: 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20     //{..        
eb00: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb30: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
eb40: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73      //    // dis
eb50: 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
eb60: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
eb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb80: 2f 2f 20 20 20 20 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 0d 0a 20 20 20 20  //////////..    
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d              //}.
ebc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ebd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ebe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
ec00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
ec10: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
ec20: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
ec30: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ec40: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ec50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
ec80: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
ec90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
eca0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ecb0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
ecc0: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 0d 0a  //////////////..
ed10: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
ed20: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
ed30: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
ed40: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
ed50: 20 46 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20   Finalizes this 
ed60: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
ed70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
ed80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
ed90: 20 20 7e 53 51 4c 69 74 65 56 69 72 74 75 61 6c    ~SQLiteVirtual
eda0: 54 61 62 6c 65 43 75 72 73 6f 72 28 29 0d 0a 20  TableCursor().. 
edb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
edc0: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
edd0: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lse);..        }
ede0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
edf0: 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
ee00: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
ee10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ee20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ee60: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53  ..    #region IS
ee70: 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c  QLiteNativeHandl
ee80: 65 20 49 6e 74 65 72 66 61 63 65 0d 0a 20 20 20  e Interface..   
ee90: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
eea0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74      /// This int
eeb0: 65 72 66 61 63 65 20 72 65 70 72 65 73 65 6e 74  erface represent
eec0: 73 20 61 20 6e 61 74 69 76 65 20 68 61 6e 64 6c  s a native handl
eed0: 65 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  e provided by th
eee0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20  e SQLite core.. 
eef0: 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 2e 0d     /// library..
ef00: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
ef10: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
ef20: 69 6e 74 65 72 66 61 63 65 20 49 53 51 4c 69 74  interface ISQLit
ef30: 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20  eNativeHandle.. 
ef40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
ef50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
ef60: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
ef70: 69 76 65 20 68 61 6e 64 6c 65 20 76 61 6c 75 65  ive handle value
ef80: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
ef90: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
efa0: 20 20 20 49 6e 74 50 74 72 20 4e 61 74 69 76 65     IntPtr Native
efb0: 48 61 6e 64 6c 65 20 7b 20 67 65 74 3b 20 7d 0d  Handle { get; }.
efc0: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
efd0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
efe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f030: 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65   #region ISQLite
f040: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 49 6e 74  NativeModule Int
f050: 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f 20  erface..    /// 
f060: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
f070: 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61 63  // This interfac
f080: 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 76  e represents a v
f090: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
f0a0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 72 69 74  lementation writ
f0b0: 74 65 6e 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20  ten in..    /// 
f0c0: 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20  native code...  
f0d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f0e0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74  ..    public int
f0f0: 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 4e 61  erface ISQLiteNa
f100: 74 69 76 65 4d 6f 64 75 6c 65 0d 0a 20 20 20 20  tiveModule..    
f110: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  {..        /// <
f120: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
f130: 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
f140: 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
f150: 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
f160: 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
f170: 69 6e 73 74 61 6e 63 65 20 6f 66 20 61 20 76 69  instance of a vi
f180: 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
f190: 20 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70       /// in resp
f1a0: 6f 6e 73 65 20 74 6f 20 61 20 43 52 45 41 54 45  onse to a CREATE
f1b0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
f1c0: 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 64 62  tatement. The db
f1d0: 20 70 61 72 61 6d 65 74 65 72 0d 0a 20 20 20 20   parameter..    
f1e0: 20 20 20 20 2f 2f 2f 20 69 73 20 61 20 70 6f 69      /// is a poi
f1f0: 6e 74 65 72 20 74 6f 20 74 68 65 20 53 51 4c 69  nter to the SQLi
f200: 74 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  te database conn
f210: 65 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 65  ection that is e
f220: 78 65 63 75 74 69 6e 67 0d 0a 20 20 20 20 20 20  xecuting..      
f230: 20 20 2f 2f 2f 20 74 68 65 20 43 52 45 41 54 45    /// the CREATE
f240: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
f250: 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 70 41  tatement. The pA
f260: 75 78 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74  ux argument is t
f270: 68 65 20 63 6f 70 79 0d 0a 20 20 20 20 20 20 20  he copy..       
f280: 20 2f 2f 2f 20 6f 66 20 74 68 65 20 63 6c 69 65   /// of the clie
f290: 6e 74 20 64 61 74 61 20 70 6f 69 6e 74 65 72 20  nt data pointer 
f2a0: 74 68 61 74 20 77 61 73 20 74 68 65 20 66 6f 75  that was the fou
f2b0: 72 74 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rth argument to 
f2c0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
f2d0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
f2e0: 6d 6f 64 75 6c 65 28 29 20 6f 72 20 73 71 6c 69  module() or sqli
f2f0: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
f300: 65 5f 76 32 28 29 20 63 61 6c 6c 20 74 68 61 74  e_v2() call that
f310: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65  ..        /// re
f320: 67 69 73 74 65 72 65 64 20 74 68 65 20 76 69 72  gistered the vir
f330: 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
f340: 65 2e 20 54 68 65 20 61 72 67 76 20 70 61 72 61  e. The argv para
f350: 6d 65 74 65 72 20 69 73 20 61 6e 0d 0a 20 20 20  meter is an..   
f360: 20 20 20 20 20 2f 2f 2f 20 61 72 72 61 79 20 6f       /// array o
f370: 66 20 61 72 67 63 20 70 6f 69 6e 74 65 72 73 20  f argc pointers 
f380: 74 6f 20 6e 75 6c 6c 20 74 65 72 6d 69 6e 61 74  to null terminat
f390: 65 64 20 73 74 72 69 6e 67 73 2e 20 54 68 65 20  ed strings. The 
f3a0: 66 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20 2f  first..        /
f3b0: 2f 2f 20 73 74 72 69 6e 67 2c 20 61 72 67 76 5b  // string, argv[
f3c0: 30 5d 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20  0], is the name 
f3d0: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 62 65  of the module be
f3e0: 69 6e 67 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65  ing invoked. The
f3f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 6f  ..        /// mo
f400: 64 75 6c 65 20 6e 61 6d 65 20 69 73 20 74 68 65  dule name is the
f410: 20 6e 61 6d 65 20 70 72 6f 76 69 64 65 64 20 61   name provided a
f420: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 61 72 67  s the second arg
f430: 75 6d 65 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20  ument to..      
f440: 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72    /// sqlite3_cr
f450: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 61 6e  eate_module() an
f460: 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
f470: 74 20 74 6f 20 74 68 65 20 55 53 49 4e 47 20 63  t to the USING c
f480: 6c 61 75 73 65 20 6f 66 0d 0a 20 20 20 20 20 20  lause of..      
f490: 20 20 2f 2f 2f 20 74 68 65 20 43 52 45 41 54 45    /// the CREATE
f4a0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
f4b0: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 73  tatement that is
f4c0: 20 72 75 6e 6e 69 6e 67 2e 20 54 68 65 20 73 65   running. The se
f4d0: 63 6f 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f  cond,..        /
f4e0: 2f 2f 20 61 72 67 76 5b 31 5d 2c 20 69 73 20 74  // argv[1], is t
f4f0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
f500: 61 74 61 62 61 73 65 20 69 6e 20 77 68 69 63 68  atabase in which
f510: 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
f520: 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
f530: 2f 2f 2f 20 69 73 20 62 65 69 6e 67 20 63 72 65  /// is being cre
f540: 61 74 65 64 2e 20 54 68 65 20 64 61 74 61 62 61  ated. The databa
f550: 73 65 20 6e 61 6d 65 20 69 73 20 22 6d 61 69 6e  se name is "main
f560: 22 20 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72  " for the primar
f570: 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  y..        /// d
f580: 61 74 61 62 61 73 65 2c 20 6f 72 20 22 74 65 6d  atabase, or "tem
f590: 70 22 20 66 6f 72 20 54 45 4d 50 20 64 61 74 61  p" for TEMP data
f5a0: 62 61 73 65 2c 20 6f 72 20 74 68 65 20 6e 61 6d  base, or the nam
f5b0: 65 20 67 69 76 65 6e 20 61 74 20 74 68 65 0d 0a  e given at the..
f5c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 6e 64 20          /// end 
f5d0: 6f 66 20 74 68 65 20 41 54 54 41 43 48 20 73 74  of the ATTACH st
f5e0: 61 74 65 6d 65 6e 74 20 66 6f 72 20 61 74 74 61  atement for atta
f5f0: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 20  ched databases. 
f600: 54 68 65 20 74 68 69 72 64 0d 0a 20 20 20 20 20  The third..     
f610: 20 20 20 2f 2f 2f 20 65 6c 65 6d 65 6e 74 20 6f     /// element o
f620: 66 20 74 68 65 20 61 72 72 61 79 2c 20 61 72 67  f the array, arg
f630: 76 5b 32 5d 2c 20 69 73 20 74 68 65 20 6e 61 6d  v[2], is the nam
f640: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 76 69 72  e of the new vir
f650: 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tual..        //
f660: 2f 20 74 61 62 6c 65 2c 20 61 73 20 73 70 65 63  / table, as spec
f670: 69 66 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  ified following 
f680: 74 68 65 20 54 41 42 4c 45 20 6b 65 79 77 6f 72  the TABLE keywor
f690: 64 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 0d  d in the CREATE.
f6a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 56 49 52  .        /// VIR
f6b0: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
f6c0: 6d 65 6e 74 2e 20 49 66 20 70 72 65 73 65 6e 74  ment. If present
f6d0: 2c 20 74 68 65 20 66 6f 75 72 74 68 20 61 6e 64  , the fourth and
f6e0: 20 73 75 62 73 65 71 75 65 6e 74 0d 0a 20 20 20   subsequent..   
f6f0: 20 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73       /// strings
f700: 20 69 6e 20 74 68 65 20 61 72 67 76 5b 5d 20 61   in the argv[] a
f710: 72 72 61 79 20 72 65 70 6f 72 74 20 74 68 65 20  rray report the 
f720: 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
f730: 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 0d 0a 20 20   module name..  
f740: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 20 74 68 65        /// in the
f750: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
f760: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
f770: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
f780: 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
f790: 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
f7a0: 20 20 20 2f 2f 2f 20 54 68 65 20 6a 6f 62 20 6f     /// The job o
f7b0: 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73  f this method is
f7c0: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
f7d0: 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61  e new virtual ta
f7e0: 62 6c 65 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20  ble object..    
f7f0: 20 20 20 20 2f 2f 2f 20 28 61 6e 20 73 71 6c 69      /// (an sqli
f800: 74 65 33 5f 76 74 61 62 20 6f 62 6a 65 63 74 29  te3_vtab object)
f810: 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f   and return a po
f820: 69 6e 74 65 72 20 74 6f 20 69 74 20 69 6e 20 2a  inter to it in *
f830: 70 70 56 54 61 62 2e 0d 0a 20 20 20 20 20 20 20  ppVTab...       
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 41 73  ..        /// As
f870: 20 70 61 72 74 20 6f 66 20 74 68 65 20 74 61 73   part of the tas
f880: 6b 20 6f 66 20 63 72 65 61 74 69 6e 67 20 61 20  k of creating a 
f890: 6e 65 77 20 73 71 6c 69 74 65 33 5f 76 74 61 62  new sqlite3_vtab
f8a0: 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 69 73   structure, this
f8b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
f8c0: 74 68 6f 64 20 6d 75 73 74 20 69 6e 76 6f 6b 65  thod must invoke
f8d0: 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
f8e0: 5f 76 74 61 62 28 29 20 74 6f 20 74 65 6c 6c 20  _vtab() to tell 
f8f0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d  the SQLite core.
f900: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 62 6f  .        /// abo
f910: 75 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 61  ut the columns a
f920: 6e 64 20 64 61 74 61 74 79 70 65 73 20 69 6e 20  nd datatypes in 
f930: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
f940: 65 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  e. The..        
f950: 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  /// sqlite3_decl
f960: 61 72 65 5f 76 74 61 62 28 29 20 41 50 49 20 68  are_vtab() API h
f970: 61 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  as the following
f980: 20 70 72 6f 74 6f 74 79 70 65 3a 0d 0a 20 20 20   prototype:..   
f990: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
f9a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
f9b0: 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
f9c0: 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
f9d0: 20 20 2f 2f 2f 20 69 6e 74 20 73 71 6c 69 74 65    /// int sqlite
f9e0: 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 73  3_declare_vtab(s
f9f0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73  qlite3 *db, cons
fa00: 74 20 63 68 61 72 20 2a 7a 43 72 65 61 74 65 54  t char *zCreateT
fa10: 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 2f  able)..        /
fa20: 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20  // </code>..    
fa30: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
fa40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
fa50: 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
fa60: 20 54 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   The first argum
fa70: 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 5f 64  ent to sqlite3_d
fa80: 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 6d 75  eclare_vtab() mu
fa90: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 0d 0a  st be the same..
faa0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61          /// data
fab0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
fac0: 70 6f 69 6e 74 65 72 20 61 73 20 74 68 65 20 66  pointer as the f
fad0: 69 72 73 74 20 70 61 72 61 6d 65 74 65 72 20 74  irst parameter t
fae0: 6f 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 0d 0a  o this method...
faf0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
fb00: 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20  second argument 
fb10: 74 6f 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  to sqlite3_decla
fb20: 72 65 5f 76 74 61 62 28 29 20 6d 75 73 74 20 61  re_vtab() must a
fb30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 7a 65  ..        /// ze
fb40: 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ro-terminated UT
fb50: 46 2d 38 20 73 74 72 69 6e 67 20 74 68 61 74 20  F-8 string that 
fb60: 63 6f 6e 74 61 69 6e 73 20 61 20 77 65 6c 6c 2d  contains a well-
fb70: 66 6f 72 6d 65 64 20 43 52 45 41 54 45 0d 0a 20  formed CREATE.. 
fb80: 20 20 20 20 20 20 20 2f 2f 2f 20 54 41 42 4c 45         /// TABLE
fb90: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
fba0: 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6c 75  defines the colu
fbb0: 6d 6e 73 20 69 6e 20 74 68 65 20 76 69 72 74 75  mns in the virtu
fbc0: 61 6c 20 74 61 62 6c 65 20 61 6e 64 0d 0a 20 20  al table and..  
fbd0: 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 69 72 20        /// their 
fbe0: 64 61 74 61 20 74 79 70 65 73 2e 20 54 68 65 20  data types. The 
fbf0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
fc00: 65 20 69 6e 20 74 68 69 73 20 43 52 45 41 54 45  e in this CREATE
fc10: 20 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20   TABLE..        
fc20: 2f 2f 2f 20 73 74 61 74 65 6d 65 6e 74 20 69 73  /// statement is
fc30: 20 69 67 6e 6f 72 65 64 2c 20 61 73 20 61 72 65   ignored, as are
fc40: 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e 74 73   all constraints
fc50: 2e 20 4f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d  . Only the colum
fc60: 6e 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  n names..       
fc70: 20 2f 2f 2f 20 61 6e 64 20 64 61 74 61 74 79 70   /// and datatyp
fc80: 65 73 20 6d 61 74 74 65 72 2e 20 54 68 65 20 43  es matter. The C
fc90: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
fca0: 65 6d 65 6e 74 20 73 74 72 69 6e 67 20 6e 65 65  ement string nee
fcb0: 64 20 6e 6f 74 20 74 6f 0d 0a 20 20 20 20 20 20  d not to..      
fcc0: 20 20 2f 2f 2f 20 62 65 20 68 65 6c 64 20 69 6e    /// be held in
fcd0: 20 70 65 72 73 69 73 74 65 6e 74 20 6d 65 6d 6f   persistent memo
fce0: 72 79 2e 20 54 68 65 20 73 74 72 69 6e 67 20 63  ry. The string c
fcf0: 61 6e 20 62 65 20 64 65 61 6c 6c 6f 63 61 74 65  an be deallocate
fd00: 64 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20  d and/or..      
fd10: 20 20 2f 2f 2f 20 72 65 75 73 65 64 20 61 73 20    /// reused as 
fd20: 73 6f 6f 6e 20 61 73 20 74 68 65 20 73 71 6c 69  soon as the sqli
fd30: 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
fd40: 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  () routine retur
fd50: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns...        ///
fd60: 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
fd70: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
fd80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
fd90: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e  aram name="pDb">
fda0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
fdb0: 65 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73  e native databas
fdc0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
fdd0: 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dle...        //
fde0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
fdf0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
fe00: 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20  ame="pAux">..   
fe10: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69       /// The ori
fe20: 67 69 6e 61 6c 20 6e 61 74 69 76 65 20 70 6f 69  ginal native poi
fe30: 6e 74 65 72 20 76 61 6c 75 65 20 74 68 61 74 20  nter value that 
fe40: 77 61 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20  was provided to 
fe50: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
fe60: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
fe70: 6d 6f 64 75 6c 65 28 29 2c 20 73 71 6c 69 74 65  module(), sqlite
fe80: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
fe90: 76 32 28 29 20 6f 72 0d 0a 20 20 20 20 20 20 20  v2() or..       
fea0: 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72 65   /// sqlite3_cre
feb0: 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d  ate_disposable_m
fec0: 6f 64 75 6c 65 28 29 20 66 75 6e 63 74 69 6f 6e  odule() function
fed0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
fee0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
fef0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
ff00: 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20  e="argc">..     
ff10: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
ff20: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66  r of arguments f
ff30: 72 6f 6d 20 74 68 65 20 43 52 45 41 54 45 20 56  rom the CREATE V
ff40: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
ff50: 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  tement...       
ff60: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
ff70: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
ff80: 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a  m name="argv">..
ff90: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
ffa0: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 20  array of string 
ffb0: 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74  arguments from t
ffc0: 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41  he CREATE VIRTUA
ffd0: 4c 20 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20  L TABLE..       
ffe0: 20 2f 2f 2f 20 73 74 61 74 65 6d 65 6e 74 2e 0d   /// statement..
fff0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
10000 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
10010 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
10020 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
10030 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
10040 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  s, this paramete
10050 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
10060 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  ed to point to t
10070 68 65 20 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20  he newly..      
10080 20 20 2f 2f 2f 20 63 72 65 61 74 65 64 20 6e 61    /// created na
10090 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61  tive sqlite3_vta
100a0 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
100b0 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
100c0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
100d0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
100e0 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20  ame="pError">.. 
100f0 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
10100 66 61 69 6c 75 72 65 2c 20 74 68 69 73 20 70 61  failure, this pa
10110 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
10120 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e  modified to poin
10130 74 20 74 6f 20 74 68 65 20 65 72 72 6f 72 0d 0a  t to the error..
10140 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 73 73          /// mess
10150 61 67 65 2c 20 77 69 74 68 20 74 68 65 20 75 6e  age, with the un
10160 64 65 72 6c 79 69 6e 67 20 6d 65 6d 6f 72 79 20  derlying memory 
10170 68 61 76 69 6e 67 20 62 65 65 6e 20 6f 62 74 61  having been obta
10180 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20  ined from the.. 
10190 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
101a0 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63  e3_malloc() func
101b0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
101c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
101d0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
101e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
101f0 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
10200 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
10210 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
10220 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
10230 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
10240 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20  xCreate(..      
10250 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62        IntPtr pDb
10260 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
10270 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
10280 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
10290 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
102a0 49 6e 74 50 74 72 20 61 72 67 76 2c 0d 0a 20 20  IntPtr argv,..  
102b0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
102c0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
102d0 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
102e0 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20  Ptr pError..    
102f0 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
10300 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10350 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
10360 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
10370 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
10380 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6e      /// The xCon
10390 6e 65 63 74 20 6d 65 74 68 6f 64 20 69 73 20 76  nect method is v
103a0 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f 20 78  ery similar to x
103b0 43 72 65 61 74 65 2e 20 49 74 20 68 61 73 20 74  Create. It has t
103c0 68 65 20 73 61 6d 65 0d 0a 20 20 20 20 20 20 20  he same..       
103d0 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72 73 20   /// parameters 
103e0 61 6e 64 20 63 6f 6e 73 74 72 75 63 74 73 20 61  and constructs a
103f0 20 6e 65 77 20 73 71 6c 69 74 65 33 5f 76 74 61   new sqlite3_vta
10400 62 20 73 74 72 75 63 74 75 72 65 20 6a 75 73 74  b structure just
10410 20 6c 69 6b 65 0d 0a 20 20 20 20 20 20 20 20 2f   like..        /
10420 2f 2f 20 78 43 72 65 61 74 65 2e 20 41 6e 64 20  // xCreate. And 
10430 69 74 20 6d 75 73 74 20 61 6c 73 6f 20 63 61 6c  it must also cal
10440 6c 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  l sqlite3_declar
10450 65 5f 76 74 61 62 28 29 20 6c 69 6b 65 20 78 43  e_vtab() like xC
10460 72 65 61 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  reate...        
10470 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
10480 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
10490 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
104a0 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 74   difference is t
104b0 68 61 74 20 78 43 6f 6e 6e 65 63 74 20 69 73 20  hat xConnect is 
104c0 63 61 6c 6c 65 64 20 74 6f 20 65 73 74 61 62 6c  called to establ
104d0 69 73 68 20 61 20 6e 65 77 0d 0a 20 20 20 20 20  ish a new..     
104e0 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f     /// connectio
104f0 6e 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67  n to an existing
10500 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77   virtual table w
10510 68 65 72 65 61 73 20 78 43 72 65 61 74 65 20 69  hereas xCreate i
10520 73 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20  s called..      
10530 20 20 2f 2f 2f 20 74 6f 20 63 72 65 61 74 65 20    /// to create 
10540 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61  a new virtual ta
10550 62 6c 65 20 66 72 6f 6d 20 73 63 72 61 74 63 68  ble from scratch
10560 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
10570 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
10580 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
10590 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 72 65      /// The xCre
105a0 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74  ate and xConnect
105b0 20 6d 65 74 68 6f 64 73 20 61 72 65 20 6f 6e 6c   methods are onl
105c0 79 20 64 69 66 66 65 72 65 6e 74 20 77 68 65 6e  y different when
105d0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
105e0 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  / virtual table 
105f0 68 61 73 20 73 6f 6d 65 20 6b 69 6e 64 20 6f 66  has some kind of
10600 20 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 74   backing store t
10610 68 61 74 20 6d 75 73 74 20 62 65 0d 0a 20 20 20  hat must be..   
10620 20 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c       /// initial
10630 69 7a 65 64 20 74 68 65 20 66 69 72 73 74 20 74  ized the first t
10640 69 6d 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ime the virtual 
10650 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
10660 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  . The..        /
10670 2f 2f 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  // xCreate metho
10680 64 20 63 72 65 61 74 65 73 20 61 6e 64 20 69 6e  d creates and in
10690 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 62 61  itializes the ba
106a0 63 6b 69 6e 67 20 73 74 6f 72 65 2e 20 54 68 65  cking store. The
106b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43  ..        /// xC
106c0 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 6a 75  onnect method ju
106d0 73 74 20 63 6f 6e 6e 65 63 74 73 20 74 6f 20 61  st connects to a
106e0 6e 20 65 78 69 73 74 69 6e 67 20 62 61 63 6b 69  n existing backi
106f0 6e 67 20 73 74 6f 72 65 2e 0d 0a 20 20 20 20 20  ng store...     
10700 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
10710 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
10720 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
10730 41 73 20 61 6e 20 65 78 61 6d 70 6c 65 2c 20 63  As an example, c
10740 6f 6e 73 69 64 65 72 20 61 20 76 69 72 74 75 61  onsider a virtua
10750 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
10760 74 61 74 69 6f 6e 20 74 68 61 74 0d 0a 20 20 20  tation that..   
10770 20 20 20 20 20 2f 2f 2f 20 70 72 6f 76 69 64 65       /// provide
10780 73 20 72 65 61 64 2d 6f 6e 6c 79 20 61 63 63 65  s read-only acce
10790 73 73 20 74 6f 20 65 78 69 73 74 69 6e 67 20 63  ss to existing c
107a0 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 2d 76  omma-separated-v
107b0 61 6c 75 65 20 28 43 53 56 29 0d 0a 20 20 20 20  alue (CSV)..    
107c0 20 20 20 20 2f 2f 2f 20 66 69 6c 65 73 20 6f 6e      /// files on
107d0 20 64 69 73 6b 2e 20 54 68 65 72 65 20 69 73 20   disk. There is 
107e0 6e 6f 20 62 61 63 6b 69 6e 67 20 73 74 6f 72 65  no backing store
107f0 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
10800 65 20 63 72 65 61 74 65 64 0d 0a 20 20 20 20 20  e created..     
10810 20 20 20 2f 2f 2f 20 6f 72 20 69 6e 69 74 69 61     /// or initia
10820 6c 69 7a 65 64 20 66 6f 72 20 73 75 63 68 20 61  lized for such a
10830 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 28   virtual table (
10840 73 69 6e 63 65 20 74 68 65 20 43 53 56 20 66 69  since the CSV fi
10850 6c 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  les..        ///
10860 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
10870 6e 20 64 69 73 6b 29 20 73 6f 20 74 68 65 20 78  n disk) so the x
10880 43 72 65 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e  Create and xConn
10890 65 63 74 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c  ect methods will
108a0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   be..        ///
108b0 20 69 64 65 6e 74 69 63 61 6c 20 66 6f 72 20 74   identical for t
108c0 68 61 74 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20  hat module...   
108d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
108e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
108f0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
10900 2f 20 41 6e 6f 74 68 65 72 20 65 78 61 6d 70 6c  / Another exampl
10910 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
10920 61 62 6c 65 20 74 68 61 74 20 69 6d 70 6c 65 6d  able that implem
10930 65 6e 74 73 20 61 20 66 75 6c 6c 2d 74 65 78 74  ents a full-text
10940 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
10950 64 65 78 2e 20 54 68 65 20 78 43 72 65 61 74 65  dex. The xCreate
10960 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 63 72 65   method must cre
10970 61 74 65 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  ate and initiali
10980 7a 65 20 64 61 74 61 0d 0a 20 20 20 20 20 20 20  ze data..       
10990 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20   /// structures 
109a0 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 69 63 74  to hold the dict
109b0 69 6f 6e 61 72 79 20 61 6e 64 20 70 6f 73 74 69  ionary and posti
109c0 6e 67 20 6c 69 73 74 73 20 66 6f 72 20 74 68 61  ng lists for tha
109d0 74 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20  t index...      
109e0 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65    /// The xConne
109f0 63 74 20 6d 65 74 68 6f 64 2c 20 6f 6e 20 74 68  ct method, on th
10a00 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 6f 6e  e other hand, on
10a10 6c 79 20 68 61 73 20 74 6f 20 6c 6f 63 61 74 65  ly has to locate
10a20 20 61 6e 64 20 75 73 65 0d 0a 20 20 20 20 20 20   and use..      
10a30 20 20 2f 2f 2f 20 61 6e 20 65 78 69 73 74 69 6e    /// an existin
10a40 67 20 64 69 63 74 69 6f 6e 61 72 79 20 61 6e 64  g dictionary and
10a50 20 70 6f 73 74 69 6e 67 20 6c 69 73 74 73 20 74   posting lists t
10a60 68 61 74 20 77 65 72 65 20 63 72 65 61 74 65 64  hat were created
10a70 20 62 79 20 61 0d 0a 20 20 20 20 20 20 20 20 2f   by a..        /
10a80 2f 2f 20 70 72 69 6f 72 20 78 43 72 65 61 74 65  // prior xCreate
10a90 20 63 61 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20   call...        
10aa0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
10ab0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
10ac0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
10ad0 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64   xConnect method
10ae0 20 6d 75 73 74 20 72 65 74 75 72 6e 20 53 51 4c   must return SQL
10af0 49 54 45 5f 4f 4b 20 69 66 20 69 74 20 69 73 20  ITE_OK if it is 
10b00 73 75 63 63 65 73 73 66 75 6c 20 69 6e 0d 0a 20  successful in.. 
10b10 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74         /// creat
10b20 69 6e 67 20 74 68 65 20 6e 65 77 20 76 69 72 74  ing the new virt
10b30 75 61 6c 20 74 61 62 6c 65 2c 20 6f 72 20 53 51  ual table, or SQ
10b40 4c 49 54 45 5f 45 52 52 4f 52 20 69 66 20 69 74  LITE_ERROR if it
10b50 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20   is not..       
10b60 20 2f 2f 2f 20 73 75 63 63 65 73 73 66 75 6c 2e   /// successful.
10b70 20 49 66 20 6e 6f 74 20 73 75 63 63 65 73 73 66   If not successf
10b80 75 6c 2c 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ul, the sqlite3_
10b90 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 6d  vtab structure m
10ba0 75 73 74 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20  ust not..       
10bb0 20 2f 2f 2f 20 62 65 20 61 6c 6c 6f 63 61 74 65   /// be allocate
10bc0 64 2e 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  d. An error mess
10bd0 61 67 65 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c  age may optional
10be0 6c 79 20 62 65 20 72 65 74 75 72 6e 65 64 20 69  ly be returned i
10bf0 6e 20 2a 70 7a 45 72 72 0d 0a 20 20 20 20 20 20  n *pzErr..      
10c00 20 20 2f 2f 2f 20 69 66 20 75 6e 73 75 63 63 65    /// if unsucce
10c10 73 73 66 75 6c 2e 20 53 70 61 63 65 20 74 6f 20  ssful. Space to 
10c20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6d  hold the error m
10c30 65 73 73 61 67 65 20 73 74 72 69 6e 67 20 6d 75  essage string mu
10c40 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  st be..        /
10c50 2f 2f 20 61 6c 6c 6f 63 61 74 65 64 20 75 73 69  // allocated usi
10c60 6e 67 20 61 6e 20 53 51 4c 69 74 65 20 6d 65 6d  ng an SQLite mem
10c70 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66  ory allocation f
10c80 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 0d 0a 20 20  unction like..  
10c90 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
10ca0 33 5f 6d 61 6c 6c 6f 63 28 29 20 6f 72 20 73 71  3_malloc() or sq
10cb0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 20  lite3_mprintf() 
10cc0 61 73 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  as the SQLite co
10cd0 72 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  re will..       
10ce0 20 2f 2f 2f 20 61 74 74 65 6d 70 74 20 74 6f 20   /// attempt to 
10cf0 66 72 65 65 20 74 68 65 20 73 70 61 63 65 20 75  free the space u
10d00 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 66 72 65  sing sqlite3_fre
10d10 65 28 29 20 61 66 74 65 72 20 74 68 65 20 65 72  e() after the er
10d20 72 6f 72 20 68 61 73 0d 0a 20 20 20 20 20 20 20  ror has..       
10d30 20 2f 2f 2f 20 62 65 65 6e 20 72 65 70 6f 72 74   /// been report
10d40 65 64 20 75 70 20 74 6f 20 74 68 65 20 61 70 70  ed up to the app
10d50 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  lication...     
10d60 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
10d70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
10d80 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
10d90 54 68 65 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74  The xConnect met
10da0 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
10db0 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
10dc0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
10dd0 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
10de0 69 6f 6e 2c 20 74 68 6f 75 67 68 20 74 68 65 20  ion, though the 
10df0 78 43 72 65 61 74 65 20 61 6e 64 20 78 43 6f 6e  xCreate and xCon
10e00 6e 65 63 74 20 70 6f 69 6e 74 65 72 73 20 6f 66  nect pointers of
10e10 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
10e20 2f 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  / sqlite3_module
10e30 20 6f 62 6a 65 63 74 20 6d 61 79 20 70 6f 69 6e   object may poin
10e40 74 20 74 6f 20 74 68 65 20 73 61 6d 65 20 66 75  t to the same fu
10e50 6e 63 74 69 6f 6e 20 74 68 65 20 76 69 72 74 75  nction the virtu
10e60 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  al..        /// 
10e70 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6e  table does not n
10e80 65 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a  eed to initializ
10e90 65 20 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 2e  e backing store.
10ea0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
10eb0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
10ec0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10ed0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
10ee0 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20  m name="pDb">.. 
10ef0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
10f00 61 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63  ative database c
10f10 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
10f20 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
10f30 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
10f40 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
10f50 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20  ="pAux">..      
10f60 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e    /// The origin
10f70 61 6c 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  al native pointe
10f80 72 20 76 61 6c 75 65 20 74 68 61 74 20 77 61 73  r value that was
10f90 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65   provided to the
10fa0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
10fb0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
10fc0 75 6c 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 63  ule(), sqlite3_c
10fd0 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28  reate_module_v2(
10fe0 29 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ) or..        //
10ff0 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  / sqlite3_create
11000 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75  _disposable_modu
11010 6c 65 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d  le() functions..
11020 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
11030 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
11040 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11050 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
11060 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
11070 66 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  f arguments from
11080 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54   the CREATE VIRT
11090 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d  UAL TABLE statem
110a0 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ent...        //
110b0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
110c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
110d0 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20  ame="argv">..   
110e0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72       /// The arr
110f0 61 79 20 6f 66 20 73 74 72 69 6e 67 20 61 72 67  ay of string arg
11100 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  uments from the 
11110 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
11120 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ABLE..        //
11130 2f 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  / statement...  
11140 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
11150 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
11160 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
11170 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
11180 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
11190 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
111a0 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
111b0 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
111c0 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f  newly..        /
111d0 2f 2f 20 63 72 65 61 74 65 64 20 6e 61 74 69 76  // created nativ
111e0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
111f0 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
11200 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
11210 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
11220 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
11230 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20  ="pError">..    
11240 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69      /// Upon fai
11250 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d  lure, this param
11260 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
11270 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74  ified to point t
11280 6f 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20  o the error..   
11290 20 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65       /// message
112a0 2c 20 77 69 74 68 20 74 68 65 20 75 6e 64 65 72  , with the under
112b0 6c 79 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76  lying memory hav
112c0 69 6e 67 20 62 65 65 6e 20 6f 62 74 61 69 6e 65  ing been obtaine
112d0 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20  d from the..    
112e0 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
112f0 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f  malloc() functio
11300 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
11310 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
11320 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
11330 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
11340 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
11350 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
11360 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
11370 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
11380 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f  iteErrorCode xCo
11390 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
113a0 20 20 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d      IntPtr pDb,.
113b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
113c0 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20  Ptr pAux,..     
113d0 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c         int argc,
113e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
113f0 74 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20  tPtr argv,..    
11400 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
11410 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
11420 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
11430 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20  r pError..      
11440 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
11450 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
11460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
114a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
114b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
114c0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
114d0 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 75 73 65    /// SQLite use
114e0 73 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  s the xBestIndex
114f0 20 6d 65 74 68 6f 64 20 6f 66 20 61 20 76 69 72   method of a vir
11500 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
11510 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e to..        //
11520 2f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  / determine the 
11530 62 65 73 74 20 77 61 79 20 74 6f 20 61 63 63 65  best way to acce
11540 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ss the virtual t
11550 61 62 6c 65 2e 20 54 68 65 20 78 42 65 73 74 49  able. The xBestI
11560 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ndex..        //
11570 2f 20 6d 65 74 68 6f 64 20 68 61 73 20 61 20 70  / method has a p
11580 72 6f 74 6f 74 79 70 65 20 6c 69 6b 65 20 74 68  rototype like th
11590 69 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  is:..        ///
115a0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
115b0 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20    /// <code>..  
115c0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 20 28 2a        /// int (*
115d0 78 42 65 73 74 49 6e 64 65 78 29 28 73 71 6c 69  xBestIndex)(sqli
115e0 74 65 33 5f 76 74 61 62 20 2a 70 56 54 61 62 2c  te3_vtab *pVTab,
115f0 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
11600 6e 66 6f 2a 29 3b 0d 0a 20 20 20 20 20 20 20 20  nfo*);..        
11610 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20  /// </code>..   
11620 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
11630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
11640 20 53 51 4c 69 74 65 20 63 6f 72 65 20 63 6f 6d   SQLite core com
11650 6d 75 6e 69 63 61 74 65 73 20 77 69 74 68 20 74  municates with t
11660 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
11670 74 68 6f 64 20 62 79 20 66 69 6c 6c 69 6e 67 0d  thod by filling.
11680 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 20  .        /// in 
11690 63 65 72 74 61 69 6e 20 66 69 65 6c 64 73 20 6f  certain fields o
116a0 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
116b0 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75  dex_info structu
116c0 72 65 20 61 6e 64 20 70 61 73 73 69 6e 67 20 61  re and passing a
116d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 6f  ..        /// po
116e0 69 6e 74 65 72 20 74 6f 20 74 68 61 74 20 73 74  inter to that st
116f0 72 75 63 74 75 72 65 20 69 6e 74 6f 20 78 42 65  ructure into xBe
11700 73 74 49 6e 64 65 78 20 61 73 20 74 68 65 20 73  stIndex as the s
11710 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 2e  econd parameter.
11720 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
11730 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74  e xBestIndex met
11740 68 6f 64 20 66 69 6c 6c 73 20 6f 75 74 20 6f 74  hod fills out ot
11750 68 65 72 20 66 69 65 6c 64 73 20 6f 66 20 74 68  her fields of th
11760 69 73 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20  is structure..  
11770 20 20 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20        /// which 
11780 66 6f 72 6d 73 20 74 68 65 20 72 65 70 6c 79 2e  forms the reply.
11790 20 54 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64   The sqlite3_ind
117a0 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72  ex_info structur
117b0 65 20 6c 6f 6f 6b 73 20 6c 69 6b 65 0d 0a 20 20  e looks like..  
117c0 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 3a 0d        /// this:.
117d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
117e0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
117f0 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
11800 20 20 2f 2f 2f 20 20 73 74 72 75 63 74 20 73 71    ///  struct sq
11810 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
11820 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   {..        /// 
11830 20 20 20 2f 2a 20 49 6e 70 75 74 73 20 2a 2f 0d     /* Inputs */.
11840 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11850 63 6f 6e 73 74 20 69 6e 74 20 6e 43 6f 6e 73 74  const int nConst
11860 72 61 69 6e 74 3b 20 20 20 2f 2a 20 4e 75 6d 62  raint;   /* Numb
11870 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
11880 20 61 43 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0d   aConstraint */.
11890 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
118a0 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 71 6c  const struct sql
118b0 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
118c0 72 61 69 6e 74 20 7b 0d 0a 20 20 20 20 20 20 20  raint {..       
118d0 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74 20 69   ///       int i
118e0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
118f0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6f 6e 20 6c 65   /* Column on le
11900 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 0d  ft-hand side of.
11910 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 20 20 20 20 20 20 20 20 20 20 2a 20 63 6f 6e 73            * cons
11940 74 72 61 69 6e 74 20 2a 2f 0d 0a 20 20 20 20 20  traint */..     
11950 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73     ///       uns
11960 69 67 6e 65 64 20 63 68 61 72 20 6f 70 3b 20 20  igned char op;  
11970 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74     /* Constraint
11980 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0d 0a 20 20   operator */..  
11990 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
119a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 75 73  unsigned char us
119b0 61 62 6c 65 3b 20 2f 2a 20 54 72 75 65 20 69 66  able; /* True if
119c0 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
119d0 20 69 73 20 75 73 61 62 6c 65 20 2a 2f 0d 0a 20   is usable */.. 
119e0 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
119f0 20 69 6e 74 20 69 54 65 72 6d 4f 66 66 73 65 74   int iTermOffset
11a00 3b 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 69  ;      /* Used i
11a10 6e 74 65 72 6e 61 6c 6c 79 20 2d 20 78 42 65 73  nternally - xBes
11a20 74 49 6e 64 65 78 20 73 68 6f 75 6c 64 0d 0a 20  tIndex should.. 
11a30 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a50 20 20 20 20 20 20 20 20 2a 20 69 67 6e 6f 72 65          * ignore
11a60 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
11a70 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 43 6f      } *const aCo
11a80 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 2f 2a 20  nstraint;    /* 
11a90 54 61 62 6c 65 20 6f 66 20 57 48 45 52 45 20 63  Table of WHERE c
11aa0 6c 61 75 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  lause constraint
11ab0 73 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s */..        //
11ac0 2f 20 20 20 20 63 6f 6e 73 74 20 69 6e 74 20 6e  /    const int n
11ad0 4f 72 64 65 72 42 79 3b 20 20 20 20 20 20 2f 2a  OrderBy;      /*
11ae0 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 72 6d 73   Number of terms
11af0 20 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59   in the ORDER BY
11b00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b20 20 20 20 20 20 20 20 20 20 20 20 2a 20 63 6c 61             * cla
11b30 75 73 65 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  use */..        
11b40 2f 2f 2f 20 20 20 20 63 6f 6e 73 74 20 73 74 72  ///    const str
11b50 75 63 74 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  uct sqlite3_inde
11b60 78 5f 6f 72 64 65 72 62 79 20 7b 0d 0a 20 20 20  x_orderby {..   
11b70 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 69       ///       i
11b80 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
11b90 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
11ba0 75 6d 62 65 72 20 2a 2f 0d 0a 20 20 20 20 20 20  umber */..      
11bb0 20 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73 69    ///       unsi
11bc0 67 6e 65 64 20 63 68 61 72 20 64 65 73 63 3b 20  gned char desc; 
11bd0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
11be0 53 43 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 41  SC.  False for A
11bf0 53 43 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  SC. */..        
11c00 2f 2f 2f 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20  ///    } *const 
11c10 61 4f 72 64 65 72 42 79 3b 20 20 20 20 20 20 20  aOrderBy;       
11c20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
11c30 63 6c 61 75 73 65 20 2a 2f 0d 0a 20 20 20 20 20  clause */..     
11c40 20 20 20 2f 2f 2f 20 20 20 20 2f 2a 20 4f 75 74     ///    /* Out
11c50 70 75 74 73 20 2a 2f 0d 0a 20 20 20 20 20 20 20  puts */..       
11c60 20 2f 2f 2f 20 20 20 20 73 74 72 75 63 74 20 73   ///    struct s
11c70 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
11c80 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20 7b 0d  straint_usage {.
11c90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11ca0 20 20 69 6e 74 20 61 72 67 76 49 6e 64 65 78 3b    int argvIndex;
11cb0 20 20 20 20 20 20 20 20 20 2f 2a 20 69 66 20 67           /* if g
11cc0 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
11cd0 2c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 0d  , constraint is.
11ce0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d00 20 20 20 20 20 20 20 20 20 20 2a 20 70 61 72 74            * part
11d10 20 6f 66 20 61 72 67 76 20 74 6f 20 78 46 69 6c   of argv to xFil
11d20 74 65 72 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  ter */..        
11d30 2f 2f 2f 20 20 20 20 20 20 75 6e 73 69 67 6e 65  ///      unsigne
11d40 64 20 63 68 61 72 20 6f 6d 69 74 3b 20 20 20 20  d char omit;    
11d50 2f 2a 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61  /* Do not code a
11d60 20 74 65 73 74 20 66 6f 72 20 74 68 69 73 0d 0a   test for this..
11d70 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 20 20 20 20 20 20 20 2a 20 63 6f 6e 73 74           * const
11da0 72 61 69 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20  raint */..      
11db0 20 20 2f 2f 2f 20 20 20 20 7d 20 2a 63 6f 6e 73    ///    } *cons
11dc0 74 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  t aConstraintUsa
11dd0 67 65 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ge;..        ///
11de0 20 20 20 20 69 6e 74 20 69 64 78 4e 75 6d 3b 20      int idxNum; 
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11e00 4e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 69  Number used to i
11e10 64 65 6e 74 69 66 79 20 74 68 65 20 69 6e 64 65  dentify the inde
11e20 78 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  x */..        //
11e30 2f 20 20 20 20 63 68 61 72 20 2a 69 64 78 53 74  /    char *idxSt
11e40 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
11e50 20 53 74 72 69 6e 67 2c 20 70 6f 73 73 69 62 6c   String, possibl
11e60 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 0d  y obtained from.
11e70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e90 20 20 20 20 20 20 20 20 20 20 2a 20 73 71 6c 69            * sqli
11ea0 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0d  te3_malloc() */.
11eb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11ec0 69 6e 74 20 6e 65 65 64 54 6f 46 72 65 65 49 64  int needToFreeId
11ed0 78 53 74 72 3b 20 20 20 20 2f 2a 20 46 72 65 65  xStr;    /* Free
11ee0 20 69 64 78 53 74 72 20 75 73 69 6e 67 20 73 71   idxStr using sq
11ef0 6c 69 74 65 33 5f 66 72 65 65 28 29 20 69 66 0d  lite3_free() if.
11f00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 20 20 20 20 20 20 20 20 20 2a 20 74 72 75 65            * true
11f30 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
11f40 20 20 20 20 69 6e 74 20 6f 72 64 65 72 42 79 43      int orderByC
11f50 6f 6e 73 75 6d 65 64 3b 20 20 20 20 20 2f 2a 20  onsumed;     /* 
11f60 54 72 75 65 20 69 66 20 6f 75 74 70 75 74 20 69  True if output i
11f70 73 20 61 6c 72 65 61 64 79 20 6f 72 64 65 72 65  s already ordere
11f80 64 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d */..        //
11f90 2f 20 20 20 20 64 6f 75 62 6c 65 20 65 73 74 69  /    double esti
11fa0 6d 61 74 65 64 43 6f 73 74 3b 20 20 20 20 2f 2a  matedCost;    /*
11fb0 20 45 73 74 69 6d 61 74 65 64 20 63 6f 73 74 20   Estimated cost 
11fc0 6f 66 20 75 73 69 6e 67 20 74 68 69 73 20 69 6e  of using this in
11fd0 64 65 78 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  dex */..        
11fe0 2f 2f 2f 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20  ///  };..       
11ff0 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
12000 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
12010 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 6e  ..        /// In
12020 20 61 64 64 69 74 69 6f 6e 2c 20 74 68 65 72 65   addition, there
12030 20 61 72 65 20 73 6f 6d 65 20 64 65 66 69 6e 65   are some define
12040 64 20 63 6f 6e 73 74 61 6e 74 73 3a 0d 0a 20 20  d constants:..  
12050 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
12060 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
12070 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
12080 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  //  #define SQLI
12090 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41  TE_INDEX_CONSTRA
120a0 49 4e 54 5f 45 51 20 20 20 20 32 0d 0a 20 20 20  INT_EQ    2..   
120b0 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e       ///  #defin
120c0 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43  e SQLITE_INDEX_C
120d0 4f 4e 53 54 52 41 49 4e 54 5f 47 54 20 20 20 20  ONSTRAINT_GT    
120e0 34 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  4..        ///  
120f0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
12100 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
12110 4c 45 20 20 20 20 38 0d 0a 20 20 20 20 20 20 20  LE    8..       
12120 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51   ///  #define SQ
12130 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54  LITE_INDEX_CONST
12140 52 41 49 4e 54 5f 4c 54 20 20 20 20 31 36 0d 0a  RAINT_LT    16..
12150 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64 65          ///  #de
12160 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44 45  fine SQLITE_INDE
12170 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 47 45 20  X_CONSTRAINT_GE 
12180 20 20 20 33 32 0d 0a 20 20 20 20 20 20 20 20 2f     32..        /
12190 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  //  #define SQLI
121a0 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41  TE_INDEX_CONSTRA
121b0 49 4e 54 5f 4d 41 54 43 48 20 36 34 0d 0a 20 20  INT_MATCH 64..  
121c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65        /// </code
121d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
121e0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
121f0 2f 2f 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f  // The SQLite co
12200 72 65 20 63 61 6c 6c 73 20 74 68 65 20 78 42 65  re calls the xBe
12210 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 77  stIndex method w
12220 68 65 6e 20 69 74 20 69 73 20 63 6f 6d 70 69 6c  hen it is compil
12230 69 6e 67 20 61 0d 0a 20 20 20 20 20 20 20 20 2f  ing a..        /
12240 2f 2f 20 71 75 65 72 79 20 74 68 61 74 20 69 6e  // query that in
12250 76 6f 6c 76 65 73 20 61 20 76 69 72 74 75 61 6c  volves a virtual
12260 20 74 61 62 6c 65 2e 20 49 6e 20 6f 74 68 65 72   table. In other
12270 20 77 6f 72 64 73 2c 20 53 51 4c 69 74 65 20 63   words, SQLite c
12280 61 6c 6c 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  alls..        //
12290 2f 20 74 68 69 73 20 6d 65 74 68 6f 64 20 77 68  / this method wh
122a0 65 6e 20 69 74 20 69 73 20 72 75 6e 6e 69 6e 67  en it is running
122b0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
122c0 28 29 20 6f 72 20 74 68 65 20 65 71 75 69 76 61  () or the equiva
122d0 6c 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lent...        /
122e0 2f 2f 20 42 79 20 63 61 6c 6c 69 6e 67 20 74 68  // By calling th
122f0 69 73 20 6d 65 74 68 6f 64 2c 20 74 68 65 20 53  is method, the S
12300 51 4c 69 74 65 20 63 6f 72 65 20 69 73 20 73 61  QLite core is sa
12310 79 69 6e 67 20 74 6f 20 74 68 65 20 76 69 72 74  ying to the virt
12320 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ual..        ///
12330 20 74 61 62 6c 65 20 74 68 61 74 20 69 74 20 6e   table that it n
12340 65 65 64 73 20 74 6f 20 61 63 63 65 73 73 20 73  eeds to access s
12350 6f 6d 65 20 73 75 62 73 65 74 20 6f 66 20 74 68  ome subset of th
12360 65 20 72 6f 77 73 20 69 6e 20 74 68 65 0d 0a 20  e rows in the.. 
12370 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75         /// virtu
12380 61 6c 20 74 61 62 6c 65 20 61 6e 64 20 69 74 20  al table and it 
12390 77 61 6e 74 73 20 74 6f 20 6b 6e 6f 77 20 74 68  wants to know th
123a0 65 20 6d 6f 73 74 20 65 66 66 69 63 69 65 6e 74  e most efficient
123b0 20 77 61 79 20 74 6f 20 64 6f 0d 0a 20 20 20 20   way to do..    
123c0 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 61 63 63      /// that acc
123d0 65 73 73 2e 20 54 68 65 20 78 42 65 73 74 49 6e  ess. The xBestIn
123e0 64 65 78 20 6d 65 74 68 6f 64 20 72 65 70 6c 69  dex method repli
123f0 65 73 20 77 69 74 68 20 69 6e 66 6f 72 6d 61 74  es with informat
12400 69 6f 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20  ion that..      
12410 20 20 2f 2f 2f 20 74 68 65 20 53 51 4c 69 74 65    /// the SQLite
12420 20 63 6f 72 65 20 63 61 6e 20 74 68 65 6e 20 75   core can then u
12430 73 65 20 74 6f 20 63 6f 6e 64 75 63 74 20 61 6e  se to conduct an
12440 20 65 66 66 69 63 69 65 6e 74 20 73 65 61 72 63   efficient searc
12450 68 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  h of the..      
12460 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61    /// virtual ta
12470 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
12480 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
12490 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
124a0 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 69 6c 65         /// While
124b0 20 63 6f 6d 70 69 6c 69 6e 67 20 61 20 73 69 6e   compiling a sin
124c0 67 6c 65 20 53 51 4c 20 71 75 65 72 79 2c 20 74  gle SQL query, t
124d0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6d  he SQLite core m
124e0 69 67 68 74 20 63 61 6c 6c 0d 0a 20 20 20 20 20  ight call..     
124f0 20 20 20 2f 2f 2f 20 78 42 65 73 74 49 6e 64 65     /// xBestInde
12500 78 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  x multiple times
12510 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20   with different 
12520 73 65 74 74 69 6e 67 73 20 69 6e 0d 0a 20 20 20  settings in..   
12530 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
12540 5f 69 6e 64 65 78 5f 69 6e 66 6f 2e 20 54 68 65  _index_info. The
12550 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c   SQLite core wil
12560 6c 20 74 68 65 6e 20 73 65 6c 65 63 74 20 74 68  l then select th
12570 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
12580 6f 6d 62 69 6e 61 74 69 6f 6e 20 74 68 61 74 20  ombination that 
12590 61 70 70 65 61 72 73 20 74 6f 20 67 69 76 65 20  appears to give 
125a0 74 68 65 20 62 65 73 74 20 70 65 72 66 6f 72 6d  the best perform
125b0 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
125c0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
125d0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
125e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 42 65 66 6f          /// Befo
125f0 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 69 73 20  re calling this 
12600 6d 65 74 68 6f 64 2c 20 74 68 65 20 53 51 4c 69  method, the SQLi
12610 74 65 20 63 6f 72 65 20 69 6e 69 74 69 61 6c 69  te core initiali
12620 7a 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0d  zes an instance.
12630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20  .        /// of 
12640 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  the sqlite3_inde
12650 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  x_info structure
12660 20 77 69 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f   with informatio
12670 6e 20 61 62 6f 75 74 20 74 68 65 0d 0a 20 20 20  n about the..   
12680 20 20 20 20 20 2f 2f 2f 20 71 75 65 72 79 20 74       /// query t
12690 68 61 74 20 69 74 20 69 73 20 63 75 72 72 65 6e  hat it is curren
126a0 74 6c 79 20 74 72 79 69 6e 67 20 74 6f 20 70 72  tly trying to pr
126b0 6f 63 65 73 73 2e 20 54 68 69 73 20 69 6e 66 6f  ocess. This info
126c0 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  rmation..       
126d0 20 2f 2f 2f 20 64 65 72 69 76 65 73 20 6d 61 69   /// derives mai
126e0 6e 6c 79 20 66 72 6f 6d 20 74 68 65 20 57 48 45  nly from the WHE
126f0 52 45 20 63 6c 61 75 73 65 20 61 6e 64 20 4f 52  RE clause and OR
12700 44 45 52 20 42 59 20 6f 72 20 47 52 4f 55 50 20  DER BY or GROUP 
12710 42 59 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  BY..        /// 
12720 63 6c 61 75 73 65 73 20 6f 66 20 74 68 65 20 71  clauses of the q
12730 75 65 72 79 2c 20 62 75 74 20 61 6c 73 6f 20 66  uery, but also f
12740 72 6f 6d 20 61 6e 79 20 4f 4e 20 6f 72 20 55 53  rom any ON or US
12750 49 4e 47 20 63 6c 61 75 73 65 73 20 69 66 20 74  ING clauses if t
12760 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
12770 71 75 65 72 79 20 69 73 20 61 20 6a 6f 69 6e 2e  query is a join.
12780 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   The information
12790 20 74 68 61 74 20 74 68 65 20 53 51 4c 69 74 65   that the SQLite
127a0 20 63 6f 72 65 20 70 72 6f 76 69 64 65 73 20 74   core provides t
127b0 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  o..        /// t
127c0 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
127d0 74 68 6f 64 20 69 73 20 68 65 6c 64 20 69 6e 20  thod is held in 
127e0 74 68 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  the part of the 
127f0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 69  structure that i
12800 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  s..        /// m
12810 61 72 6b 65 64 20 61 73 20 22 49 6e 70 75 74 73  arked as "Inputs
12820 22 2e 20 54 68 65 20 22 4f 75 74 70 75 74 73 22  ". The "Outputs"
12830 20 73 65 63 74 69 6f 6e 20 69 73 20 69 6e 69 74   section is init
12840 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e  ialized to zero.
12850 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
12860 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
12870 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
12880 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 66 6f 72     /// The infor
12890 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 73 71  mation in the sq
128a0 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
128b0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 65 70   structure is ep
128c0 68 65 6d 65 72 61 6c 0d 0a 20 20 20 20 20 20 20  hemeral..       
128d0 20 2f 2f 2f 20 61 6e 64 20 6d 61 79 20 62 65 20   /// and may be 
128e0 6f 76 65 72 77 72 69 74 74 65 6e 20 6f 72 20 64  overwritten or d
128f0 65 61 6c 6c 6f 63 61 74 65 64 20 61 73 20 73 6f  eallocated as so
12900 6f 6e 20 61 73 20 74 68 65 20 78 42 65 73 74 49  on as the xBestI
12910 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ndex..        //
12920 2f 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e 73  / method returns
12930 2e 20 49 66 20 74 68 65 20 78 42 65 73 74 49 6e  . If the xBestIn
12940 64 65 78 20 6d 65 74 68 6f 64 20 6e 65 65 64 73  dex method needs
12950 20 74 6f 20 72 65 6d 65 6d 62 65 72 20 61 6e 79   to remember any
12960 20 70 61 72 74 0d 0a 20 20 20 20 20 20 20 20 2f   part..        /
12970 2f 2f 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  // of the sqlite
12980 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72  3_index_info str
12990 75 63 74 75 72 65 2c 20 69 74 20 73 68 6f 75 6c  ucture, it shoul
129a0 64 20 6d 61 6b 65 20 61 20 63 6f 70 79 2e 20 43  d make a copy. C
129b0 61 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  are..        ///
129c0 20 6d 75 73 74 20 62 65 20 74 61 6b 65 20 74 6f   must be take to
129d0 20 73 74 6f 72 65 20 74 68 65 20 63 6f 70 79 20   store the copy 
129e0 69 6e 20 61 20 70 6c 61 63 65 20 77 68 65 72 65  in a place where
129f0 20 69 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20   it will be..   
12a00 20 20 20 20 20 2f 2f 2f 20 64 65 61 6c 6c 6f 63       /// dealloc
12a10 61 74 65 64 2c 20 73 75 63 68 20 61 73 20 69 6e  ated, such as in
12a20 20 74 68 65 20 69 64 78 53 74 72 20 66 69 65 6c   the idxStr fiel
12a30 64 20 77 69 74 68 20 6e 65 65 64 54 6f 46 72 65  d with needToFre
12a40 65 49 64 78 53 74 72 20 73 65 74 0d 0a 20 20 20  eIdxStr set..   
12a50 20 20 20 20 20 2f 2f 2f 20 74 6f 20 31 2e 0d 0a       /// to 1...
12a60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
12a70 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
12a80 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
12a90 20 2f 2f 2f 20 4e 6f 74 65 20 74 68 61 74 20 78   /// Note that x
12aa0 42 65 73 74 49 6e 64 65 78 20 77 69 6c 6c 20 61  BestIndex will a
12ab0 6c 77 61 79 73 20 62 65 20 63 61 6c 6c 65 64 20  lways be called 
12ac0 62 65 66 6f 72 65 20 78 46 69 6c 74 65 72 2c 20  before xFilter, 
12ad0 73 69 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  since..        /
12ae0 2f 2f 20 74 68 65 20 69 64 78 4e 75 6d 20 61 6e  // the idxNum an
12af0 64 20 69 64 78 53 74 72 20 6f 75 74 70 75 74 73  d idxStr outputs
12b00 20 66 72 6f 6d 20 78 42 65 73 74 49 6e 64 65 78   from xBestIndex
12b10 20 61 72 65 20 72 65 71 75 69 72 65 64 20 69 6e   are required in
12b20 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  puts..        //
12b30 2f 20 74 6f 20 78 46 69 6c 74 65 72 2e 20 48 6f  / to xFilter. Ho
12b40 77 65 76 65 72 2c 20 74 68 65 72 65 20 69 73 20  wever, there is 
12b50 6e 6f 20 67 75 61 72 61 6e 74 65 65 20 74 68 61  no guarantee tha
12b60 74 20 78 46 69 6c 74 65 72 20 77 69 6c 6c 20 62  t xFilter will b
12b70 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
12b80 61 6c 6c 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  alled following 
12b90 61 20 73 75 63 63 65 73 73 66 75 6c 20 78 42 65  a successful xBe
12ba0 73 74 49 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20  stIndex...      
12bb0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
12bc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
12bd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
12be0 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
12bf0 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
12c00 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
12c10 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
12c20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
12c30 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
12c40 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
12c50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
12c60 20 20 20 20 20 20 20 20 2f 2f 2f 20 32 2e 33 2e          /// 2.3.
12c70 31 20 49 6e 70 75 74 73 0d 0a 20 20 20 20 20 20  1 Inputs..      
12c80 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
12c90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
12ca0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
12cb0 68 65 20 6d 61 69 6e 20 74 68 69 6e 67 20 74 68  he main thing th
12cc0 61 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  at the SQLite co
12cd0 72 65 20 69 73 20 74 72 79 69 6e 67 20 74 6f 20  re is trying to 
12ce0 63 6f 6d 6d 75 6e 69 63 61 74 65 20 74 6f 20 74  communicate to t
12cf0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
12d00 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
12d10 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73   the constraints
12d20 20 74 68 61 74 20 61 72 65 20 61 76 61 69 6c 61   that are availa
12d30 62 6c 65 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  ble to limit the
12d40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75  ..        /// nu
12d50 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
12d60 74 20 6e 65 65 64 20 74 6f 20 62 65 20 73 65 61  t need to be sea
12d70 72 63 68 65 64 2e 20 54 68 65 20 61 43 6f 6e 73  rched. The aCons
12d80 74 72 61 69 6e 74 5b 5d 20 61 72 72 61 79 0d 0a  traint[] array..
12d90 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74          /// cont
12da0 61 69 6e 73 20 6f 6e 65 20 65 6e 74 72 79 20 66  ains one entry f
12db0 6f 72 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69  or each constrai
12dc0 6e 74 2e 20 54 68 65 72 65 20 77 69 6c 6c 20 62  nt. There will b
12dd0 65 20 65 78 61 63 74 6c 79 0d 0a 20 20 20 20 20  e exactly..     
12de0 20 20 20 2f 2f 2f 20 6e 43 6f 6e 73 74 72 61 69     /// nConstrai
12df0 6e 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  nt entries in th
12e00 61 74 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20  at array...     
12e10 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
12e20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
12e30 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
12e40 45 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 20  Each constraint 
12e50 77 69 6c 6c 20 63 6f 72 72 65 73 70 6f 6e 64 20  will correspond 
12e60 74 6f 20 61 20 74 65 72 6d 20 69 6e 20 74 68 65  to a term in the
12e70 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 72   WHERE clause or
12e80 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   in..        ///
12e90 20 61 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63   a USING or ON c
12ea0 6c 61 75 73 65 20 74 68 61 74 20 69 73 20 6f 66  lause that is of
12eb0 20 74 68 65 20 66 6f 72 6d 0d 0a 20 20 20 20 20   the form..     
12ec0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
12ed0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64          /// <cod
12ee0 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
12ef0 20 20 20 20 63 6f 6c 75 6d 6e 20 4f 50 20 45 58      column OP EX
12f00 50 52 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  PR..        /// 
12f10 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20  </code>..       
12f20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
12f30 20 20 20 20 20 2f 2f 2f 20 57 68 65 72 65 20 22       /// Where "
12f40 63 6f 6c 75 6d 6e 22 20 69 73 20 61 20 63 6f 6c  column" is a col
12f50 75 6d 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  umn in the virtu
12f60 61 6c 20 74 61 62 6c 65 2c 20 4f 50 20 69 73 20  al table, OP is 
12f70 61 6e 20 6f 70 65 72 61 74 6f 72 0d 0a 20 20 20  an operator..   
12f80 20 20 20 20 20 2f 2f 2f 20 6c 69 6b 65 20 22 3d       /// like "=
12f90 22 20 6f 72 20 22 26 6c 74 3b 22 2c 20 61 6e 64  " or "&lt;", and
12fa0 20 45 58 50 52 20 69 73 20 61 6e 20 61 72 62 69   EXPR is an arbi
12fb0 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e  trary expression
12fc0 2e 20 53 6f 2c 20 66 6f 72 0d 0a 20 20 20 20 20  . So, for..     
12fd0 20 20 20 2f 2f 2f 20 65 78 61 6d 70 6c 65 2c 20     /// example, 
12fe0 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  if the WHERE cla
12ff0 75 73 65 20 63 6f 6e 74 61 69 6e 65 64 20 61 20  use contained a 
13000 74 65 72 6d 20 6c 69 6b 65 20 74 68 69 73 3a 0d  term like this:.
13010 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
13020 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13030 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
13040 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 61    ///          a
13050 20 3d 20 35 0d 0a 20 20 20 20 20 20 20 20 2f 2f   = 5..        //
13060 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20  / </code>..     
13070 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
13080 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 6e 20         /// Then 
13090 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  one of the const
130a0 72 61 69 6e 74 73 20 77 6f 75 6c 64 20 62 65 20  raints would be 
130b0 6f 6e 20 74 68 65 20 22 61 22 20 63 6f 6c 75 6d  on the "a" colum
130c0 6e 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  n with..        
130d0 2f 2f 2f 20 6f 70 65 72 61 74 6f 72 20 22 3d 22  /// operator "="
130e0 20 61 6e 64 20 61 6e 20 65 78 70 72 65 73 73 69   and an expressi
130f0 6f 6e 20 6f 66 20 22 35 22 2e 20 43 6f 6e 73 74  on of "5". Const
13100 72 61 69 6e 74 73 20 6e 65 65 64 20 6e 6f 74 20  raints need not 
13110 68 61 76 65 20 61 0d 0a 20 20 20 20 20 20 20 20  have a..        
13120 2f 2f 2f 20 6c 69 74 65 72 61 6c 20 72 65 70 72  /// literal repr
13130 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
13140 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20  e WHERE clause. 
13150 54 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  The query optimi
13160 7a 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  zer..        ///
13170 20 6d 69 67 68 74 20 6d 61 6b 65 20 74 72 61 6e   might make tran
13180 73 66 6f 72 6d 61 74 69 6f 6e 73 20 74 6f 20 74  sformations to t
13190 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
131a0 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 78 74 72  in order to extr
131b0 61 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  act..        ///
131c0 20 61 73 20 6d 61 6e 79 20 63 6f 6e 73 74 72 61   as many constra
131d0 69 6e 74 73 20 61 73 20 69 74 20 63 61 6e 2e 20  ints as it can. 
131e0 53 6f 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c  So, for example,
131f0 20 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c   if the WHERE cl
13200 61 75 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ause..        //
13210 2f 20 63 6f 6e 74 61 69 6e 65 64 20 73 6f 6d 65  / contained some
13220 74 68 69 6e 67 20 6c 69 6b 65 20 74 68 69 73 3a  thing like this:
13230 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
13240 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
13250 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20  // <code>..     
13260 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
13270 78 20 42 45 54 57 45 45 4e 20 31 30 20 41 4e 44  x BETWEEN 10 AND
13280 20 31 30 30 20 41 4e 44 20 39 39 39 26 67 74 3b   100 AND 999&gt;
13290 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  y..        /// <
132a0 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
132b0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
132c0 20 20 20 20 2f 2f 2f 20 54 68 65 20 71 75 65 72      /// The quer
132d0 79 20 6f 70 74 69 6d 69 7a 65 72 20 6d 69 67 68  y optimizer migh
132e0 74 20 74 72 61 6e 73 6c 61 74 65 20 74 68 69 73  t translate this
132f0 20 69 6e 74 6f 20 74 68 72 65 65 20 73 65 70 61   into three sepa
13300 72 61 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rate..        //
13310 2f 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 0d 0a  / constraints:..
13320 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
13330 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
13340 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20   <code>..       
13350 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20   ///          x 
13360 26 67 74 3b 3d 20 31 30 0d 0a 20 20 20 20 20 20  &gt;= 10..      
13370 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 78    ///          x
13380 20 26 6c 74 3b 3d 20 31 30 30 0d 0a 20 20 20 20   &lt;= 100..    
13390 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
133a0 20 79 20 26 6c 74 3b 20 39 39 39 0d 0a 20 20 20   y &lt; 999..   
133b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
133c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
133d0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
133e0 2f 20 46 6f 72 20 65 61 63 68 20 63 6f 6e 73 74  / For each const
133f0 72 61 69 6e 74 2c 20 74 68 65 20 61 43 6f 6e 73  raint, the aCons
13400 74 72 61 69 6e 74 5b 5d 2e 69 43 6f 6c 75 6d 6e  traint[].iColumn
13410 20 66 69 65 6c 64 20 69 6e 64 69 63 61 74 65 73   field indicates
13420 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68  ..        /// wh
13430 69 63 68 20 63 6f 6c 75 6d 6e 20 61 70 70 65 61  ich column appea
13440 72 73 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68  rs on the left-h
13450 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65 20  and side of the 
13460 63 6f 6e 73 74 72 61 69 6e 74 2e 20 54 68 65 0d  constraint. The.
13470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 72  .        /// fir
13480 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
13490 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
134a0 73 20 63 6f 6c 75 6d 6e 20 30 2e 20 54 68 65 20  s column 0. The 
134b0 72 6f 77 69 64 20 6f 66 20 74 68 65 0d 0a 20 20  rowid of the..  
134c0 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61        /// virtua
134d0 6c 20 74 61 62 6c 65 20 69 73 20 63 6f 6c 75 6d  l table is colum
134e0 6e 20 2d 31 2e 20 54 68 65 20 61 43 6f 6e 73 74  n -1. The aConst
134f0 72 61 69 6e 74 5b 5d 2e 6f 70 20 66 69 65 6c 64  raint[].op field
13500 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20   indicates..    
13510 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20 6f 70      /// which op
13520 65 72 61 74 6f 72 20 69 73 20 75 73 65 64 2e 20  erator is used. 
13530 54 68 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58  The SQLITE_INDEX
13540 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 2a 20 63 6f  _CONSTRAINT_* co
13550 6e 73 74 61 6e 74 73 20 6d 61 70 0d 0a 20 20 20  nstants map..   
13560 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72       /// integer
13570 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 74 6f 20   constants into 
13580 6f 70 65 72 61 74 6f 72 20 76 61 6c 75 65 73 2e  operator values.
13590 20 43 6f 6c 75 6d 6e 73 20 6f 63 63 75 72 20 69   Columns occur i
135a0 6e 20 74 68 65 20 6f 72 64 65 72 0d 0a 20 20 20  n the order..   
135b0 20 20 20 20 20 2f 2f 2f 20 74 68 65 79 20 77 65       /// they we
135c0 72 65 20 64 65 66 69 6e 65 64 20 62 79 20 74 68  re defined by th
135d0 65 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  e call to sqlite
135e0 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
135f0 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20   in the..       
13600 20 2f 2f 2f 20 78 43 72 65 61 74 65 20 6f 72 20   /// xCreate or 
13610 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2e  xConnect method.
13620 20 48 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   Hidden columns 
13630 61 72 65 20 63 6f 75 6e 74 65 64 20 77 68 65 6e  are counted when
13640 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65  ..        /// de
13650 74 65 72 6d 69 6e 69 6e 67 20 74 68 65 20 63 6f  termining the co
13660 6c 75 6d 6e 20 69 6e 64 65 78 2e 0d 0a 20 20 20  lumn index...   
13670 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
13680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
13690 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
136a0 2f 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e  / The aConstrain
136b0 74 5b 5d 20 61 72 72 61 79 20 63 6f 6e 74 61 69  t[] array contai
136c0 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ns information a
136d0 62 6f 75 74 20 61 6c 6c 20 63 6f 6e 73 74 72 61  bout all constra
136e0 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ints..        //
136f0 2f 20 74 68 61 74 20 61 70 70 6c 79 20 74 6f 20  / that apply to 
13700 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
13710 65 2e 20 42 75 74 20 73 6f 6d 65 20 6f 66 20 74  e. But some of t
13720 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d  he constraints m
13730 69 67 68 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ight..        //
13740 2f 20 6e 6f 74 20 62 65 20 75 73 61 62 6c 65 20  / not be usable 
13750 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 77  because of the w
13760 61 79 20 74 61 62 6c 65 73 20 61 72 65 20 6f 72  ay tables are or
13770 64 65 72 65 64 20 69 6e 20 61 20 6a 6f 69 6e 2e  dered in a join.
13780 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   The..        //
13790 2f 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74  / xBestIndex met
137a0 68 6f 64 20 6d 75 73 74 20 74 68 65 72 65 66 6f  hod must therefo
137b0 72 65 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72  re only consider
137c0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61   constraints tha
137d0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68  t..        /// h
137e0 61 76 65 20 61 6e 20 61 43 6f 6e 73 74 72 61 69  ave an aConstrai
137f0 6e 74 5b 5d 2e 75 73 61 62 6c 65 20 66 6c 61 67  nt[].usable flag
13800 20 77 68 69 63 68 20 69 73 20 74 72 75 65 2e 0d   which is true..
13810 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
13820 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13830 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
13840 20 20 2f 2f 2f 20 49 6e 20 61 64 64 69 74 69 6f    /// In additio
13850 6e 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73  n to WHERE claus
13860 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74  e constraints, t
13870 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 61  he SQLite core a
13880 6c 73 6f 20 74 65 6c 6c 73 0d 0a 20 20 20 20 20  lso tells..     
13890 20 20 20 2f 2f 2f 20 74 68 65 20 78 42 65 73 74     /// the xBest
138a0 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 61 62 6f  Index method abo
138b0 75 74 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  ut the ORDER BY 
138c0 63 6c 61 75 73 65 2e 20 28 49 6e 20 61 6e 20 61  clause. (In an a
138d0 67 67 72 65 67 61 74 65 0d 0a 20 20 20 20 20 20  ggregate..      
138e0 20 20 2f 2f 2f 20 71 75 65 72 79 2c 20 74 68 65    /// query, the
138f0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6d 69 67   SQLite core mig
13900 68 74 20 70 75 74 20 69 6e 20 47 52 4f 55 50 20  ht put in GROUP 
13910 42 59 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d  BY clause inform
13920 61 74 69 6f 6e 20 69 6e 0d 0a 20 20 20 20 20 20  ation in..      
13930 20 20 2f 2f 2f 20 70 6c 61 63 65 20 6f 66 20 74    /// place of t
13940 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
13950 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  se information, 
13960 62 75 74 20 74 68 69 73 20 66 61 63 74 20 73 68  but this fact sh
13970 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20  ould not..      
13980 20 20 2f 2f 2f 20 6d 61 6b 65 20 61 6e 79 20 64    /// make any d
13990 69 66 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65  ifference to the
139a0 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68   xBestIndex meth
139b0 6f 64 2e 29 20 49 66 20 61 6c 6c 20 74 65 72 6d  od.) If all term
139c0 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  s of the..      
139d0 20 20 2f 2f 2f 20 4f 52 44 45 52 20 42 59 20 63    /// ORDER BY c
139e0 6c 61 75 73 65 20 61 72 65 20 63 6f 6c 75 6d 6e  lause are column
139f0 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s in the virtual
13a00 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 6e 4f 72   table, then nOr
13a10 64 65 72 42 79 0d 0a 20 20 20 20 20 20 20 20 2f  derBy..        /
13a20 2f 2f 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e  // will be the n
13a30 75 6d 62 65 72 20 6f 66 20 74 65 72 6d 73 20 69  umber of terms i
13a40 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  n the ORDER BY c
13a50 6c 61 75 73 65 20 61 6e 64 20 74 68 65 0d 0a 20  lause and the.. 
13a60 20 20 20 20 20 20 20 2f 2f 2f 20 61 4f 72 64 65         /// aOrde
13a70 72 42 79 5b 5d 20 61 72 72 61 79 20 77 69 6c 6c  rBy[] array will
13a80 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 63 6f   identify the co
13a90 6c 75 6d 6e 20 66 6f 72 20 65 61 63 68 20 74 65  lumn for each te
13aa0 72 6d 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  rm in the..     
13ab0 20 20 20 2f 2f 2f 20 6f 72 64 65 72 20 62 79 20     /// order by 
13ac0 63 6c 61 75 73 65 20 61 6e 64 20 77 68 65 74 68  clause and wheth
13ad0 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 63  er or not that c
13ae0 6f 6c 75 6d 6e 20 69 73 20 41 53 43 20 6f 72 20  olumn is ASC or 
13af0 44 45 53 43 2e 0d 0a 20 20 20 20 20 20 20 20 2f  DESC...        /
13b00 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
13b10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
13b20 20 20 20 20 20 20 20 20 2f 2f 2f 20 32 2e 33 2e          /// 2.3.
13b30 32 20 4f 75 74 70 75 74 73 0d 0a 20 20 20 20 20  2 Outputs..     
13b40 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
13b50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
13b60 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
13b70 47 69 76 65 6e 20 61 6c 6c 20 6f 66 20 74 68 65  Given all of the
13b80 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
13b90 76 65 2c 20 74 68 65 20 6a 6f 62 20 6f 66 20 74  ve, the job of t
13ba0 68 65 20 78 42 65 73 74 49 6e 64 65 78 0d 0a 20  he xBestIndex.. 
13bb0 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
13bc0 64 20 69 74 20 74 6f 20 66 69 67 75 72 65 20 6f  d it to figure o
13bd0 75 74 20 74 68 65 20 62 65 73 74 20 77 61 79 20  ut the best way 
13be0 74 6f 20 73 65 61 72 63 68 20 74 68 65 20 76 69  to search the vi
13bf0 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
13c00 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
13c10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
13c20 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
13c30 2f 2f 20 54 68 65 20 78 42 65 73 74 49 6e 64 65  // The xBestInde
13c40 78 20 6d 65 74 68 6f 64 20 66 69 6c 6c 73 20 74  x method fills t
13c50 68 65 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64  he idxNum and id
13c60 78 53 74 72 20 66 69 65 6c 64 73 20 77 69 74 68  xStr fields with
13c70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
13c80 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 63  formation that c
13c90 6f 6d 6d 75 6e 69 63 61 74 65 73 20 61 6e 20 69  ommunicates an i
13ca0 6e 64 65 78 69 6e 67 20 73 74 72 61 74 65 67 79  ndexing strategy
13cb0 20 74 6f 20 74 68 65 20 78 46 69 6c 74 65 72 0d   to the xFilter.
13cc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74  .        /// met
13cd0 68 6f 64 2e 20 54 68 65 20 69 6e 66 6f 72 6d 61  hod. The informa
13ce0 74 69 6f 6e 20 69 6e 20 69 64 78 4e 75 6d 20 61  tion in idxNum a
13cf0 6e 64 20 69 64 78 53 74 72 20 69 73 20 61 72 62  nd idxStr is arb
13d00 69 74 72 61 72 79 20 61 73 20 66 61 72 20 61 73  itrary as far as
13d10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
13d20 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69 73  e SQLite core is
13d30 20 63 6f 6e 63 65 72 6e 65 64 2e 20 54 68 65 20   concerned. The 
13d40 53 51 4c 69 74 65 20 63 6f 72 65 20 6a 75 73 74  SQLite core just
13d50 20 63 6f 70 69 65 73 20 74 68 65 0d 0a 20 20 20   copies the..   
13d60 20 20 20 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61       /// informa
13d70 74 69 6f 6e 20 74 68 72 6f 75 67 68 20 74 6f 20  tion through to 
13d80 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
13d90 6f 64 2e 20 41 6e 79 20 64 65 73 69 72 65 64 20  od. Any desired 
13da0 6d 65 61 6e 69 6e 67 20 63 61 6e 0d 0a 20 20 20  meaning can..   
13db0 20 20 20 20 20 2f 2f 2f 20 62 65 20 61 73 73 69       /// be assi
13dc0 67 6e 65 64 20 74 6f 20 69 64 78 4e 75 6d 20 61  gned to idxNum a
13dd0 6e 64 20 69 64 78 53 74 72 20 61 73 20 6c 6f 6e  nd idxStr as lon
13de0 67 20 61 73 20 78 42 65 73 74 49 6e 64 65 78 20  g as xBestIndex 
13df0 61 6e 64 20 78 46 69 6c 74 65 72 0d 0a 20 20 20  and xFilter..   
13e00 20 20 20 20 20 2f 2f 2f 20 61 67 72 65 65 20 6f       /// agree o
13e10 6e 20 77 68 61 74 20 74 68 61 74 20 6d 65 61 6e  n what that mean
13e20 69 6e 67 20 69 73 2e 0d 0a 20 20 20 20 20 20 20  ing is...       
13e30 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
13e40 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
13e50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
13e60 65 20 69 64 78 53 74 72 20 76 61 6c 75 65 20 6d  e idxStr value m
13e70 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 6f  ay be a string o
13e80 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 61 6e 20  btained from an 
13e90 53 51 4c 69 74 65 20 6d 65 6d 6f 72 79 0d 0a 20  SQLite memory.. 
13ea0 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63         /// alloc
13eb0 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 73  ation function s
13ec0 75 63 68 20 61 73 20 73 71 6c 69 74 65 33 5f 6d  uch as sqlite3_m
13ed0 70 72 69 6e 74 66 28 29 2e 20 49 66 20 74 68 69  printf(). If thi
13ee0 73 20 69 73 20 74 68 65 20 63 61 73 65 2c 0d 0a  s is the case,..
13ef0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 6e          /// then
13f00 20 74 68 65 20 6e 65 65 64 54 6f 46 72 65 65 49   the needToFreeI
13f10 64 78 53 74 72 20 66 6c 61 67 20 6d 75 73 74 20  dxStr flag must 
13f20 62 65 20 73 65 74 20 74 6f 20 74 72 75 65 20 73  be set to true s
13f30 6f 20 74 68 61 74 20 74 68 65 0d 0a 20 20 20 20  o that the..    
13f40 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63      /// SQLite c
13f50 6f 72 65 20 77 69 6c 6c 20 6b 6e 6f 77 20 74 6f  ore will know to
13f60 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 66 72   call sqlite3_fr
13f70 65 65 28 29 20 6f 6e 20 74 68 61 74 20 73 74 72  ee() on that str
13f80 69 6e 67 20 77 68 65 6e 20 69 74 0d 0a 20 20 20  ing when it..   
13f90 20 20 20 20 20 2f 2f 2f 20 68 61 73 20 66 69 6e       /// has fin
13fa0 69 73 68 65 64 20 77 69 74 68 20 69 74 2c 20 61  ished with it, a
13fb0 6e 64 20 74 68 75 73 20 61 76 6f 69 64 20 61 20  nd thus avoid a 
13fc0 6d 65 6d 6f 72 79 20 6c 65 61 6b 2e 0d 0a 20 20  memory leak...  
13fd0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
13fe0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
13ff0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
14000 2f 2f 20 49 66 20 74 68 65 20 76 69 72 74 75 61  // If the virtua
14010 6c 20 74 61 62 6c 65 20 77 69 6c 6c 20 6f 75 74  l table will out
14020 70 75 74 20 72 6f 77 73 20 69 6e 20 74 68 65 20  put rows in the 
14030 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20  order specified 
14040 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
14050 2f 2f 2f 20 4f 52 44 45 52 20 42 59 20 63 6c 61  /// ORDER BY cla
14060 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  use, then the or
14070 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20 66 6c  derByConsumed fl
14080 61 67 20 6d 61 79 20 62 65 20 73 65 74 20 74 6f  ag may be set to
14090 20 74 72 75 65 2e 0d 0a 20 20 20 20 20 20 20 20   true...        
140a0 2f 2f 2f 20 49 66 20 74 68 65 20 6f 75 74 70 75  /// If the outpu
140b0 74 20 69 73 20 6e 6f 74 20 61 75 74 6f 6d 61 74  t is not automat
140c0 69 63 61 6c 6c 79 20 69 6e 20 74 68 65 20 63 6f  ically in the co
140d0 72 72 65 63 74 20 6f 72 64 65 72 20 74 68 65 6e  rrect order then
140e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72  ..        /// or
140f0 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20 6d 75  derByConsumed mu
14100 73 74 20 62 65 20 6c 65 66 74 20 69 6e 20 69 74  st be left in it
14110 73 20 64 65 66 61 75 6c 74 20 66 61 6c 73 65 20  s default false 
14120 73 65 74 74 69 6e 67 2e 20 54 68 69 73 0d 0a 20  setting. This.. 
14130 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20         /// will 
14140 69 6e 64 69 63 61 74 65 20 74 6f 20 74 68 65 20  indicate to the 
14150 53 51 4c 69 74 65 20 63 6f 72 65 20 74 68 61 74  SQLite core that
14160 20 69 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f   it will need to
14170 20 64 6f 20 61 20 73 65 70 61 72 61 74 65 0d 0a   do a separate..
14180 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 6f 72 74          /// sort
14190 69 6e 67 20 70 61 73 73 20 6f 76 65 72 20 74 68  ing pass over th
141a0 65 20 64 61 74 61 20 61 66 74 65 72 20 69 74 20  e data after it 
141b0 63 6f 6d 65 73 20 6f 75 74 20 6f 66 20 74 68 65  comes out of the
141c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
141d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
141e0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
141f0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
14200 20 20 2f 2f 2f 20 54 68 65 20 65 73 74 69 6d 61    /// The estima
14210 74 65 64 43 6f 73 74 20 66 69 65 6c 64 20 73 68  tedCost field sh
14220 6f 75 6c 64 20 62 65 20 73 65 74 20 74 6f 20 74  ould be set to t
14230 68 65 20 65 73 74 69 6d 61 74 65 64 20 6e 75 6d  he estimated num
14240 62 65 72 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ber of..        
14250 2f 2f 2f 20 64 69 73 6b 20 61 63 63 65 73 73 20  /// disk access 
14260 6f 70 65 72 61 74 69 6f 6e 73 20 72 65 71 75 69  operations requi
14270 72 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 74  red to execute t
14280 68 69 73 20 71 75 65 72 79 20 61 67 61 69 6e 73  his query agains
14290 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  t the..        /
142a0 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
142b0 2e 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72  . The SQLite cor
142c0 65 20 77 69 6c 6c 20 6f 66 74 65 6e 20 63 61 6c  e will often cal
142d0 6c 20 78 42 65 73 74 49 6e 64 65 78 20 6d 75 6c  l xBestIndex mul
142e0 74 69 70 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  tiple..        /
142f0 2f 2f 20 74 69 6d 65 73 20 77 69 74 68 20 64 69  // times with di
14300 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69  fferent constrai
14310 6e 74 73 2c 20 6f 62 74 61 69 6e 20 6d 75 6c 74  nts, obtain mult
14320 69 70 6c 65 20 63 6f 73 74 20 65 73 74 69 6d 61  iple cost estima
14330 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tes,..        //
14340 2f 20 74 68 65 6e 20 63 68 6f 6f 73 65 20 74 68  / then choose th
14350 65 20 71 75 65 72 79 20 70 6c 61 6e 20 74 68 61  e query plan tha
14360 74 20 67 69 76 65 73 20 74 68 65 20 6c 6f 77 65  t gives the lowe
14370 73 74 20 65 73 74 69 6d 61 74 65 2e 0d 0a 20 20  st estimate...  
14380 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
14390 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
143a0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
143b0 2f 2f 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69  // The aConstrai
143c0 6e 74 55 73 61 67 65 5b 5d 20 61 72 72 61 79 20  ntUsage[] array 
143d0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 65 6c 65  contains one ele
143e0 6d 65 6e 74 20 66 6f 72 20 65 61 63 68 20 6f 66  ment for each of
143f0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
14400 2f 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 63 6f  / nConstraint co
14410 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65  nstraints in the
14420 20 69 6e 70 75 74 73 20 73 65 63 74 69 6f 6e 20   inputs section 
14430 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
14440 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  /// sqlite3_inde
14450 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  x_info structure
14460 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e  . The aConstrain
14470 74 55 73 61 67 65 5b 5d 20 61 72 72 61 79 20 69  tUsage[] array i
14480 73 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20  s used..        
14490 2f 2f 2f 20 62 79 20 78 42 65 73 74 49 6e 64 65  /// by xBestInde
144a0 78 20 74 6f 20 74 65 6c 6c 20 74 68 65 20 63 6f  x to tell the co
144b0 72 65 20 68 6f 77 20 69 74 20 69 73 20 75 73 69  re how it is usi
144c0 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
144d0 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ts...        ///
144e0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
144f0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
14500 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42        /// The xB
14510 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
14520 6d 61 79 20 73 65 74 20 61 43 6f 6e 73 74 72 61  may set aConstra
14530 69 6e 74 55 73 61 67 65 5b 5d 2e 61 72 67 76 49  intUsage[].argvI
14540 6e 64 65 78 20 65 6e 74 72 69 65 73 0d 0a 20 20  ndex entries..  
14550 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 76 61 6c        /// to val
14560 75 65 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  ues greater than
14570 20 6f 6e 65 2e 20 45 78 61 63 74 6c 79 20 6f 6e   one. Exactly on
14580 65 20 65 6e 74 72 79 20 73 68 6f 75 6c 64 20 62  e entry should b
14590 65 20 73 65 74 20 74 6f 20 31 2c 0d 0a 20 20 20  e set to 1,..   
145a0 20 20 20 20 20 2f 2f 2f 20 61 6e 6f 74 68 65 72       /// another
145b0 20 74 6f 20 32 2c 20 61 6e 6f 74 68 65 72 20 74   to 2, another t
145c0 6f 20 33 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  o 3, and so fort
145d0 68 20 75 70 20 74 6f 20 61 73 20 6d 61 6e 79 20  h up to as many 
145e0 6f 72 20 61 73 20 66 65 77 20 61 73 0d 0a 20 20  or as few as..  
145f0 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 78 42        /// the xB
14600 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
14610 77 61 6e 74 73 2e 20 54 68 65 20 45 58 50 52 20  wants. The EXPR 
14620 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
14630 64 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ding..        //
14640 2f 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  / constraints wi
14650 6c 6c 20 74 68 65 6e 20 62 65 20 70 61 73 73 65  ll then be passe
14660 64 20 69 6e 20 61 73 20 74 68 65 20 61 72 67 76  d in as the argv
14670 5b 5d 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  [] parameters to
14680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 46  ..        /// xF
14690 69 6c 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  ilter...        
146a0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
146b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
146c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 6f 72  .        /// For
146d0 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74 68 65   example, if the
146e0 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 33 5d 2e   aConstraint[3].
146f0 61 72 67 76 49 6e 64 65 78 20 69 73 20 73 65 74  argvIndex is set
14700 20 74 6f 20 31 2c 20 74 68 65 6e 20 77 68 65 6e   to 1, then when
14710 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 46  ..        /// xF
14720 69 6c 74 65 72 20 69 73 20 63 61 6c 6c 65 64 2c  ilter is called,
14730 20 74 68 65 20 61 72 67 76 5b 30 5d 20 70 61 73   the argv[0] pas
14740 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 20 77  sed to xFilter w
14750 69 6c 6c 20 68 61 76 65 20 74 68 65 20 45 58 50  ill have the EXP
14760 52 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  R..        /// v
14770 61 6c 75 65 20 6f 66 20 74 68 65 20 61 43 6f 6e  alue of the aCon
14780 73 74 72 61 69 6e 74 5b 33 5d 20 63 6f 6e 73 74  straint[3] const
14790 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  raint...        
147a0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
147b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
147c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 42 79 20  .        /// By 
147d0 64 65 66 61 75 6c 74 2c 20 74 68 65 20 53 51 4c  default, the SQL
147e0 69 74 65 20 63 6f 72 65 20 64 6f 75 62 6c 65 20  ite core double 
147f0 63 68 65 63 6b 73 20 61 6c 6c 20 63 6f 6e 73 74  checks all const
14800 72 61 69 6e 74 73 20 6f 6e 20 65 61 63 68 0d 0a  raints on each..
14810 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 6f 77 20          /// row 
14820 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  of the virtual t
14830 61 62 6c 65 20 74 68 61 74 20 69 74 20 72 65 63  able that it rec
14840 65 69 76 65 73 2e 20 49 66 20 73 75 63 68 20 61  eives. If such a
14850 20 63 68 65 63 6b 20 69 73 0d 0a 20 20 20 20 20   check is..     
14860 20 20 20 2f 2f 2f 20 72 65 64 75 6e 64 61 6e 74     /// redundant
14870 2c 20 74 68 65 20 78 42 65 73 74 46 69 6c 74 65  , the xBestFilte
14880 72 20 6d 65 74 68 6f 64 20 63 61 6e 20 73 75 70  r method can sup
14890 70 72 65 73 73 20 74 68 61 74 20 64 6f 75 62 6c  press that doubl
148a0 65 2d 63 68 65 63 6b 20 62 79 0d 0a 20 20 20 20  e-check by..    
148b0 20 20 20 20 2f 2f 2f 20 73 65 74 74 69 6e 67 20      /// setting 
148c0 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  aConstraintUsage
148d0 5b 5d 2e 6f 6d 69 74 2e 0d 0a 20 20 20 20 20 20  [].omit...      
148e0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
148f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
14900 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
14910 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
14920 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
14930 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
14940 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
14950 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
14960 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
14970 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
14980 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
14990 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
149a0 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20  Index">..       
149b0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
149c0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
149d0 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
149e0 6f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  o structure...  
149f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
14a00 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
14a10 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
14a20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
14a30 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
14a40 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
14a50 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
14a60 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
14a70 6f 72 43 6f 64 65 20 78 42 65 73 74 49 6e 64 65  orCode xBestInde
14a80 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x(..            
14a90 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
14aa0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
14ab0 72 20 70 49 6e 64 65 78 0d 0a 20 20 20 20 20 20  r pIndex..      
14ac0 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
14ad0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
14ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
14b20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
14b30 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
14b40 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
14b50 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
14b60 64 20 72 65 6c 65 61 73 65 73 20 61 20 63 6f 6e  d releases a con
14b70 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 76 69 72  nection to a vir
14b80 74 75 61 6c 20 74 61 62 6c 65 2e 20 4f 6e 6c 79  tual table. Only
14b90 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
14ba0 2f 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 6f  / sqlite3_vtab o
14bb0 62 6a 65 63 74 20 69 73 20 64 65 73 74 72 6f 79  bject is destroy
14bc0 65 64 2e 20 54 68 65 20 76 69 72 74 75 61 6c 20  ed. The virtual 
14bd0 74 61 62 6c 65 20 69 73 20 6e 6f 74 0d 0a 20 20  table is not..  
14be0 20 20 20 20 20 20 2f 2f 2f 20 64 65 73 74 72 6f        /// destro
14bf0 79 65 64 20 61 6e 64 20 61 6e 79 20 62 61 63 6b  yed and any back
14c00 69 6e 67 20 73 74 6f 72 65 20 61 73 73 6f 63 69  ing store associ
14c10 61 74 65 64 20 77 69 74 68 20 74 68 65 20 76 69  ated with the vi
14c20 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
14c30 20 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73 74       /// persist
14c40 73 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20 75  s. This method u
14c50 6e 64 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f  ndoes the work o
14c60 66 20 78 43 6f 6e 6e 65 63 74 2e 0d 0a 20 20 20  f xConnect...   
14c70 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
14c80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
14c90 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
14ca0 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
14cb0 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f   a destructor fo
14cc0 72 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  r a connection t
14cd0 6f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  o the virtual ta
14ce0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
14cf0 2f 20 43 6f 6e 74 72 61 73 74 20 74 68 69 73 20  / Contrast this 
14d00 6d 65 74 68 6f 64 20 77 69 74 68 20 78 44 65 73  method with xDes
14d10 74 72 6f 79 2e 20 54 68 65 20 78 44 65 73 74 72  troy. The xDestr
14d20 6f 79 20 69 73 20 61 20 64 65 73 74 72 75 63 74  oy is a destruct
14d30 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
14d40 66 6f 72 20 74 68 65 20 65 6e 74 69 72 65 20 76  for the entire v
14d50 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
14d60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
14d70 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14d80 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
14d90 2f 2f 2f 20 54 68 65 20 78 44 69 73 63 6f 6e 6e  /// The xDisconn
14da0 65 63 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65  ect method is re
14db0 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
14dc0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
14dd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
14de0 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75  ementation, thou
14df0 67 68 20 69 74 20 69 73 20 61 63 63 65 70 74 61  gh it is accepta
14e00 62 6c 65 20 66 6f 72 20 74 68 65 20 78 44 69 73  ble for the xDis
14e10 63 6f 6e 6e 65 63 74 20 61 6e 64 0d 0a 20 20 20  connect and..   
14e20 20 20 20 20 20 2f 2f 2f 20 78 44 65 73 74 72 6f       /// xDestro
14e30 79 20 6d 65 74 68 6f 64 73 20 74 6f 20 62 65 20  y methods to be 
14e40 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74 69 6f  the same functio
14e50 6e 20 69 66 20 74 68 61 74 20 6d 61 6b 65 73 20  n if that makes 
14e60 73 65 6e 73 65 20 66 6f 72 0d 0a 20 20 20 20 20  sense for..     
14e70 20 20 20 2f 2f 2f 20 74 68 65 20 70 61 72 74 69     /// the parti
14e80 63 75 6c 61 72 20 76 69 72 74 75 61 6c 20 74 61  cular virtual ta
14e90 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
14ea0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
14eb0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
14ec0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
14ed0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
14ee0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
14ef0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
14f00 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
14f10 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
14f20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
14f30 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
14f40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
14f50 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
14f60 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
14f70 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
14f80 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
14f90 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
14fa0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
14fb0 43 6f 64 65 20 78 44 69 73 63 6f 6e 6e 65 63 74  Code xDisconnect
14fc0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
14fd0 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
14fe0 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
14ff0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
15040 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
15050 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
15060 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
15070 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
15080 74 68 6f 64 20 72 65 6c 65 61 73 65 73 20 61 20  thod releases a 
15090 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20  connection to a 
150a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20 6a  virtual table, j
150b0 75 73 74 20 6c 69 6b 65 20 74 68 65 0d 0a 20 20  ust like the..  
150c0 20 20 20 20 20 20 2f 2f 2f 20 78 44 69 73 63 6f        /// xDisco
150d0 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2c 20 61 6e  nnect method, an
150e0 64 20 69 74 20 61 6c 73 6f 20 64 65 73 74 72 6f  d it also destro
150f0 79 73 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  ys the underlyin
15100 67 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  g table..       
15110 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
15120 69 6f 6e 2e 20 54 68 69 73 20 6d 65 74 68 6f 64  ion. This method
15130 20 75 6e 64 6f 65 73 20 74 68 65 20 77 6f 72 6b   undoes the work
15140 20 6f 66 20 78 43 72 65 61 74 65 2e 0d 0a 20 20   of xCreate...  
15150 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
15160 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15170 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15180 2f 2f 20 54 68 65 20 78 44 69 73 63 6f 6e 6e 65  // The xDisconne
15190 63 74 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  ct method is cal
151a0 6c 65 64 20 77 68 65 6e 65 76 65 72 20 61 20 64  led whenever a d
151b0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
151c0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  on..        /// 
151d0 74 68 61 74 20 75 73 65 73 20 61 20 76 69 72 74  that uses a virt
151e0 75 61 6c 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  ual table is clo
151f0 73 65 64 2e 20 54 68 65 20 78 44 65 73 74 72 6f  sed. The xDestro
15200 79 20 6d 65 74 68 6f 64 20 69 73 20 6f 6e 6c 79  y method is only
15210 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61  ..        /// ca
15220 6c 6c 65 64 20 77 68 65 6e 20 61 20 44 52 4f 50  lled when a DROP
15230 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
15240 20 69 73 20 65 78 65 63 75 74 65 64 20 61 67 61   is executed aga
15250 69 6e 73 74 20 74 68 65 20 76 69 72 74 75 61 6c  inst the virtual
15260 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61  ..        /// ta
15270 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
15280 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
15290 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
152a0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
152b0 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 20 69  Destroy method i
152c0 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
152d0 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62  very virtual tab
152e0 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
152f0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
15300 74 68 6f 75 67 68 20 69 74 20 69 73 20 61 63 63  though it is acc
15310 65 70 74 61 62 6c 65 20 66 6f 72 20 74 68 65 20  eptable for the 
15320 78 44 69 73 63 6f 6e 6e 65 63 74 20 61 6e 64 0d  xDisconnect and.
15330 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 44 65  .        /// xDe
15340 73 74 72 6f 79 20 6d 65 74 68 6f 64 73 20 74 6f  stroy methods to
15350 20 62 65 20 74 68 65 20 73 61 6d 65 20 66 75 6e   be the same fun
15360 63 74 69 6f 6e 20 69 66 20 74 68 61 74 20 6d 61  ction if that ma
15370 6b 65 73 20 73 65 6e 73 65 20 66 6f 72 0d 0a 20  kes sense for.. 
15380 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 70         /// the p
15390 61 72 74 69 63 75 6c 61 72 20 76 69 72 74 75 61  articular virtua
153a0 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
153b0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
153c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
153d0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
153e0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
153f0 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
15400 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
15410 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
15420 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
15430 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
15440 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
15450 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
15460 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
15470 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
15480 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
15490 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
154a0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
154b0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
154c0 72 72 6f 72 43 6f 64 65 20 78 44 65 73 74 72 6f  rrorCode xDestro
154d0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
154e0 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
154f0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
15500 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
15510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
15550 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15560 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
15570 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
15580 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4f        /// The xO
15590 70 65 6e 20 6d 65 74 68 6f 64 20 63 72 65 61 74  pen method creat
155a0 65 73 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  es a new cursor 
155b0 75 73 65 64 20 66 6f 72 20 61 63 63 65 73 73 69  used for accessi
155c0 6e 67 20 28 72 65 61 64 0d 0a 20 20 20 20 20 20  ng (read..      
155d0 20 20 2f 2f 2f 20 61 6e 64 2f 6f 72 20 77 72 69    /// and/or wri
155e0 74 69 6e 67 29 20 61 20 76 69 72 74 75 61 6c 20  ting) a virtual 
155f0 74 61 62 6c 65 2e 20 41 20 73 75 63 63 65 73 73  table. A success
15600 66 75 6c 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ful invocation o
15610 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  f this..        
15620 2f 2f 2f 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  /// method will 
15630 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 6d 65 6d  allocate the mem
15640 6f 72 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ory for the sqli
15650 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
15660 28 6f 72 20 61 0d 0a 20 20 20 20 20 20 20 20 2f  (or a..        /
15670 2f 2f 20 73 75 62 63 6c 61 73 73 29 2c 20 69 6e  // subclass), in
15680 69 74 69 61 6c 69 7a 65 20 74 68 65 20 6e 65 77  itialize the new
15690 20 6f 62 6a 65 63 74 2c 20 61 6e 64 20 6d 61 6b   object, and mak
156a0 65 20 2a 70 70 43 75 72 73 6f 72 20 70 6f 69 6e  e *ppCursor poin
156b0 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t to..        //
156c0 2f 20 74 68 65 20 6e 65 77 20 6f 62 6a 65 63 74  / the new object
156d0 2e 20 54 68 65 20 73 75 63 63 65 73 73 66 75 6c  . The successful
156e0 20 63 61 6c 6c 20 74 68 65 6e 20 72 65 74 75 72   call then retur
156f0 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 0d 0a 20  ns SQLITE_OK... 
15700 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
15710 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
15720 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
15730 2f 2f 2f 20 46 6f 72 20 65 76 65 72 79 20 73 75  /// For every su
15740 63 63 65 73 73 66 75 6c 20 63 61 6c 6c 20 74 6f  ccessful call to
15750 20 74 68 69 73 20 6d 65 74 68 6f 64 2c 20 74 68   this method, th
15760 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69  e SQLite core wi
15770 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ll..        /// 
15780 6c 61 74 65 72 20 69 6e 76 6f 6b 65 20 74 68 65  later invoke the
15790 20 78 43 6c 6f 73 65 20 6d 65 74 68 6f 64 20 74   xClose method t
157a0 6f 20 64 65 73 74 72 6f 79 20 74 68 65 20 61 6c  o destroy the al
157b0 6c 6f 63 61 74 65 64 20 63 75 72 73 6f 72 2e 0d  located cursor..
157c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
157d0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
157e0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
157f0 20 20 2f 2f 2f 20 54 68 65 20 78 4f 70 65 6e 20    /// The xOpen 
15800 6d 65 74 68 6f 64 20 6e 65 65 64 20 6e 6f 74 20  method need not 
15810 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 70  initialize the p
15820 56 74 61 62 20 66 69 65 6c 64 20 6f 66 20 74 68  Vtab field of th
15830 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
15840 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
15850 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  or structure. Th
15860 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69  e SQLite core wi
15870 6c 6c 20 74 61 6b 65 20 63 61 72 65 20 6f 66 0d  ll take care of.
15880 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61  .        /// tha
15890 74 20 63 68 6f 72 65 20 61 75 74 6f 6d 61 74 69  t chore automati
158a0 63 61 6c 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20  cally...        
158b0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
158c0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
158d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 76  .        /// A v
158e0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
158f0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74  lementation must
15900 20 62 65 20 61 62 6c 65 20 74 6f 20 73 75 70 70   be able to supp
15910 6f 72 74 20 61 6e 20 61 72 62 69 74 72 61 72 79  ort an arbitrary
15920 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75  ..        /// nu
15930 6d 62 65 72 20 6f 66 20 73 69 6d 75 6c 74 61 6e  mber of simultan
15940 65 6f 75 73 6c 79 20 6f 70 65 6e 20 63 75 72 73  eously open curs
15950 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ors...        //
15960 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
15970 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
15980 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20         /// When 
15990 69 6e 69 74 69 61 6c 6c 79 20 6f 70 65 6e 65 64  initially opened
159a0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  , the cursor is 
159b0 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  in an undefined 
159c0 73 74 61 74 65 2e 20 54 68 65 0d 0a 20 20 20 20  state. The..    
159d0 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63      /// SQLite c
159e0 6f 72 65 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20  ore will invoke 
159f0 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
15a00 6f 64 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  od on the cursor
15a10 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20   prior to..     
15a20 20 20 20 2f 2f 2f 20 61 6e 79 20 61 74 74 65 6d     /// any attem
15a30 70 74 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 6f  pt to position o
15a40 72 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20  r read from the 
15a50 63 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20  cursor...       
15a60 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
15a70 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
15a80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
15a90 65 20 78 4f 70 65 6e 20 6d 65 74 68 6f 64 20 69  e xOpen method i
15aa0 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
15ab0 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62  very virtual tab
15ac0 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
15ad0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
15ae0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
15af0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
15b00 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
15b10 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
15b20 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
15b30 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
15b40 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
15b50 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
15b60 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
15b70 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
15b80 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
15b90 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
15ba0 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
15bb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f  .        /// Upo
15bc0 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20  n success, this 
15bd0 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62  parameter must b
15be0 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f  e modified to po
15bf0 69 6e 74 20 74 6f 20 74 68 65 20 6e 65 77 6c 79  int to the newly
15c00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72  ..        /// cr
15c10 65 61 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c  eated native sql
15c20 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
15c30 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
15c40 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
15c50 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
15c60 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
15c70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
15c80 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
15c90 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
15ca0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
15cb0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
15cc0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4f  LiteErrorCode xO
15cd0 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  pen(..          
15ce0 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
15cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
15d00 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
15d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
15d20 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
15d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
15d80 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
15d90 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
15da0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
15db0 20 78 43 6c 6f 73 65 20 6d 65 74 68 6f 64 20 63   xClose method c
15dc0 6c 6f 73 65 73 20 61 20 63 75 72 73 6f 72 20 70  loses a cursor p
15dd0 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
15de0 20 62 79 20 78 4f 70 65 6e 2e 20 54 68 65 0d 0a   by xOpen. The..
15df0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 51 4c 69          /// SQLi
15e00 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 61 6c 77  te core will alw
15e10 61 79 73 20 63 61 6c 6c 20 78 43 6c 6f 73 65 20  ays call xClose 
15e20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63 75  once for each cu
15e30 72 73 6f 72 20 6f 70 65 6e 65 64 0d 0a 20 20 20  rsor opened..   
15e40 20 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20 78       /// using x
15e50 4f 70 65 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  Open...        /
15e60 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
15e70 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
15e80 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
15e90 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 6c   method must rel
15ea0 65 61 73 65 20 61 6c 6c 20 72 65 73 6f 75 72 63  ease all resourc
15eb0 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  es allocated by 
15ec0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
15ed0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
15ee0 4f 70 65 6e 20 63 61 6c 6c 2e 20 54 68 65 20 72  Open call. The r
15ef0 6f 75 74 69 6e 65 20 77 69 6c 6c 20 6e 6f 74 20  outine will not 
15f00 62 65 20 63 61 6c 6c 65 64 20 61 67 61 69 6e 20  be called again 
15f10 65 76 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  even..        //
15f20 2f 20 69 66 20 69 74 20 72 65 74 75 72 6e 73 20  / if it returns 
15f30 61 6e 20 65 72 72 6f 72 2e 20 54 68 65 20 53 51  an error. The SQ
15f40 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 6e  Lite core will n
15f50 6f 74 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20  ot use the..    
15f60 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
15f70 76 74 61 62 5f 63 75 72 73 6f 72 20 61 67 61 69  vtab_cursor agai
15f80 6e 20 61 66 74 65 72 20 69 74 20 68 61 73 20 62  n after it has b
15f90 65 65 6e 20 63 6c 6f 73 65 64 2e 0d 0a 20 20 20  een closed...   
15fa0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
15fb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
15fc0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
15fd0 2f 20 54 68 65 20 78 43 6c 6f 73 65 20 6d 65 74  / The xClose met
15fe0 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
15ff0 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
16000 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
16010 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
16020 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
16030 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
16040 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
16050 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16060 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
16070 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
16080 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
16090 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
160a0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
160b0 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
160c0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
160d0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
160e0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
160f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
16100 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
16110 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
16120 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
16130 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
16140 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43  LiteErrorCode xC
16150 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lose(..         
16160 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f     IntPtr pCurso
16170 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
16180 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
16190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
161e0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
161f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
16200 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
16210 68 69 73 20 6d 65 74 68 6f 64 20 62 65 67 69 6e  his method begin
16220 73 20 61 20 73 65 61 72 63 68 20 6f 66 20 61 20  s a search of a 
16230 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54  virtual table. T
16240 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
16250 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  t..        /// i
16260 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  s a cursor opene
16270 64 20 62 79 20 78 4f 70 65 6e 2e 20 54 68 65 20  d by xOpen. The 
16280 6e 65 78 74 20 74 77 6f 20 61 72 67 75 6d 65 6e  next two argumen
16290 74 20 64 65 66 69 6e 65 20 61 0d 0a 20 20 20 20  t define a..    
162a0 20 20 20 20 2f 2f 2f 20 70 61 72 74 69 63 75 6c      /// particul
162b0 61 72 20 73 65 61 72 63 68 20 69 6e 64 65 78 20  ar search index 
162c0 70 72 65 76 69 6f 75 73 6c 79 20 63 68 6f 73 65  previously chose
162d0 6e 20 62 79 20 78 42 65 73 74 49 6e 64 65 78 2e  n by xBestIndex.
162e0 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   The..        //
162f0 2f 20 73 70 65 63 69 66 69 63 20 6d 65 61 6e 69  / specific meani
16300 6e 67 73 20 6f 66 20 69 64 78 4e 75 6d 20 61 6e  ngs of idxNum an
16310 64 20 69 64 78 53 74 72 20 61 72 65 20 75 6e 69  d idxStr are uni
16320 6d 70 6f 72 74 61 6e 74 20 61 73 20 6c 6f 6e 67  mportant as long
16330 20 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   as..        ///
16340 20 78 46 69 6c 74 65 72 20 61 6e 64 20 78 42 65   xFilter and xBe
16350 73 74 49 6e 64 65 78 20 61 67 72 65 65 20 6f 6e  stIndex agree on
16360 20 77 68 61 74 20 74 68 61 74 20 6d 65 61 6e 69   what that meani
16370 6e 67 20 69 73 2e 0d 0a 20 20 20 20 20 20 20 20  ng is...        
16380 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
16390 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
163a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
163b0 20 78 42 65 73 74 49 6e 64 65 78 20 66 75 6e 63   xBestIndex func
163c0 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 72 65  tion may have re
163d0 71 75 65 73 74 65 64 20 74 68 65 20 76 61 6c 75  quested the valu
163e0 65 73 20 6f 66 20 63 65 72 74 61 69 6e 0d 0a 20  es of certain.. 
163f0 20 20 20 20 20 20 20 2f 2f 2f 20 65 78 70 72 65         /// expre
16400 73 73 69 6f 6e 73 20 75 73 69 6e 67 20 74 68 65  ssions using the
16410 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67   aConstraintUsag
16420 65 5b 5d 2e 61 72 67 76 49 6e 64 65 78 20 76 61  e[].argvIndex va
16430 6c 75 65 73 20 6f 66 20 74 68 65 0d 0a 20 20 20  lues of the..   
16440 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
16450 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75  _index_info stru
16460 63 74 75 72 65 2e 20 54 68 6f 73 65 20 76 61 6c  cture. Those val
16470 75 65 73 20 61 72 65 20 70 61 73 73 65 64 20 74  ues are passed t
16480 6f 20 78 46 69 6c 74 65 72 0d 0a 20 20 20 20 20  o xFilter..     
16490 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20 74 68 65     /// using the
164a0 20 61 72 67 63 20 61 6e 64 20 61 72 67 76 20 70   argc and argv p
164b0 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20 20  arameters...    
164c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
164d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
164e0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
164f0 20 49 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   If the virtual 
16500 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6f  table contains o
16510 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ne or more rows 
16520 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 0d 0a  that match the..
16530 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 65 61 72          /// sear
16540 63 68 20 63 72 69 74 65 72 69 61 2c 20 74 68 65  ch criteria, the
16550 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73  n the cursor mus
16560 74 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 20  t be left point 
16570 61 74 20 74 68 65 20 66 69 72 73 74 0d 0a 20 20  at the first..  
16580 20 20 20 20 20 20 2f 2f 2f 20 72 6f 77 2e 20 53        /// row. S
16590 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
165a0 74 6f 20 78 45 6f 66 20 6d 75 73 74 20 72 65 74  to xEof must ret
165b0 75 72 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f 29  urn false (zero)
165c0 2e 20 49 66 20 74 68 65 72 65 0d 0a 20 20 20 20  . If there..    
165d0 20 20 20 20 2f 2f 2f 20 61 72 65 20 6e 6f 20 72      /// are no r
165e0 6f 77 73 20 6d 61 74 63 68 2c 20 74 68 65 6e 20  ows match, then 
165f0 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20  the cursor must 
16600 62 65 20 6c 65 66 74 20 69 6e 20 61 20 73 74 61  be left in a sta
16610 74 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20  te that..       
16620 20 2f 2f 2f 20 77 69 6c 6c 20 63 61 75 73 65 20   /// will cause 
16630 74 68 65 20 78 45 6f 66 20 74 6f 20 72 65 74 75  the xEof to retu
16640 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72  rn true (non-zer
16650 6f 29 2e 20 54 68 65 20 53 51 4c 69 74 65 20 65  o). The SQLite e
16660 6e 67 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 2f  ngine..        /
16670 2f 2f 20 77 69 6c 6c 20 75 73 65 20 74 68 65 20  // will use the 
16680 78 43 6f 6c 75 6d 6e 20 61 6e 64 20 78 52 6f 77  xColumn and xRow
16690 69 64 20 6d 65 74 68 6f 64 73 20 74 6f 20 61 63  id methods to ac
166a0 63 65 73 73 20 74 68 61 74 20 72 6f 77 20 63 6f  cess that row co
166b0 6e 74 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ntent...        
166c0 2f 2f 2f 20 54 68 65 20 78 4e 65 78 74 20 6d 65  /// The xNext me
166d0 74 68 6f 64 20 77 69 6c 6c 20 62 65 20 75 73 65  thod will be use
166e0 64 20 74 6f 20 61 64 76 61 6e 63 65 20 74 6f 20  d to advance to 
166f0 74 68 65 20 6e 65 78 74 20 72 6f 77 2e 0d 0a 20  the next row... 
16700 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
16710 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16720 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
16730 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
16740 6d 75 73 74 20 72 65 74 75 72 6e 20 53 51 4c 49  must return SQLI
16750 54 45 5f 4f 4b 20 69 66 20 73 75 63 63 65 73 73  TE_OK if success
16760 66 75 6c 2c 20 6f 72 20 61 6e 20 73 71 6c 69 74  ful, or an sqlit
16770 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  e error..       
16780 20 2f 2f 2f 20 63 6f 64 65 20 69 66 20 61 6e 20   /// code if an 
16790 65 72 72 6f 72 20 6f 63 63 75 72 73 2e 0d 0a 20  error occurs... 
167a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
167b0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
167c0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
167d0 2f 2f 2f 20 54 68 65 20 78 46 69 6c 74 65 72 20  /// The xFilter 
167e0 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72  method is requir
167f0 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72  ed for every vir
16800 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
16810 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e      /// implemen
16820 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  tation...       
16830 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
16840 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
16850 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
16860 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
16870 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
16880 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
16890 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
168a0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
168b0 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72 75  sor derived stru
168c0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
168d0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
168e0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
168f0 20 6e 61 6d 65 3d 22 69 64 78 4e 75 6d 22 3e 0d   name="idxNum">.
16900 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d  .        /// Num
16910 62 65 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ber used to help
16920 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
16930 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20  lected index... 
16940 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
16950 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
16960 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64   <param name="id
16970 78 53 74 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  xStr">..        
16980 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
16990 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 55 54  ointer to the UT
169a0 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69  F-8 encoded stri
169b0 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
169c0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
169d0 74 72 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65  tring used to he
169e0 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20  lp identify the 
169f0 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d  selected index..
16a00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
16a10 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
16a20 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
16a30 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
16a40 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
16a50 66 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  f native pointer
16a60 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 61 6c  s to sqlite3_val
16a70 75 65 20 73 74 72 75 63 74 75 72 65 73 20 73 70  ue structures sp
16a80 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20  ecified..       
16a90 20 2f 2f 2f 20 69 6e 20 3c 70 61 72 61 6d 72 65   /// in <paramre
16aa0 66 20 6e 61 6d 65 3d 22 61 72 67 76 22 20 2f 3e  f name="argv" />
16ab0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16ac0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
16ad0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
16ae0 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20  ="argv">..      
16af0 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f    /// An array o
16b00 66 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  f native pointer
16b10 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 61 6c  s to sqlite3_val
16b20 75 65 20 73 74 72 75 63 74 75 72 65 73 20 63 6f  ue structures co
16b30 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20  ntaining..      
16b40 20 20 2f 2f 2f 20 66 69 6c 74 65 72 69 6e 67 20    /// filtering 
16b50 63 72 69 74 65 72 69 61 20 66 6f 72 20 74 68 65  criteria for the
16b60 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e   selected index.
16b70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
16b80 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
16b90 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
16ba0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
16bb0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
16bc0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
16bd0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
16be0 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
16bf0 65 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c 74  eErrorCode xFilt
16c00 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
16c10 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c   IntPtr pCursor,
16c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
16c30 74 20 69 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20  t idxNum,..     
16c40 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 69 64         IntPtr id
16c50 78 53 74 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  xStr,..         
16c60 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
16c70 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
16c80 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 20   argv..         
16c90 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
16ca0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ce0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16cf0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
16d00 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16d10 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
16d20 2f 2f 20 54 68 65 20 78 4e 65 78 74 20 6d 65 74  // The xNext met
16d30 68 6f 64 20 61 64 76 61 6e 63 65 73 20 61 20 76  hod advances a v
16d40 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
16d50 73 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  sor to the next 
16d60 72 6f 77 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  row of..        
16d70 2f 2f 2f 20 61 20 72 65 73 75 6c 74 20 73 65 74  /// a result set
16d80 20 69 6e 69 74 69 61 74 65 64 20 62 79 20 78 46   initiated by xF
16d90 69 6c 74 65 72 2e 20 49 66 20 74 68 65 20 63 75  ilter. If the cu
16da0 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 0d  rsor is already.
16db0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69  .        /// poi
16dc0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6c 61 73  nting at the las
16dd0 74 20 72 6f 77 20 77 68 65 6e 20 74 68 69 73 20  t row when this 
16de0 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65  routine is calle
16df0 64 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20  d, then the..   
16e00 20 20 20 20 20 2f 2f 2f 20 63 75 72 73 6f 72 20       /// cursor 
16e10 6e 6f 20 6c 6f 6e 67 65 72 20 70 6f 69 6e 74 73  no longer points
16e20 20 74 6f 20 76 61 6c 69 64 20 64 61 74 61 20 61   to valid data a
16e30 6e 64 20 61 20 73 75 62 73 65 71 75 65 6e 74 20  nd a subsequent 
16e40 63 61 6c 6c 20 74 6f 20 74 68 65 0d 0a 20 20 20  call to the..   
16e50 20 20 20 20 20 2f 2f 2f 20 78 45 6f 66 20 6d 65       /// xEof me
16e60 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e  thod must return
16e70 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29   true (non-zero)
16e80 2e 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  . If the cursor 
16e90 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
16ea0 73 75 63 63 65 73 73 66 75 6c 6c 79 20 61 64 76  successfully adv
16eb0 61 6e 63 65 64 20 74 6f 20 61 6e 6f 74 68 65 72  anced to another
16ec0 20 72 6f 77 20 6f 66 20 63 6f 6e 74 65 6e 74 2c   row of content,
16ed0 20 74 68 65 6e 20 73 75 62 73 65 71 75 65 6e 74   then subsequent
16ee0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61  ..        /// ca
16ef0 6c 6c 73 20 74 6f 20 78 45 6f 66 20 6d 75 73 74  lls to xEof must
16f00 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 28 7a   return false (z
16f10 65 72 6f 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ero)...        /
16f20 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
16f30 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
16f40 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
16f50 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74   method must ret
16f60 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66  urn SQLITE_OK if
16f70 20 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20   successful, or 
16f80 61 6e 20 73 71 6c 69 74 65 20 65 72 72 6f 72 0d  an sqlite error.
16f90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 64  .        /// cod
16fa0 65 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  e if an error oc
16fb0 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  curs...        /
16fc0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
16fd0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
16fe0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
16ff0 78 4e 65 78 74 20 6d 65 74 68 6f 64 20 69 73 20  xNext method is 
17000 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76 65  required for eve
17010 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ry virtual table
17020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d  ..        /// im
17030 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20  plementation... 
17040 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17050 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17060 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
17070 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
17080 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a  ame="pCursor">..
17090 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
170a0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
170b0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
170c0 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65  ab_cursor derive
170d0 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
170e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
170f0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
17100 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
17110 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
17120 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
17130 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
17140 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
17150 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
17160 6f 72 43 6f 64 65 20 78 4e 65 78 74 28 0d 0a 20  orCode xNext(.. 
17170 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
17180 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
17190 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
171a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
171b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
171f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
17200 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
17210 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
17220 20 20 20 2f 2f 2f 20 54 68 65 20 78 45 6f 66 20     /// The xEof 
17230 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75  method must retu
17240 72 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f 29 20  rn false (zero) 
17250 69 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  if the specified
17260 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20   cursor..       
17270 20 2f 2f 2f 20 63 75 72 72 65 6e 74 6c 79 20 70   /// currently p
17280 6f 69 6e 74 73 20 74 6f 20 61 20 76 61 6c 69 64  oints to a valid
17290 20 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 6f 72   row of data, or
172a0 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29   true (non-zero)
172b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 74  ..        /// ot
172c0 68 65 72 77 69 73 65 2e 20 54 68 69 73 20 6d 65  herwise. This me
172d0 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 62  thod is called b
172e0 79 20 74 68 65 20 53 51 4c 20 65 6e 67 69 6e 65  y the SQL engine
172f0 20 69 6d 6d 65 64 69 61 74 65 6c 79 0d 0a 20 20   immediately..  
17300 20 20 20 20 20 20 2f 2f 2f 20 61 66 74 65 72 20        /// after 
17310 65 61 63 68 20 78 46 69 6c 74 65 72 20 61 6e 64  each xFilter and
17320 20 78 4e 65 78 74 20 69 6e 76 6f 63 61 74 69 6f   xNext invocatio
17330 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
17340 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
17350 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
17360 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 45 6f       /// The xEo
17370 66 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  f method is requ
17380 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
17390 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
173a0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20  lementation...  
173b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
173c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
173d0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
173e0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
173f0 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
17400 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
17410 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
17420 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
17430 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64  b_cursor derived
17440 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
17450 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
17460 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17470 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
17480 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
17490 66 20 6e 6f 20 6d 6f 72 65 20 72 6f 77 73 20 61  f no more rows a
174a0 72 65 20 61 76 61 69 6c 61 62 6c 65 3b 20 7a 65  re available; ze
174b0 72 6f 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20  ro otherwise... 
174c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
174d0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 69  urns>..        i
174e0 6e 74 20 78 45 6f 66 28 0d 0a 20 20 20 20 20 20  nt xEof(..      
174f0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
17500 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
17510 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
17520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17560 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
17570 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
17580 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
17590 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
175a0 2f 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72  / The SQLite cor
175b0 65 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6d  e invokes this m
175c0 65 74 68 6f 64 20 69 6e 20 6f 72 64 65 72 20 74  ethod in order t
175d0 6f 20 66 69 6e 64 20 74 68 65 20 76 61 6c 75 65  o find the value
175e0 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f   for..        //
175f0 2f 20 74 68 65 20 4e 2d 74 68 20 63 6f 6c 75 6d  / the N-th colum
17600 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  n of the current
17610 20 72 6f 77 2e 20 4e 20 69 73 20 7a 65 72 6f 2d   row. N is zero-
17620 62 61 73 65 64 20 73 6f 20 74 68 65 20 66 69 72  based so the fir
17630 73 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  st..        /// 
17640 63 6f 6c 75 6d 6e 20 69 73 20 6e 75 6d 62 65 72  column is number
17650 65 64 20 30 2e 20 54 68 65 20 78 43 6f 6c 75 6d  ed 0. The xColum
17660 6e 20 6d 65 74 68 6f 64 20 6d 61 79 20 72 65 74  n method may ret
17670 75 72 6e 20 69 74 73 20 72 65 73 75 6c 74 20 62  urn its result b
17680 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ack..        ///
17690 20 74 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67   to SQLite using
176a0 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
176b0 6f 77 69 6e 67 20 69 6e 74 65 72 66 61 63 65 3a  owing interface:
176c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
176d0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
176e0 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20  // <code>..     
176f0 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74     ///     sqlit
17700 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 29  e3_result_blob()
17710 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
17720 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
17730 5f 64 6f 75 62 6c 65 28 29 0d 0a 20 20 20 20 20  _double()..     
17740 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74     ///     sqlit
17750 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 29 0d  e3_result_int().
17760 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
17770 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
17780 69 6e 74 36 34 28 29 0d 0a 20 20 20 20 20 20 20  int64()..       
17790 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33   ///     sqlite3
177a0 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 29 0d 0a  _result_null()..
177b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
177c0 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
177d0 65 78 74 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  ext()..        /
177e0 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
177f0 65 73 75 6c 74 5f 74 65 78 74 31 36 28 29 0d 0a  esult_text16()..
17800 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
17810 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
17820 65 78 74 31 36 6c 65 28 29 0d 0a 20 20 20 20 20  ext16le()..     
17830 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74     ///     sqlit
17840 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36  e3_result_text16
17850 62 65 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  be()..        //
17860 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  /     sqlite3_re
17870 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 0d  sult_zeroblob().
17880 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63  .        /// </c
17890 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
178a0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
178b0 20 20 2f 2f 2f 20 49 66 20 74 68 65 20 78 43 6f    /// If the xCo
178c0 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 69 6d 70 6c  lumn method impl
178d0 65 6d 65 6e 74 61 74 69 6f 6e 20 63 61 6c 6c 73  ementation calls
178e0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e   none of the fun
178f0 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  ctions..        
17900 2f 2f 2f 20 61 62 6f 76 65 2c 20 74 68 65 6e 20  /// above, then 
17910 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
17920 20 63 6f 6c 75 6d 6e 20 64 65 66 61 75 6c 74 73   column defaults
17930 20 74 6f 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e   to an SQL NULL.
17940 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17950 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
17960 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
17970 20 20 20 2f 2f 2f 20 54 6f 20 72 61 69 73 65 20     /// To raise 
17980 61 6e 20 65 72 72 6f 72 2c 20 74 68 65 20 78 43  an error, the xC
17990 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 73 68 6f  olumn method sho
179a0 75 6c 64 20 75 73 65 20 6f 6e 65 20 6f 66 20 74  uld use one of t
179b0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
179c0 72 65 73 75 6c 74 5f 74 65 78 74 28 29 20 6d 65  result_text() me
179d0 74 68 6f 64 73 20 74 6f 20 73 65 74 20 74 68 65  thods to set the
179e0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
179f0 65 78 74 2c 20 74 68 65 6e 20 72 65 74 75 72 6e  ext, then return
17a00 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   an..        ///
17a10 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72   appropriate err
17a20 6f 72 20 63 6f 64 65 2e 20 54 68 65 20 78 43 6f  or code. The xCo
17a30 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 6d 75 73 74  lumn method must
17a40 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
17a50 4b 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  K on..        //
17a60 2f 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20  / success...    
17a70 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
17a80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
17a90 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
17aa0 20 54 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65 74   The xColumn met
17ab0 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
17ac0 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
17ad0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
17ae0 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
17af0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
17b00 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
17b10 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
17b20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17b30 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
17b40 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
17b50 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
17b60 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
17b70 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
17b80 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
17b90 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
17ba0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
17bb0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
17bc0 6d 65 3d 22 70 43 6f 6e 74 65 78 74 22 3e 0d 0a  me="pContext">..
17bd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
17be0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
17bf0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f  o the sqlite3_co
17c00 6e 74 65 78 74 20 73 74 72 75 63 74 75 72 65 20  ntext structure 
17c10 74 6f 20 62 65 20 75 73 65 64 0d 0a 20 20 20 20  to be used..    
17c20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 72 65 74 75      /// for retu
17c30 72 6e 69 6e 67 20 74 68 65 20 73 70 65 63 69 66  rning the specif
17c40 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  ied column value
17c50 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63   to the SQLite c
17c60 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ore..        ///
17c70 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
17c80 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
17c90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
17ca0 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
17cb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
17cc0 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e  he zero-based in
17cd0 64 65 78 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  dex correspondin
17ce0 67 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 20  g to the column 
17cf0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a  containing the..
17d00 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75          /// valu
17d10 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64  e to be returned
17d20 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17d30 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
17d40 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
17d50 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
17d60 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
17d70 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
17d80 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
17d90 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
17da0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6c  teErrorCode xCol
17db0 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  umn(..          
17dc0 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72    IntPtr pCursor
17dd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
17de0 6e 74 50 74 72 20 70 43 6f 6e 74 65 78 74 2c 0d  ntPtr pContext,.
17df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
17e00 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20   index..        
17e10 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
17e20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
17e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17e70 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
17e80 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
17e90 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
17ea0 2f 2f 2f 20 41 20 73 75 63 63 65 73 73 66 75 6c  /// A successful
17eb0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
17ec0 68 69 73 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  his method will 
17ed0 63 61 75 73 65 20 2a 70 52 6f 77 69 64 20 74 6f  cause *pRowid to
17ee0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   be..        ///
17ef0 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65   filled with the
17f00 20 72 6f 77 69 64 20 6f 66 20 72 6f 77 20 74 68   rowid of row th
17f10 61 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  at the virtual t
17f20 61 62 6c 65 20 63 75 72 73 6f 72 20 70 43 75 72  able cursor pCur
17f30 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   is..        ///
17f40 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
17f50 69 6e 67 20 61 74 2e 20 54 68 69 73 20 6d 65 74  ing at. This met
17f60 68 6f 64 20 72 65 74 75 72 6e 73 20 53 51 4c 49  hod returns SQLI
17f70 54 45 5f 4f 4b 20 6f 6e 20 73 75 63 63 65 73 73  TE_OK on success
17f80 2e 20 49 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  . It..        //
17f90 2f 20 72 65 74 75 72 6e 73 20 61 6e 20 61 70 70  / returns an app
17fa0 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 63  ropriate error c
17fb0 6f 64 65 20 6f 6e 20 66 61 69 6c 75 72 65 2e 0d  ode on failure..
17fc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
17fd0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
17fe0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
17ff0 20 20 2f 2f 2f 20 54 68 65 20 78 52 6f 77 69 64    /// The xRowid
18000 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69   method is requi
18010 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69  red for every vi
18020 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
18030 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
18040 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ntation...      
18050 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
18060 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
18070 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
18080 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
18090 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
180a0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
180b0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
180c0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
180d0 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72  rsor derived str
180e0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
180f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
18100 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
18110 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d  m name="rowId">.
18120 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f  .        /// Upo
18130 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20  n success, this 
18140 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62  parameter must b
18150 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f  e modified to co
18160 6e 74 61 69 6e 20 74 68 65 20 75 6e 69 71 75 65  ntain the unique
18170 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
18180 74 65 67 65 72 20 72 6f 77 20 69 64 65 6e 74 69  teger row identi
18190 66 69 65 72 20 66 6f 72 20 74 68 65 20 63 75 72  fier for the cur
181a0 72 65 6e 74 20 72 6f 77 20 66 6f 72 20 74 68 65  rent row for the
181b0 20 73 70 65 63 69 66 69 65 64 20 63 75 72 73 6f   specified curso
181c0 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
181d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
181e0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
181f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
18200 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
18210 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
18220 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
18230 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
18240 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f  iteErrorCode xRo
18250 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  wId(..          
18260 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72    IntPtr pCursor
18270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
18280 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20  ef long rowId.. 
18290 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
182a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
182b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
18300 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
18310 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
18320 20 20 20 20 20 20 20 2f 2f 2f 20 41 6c 6c 20 63         /// All c
18330 68 61 6e 67 65 73 20 74 6f 20 61 20 76 69 72 74  hanges to a virt
18340 75 61 6c 20 74 61 62 6c 65 20 61 72 65 20 6d 61  ual table are ma
18350 64 65 20 75 73 69 6e 67 20 74 68 65 20 78 55 70  de using the xUp
18360 64 61 74 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  date method...  
18370 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6f        /// This o
18380 6e 65 20 6d 65 74 68 6f 64 20 63 61 6e 20 62 65  ne method can be
18390 20 75 73 65 64 20 74 6f 20 69 6e 73 65 72 74 2c   used to insert,
183a0 20 64 65 6c 65 74 65 2c 20 6f 72 20 75 70 64 61   delete, or upda
183b0 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  te...        ///
183c0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
183d0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
183e0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
183f0 67 63 20 70 61 72 61 6d 65 74 65 72 20 73 70 65  gc parameter spe
18400 63 69 66 69 65 73 20 74 68 65 20 6e 75 6d 62 65  cifies the numbe
18410 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
18420 74 68 65 20 61 72 67 76 0d 0a 20 20 20 20 20 20  the argv..      
18430 20 20 2f 2f 2f 20 61 72 72 61 79 2e 20 54 68 65    /// array. The
18440 20 76 61 6c 75 65 20 6f 66 20 61 72 67 63 20 77   value of argc w
18450 69 6c 6c 20 62 65 20 31 20 66 6f 72 20 61 20 70  ill be 1 for a p
18460 75 72 65 20 64 65 6c 65 74 65 20 6f 70 65 72 61  ure delete opera
18470 74 69 6f 6e 20 6f 72 0d 0a 20 20 20 20 20 20 20  tion or..       
18480 20 2f 2f 2f 20 4e 2b 32 20 66 6f 72 20 61 6e 20   /// N+2 for an 
18490 69 6e 73 65 72 74 20 6f 72 20 72 65 70 6c 61 63  insert or replac
184a0 65 20 6f 72 20 75 70 64 61 74 65 20 77 68 65 72  e or update wher
184b0 65 20 4e 20 69 73 20 74 68 65 20 6e 75 6d 62 65  e N is the numbe
184c0 72 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  r of..        //
184d0 2f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  / columns in the
184e0 20 74 61 62 6c 65 2e 20 49 6e 20 74 68 65 20 70   table. In the p
184f0 72 65 76 69 6f 75 73 20 73 65 6e 74 65 6e 63 65  revious sentence
18500 2c 20 4e 20 69 6e 63 6c 75 64 65 73 20 61 6e 79  , N includes any
18510 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 69  ..        /// hi
18520 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 0d 0a 20  dden columns... 
18530 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
18540 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
18550 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
18560 2f 2f 2f 20 45 76 65 72 79 20 61 72 67 76 20 65  /// Every argv e
18570 6e 74 72 79 20 77 69 6c 6c 20 68 61 76 65 20 61  ntry will have a
18580 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20   non-NULL value 
18590 69 6e 20 43 20 62 75 74 20 6d 61 79 20 63 6f 6e  in C but may con
185a0 74 61 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tain..        //
185b0 2f 20 74 68 65 20 53 51 4c 20 76 61 6c 75 65 20  / the SQL value 
185c0 4e 55 4c 4c 2e 20 49 6e 20 6f 74 68 65 72 20 77  NULL. In other w
185d0 6f 72 64 73 2c 20 69 74 20 69 73 20 61 6c 77 61  ords, it is alwa
185e0 79 73 20 74 72 75 65 20 74 68 61 74 0d 0a 20 20  ys true that..  
185f0 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 76 5b 69        /// argv[i
18600 5d 21 3d 30 20 66 6f 72 20 69 20 62 65 74 77 65  ]!=0 for i betwe
18610 65 6e 20 30 20 61 6e 64 20 61 72 67 63 2d 31 2e  en 0 and argc-1.
18620 20 48 6f 77 65 76 65 72 2c 20 69 74 20 6d 69 67   However, it mig
18630 68 74 20 62 65 20 74 68 65 0d 0a 20 20 20 20 20  ht be the..     
18640 20 20 20 2f 2f 2f 20 63 61 73 65 20 74 68 61 74     /// case that
18650 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
18660 79 70 65 28 61 72 67 76 5b 69 5d 29 3d 3d 53 51  ype(argv[i])==SQ
18670 4c 49 54 45 5f 4e 55 4c 4c 2e 0d 0a 20 20 20 20  LITE_NULL...    
18680 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
18690 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
186a0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
186b0 20 54 68 65 20 61 72 67 76 5b 30 5d 20 70 61 72   The argv[0] par
186c0 61 6d 65 74 65 72 20 69 73 20 74 68 65 20 72 6f  ameter is the ro
186d0 77 69 64 20 6f 66 20 61 20 72 6f 77 20 69 6e 20  wid of a row in 
186e0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
186f0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
18700 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 20 49 66  o be deleted. If
18710 20 61 72 67 76 5b 30 5d 20 69 73 20 61 6e 20 53   argv[0] is an S
18720 51 4c 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 6e 6f  QL NULL, then no
18730 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73   deletion occurs
18740 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18750 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
18760 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
18770 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 76      /// The argv
18780 5b 31 5d 20 70 61 72 61 6d 65 74 65 72 20 69 73  [1] parameter is
18790 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20   the rowid of a 
187a0 6e 65 77 20 72 6f 77 20 74 6f 20 62 65 20 69 6e  new row to be in
187b0 73 65 72 74 65 64 20 69 6e 74 6f 0d 0a 20 20 20  serted into..   
187c0 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72       /// the vir
187d0 74 75 61 6c 20 74 61 62 6c 65 2e 20 49 66 20 61  tual table. If a
187e0 72 67 76 5b 31 5d 20 69 73 20 61 6e 20 53 51 4c  rgv[1] is an SQL
187f0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0d   NULL, then the.
18800 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70  .        /// imp
18810 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74  lementation must
18820 20 63 68 6f 6f 73 65 20 61 20 72 6f 77 69 64 20   choose a rowid 
18830 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 69 6e  for the newly in
18840 73 65 72 74 65 64 20 72 6f 77 2e 0d 0a 20 20 20  serted row...   
18850 20 20 20 20 20 2f 2f 2f 20 53 75 62 73 65 71 75       /// Subsequ
18860 65 6e 74 20 61 72 67 76 5b 5d 20 65 6e 74 72 69  ent argv[] entri
18870 65 73 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65  es contain value
18880 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s of the columns
18890 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
188a0 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62   /// virtual tab
188b0 6c 65 2c 20 69 6e 20 74 68 65 20 6f 72 64 65 72  le, in the order
188c0 20 74 68 61 74 20 74 68 65 20 63 6f 6c 75 6d 6e   that the column
188d0 73 20 77 65 72 65 20 64 65 63 6c 61 72 65 64 2e  s were declared.
188e0 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   The..        //
188f0 2f 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  / number of colu
18900 6d 6e 73 20 77 69 6c 6c 20 6d 61 74 63 68 20 74  mns will match t
18910 68 65 20 74 61 62 6c 65 20 64 65 63 6c 61 72 61  he table declara
18920 74 69 6f 6e 20 74 68 61 74 20 74 68 65 0d 0a 20  tion that the.. 
18930 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e         /// xConn
18940 65 63 74 20 6f 72 20 78 43 72 65 61 74 65 20 6d  ect or xCreate m
18950 65 74 68 6f 64 20 6d 61 64 65 20 75 73 69 6e 67  ethod made using
18960 20 74 68 65 20 73 71 6c 69 74 65 33 5f 64 65 63   the sqlite3_dec
18970 6c 61 72 65 5f 76 74 61 62 28 29 0d 0a 20 20 20  lare_vtab()..   
18980 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 2e 20 41       /// call. A
18990 6c 6c 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  ll hidden column
189a0 73 20 61 72 65 20 69 6e 63 6c 75 64 65 64 2e 0d  s are included..
189b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
189c0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
189d0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
189e0 20 20 2f 2f 2f 20 57 68 65 6e 20 64 6f 69 6e 67    /// When doing
189f0 20 61 6e 20 69 6e 73 65 72 74 20 77 69 74 68 6f   an insert witho
18a00 75 74 20 61 20 72 6f 77 69 64 20 28 61 72 67 63  ut a rowid (argc
18a10 3e 31 2c 20 61 72 67 76 5b 31 5d 20 69 73 20 61  >1, argv[1] is a
18a20 6e 20 53 51 4c 0d 0a 20 20 20 20 20 20 20 20 2f  n SQL..        /
18a30 2f 2f 20 4e 55 4c 4c 29 2c 20 74 68 65 20 69 6d  // NULL), the im
18a40 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73  plementation mus
18a50 74 20 73 65 74 20 2a 70 52 6f 77 69 64 20 74 6f  t set *pRowid to
18a60 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
18a70 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
18a80 65 77 6c 79 20 69 6e 73 65 72 74 65 64 20 72 6f  ewly inserted ro
18a90 77 3b 20 74 68 69 73 20 77 69 6c 6c 20 62 65 63  w; this will bec
18aa0 6f 6d 65 20 74 68 65 20 76 61 6c 75 65 20 72 65  ome the value re
18ab0 74 75 72 6e 65 64 20 62 79 20 74 68 65 0d 0a 20  turned by the.. 
18ac0 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
18ad0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
18ae0 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 2e  owid() function.
18af0 20 53 65 74 74 69 6e 67 20 74 68 69 73 20 76 61   Setting this va
18b00 6c 75 65 20 69 6e 20 61 6c 6c 20 74 68 65 0d 0a  lue in all the..
18b10 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 74 68 65          /// othe
18b20 72 20 63 61 73 65 73 20 69 73 20 61 20 68 61 72  r cases is a har
18b30 6d 6c 65 73 73 20 6e 6f 2d 6f 70 3b 20 74 68 65  mless no-op; the
18b40 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 69   SQLite engine i
18b50 67 6e 6f 72 65 73 20 74 68 65 0d 0a 20 20 20 20  gnores the..    
18b60 20 20 20 20 2f 2f 2f 20 2a 70 52 6f 77 69 64 20      /// *pRowid 
18b70 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 66 20  return value if 
18b80 61 72 67 63 3d 3d 31 20 6f 72 20 61 72 67 76 5b  argc==1 or argv[
18b90 31 5d 20 69 73 20 6e 6f 74 20 61 6e 20 53 51 4c  1] is not an SQL
18ba0 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20   NULL...        
18bb0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
18bc0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
18bd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 61 63  .        /// Eac
18be0 68 20 63 61 6c 6c 20 74 6f 20 78 55 70 64 61 74  h call to xUpdat
18bf0 65 20 77 69 6c 6c 20 66 61 6c 6c 20 69 6e 74 6f  e will fall into
18c00 20 6f 6e 65 20 6f 66 20 63 61 73 65 73 20 73 68   one of cases sh
18c10 6f 77 6e 20 62 65 6c 6f 77 2e 20 4e 6f 74 65 0d  own below. Note.
18c20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61  .        /// tha
18c30 74 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  t references to 
18c40 61 72 67 76 5b 69 5d 20 6d 65 61 6e 20 74 68 65  argv[i] mean the
18c50 20 53 51 4c 20 76 61 6c 75 65 20 68 65 6c 64 20   SQL value held 
18c60 77 69 74 68 69 6e 20 74 68 65 0d 0a 20 20 20 20  within the..    
18c70 20 20 20 20 2f 2f 2f 20 61 72 67 76 5b 69 5d 20      /// argv[i] 
18c80 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 74 68 65 20  object, not the 
18c90 61 72 67 76 5b 69 5d 20 6f 62 6a 65 63 74 20 69  argv[i] object i
18ca0 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20 20  tself...        
18cb0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
18cc0 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d       /// <code>.
18cd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
18ce0 20 61 72 67 63 20 3d 20 31 0d 0a 20 20 20 20 20   argc = 1..     
18cf0 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a     /// </code>..
18d00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
18d10 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
18d20 20 20 20 20 20 20 20 20 54 68 65 20 73 69 6e 67          The sing
18d30 6c 65 20 72 6f 77 20 77 69 74 68 20 72 6f 77 69  le row with rowi
18d40 64 20 65 71 75 61 6c 20 74 6f 20 61 72 67 76 5b  d equal to argv[
18d50 30 5d 20 69 73 20 64 65 6c 65 74 65 64 2e 20 4e  0] is deleted. N
18d60 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  o..        ///  
18d70 20 20 20 20 20 20 20 69 6e 73 65 72 74 20 6f 63         insert oc
18d80 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  curs...        /
18d90 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
18da0 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
18db0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
18dc0 61 72 67 63 20 3e 20 31 0d 0a 20 20 20 20 20 20  argc > 1..      
18dd0 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30    ///     argv[0
18de0 5d 20 3d 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20  ] = NULL..      
18df0 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20    /// </code>.. 
18e00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
18e10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  >..        ///  
18e20 20 20 20 20 20 20 20 41 20 6e 65 77 20 72 6f 77         A new row
18e30 20 69 73 20 69 6e 73 65 72 74 65 64 20 77 69 74   is inserted wit
18e40 68 20 61 20 72 6f 77 69 64 20 61 72 67 76 5b 31  h a rowid argv[1
18e50 5d 20 61 6e 64 20 63 6f 6c 75 6d 6e 0d 0a 20 20  ] and column..  
18e60 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
18e70 20 20 76 61 6c 75 65 73 20 69 6e 20 61 72 67 76    values in argv
18e80 5b 32 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e  [2] and followin
18e90 67 2e 20 49 66 20 61 72 67 76 5b 31 5d 20 69 73  g. If argv[1] is
18ea0 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2c 0d 0a 20   an SQL NULL,.. 
18eb0 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
18ec0 20 20 20 74 68 65 20 61 20 6e 65 77 20 75 6e 69     the a new uni
18ed0 71 75 65 20 72 6f 77 69 64 20 69 73 20 67 65 6e  que rowid is gen
18ee0 65 72 61 74 65 64 20 61 75 74 6f 6d 61 74 69 63  erated automatic
18ef0 61 6c 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ally...        /
18f00 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
18f10 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
18f20 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
18f30 61 72 67 63 20 3e 20 31 0d 0a 20 20 20 20 20 20  argc > 1..      
18f40 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30    ///     argv[0
18f50 5d 20 3f 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20  ] ? NULL..      
18f60 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30    ///     argv[0
18f70 5d 20 3d 20 61 72 67 76 5b 31 5d 0d 0a 20 20 20  ] = argv[1]..   
18f80 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
18f90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18fa0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
18fb0 2f 20 20 20 20 20 20 20 20 20 54 68 65 20 72 6f  /         The ro
18fc0 77 20 77 69 74 68 20 72 6f 77 69 64 20 61 72 67  w with rowid arg
18fd0 76 5b 30 5d 20 69 73 20 75 70 64 61 74 65 64 20  v[0] is updated 
18fe0 77 69 74 68 20 6e 65 77 20 76 61 6c 75 65 73 20  with new values 
18ff0 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  in..        /// 
19000 20 20 20 20 20 20 20 20 61 72 67 76 5b 32 5d 20          argv[2] 
19010 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61  and following pa
19020 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20 20 20  rameters...     
19030 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
19040 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64          /// <cod
19050 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
19060 20 20 20 20 61 72 67 63 20 3e 20 31 0d 0a 20 20      argc > 1..  
19070 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72        ///     ar
19080 67 76 5b 30 5d 20 3f 20 4e 55 4c 4c 0d 0a 20 20  gv[0] ? NULL..  
19090 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72        ///     ar
190a0 67 76 5b 30 5d 20 3f 20 61 72 67 76 5b 31 5d 0d  gv[0] ? argv[1].
190b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63  .        /// </c
190c0 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
190d0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
190e0 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 54 68    ///         Th
190f0 65 20 72 6f 77 20 77 69 74 68 20 72 6f 77 69 64  e row with rowid
19100 20 61 72 67 76 5b 30 5d 20 69 73 20 75 70 64 61   argv[0] is upda
19110 74 65 64 20 77 69 74 68 20 72 6f 77 69 64 20 61  ted with rowid a
19120 72 67 76 5b 31 5d 0d 0a 20 20 20 20 20 20 20 20  rgv[1]..        
19130 2f 2f 2f 20 20 20 20 20 20 20 20 20 61 6e 64 20  ///         and 
19140 6e 65 77 20 76 61 6c 75 65 73 20 69 6e 20 61 72  new values in ar
19150 67 76 5b 32 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77  gv[2] and follow
19160 69 6e 67 20 70 61 72 61 6d 65 74 65 72 73 2e 20  ing parameters. 
19170 54 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  This..        //
19180 2f 20 20 20 20 20 20 20 20 20 77 69 6c 6c 20 6f  /         will o
19190 63 63 75 72 20 77 68 65 6e 20 61 6e 20 53 51 4c  ccur when an SQL
191a0 20 73 74 61 74 65 6d 65 6e 74 20 75 70 64 61 74   statement updat
191b0 65 73 20 61 20 72 6f 77 69 64 2c 20 61 73 20 69  es a rowid, as i
191c0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  n..        ///  
191d0 20 20 20 20 20 20 20 74 68 65 20 73 74 61 74 65         the state
191e0 6d 65 6e 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f  ment:..        /
191f0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
19200 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
19210 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
19220 20 20 20 20 20 20 20 20 55 50 44 41 54 45 20 74          UPDATE t
19230 61 62 6c 65 20 53 45 54 20 72 6f 77 69 64 3d 72  able SET rowid=r
19240 6f 77 69 64 2b 31 20 57 48 45 52 45 20 2e 2e 2e  owid+1 WHERE ...
19250 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
19260 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
19270 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
19280 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 55 70 64      /// The xUpd
19290 61 74 65 20 6d 65 74 68 6f 64 20 6d 75 73 74 20  ate method must 
192a0 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
192b0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
192c0 69 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f  it is..        /
192d0 2f 2f 20 73 75 63 63 65 73 73 66 75 6c 2e 20 49  // successful. I
192e0 66 20 61 20 66 61 69 6c 75 72 65 20 6f 63 63 75  f a failure occu
192f0 72 73 2c 20 74 68 65 20 78 55 70 64 61 74 65 20  rs, the xUpdate 
19300 6d 75 73 74 20 72 65 74 75 72 6e 20 61 6e 0d 0a  must return an..
19310 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 70 70 72          /// appr
19320 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 63 6f  opriate error co
19330 64 65 2e 20 4f 6e 20 61 20 66 61 69 6c 75 72 65  de. On a failure
19340 2c 20 74 68 65 20 70 56 54 61 62 2d 3e 7a 45 72  , the pVTab->zEr
19350 72 4d 73 67 20 65 6c 65 6d 65 6e 74 0d 0a 20 20  rMsg element..  
19360 20 20 20 20 20 20 2f 2f 2f 20 6d 61 79 20 6f 70        /// may op
19370 74 69 6f 6e 61 6c 6c 79 20 62 65 20 72 65 70 6c  tionally be repl
19380 61 63 65 64 20 77 69 74 68 20 65 72 72 6f 72 20  aced with error 
19390 6d 65 73 73 61 67 65 20 74 65 78 74 20 73 74 6f  message text sto
193a0 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0d 0a 20  red in memory.. 
193b0 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63         /// alloc
193c0 61 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65  ated from SQLite
193d0 20 75 73 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73   using functions
193e0 20 73 75 63 68 20 61 73 20 73 71 6c 69 74 65 33   such as sqlite3
193f0 5f 6d 70 72 69 6e 74 66 28 29 20 6f 72 0d 0a 20  _mprintf() or.. 
19400 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
19410 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 0d 0a 20 20  e3_malloc()...  
19420 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
19430 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
19440 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
19450 2f 2f 20 49 66 20 74 68 65 20 78 55 70 64 61 74  // If the xUpdat
19460 65 20 6d 65 74 68 6f 64 20 76 69 6f 6c 61 74 65  e method violate
19470 73 20 73 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e  s some constrain
19480 74 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  t of the virtual
19490 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
194a0 2f 2f 2f 20 28 69 6e 63 6c 75 64 69 6e 67 2c 20  /// (including, 
194b0 62 75 74 20 6e 6f 74 20 6c 69 6d 69 74 65 64 20  but not limited 
194c0 74 6f 2c 20 61 74 74 65 6d 70 74 69 6e 67 20 74  to, attempting t
194d0 6f 20 73 74 6f 72 65 20 61 20 76 61 6c 75 65 20  o store a value 
194e0 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
194f0 2f 2f 2f 20 77 72 6f 6e 67 20 64 61 74 61 74 79  /// wrong dataty
19500 70 65 2c 20 61 74 74 65 6d 70 74 69 6e 67 20 74  pe, attempting t
19510 6f 20 73 74 6f 72 65 20 61 20 76 61 6c 75 65 20  o store a value 
19520 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67  that is too larg
19530 65 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e or..        //
19540 2f 20 74 6f 6f 20 73 6d 61 6c 6c 2c 20 6f 72 20  / too small, or 
19550 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 63 68  attempting to ch
19560 61 6e 67 65 20 61 20 72 65 61 64 2d 6f 6e 6c 79  ange a read-only
19570 20 76 61 6c 75 65 29 20 74 68 65 6e 20 74 68 65   value) then the
19580 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 55  ..        /// xU
19590 70 64 61 74 65 20 6d 75 73 74 20 66 61 69 6c 20  pdate must fail 
195a0 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69  with an appropri
195b0 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 0d  ate error code..
195c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
195d0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
195e0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
195f0 20 20 2f 2f 2f 20 54 68 65 72 65 20 6d 69 67 68    /// There migh
19600 74 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t be one or more
19610 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
19620 72 73 6f 72 20 6f 62 6a 65 63 74 73 20 6f 70 65  rsor objects ope
19630 6e 20 61 6e 64 20 69 6e 0d 0a 20 20 20 20 20 20  n and in..      
19640 20 20 2f 2f 2f 20 75 73 65 20 6f 6e 20 74 68 65    /// use on the
19650 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
19660 6e 73 74 61 6e 63 65 20 61 6e 64 20 70 65 72 68  nstance and perh
19670 61 70 73 20 65 76 65 6e 20 6f 6e 20 74 68 65 20  aps even on the 
19680 72 6f 77 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  row of..        
19690 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20  /// the virtual 
196a0 74 61 62 6c 65 20 77 68 65 6e 20 74 68 65 20 78  table when the x
196b0 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 69 73  Update method is
196c0 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 0d 0a 20   invoked. The.. 
196d0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
196e0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 78 55 70  mentation of xUp
196f0 64 61 74 65 20 6d 75 73 74 20 62 65 20 70 72 65  date must be pre
19700 70 61 72 65 64 20 66 6f 72 20 61 74 74 65 6d 70  pared for attemp
19710 74 73 20 74 6f 20 64 65 6c 65 74 65 0d 0a 20 20  ts to delete..  
19720 20 20 20 20 20 20 2f 2f 2f 20 6f 72 20 6d 6f 64        /// or mod
19730 69 66 79 20 72 6f 77 73 20 6f 66 20 74 68 65 20  ify rows of the 
19740 74 61 62 6c 65 20 6f 75 74 20 66 72 6f 6d 20 6f  table out from o
19750 74 68 65 72 20 65 78 69 73 74 69 6e 67 20 63 75  ther existing cu
19760 72 73 6f 72 73 2e 20 49 66 20 74 68 65 0d 0a 20  rsors. If the.. 
19770 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75         /// virtu
19780 61 6c 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20  al table cannot 
19790 61 63 63 6f 6d 6d 6f 64 61 74 65 20 73 75 63 68  accommodate such
197a0 20 63 68 61 6e 67 65 73 2c 20 74 68 65 20 78 55   changes, the xU
197b0 70 64 61 74 65 20 6d 65 74 68 6f 64 0d 0a 20 20  pdate method..  
197c0 20 20 20 20 20 20 2f 2f 2f 20 6d 75 73 74 20 72        /// must r
197d0 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 63  eturn an error c
197e0 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
197f0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
19800 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
19810 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
19820 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 69 73  Update method is
19830 20 6f 70 74 69 6f 6e 61 6c 2e 20 49 66 20 74 68   optional. If th
19840 65 20 78 55 70 64 61 74 65 20 70 6f 69 6e 74 65  e xUpdate pointe
19850 72 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  r in the..      
19860 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 6f    /// sqlite3_mo
19870 64 75 6c 65 20 66 6f 72 20 61 20 76 69 72 74 75  dule for a virtu
19880 61 6c 20 74 61 62 6c 65 20 69 73 20 61 20 4e 55  al table is a NU
19890 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 74 68 65 6e  LL pointer, then
198a0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
198b0 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  / virtual table 
198c0 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20  is read-only... 
198d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
198e0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
198f0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
19900 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
19910 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
19920 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
19930 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
19940 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
19950 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
19960 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
19970 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
19980 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
19990 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20  me="argc">..    
199a0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
199b0 65 72 20 6f 66 20 6e 65 77 20 6f 72 20 6d 6f 64  er of new or mod
199c0 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c  ified column val
199d0 75 65 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ues contained in
199e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
199f0 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 61 72  aramref name="ar
19a00 67 76 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20  gv" />...       
19a10 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
19a20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
19a30 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a  m name="argv">..
19a40 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
19a50 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20  array of native 
19a60 70 6f 69 6e 74 65 72 73 20 74 6f 20 73 71 6c 69  pointers to sqli
19a70 74 65 33 5f 76 61 6c 75 65 20 73 74 72 75 63 74  te3_value struct
19a80 75 72 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 0d  ures containing.
19a90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
19aa0 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66 69 65 64   new or modified
19ab0 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 2c 20   column values, 
19ac0 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20  if any...       
19ad0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
19ae0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
19af0 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d  m name="rowId">.
19b00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f  .        /// Upo
19b10 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20  n success, this 
19b20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62  parameter must b
19b30 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f  e modified to co
19b40 6e 74 61 69 6e 20 74 68 65 20 75 6e 69 71 75 65  ntain the unique
19b50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
19b60 74 65 67 65 72 20 72 6f 77 20 69 64 65 6e 74 69  teger row identi
19b70 66 69 65 72 20 66 6f 72 20 74 68 65 20 72 6f 77  fier for the row
19b80 20 74 68 61 74 20 77 61 73 20 69 6e 73 65 72 74   that was insert
19b90 65 64 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20  ed, if any...   
19ba0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
19bb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
19bc0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
19bd0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
19be0 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
19bf0 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
19c00 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
19c10 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
19c20 72 43 6f 64 65 20 78 55 70 64 61 74 65 28 0d 0a  rCode xUpdate(..
19c30 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
19c40 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
19c50 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c         int argc,
19c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
19c70 74 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20  tPtr argv,..    
19c80 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67          ref long
19c90 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20   rowId..        
19ca0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
19cb0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
19d00 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
19d10 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
19d20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
19d30 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
19d40 62 65 67 69 6e 73 20 61 20 74 72 61 6e 73 61 63  begins a transac
19d50 74 69 6f 6e 20 6f 6e 20 61 20 76 69 72 74 75 61  tion on a virtua
19d60 6c 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 73  l table. This is
19d70 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20   method..       
19d80 20 2f 2f 2f 20 69 73 20 6f 70 74 69 6f 6e 61 6c   /// is optional
19d90 2e 20 54 68 65 20 78 42 65 67 69 6e 20 70 6f 69  . The xBegin poi
19da0 6e 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f  nter of sqlite3_
19db0 6d 6f 64 75 6c 65 20 6d 61 79 20 62 65 20 4e 55  module may be NU
19dc0 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  LL...        ///
19dd0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
19de0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
19df0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
19e00 65 74 68 6f 64 20 69 73 20 61 6c 77 61 79 73 20  ethod is always 
19e10 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20  followed by one 
19e20 63 61 6c 6c 20 74 6f 20 65 69 74 68 65 72 20 74  call to either t
19e30 68 65 20 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20  he xCommit or.. 
19e40 20 20 20 20 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c         /// xRoll
19e50 62 61 63 6b 20 6d 65 74 68 6f 64 2e 20 56 69 72  back method. Vir
19e60 74 75 61 6c 20 74 61 62 6c 65 20 74 72 61 6e 73  tual table trans
19e70 61 63 74 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 6e  actions do not n
19e80 65 73 74 2c 20 73 6f 20 74 68 65 0d 0a 20 20 20  est, so the..   
19e90 20 20 20 20 20 2f 2f 2f 20 78 42 65 67 69 6e 20       /// xBegin 
19ea0 6d 65 74 68 6f 64 20 77 69 6c 6c 20 6e 6f 74 20  method will not 
19eb0 62 65 20 69 6e 76 6f 6b 65 64 20 6d 6f 72 65 20  be invoked more 
19ec0 74 68 61 6e 20 6f 6e 63 65 20 6f 6e 20 61 20 73  than once on a s
19ed0 69 6e 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  ingle..        /
19ee0 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
19ef0 20 77 69 74 68 6f 75 74 20 61 6e 20 69 6e 74 65   without an inte
19f00 72 76 65 6e 69 6e 67 20 63 61 6c 6c 20 74 6f 20  rvening call to 
19f10 65 69 74 68 65 72 20 78 43 6f 6d 6d 69 74 20 6f  either xCommit o
19f20 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  r..        /// x
19f30 52 6f 6c 6c 62 61 63 6b 2e 20 4d 75 6c 74 69 70  Rollback. Multip
19f40 6c 65 20 63 61 6c 6c 73 20 74 6f 20 6f 74 68 65  le calls to othe
19f50 72 20 6d 65 74 68 6f 64 73 20 63 61 6e 20 61 6e  r methods can an
19f60 64 20 6c 69 6b 65 6c 79 20 77 69 6c 6c 0d 0a 20  d likely will.. 
19f70 20 20 20 20 20 20 20 2f 2f 2f 20 6f 63 63 75 72         /// occur
19f80 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20   in between the 
19f90 78 42 65 67 69 6e 20 61 6e 64 20 74 68 65 20 63  xBegin and the c
19fa0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 43 6f  orresponding xCo
19fb0 6d 6d 69 74 20 6f 72 0d 0a 20 20 20 20 20 20 20  mmit or..       
19fc0 20 2f 2f 2f 20 78 52 6f 6c 6c 62 61 63 6b 2e 0d   /// xRollback..
19fd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
19fe0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
19ff0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1a000 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1a010 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
1a020 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1a030 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1a040 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
1a050 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
1a060 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
1a070 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1a080 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1a090 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
1a0a0 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
1a0b0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
1a0c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
1a0d0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1a0e0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1a0f0 78 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20  xBegin(..       
1a100 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
1a110 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
1a120 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a170 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1a180 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1a190 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1a1a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1a1b0 68 69 73 20 6d 65 74 68 6f 64 20 73 69 67 6e 61  his method signa
1a1c0 6c 73 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  ls the start of 
1a1d0 61 20 74 77 6f 2d 70 68 61 73 65 20 63 6f 6d 6d  a two-phase comm
1a1e0 69 74 20 6f 6e 20 61 20 76 69 72 74 75 61 6c 0d  it on a virtual.
1a1f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62  .        /// tab
1a200 6c 65 2e 20 54 68 69 73 20 69 73 20 6d 65 74 68  le. This is meth
1a210 6f 64 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20  od is optional. 
1a220 54 68 65 20 78 53 79 6e 63 20 70 6f 69 6e 74 65  The xSync pointe
1a230 72 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  r of..        //
1a240 2f 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  / sqlite3_module
1a250 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0d 0a 20   may be NULL... 
1a260 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1a270 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1a280 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1a290 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1a2a0 69 73 20 6f 6e 6c 79 20 69 6e 76 6f 6b 65 64 20  is only invoked 
1a2b0 61 66 74 65 72 20 63 61 6c 6c 20 74 6f 20 74 68  after call to th
1a2c0 65 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20  e xBegin method 
1a2d0 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  and..        ///
1a2e0 20 70 72 69 6f 72 20 74 6f 20 61 6e 20 78 43 6f   prior to an xCo
1a2f0 6d 6d 69 74 20 6f 72 20 78 52 6f 6c 6c 62 61 63  mmit or xRollbac
1a300 6b 2e 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 69  k. In order to i
1a310 6d 70 6c 65 6d 65 6e 74 20 74 77 6f 2d 70 68 61  mplement two-pha
1a320 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  se..        /// 
1a330 63 6f 6d 6d 69 74 2c 20 74 68 65 20 78 53 79 6e  commit, the xSyn
1a340 63 20 6d 65 74 68 6f 64 20 6f 6e 20 61 6c 6c 20  c method on all 
1a350 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 69  virtual tables i
1a360 73 20 69 6e 76 6f 6b 65 64 20 70 72 69 6f 72 20  s invoked prior 
1a370 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
1a380 69 6e 76 6f 6b 69 6e 67 20 74 68 65 20 78 43 6f  invoking the xCo
1a390 6d 6d 69 74 20 6d 65 74 68 6f 64 20 6f 6e 20 61  mmit method on a
1a3a0 6e 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ny virtual table
1a3b0 2e 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 0d  . If any of the.
1a3c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 53 79  .        /// xSy
1a3d0 6e 63 20 6d 65 74 68 6f 64 73 20 66 61 69 6c 2c  nc methods fail,
1a3e0 20 74 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e   the entire tran
1a3f0 73 61 63 74 69 6f 6e 20 69 73 20 72 6f 6c 6c 65  saction is rolle
1a400 64 20 62 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20  d back...       
1a410 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
1a420 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1a430 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1a440 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
1a450 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
1a460 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
1a470 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
1a480 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
1a490 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
1a4a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1a4b0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1a4c0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1a4d0 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
1a4e0 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
1a4f0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
1a500 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1a510 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1a520 72 6f 72 43 6f 64 65 20 78 53 79 6e 63 28 0d 0a  rorCode xSync(..
1a530 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
1a540 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
1a550 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1a560 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1a570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1a5b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1a5c0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1a5d0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1a5e0 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
1a5f0 64 20 63 61 75 73 65 73 20 61 20 76 69 72 74 75  d causes a virtu
1a600 61 6c 20 74 61 62 6c 65 20 74 72 61 6e 73 61 63  al table transac
1a610 74 69 6f 6e 20 74 6f 20 63 6f 6d 6d 69 74 2e 20  tion to commit. 
1a620 54 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20  This is..       
1a630 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 69 73 20 6f   /// method is o
1a640 70 74 69 6f 6e 61 6c 2e 20 54 68 65 20 78 43 6f  ptional. The xCo
1a650 6d 6d 69 74 20 70 6f 69 6e 74 65 72 20 6f 66 20  mmit pointer of 
1a660 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d  sqlite3_module m
1a670 61 79 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  ay be..        /
1a680 2f 2f 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20  // NULL...      
1a690 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1a6a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1a6b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1a6c0 20 63 61 6c 6c 20 74 6f 20 74 68 69 73 20 6d 65   call to this me
1a6d0 74 68 6f 64 20 61 6c 77 61 79 73 20 66 6f 6c 6c  thod always foll
1a6e0 6f 77 73 20 61 20 70 72 69 6f 72 20 63 61 6c 6c  ows a prior call
1a6f0 20 74 6f 20 78 42 65 67 69 6e 20 61 6e 64 0d 0a   to xBegin and..
1a700 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 53 79 6e          /// xSyn
1a710 63 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  c...        /// 
1a720 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1a730 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1a740 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1a750 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
1a760 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1a770 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
1a780 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
1a790 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
1a7a0 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
1a7b0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1a7c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1a7d0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1a7e0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1a7f0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1a800 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1a810 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1a820 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1a830 64 65 20 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20  de xCommit(..   
1a840 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1a850 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20  pVtab..         
1a860 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
1a870 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1a880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a8b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1a8c0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1a8d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1a8e0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1a8f0 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 63  // This method c
1a900 61 75 73 65 73 20 61 20 76 69 72 74 75 61 6c 20  auses a virtual 
1a910 74 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69 6f  table transactio
1a920 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2e 20 54  n to rollback. T
1a930 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20  his is..        
1a940 2f 2f 2f 20 6d 65 74 68 6f 64 20 69 73 20 6f 70  /// method is op
1a950 74 69 6f 6e 61 6c 2e 20 54 68 65 20 78 52 6f 6c  tional. The xRol
1a960 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 20 6f 66  lback pointer of
1a970 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
1a980 6d 61 79 20 62 65 0d 0a 20 20 20 20 20 20 20 20  may be..        
1a990 2f 2f 2f 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20  /// NULL...     
1a9a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1a9b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1a9c0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1a9d0 41 20 63 61 6c 6c 20 74 6f 20 74 68 69 73 20 6d  A call to this m
1a9e0 65 74 68 6f 64 20 61 6c 77 61 79 73 20 66 6f 6c  ethod always fol
1a9f0 6c 6f 77 73 20 61 20 70 72 69 6f 72 20 63 61 6c  lows a prior cal
1aa00 6c 20 74 6f 20 78 42 65 67 69 6e 2e 0d 0a 20 20  l to xBegin...  
1aa10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1aa20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1aa30 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1aa40 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1aa50 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
1aa60 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
1aa70 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
1aa80 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
1aa90 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
1aaa0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1aab0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1aac0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1aad0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1aae0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1aaf0 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1ab00 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1ab10 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1ab20 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f  iteErrorCode xRo
1ab30 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
1ab40 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
1ab50 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
1ab60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1ab70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abb0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1abc0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1abd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1abe0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1abf0 68 69 73 20 6d 65 74 68 6f 64 20 70 72 6f 76 69  his method provi
1ac00 64 65 73 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e  des notification
1ac10 20 74 68 61 74 20 74 68 65 20 76 69 72 74 75 61   that the virtua
1ac20 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
1ac30 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
1ac40 69 6f 6e 20 74 68 61 74 20 74 68 65 20 76 69 72  ion that the vir
1ac50 74 75 61 6c 20 74 61 62 6c 65 20 77 69 6c 6c 20  tual table will 
1ac60 62 65 20 67 69 76 65 6e 20 61 20 6e 65 77 20 6e  be given a new n
1ac70 61 6d 65 2e 20 49 66 0d 0a 20 20 20 20 20 20 20  ame. If..       
1ac80 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74 68 6f 64   /// this method
1ac90 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
1aca0 4f 4b 20 74 68 65 6e 20 53 51 4c 69 74 65 20 72  OK then SQLite r
1acb0 65 6e 61 6d 65 73 20 74 68 65 20 74 61 62 6c 65  enames the table
1acc0 2e 20 49 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  . If..        //
1acd0 2f 20 74 68 69 73 20 6d 65 74 68 6f 64 20 72 65  / this method re
1ace0 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
1acf0 6f 64 65 20 74 68 65 6e 20 74 68 65 20 72 65 6e  ode then the ren
1ad00 61 6d 69 6e 67 20 69 73 20 70 72 65 76 65 6e 74  aming is prevent
1ad10 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
1ad20 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1ad30 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1ad40 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 52        /// The xR
1ad50 65 6e 61 6d 65 20 6d 65 74 68 6f 64 20 69 73 20  ename method is 
1ad60 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76 65  required for eve
1ad70 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ry virtual table
1ad80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d  ..        /// im
1ad90 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20  plementation... 
1ada0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1adb0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1adc0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1add0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1ade0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
1adf0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
1ae00 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
1ae10 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
1ae20 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
1ae30 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
1ae40 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1ae50 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1ae60 6d 65 3d 22 6e 41 72 67 22 3e 0d 0a 20 20 20 20  me="nArg">..    
1ae70 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
1ae80 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
1ae90 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  to the function 
1aea0 62 65 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20  being sought... 
1aeb0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1aec0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1aed0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e   <param name="zN
1aee0 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ame">..        /
1aef0 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
1af00 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  he function bein
1af10 67 20 73 6f 75 67 68 74 2e 0d 0a 20 20 20 20 20  g sought...     
1af20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1af30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1af40 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61  ram name="callba
1af50 63 6b 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ck">..        //
1af60 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
1af70 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
1af80 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
1af90 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a  to contain the..
1afa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 6c 65          /// dele
1afb0 67 61 74 65 20 72 65 73 70 6f 6e 73 69 62 6c 65  gate responsible
1afc0 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e   for implementin
1afd0 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
1afe0 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  function...     
1aff0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1b000 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1b010 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e  ram name="pClien
1b020 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20  tData">..       
1b030 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
1b040 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  s, this paramete
1b050 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
1b060 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
1b070 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
1b080 61 74 69 76 65 20 75 73 65 72 2d 64 61 74 61 20  ative user-data 
1b090 70 6f 69 6e 74 65 72 20 61 73 73 6f 63 69 61 74  pointer associat
1b0a0 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20  ed with..       
1b0b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e   /// <paramref n
1b0c0 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22 20 2f  ame="callback" /
1b0d0 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  >...        /// 
1b0e0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1b0f0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1b100 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
1b110 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 73 70 65  -zero if the spe
1b120 63 69 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 20  cified function 
1b130 77 61 73 20 66 6f 75 6e 64 3b 20 7a 65 72 6f 20  was found; zero 
1b140 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20  otherwise...    
1b150 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1b160 73 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  s>..        int 
1b170 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  xFindFunction(..
1b180 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
1b190 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
1b1a0 20 20 20 20 20 20 20 69 6e 74 20 6e 41 72 67 2c         int nArg,
1b1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
1b1c0 74 50 74 72 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20  tPtr zName,..   
1b1d0 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
1b1e0 69 74 65 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c  iteCallback call
1b1f0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1b200 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43     ref IntPtr pC
1b210 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20  lientData..     
1b220 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1b230 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1b240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1b280 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1b290 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1b2a0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1b2b0 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1b2c0 6f 64 20 70 72 6f 76 69 64 65 73 20 6e 6f 74 69  od provides noti
1b2d0 66 69 63 61 74 69 6f 6e 20 74 68 61 74 20 74 68  fication that th
1b2e0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  e virtual table.
1b2f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70  .        /// imp
1b300 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 61 74  lementation that
1b310 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
1b320 6c 65 20 77 69 6c 6c 20 62 65 20 67 69 76 65 6e  le will be given
1b330 20 61 20 6e 65 77 20 6e 61 6d 65 2e 20 49 66 0d   a new name. If.
1b340 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69  .        /// thi
1b350 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e 73  s method returns
1b360 20 53 51 4c 49 54 45 5f 4f 4b 20 74 68 65 6e 20   SQLITE_OK then 
1b370 53 51 4c 69 74 65 20 72 65 6e 61 6d 65 73 20 74  SQLite renames t
1b380 68 65 20 74 61 62 6c 65 2e 20 49 66 0d 0a 20 20  he table. If..  
1b390 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d        /// this m
1b3a0 65 74 68 6f 64 20 72 65 74 75 72 6e 73 20 61 6e  ethod returns an
1b3b0 20 65 72 72 6f 72 20 63 6f 64 65 20 74 68 65 6e   error code then
1b3c0 20 74 68 65 20 72 65 6e 61 6d 69 6e 67 20 69 73   the renaming is
1b3d0 20 70 72 65 76 65 6e 74 65 64 2e 0d 0a 20 20 20   prevented...   
1b3e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1b3f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1b400 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1b410 2f 20 54 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  / The xRename me
1b420 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
1b430 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
1b440 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
1b450 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
1b460 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
1b470 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1b480 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1b490 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1b4a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
1b4b0 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
1b4c0 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
1b4d0 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
1b4e0 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
1b4f0 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
1b500 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1b510 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1b520 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 65 77  param name="zNew
1b530 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1b540 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
1b550 65 72 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20  er to the UTF-8 
1b560 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 20 63  encoded string c
1b570 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6e 65  ontaining the ne
1b580 77 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  w..        /// n
1b590 61 6d 65 20 66 6f 72 20 74 68 65 20 76 69 72 74  ame for the virt
1b5a0 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
1b5b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1b5c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1b5d0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1b5e0 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1b5f0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1b600 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1b610 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1b620 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1b630 43 6f 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20  Code xRename(.. 
1b640 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1b650 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
1b660 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 65        IntPtr zNe
1b670 77 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  w..            )
1b680 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1b690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b6d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1b6e0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1b6f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1b700 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1b710 68 65 73 65 20 6d 65 74 68 6f 64 73 20 70 72 6f  hese methods pro
1b720 76 69 64 65 20 74 68 65 20 76 69 72 74 75 61 6c  vide the virtual
1b730 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
1b740 61 74 69 6f 6e 20 61 6e 0d 0a 20 20 20 20 20 20  ation an..      
1b750 20 20 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e 69 74    /// opportunit
1b760 79 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 6e  y to implement n
1b770 65 73 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f  ested transactio
1b780 6e 73 2e 20 54 68 65 79 20 61 72 65 20 61 6c 77  ns. They are alw
1b790 61 79 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ays..        ///
1b7a0 20 6f 70 74 69 6f 6e 61 6c 20 61 6e 64 20 77 69   optional and wi
1b7b0 6c 6c 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65  ll only be calle
1b7c0 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73  d in SQLite vers
1b7d0 69 6f 6e 20 33 2e 37 2e 37 20 61 6e 64 20 6c 61  ion 3.7.7 and la
1b7e0 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ter...        //
1b7f0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1b800 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1b810 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20         /// When 
1b820 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 4e 29 20  xSavepoint(X,N) 
1b830 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 61 74  is invoked, that
1b840 20 69 73 20 61 20 73 69 67 6e 61 6c 20 74 6f 20   is a signal to 
1b850 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20  the virtual..   
1b860 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 58       /// table X
1b870 20 74 68 61 74 20 69 74 20 73 68 6f 75 6c 64 20   that it should 
1b880 73 61 76 65 20 69 74 73 20 63 75 72 72 65 6e 74  save its current
1b890 20 73 74 61 74 65 20 61 73 20 73 61 76 65 70 6f   state as savepo
1b8a0 69 6e 74 20 4e 2e 20 41 0d 0a 20 20 20 20 20 20  int N. A..      
1b8b0 20 20 2f 2f 2f 20 73 75 62 73 65 71 75 65 6e 74    /// subsequent
1b8c0 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61   call to xRollba
1b8d0 63 6b 54 6f 28 58 2c 52 29 20 6d 65 61 6e 73 20  ckTo(X,R) means 
1b8e0 74 68 61 74 20 74 68 65 20 73 74 61 74 65 20 6f  that the state o
1b8f0 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
1b900 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
1b910 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 74   should return t
1b920 6f 20 77 68 61 74 20 69 74 20 77 61 73 20 77 68  o what it was wh
1b930 65 6e 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c  en xSavepoint(X,
1b940 52 29 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20  R) was..        
1b950 2f 2f 2f 20 6c 61 73 74 20 63 61 6c 6c 65 64 2e  /// last called.
1b960 20 54 68 65 20 63 61 6c 6c 20 74 6f 20 78 52 6f   The call to xRo
1b970 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20 77 69  llbackTo(X,R) wi
1b980 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6c  ll invalidate al
1b990 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  l..        /// s
1b9a0 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20 4e  avepoints with N
1b9b0 3e 52 3b 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  >R; none of the 
1b9c0 69 6e 76 61 6c 69 64 65 64 20 73 61 76 65 70 6f  invalided savepo
1b9d0 69 6e 74 73 20 77 69 6c 6c 20 62 65 0d 0a 20 20  ints will be..  
1b9e0 20 20 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64        /// rolled
1b9f0 20 62 61 63 6b 20 6f 72 20 72 65 6c 65 61 73 65   back or release
1ba00 64 20 77 69 74 68 6f 75 74 20 66 69 72 73 74 20  d without first 
1ba10 62 65 69 6e 67 20 72 65 69 6e 69 74 69 61 6c 69  being reinitiali
1ba20 7a 65 64 20 62 79 20 61 20 63 61 6c 6c 0d 0a 20  zed by a call.. 
1ba30 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78 53         /// to xS
1ba40 61 76 65 70 6f 69 6e 74 28 29 2e 20 41 20 63 61  avepoint(). A ca
1ba50 6c 6c 20 74 6f 20 78 52 65 6c 65 61 73 65 28 58  ll to xRelease(X
1ba60 2c 4d 29 20 69 6e 76 61 6c 69 64 61 74 65 73 20  ,M) invalidates 
1ba70 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 0d 0a  all savepoints..
1ba80 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68 65 72          /// wher
1ba90 65 20 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20 20 20  e N>=M...       
1baa0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
1bab0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
1bac0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ..        /// No
1bad0 6e 65 20 6f 66 20 74 68 65 20 78 53 61 76 65 70  ne of the xSavep
1bae0 6f 69 6e 74 28 29 2c 20 78 52 65 6c 65 61 73 65  oint(), xRelease
1baf0 28 29 2c 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b  (), or xRollback
1bb00 54 6f 28 29 20 6d 65 74 68 6f 64 73 20 77 69 6c  To() methods wil
1bb10 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65  l..        /// e
1bb20 76 65 72 20 62 65 20 63 61 6c 6c 65 64 20 65 78  ver be called ex
1bb30 63 65 70 74 20 69 6e 20 62 65 74 77 65 65 6e 20  cept in between 
1bb40 63 61 6c 6c 73 20 74 6f 20 78 42 65 67 69 6e 28  calls to xBegin(
1bb50 29 20 61 6e 64 20 65 69 74 68 65 72 0d 0a 20 20  ) and either..  
1bb60 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69        /// xCommi
1bb70 74 28 29 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b  t() or xRollback
1bb80 28 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ()...        ///
1bb90 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1bba0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1bbb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1bbc0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
1bbd0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1bbe0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
1bbf0 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
1bc00 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
1bc10 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
1bc20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1bc30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1bc40 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70  ram name="iSavep
1bc50 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  oint">..        
1bc60 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69  /// This is an i
1bc70 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66 69 65  nteger identifie
1bc80 72 20 75 6e 64 65 72 20 77 68 69 63 68 20 74 68  r under which th
1bc90 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  e the current st
1bca0 61 74 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ate of..        
1bcb0 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20  /// the virtual 
1bcc0 74 61 62 6c 65 20 73 68 6f 75 6c 64 20 62 65 20  table should be 
1bcd0 73 61 76 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  saved...        
1bce0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1bcf0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1bd00 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1bd10 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1bd20 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1bd30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1bd40 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1bd50 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1bd60 20 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20   xSavepoint(..  
1bd70 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1bd80 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
1bd90 20 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f       int iSavepo
1bda0 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  int..           
1bdb0 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
1bdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1be10 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1be20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1be30 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1be40 20 54 68 65 73 65 20 6d 65 74 68 6f 64 73 20 70   These methods p
1be50 72 6f 76 69 64 65 20 74 68 65 20 76 69 72 74 75  rovide the virtu
1be60 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
1be70 6e 74 61 74 69 6f 6e 20 61 6e 0d 0a 20 20 20 20  ntation an..    
1be80 20 20 20 20 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e      /// opportun
1be90 69 74 79 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  ity to implement
1bea0 20 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74   nested transact
1beb0 69 6f 6e 73 2e 20 54 68 65 79 20 61 72 65 20 61  ions. They are a
1bec0 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 2f  lways..        /
1bed0 2f 2f 20 6f 70 74 69 6f 6e 61 6c 20 61 6e 64 20  // optional and 
1bee0 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 63 61 6c  will only be cal
1bef0 6c 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65  led in SQLite ve
1bf00 72 73 69 6f 6e 20 33 2e 37 2e 37 20 61 6e 64 20  rsion 3.7.7 and 
1bf10 6c 61 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  later...        
1bf20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
1bf30 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1bf40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65  .        /// Whe
1bf50 6e 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 4e  n xSavepoint(X,N
1bf60 29 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68  ) is invoked, th
1bf70 61 74 20 69 73 20 61 20 73 69 67 6e 61 6c 20 74  at is a signal t
1bf80 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20  o the virtual.. 
1bf90 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65         /// table
1bfa0 20 58 20 74 68 61 74 20 69 74 20 73 68 6f 75 6c   X that it shoul
1bfb0 64 20 73 61 76 65 20 69 74 73 20 63 75 72 72 65  d save its curre
1bfc0 6e 74 20 73 74 61 74 65 20 61 73 20 73 61 76 65  nt state as save
1bfd0 70 6f 69 6e 74 20 4e 2e 20 41 0d 0a 20 20 20 20  point N. A..    
1bfe0 20 20 20 20 2f 2f 2f 20 73 75 62 73 65 71 75 65      /// subseque
1bff0 6e 74 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c  nt call to xRoll
1c000 62 61 63 6b 54 6f 28 58 2c 52 29 20 6d 65 61 6e  backTo(X,R) mean
1c010 73 20 74 68 61 74 20 74 68 65 20 73 74 61 74 65  s that the state
1c020 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
1c030 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62   /// virtual tab
1c040 6c 65 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e  le should return
1c050 20 74 6f 20 77 68 61 74 20 69 74 20 77 61 73 20   to what it was 
1c060 77 68 65 6e 20 78 53 61 76 65 70 6f 69 6e 74 28  when xSavepoint(
1c070 58 2c 52 29 20 77 61 73 0d 0a 20 20 20 20 20 20  X,R) was..      
1c080 20 20 2f 2f 2f 20 6c 61 73 74 20 63 61 6c 6c 65    /// last calle
1c090 64 2e 20 54 68 65 20 63 61 6c 6c 20 74 6f 20 78  d. The call to x
1c0a0 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20  RollbackTo(X,R) 
1c0b0 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20  will invalidate 
1c0c0 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  all..        ///
1c0d0 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68   savepoints with
1c0e0 20 4e 3e 52 3b 20 6e 6f 6e 65 20 6f 66 20 74 68   N>R; none of th
1c0f0 65 20 69 6e 76 61 6c 69 64 65 64 20 73 61 76 65  e invalided save
1c100 70 6f 69 6e 74 73 20 77 69 6c 6c 20 62 65 0d 0a  points will be..
1c110 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c          /// roll
1c120 65 64 20 62 61 63 6b 20 6f 72 20 72 65 6c 65 61  ed back or relea
1c130 73 65 64 20 77 69 74 68 6f 75 74 20 66 69 72 73  sed without firs
1c140 74 20 62 65 69 6e 67 20 72 65 69 6e 69 74 69 61  t being reinitia
1c150 6c 69 7a 65 64 20 62 79 20 61 20 63 61 6c 6c 0d  lized by a call.
1c160 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
1c170 78 53 61 76 65 70 6f 69 6e 74 28 29 2e 20 41 20  xSavepoint(). A 
1c180 63 61 6c 6c 20 74 6f 20 78 52 65 6c 65 61 73 65  call to xRelease
1c190 28 58 2c 4d 29 20 69 6e 76 61 6c 69 64 61 74 65  (X,M) invalidate
1c1a0 73 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73  s all savepoints
1c1b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68  ..        /// wh
1c1c0 65 72 65 20 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20  ere N>=M...     
1c1d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1c1e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1c1f0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1c200 4e 6f 6e 65 20 6f 66 20 74 68 65 20 78 53 61 76  None of the xSav
1c210 65 70 6f 69 6e 74 28 29 2c 20 78 52 65 6c 65 61  epoint(), xRelea
1c220 73 65 28 29 2c 20 6f 72 20 78 52 6f 6c 6c 62 61  se(), or xRollba
1c230 63 6b 54 6f 28 29 20 6d 65 74 68 6f 64 73 20 77  ckTo() methods w
1c240 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ill..        ///
1c250 20 65 76 65 72 20 62 65 20 63 61 6c 6c 65 64 20   ever be called 
1c260 65 78 63 65 70 74 20 69 6e 20 62 65 74 77 65 65  except in betwee
1c270 6e 20 63 61 6c 6c 73 20 74 6f 20 78 42 65 67 69  n calls to xBegi
1c280 6e 28 29 20 61 6e 64 20 65 69 74 68 65 72 0d 0a  n() and either..
1c290 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6d          /// xCom
1c2a0 6d 69 74 28 29 20 6f 72 20 78 52 6f 6c 6c 62 61  mit() or xRollba
1c2b0 63 6b 28 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ck()...        /
1c2c0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1c2d0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1c2e0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1c2f0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
1c300 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
1c310 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
1c320 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
1c330 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
1c340 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
1c350 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1c360 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1c370 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76  param name="iSav
1c380 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20  epoint">..      
1c390 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6e    /// This is an
1c3a0 20 69 6e 74 65 67 65 72 20 75 73 65 64 20 74 6f   integer used to
1c3b0 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20 61   indicate that a
1c3c0 6e 79 20 73 61 76 65 64 20 73 74 61 74 65 73 20  ny saved states 
1c3d0 77 69 74 68 20 61 6e 0d 0a 20 20 20 20 20 20 20  with an..       
1c3e0 20 2f 2f 2f 20 69 64 65 6e 74 69 66 69 65 72 20   /// identifier 
1c3f0 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1c400 65 71 75 61 6c 20 74 6f 20 74 68 69 73 20 73 68  equal to this sh
1c410 6f 75 6c 64 20 62 65 20 64 65 6c 65 74 65 64 20  ould be deleted 
1c420 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
1c430 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c  /// virtual tabl
1c440 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1c450 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1c460 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1c470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1c480 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1c490 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1c4a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1c4b0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1c4c0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 65  iteErrorCode xRe
1c4d0 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20  lease(..        
1c4e0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
1c4f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
1c500 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20  nt iSavepoint.. 
1c510 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1c520 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1c530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1c580 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1c590 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1c5a0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 73 65         /// These
1c5b0 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69 64 65   methods provide
1c5c0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
1c5d0 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
1c5e0 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n an..        //
1c5f0 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79 20 74 6f  / opportunity to
1c600 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65 73 74 65   implement neste
1c610 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  d transactions. 
1c620 54 68 65 79 20 61 72 65 20 61 6c 77 61 79 73 0d  They are always.
1c630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 74  .        /// opt
1c640 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c 6c 20 6f  ional and will o
1c650 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20 69 6e  nly be called in
1c660 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
1c670 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74 65 72 2e  3.7.7 and later.
1c680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1c690 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1c6a0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1c6b0 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78 53 61 76     /// When xSav
1c6c0 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69 73 20 69  epoint(X,N) is i
1c6d0 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20 69 73 20  nvoked, that is 
1c6e0 61 20 73 69 67 6e 61 6c 20 74 6f 20 74 68 65 20  a signal to the 
1c6f0 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20  virtual..       
1c700 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20 74 68 61   /// table X tha
1c710 74 20 69 74 20 73 68 6f 75 6c 64 20 73 61 76 65  t it should save
1c720 20 69 74 73 20 63 75 72 72 65 6e 74 20 73 74 61   its current sta
1c730 74 65 20 61 73 20 73 61 76 65 70 6f 69 6e 74 20  te as savepoint 
1c740 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20 20 2f 2f  N. A..        //
1c750 2f 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  / subsequent cal
1c760 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  l to xRollbackTo
1c770 28 58 2c 52 29 20 6d 65 61 6e 73 20 74 68 61 74  (X,R) means that
1c780 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
1c790 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
1c7a0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 68 6f  irtual table sho
1c7b0 75 6c 64 20 72 65 74 75 72 6e 20 74 6f 20 77 68  uld return to wh
1c7c0 61 74 20 69 74 20 77 61 73 20 77 68 65 6e 20 78  at it was when x
1c7d0 53 61 76 65 70 6f 69 6e 74 28 58 2c 52 29 20 77  Savepoint(X,R) w
1c7e0 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  as..        /// 
1c7f0 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20 54 68 65  last called. The
1c800 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61   call to xRollba
1c810 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c 6c 20 69  ckTo(X,R) will i
1c820 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 0d 0a 20  nvalidate all.. 
1c830 20 20 20 20 20 20 20 2f 2f 2f 20 73 61 76 65 70         /// savep
1c840 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e 52 3b 20  oints with N>R; 
1c850 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 76 61  none of the inva
1c860 6c 69 64 65 64 20 73 61 76 65 70 6f 69 6e 74 73  lided savepoints
1c870 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..      
1c880 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62 61 63    /// rolled bac
1c890 6b 20 6f 72 20 72 65 6c 65 61 73 65 64 20 77 69  k or released wi
1c8a0 74 68 6f 75 74 20 66 69 72 73 74 20 62 65 69 6e  thout first bein
1c8b0 67 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 64 20  g reinitialized 
1c8c0 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20 20 20 20  by a call..     
1c8d0 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61 76 65 70     /// to xSavep
1c8e0 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c 6c 20 74  oint(). A call t
1c8f0 6f 20 78 52 65 6c 65 61 73 65 28 58 2c 4d 29 20  o xRelease(X,M) 
1c900 69 6e 76 61 6c 69 64 61 74 65 73 20 61 6c 6c 20  invalidates all 
1c910 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20 20 20 20  savepoints..    
1c920 20 20 20 20 2f 2f 2f 20 77 68 65 72 65 20 4e 3e      /// where N>
1c930 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  =M...        ///
1c940 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1c950 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1c960 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f        /// None o
1c970 66 20 74 68 65 20 78 53 61 76 65 70 6f 69 6e 74  f the xSavepoint
1c980 28 29 2c 20 78 52 65 6c 65 61 73 65 28 29 2c 20  (), xRelease(), 
1c990 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 29  or xRollbackTo()
1c9a0 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 0d 0a 20   methods will.. 
1c9b0 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65 72 20         /// ever 
1c9c0 62 65 20 63 61 6c 6c 65 64 20 65 78 63 65 70 74  be called except
1c9d0 20 69 6e 20 62 65 74 77 65 65 6e 20 63 61 6c 6c   in between call
1c9e0 73 20 74 6f 20 78 42 65 67 69 6e 28 29 20 61 6e  s to xBegin() an
1c9f0 64 20 65 69 74 68 65 72 0d 0a 20 20 20 20 20 20  d either..      
1ca00 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28 29 20    /// xCommit() 
1ca10 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d  or xRollback()..
1ca20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1ca30 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1ca40 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1ca50 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1ca60 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
1ca70 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1ca80 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1ca90 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
1caa0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
1cab0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
1cac0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1cad0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1cae0 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74  name="iSavepoint
1caf0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1cb00 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67  This is an integ
1cb10 65 72 20 69 64 65 6e 74 69 66 69 65 72 20 75 73  er identifier us
1cb20 65 64 20 74 6f 20 73 70 65 63 69 66 79 20 61 20  ed to specify a 
1cb30 73 70 65 63 69 66 69 63 20 73 61 76 65 64 0d 0a  specific saved..
1cb40 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74          /// stat
1cb50 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
1cb60 6c 20 74 61 62 6c 65 20 66 6f 72 20 69 74 20 74  l table for it t
1cb70 6f 20 72 65 73 74 6f 72 65 20 69 74 73 65 6c 66  o restore itself
1cb80 20 62 61 63 6b 20 74 6f 2c 20 77 68 69 63 68 0d   back to, which.
1cb90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f  .        /// sho
1cba0 75 6c 64 20 61 6c 73 6f 20 68 61 76 65 20 74 68  uld also have th
1cbb0 65 20 65 66 66 65 63 74 20 6f 66 20 64 65 6c 65  e effect of dele
1cbc0 74 69 6e 67 20 61 6c 6c 20 73 61 76 65 64 20 73  ting all saved s
1cbd0 74 61 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20  tates with an.. 
1cbe0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67         /// integ
1cbf0 65 72 20 69 64 65 6e 74 69 66 69 65 72 20 67 72  er identifier gr
1cc00 65 61 74 65 72 20 74 68 61 6e 20 74 68 69 73 20  eater than this 
1cc10 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  one...        //
1cc20 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1cc30 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1cc40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1cc50 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1cc60 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1cc70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1cc80 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1cc90 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
1cca0 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20  RollbackTo(..   
1ccb0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1ccc0 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
1ccd0 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69      int iSavepoi
1cce0 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
1ccf0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  );..    }..    #
1cd00 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1cd10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1cd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1cd60 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
1cd70 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
1cd80 20 49 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20   Interface..    
1cd90 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1cda0 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65     /// This inte
1cdb0 72 66 61 63 65 20 72 65 70 72 65 73 65 6e 74 73  rface represents
1cdc0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
1cdd0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1cde0 77 72 69 74 74 65 6e 20 69 6e 0d 0a 20 20 20 20  written in..    
1cdf0 2f 2f 2f 20 6d 61 6e 61 67 65 64 20 63 6f 64 65  /// managed code
1ce00 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1ce10 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
1ce20 63 20 69 6e 74 65 72 66 61 63 65 20 49 53 51 4c  c interface ISQL
1ce30 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
1ce40 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1ce50 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1ce60 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75          /// Retu
1ce70 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20  rns non-zero if 
1ce80 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 74  the schema for t
1ce90 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
1cea0 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20   has been..     
1ceb0 20 20 20 2f 2f 2f 20 64 65 63 6c 61 72 65 64 2e     /// declared.
1cec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1ced0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1cee0 20 20 62 6f 6f 6c 20 44 65 63 6c 61 72 65 64 20    bool Declared 
1cef0 7b 20 67 65 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20  { get; }....    
1cf00 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1cf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1cf50 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1cf60 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1cf70 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 61  / Returns the na
1cf80 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  me of the module
1cf90 20 61 73 20 69 74 20 77 61 73 20 72 65 67 69 73   as it was regis
1cfa0 74 65 72 65 64 20 77 69 74 68 20 74 68 65 20 53  tered with the S
1cfb0 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 2f  QLite..        /
1cfc0 2f 2f 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  // core library.
1cfd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1cfe0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1cff0 20 20 73 74 72 69 6e 67 20 4e 61 6d 65 20 7b 20    string Name { 
1d000 67 65 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20  get; }....      
1d010 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d050 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1d060 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1d070 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1d080 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1d090 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1d0a0 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1d0b0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1d0c0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1d0d0 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e  dule.xCreate" />
1d0e0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
1d0f0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1d100 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1d110 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65  aram name="conne
1d120 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20 20  ction">..       
1d130 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1d140 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ef="SQLiteConnec
1d150 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tion" /> object 
1d160 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
1d170 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20  ted with..      
1d180 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61    /// the virtua
1d190 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
1d1a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1d1b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1d1c0 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74  am name="pClient
1d1d0 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20  Data">..        
1d1e0 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 75  /// The native u
1d1f0 73 65 72 2d 64 61 74 61 20 70 6f 69 6e 74 65 72  ser-data pointer
1d200 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1d210 20 74 68 69 73 20 6d 6f 64 75 6c 65 2c 20 61 73   this module, as
1d220 20 69 74 20 77 61 73 0d 0a 20 20 20 20 20 20 20   it was..       
1d230 20 2f 2f 2f 20 70 72 6f 76 69 64 65 64 20 74 6f   /// provided to
1d240 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
1d250 20 6c 69 62 72 61 72 79 20 77 68 65 6e 20 74 68   library when th
1d260 65 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 20  e native module 
1d270 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20  instance..      
1d280 20 20 2f 2f 2f 20 77 61 73 20 63 72 65 61 74 65    /// was create
1d290 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1d2a0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1d2b0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1d2c0 65 3d 22 61 72 67 75 6d 65 6e 74 73 22 3e 0d 0a  e="arguments">..
1d2d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1d2e0 6d 6f 64 75 6c 65 20 6e 61 6d 65 2c 20 64 61 74  module name, dat
1d2f0 61 62 61 73 65 20 6e 61 6d 65 2c 20 76 69 72 74  abase name, virt
1d300 75 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20  ual table name, 
1d310 61 6e 64 20 61 6c 6c 20 6f 74 68 65 72 0d 0a 20  and all other.. 
1d320 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d         /// argum
1d330 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
1d340 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41  he CREATE VIRTUA
1d350 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
1d360 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
1d370 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1d380 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1d390 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
1d3a0 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
1d3b0 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d  cess, this param
1d3c0 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
1d3d0 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  ified to contain
1d3e0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1d3f0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
1d400 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
1d410 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
1d420 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  nce associated w
1d430 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ith..        ///
1d440 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
1d450 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
1d460 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1d470 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1d480 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
1d490 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61       /// Upon fa
1d4a0 69 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72 61  ilure, this para
1d4b0 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
1d4c0 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
1d4d0 6e 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20  n an error..    
1d4e0 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2e      /// message.
1d4f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d500 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1d510 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1d520 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1d530 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1d540 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1d550 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1d560 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1d570 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74  eErrorCode Creat
1d580 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1d590 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1d5a0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a   connection,  /*
1d5b0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1d5c0 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65      IntPtr pClie
1d5d0 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20 20  ntData,         
1d5e0 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1d5f0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
1d600 20 61 72 67 75 6d 65 6e 74 73 2c 20 20 20 20 20   arguments,     
1d610 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
1d620 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1d630 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1d640 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 6f 75 74  le table, /* out
1d650 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1d660 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
1d670 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r              /
1d680 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  * out */..      
1d690 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1d6a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d6f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1d700 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1d710 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
1d720 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
1d730 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
1d740 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1d750 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
1d760 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
1d770 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
1d780 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
1d790 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1d7a0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
1d7b0 6e 6e 65 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20  nnection">..    
1d7c0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
1d7d0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e   cref="SQLiteCon
1d7e0 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65  nection" /> obje
1d7f0 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
1d800 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20  ciated with..   
1d810 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72       /// the vir
1d820 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
1d830 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1d840 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1d850 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69  param name="pCli
1d860 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20  entData">..     
1d870 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
1d880 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f 69 6e  e user-data poin
1d890 74 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ter associated w
1d8a0 69 74 68 20 74 68 69 73 20 6d 6f 64 75 6c 65 2c  ith this module,
1d8b0 20 61 73 20 69 74 20 77 61 73 0d 0a 20 20 20 20   as it was..    
1d8c0 20 20 20 20 2f 2f 2f 20 70 72 6f 76 69 64 65 64      /// provided
1d8d0 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63   to the SQLite c
1d8e0 6f 72 65 20 6c 69 62 72 61 72 79 20 77 68 65 6e  ore library when
1d8f0 20 74 68 65 20 6e 61 74 69 76 65 20 6d 6f 64 75   the native modu
1d900 6c 65 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20  le instance..   
1d910 20 20 20 20 20 2f 2f 2f 20 77 61 73 20 63 72 65       /// was cre
1d920 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ated...        /
1d930 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1d940 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1d950 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 73 22  name="arguments"
1d960 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1d970 68 65 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 2c 20  he module name, 
1d980 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 76  database name, v
1d990 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6e 61 6d  irtual table nam
1d9a0 65 2c 20 61 6e 64 20 61 6c 6c 20 6f 74 68 65 72  e, and all other
1d9b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72  ..        /// ar
1d9c0 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74  guments passed t
1d9d0 6f 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  o the CREATE VIR
1d9e0 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
1d9f0 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ment...        /
1da00 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1da10 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1da20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20  name="table">.. 
1da30 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
1da40 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
1da50 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
1da60 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74  modified to cont
1da70 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ain the..       
1da80 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
1da90 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1daa0 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
1dab0 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
1dac0 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  d with..        
1dad0 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20  /// the virtual 
1dae0 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1daf0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1db00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1db10 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a   name="error">..
1db20 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
1db30 20 66 61 69 6c 75 72 65 2c 20 74 68 69 73 20 70   failure, this p
1db40 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65  arameter must be
1db50 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e   modified to con
1db60 74 61 69 6e 20 61 6e 20 65 72 72 6f 72 0d 0a 20  tain an error.. 
1db70 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61         /// messa
1db80 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ge...        ///
1db90 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1dba0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1dbb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
1dbc0 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
1dbd0 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
1dbe0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
1dbf0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
1dc00 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f  LiteErrorCode Co
1dc10 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
1dc20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
1dc30 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c  tion connection,
1dc40 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1dc50 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1dc60 43 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20  ClientData,     
1dc70 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1dc90 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 2c 20  ng[] arguments, 
1dca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
1dcb0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1dcc0 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61  ref SQLiteVirtua
1dcd0 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
1dce0 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20   out */..       
1dcf0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1dd00 65 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 20  error           
1dd10 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
1dd20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
1dd30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1dd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1dd80 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1dd90 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1dda0 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
1ddb0 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
1ddc0 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
1ddd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
1dde0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
1ddf0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74  tiveModule.xBest
1de00 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
1de10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1de20 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1de30 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1de40 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
1de50 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1de60 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
1de70 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
1de80 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
1de90 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
1dea0 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
1deb0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
1dec0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1ded0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1dee0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1def0 69 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20  index">..       
1df00 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1df10 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22  ef="SQLiteIndex"
1df20 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
1df30 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61  nce containing a
1df40 6c 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ll the..        
1df50 2f 2f 2f 20 64 61 74 61 20 66 6f 72 20 74 68 65  /// data for the
1df60 20 69 6e 70 75 74 73 20 61 6e 64 20 6f 75 74 70   inputs and outp
1df70 75 74 73 20 72 65 6c 61 74 69 6e 67 20 74 6f 20  uts relating to 
1df80 69 6e 64 65 78 20 73 65 6c 65 63 74 69 6f 6e 2e  index selection.
1df90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1dfa0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1dfb0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1dfc0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1dfd0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1dfe0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1dff0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1e000 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1e010 65 45 72 72 6f 72 43 6f 64 65 20 42 65 73 74 49  eErrorCode BestI
1e020 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
1e030 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
1e040 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20  Table table, /* 
1e050 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
1e060 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69     SQLiteIndex i
1e070 6e 64 65 78 20 20 20 20 20 20 20 20 20 2f 2a 20  ndex         /* 
1e080 69 6e 2c 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20  in, out */..    
1e090 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
1e0a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e0f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1e100 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1e110 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1e120 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
1e130 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
1e140 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
1e150 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
1e160 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e  veModule.xDiscon
1e170 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
1e180 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e190 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1e1a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1e1b0 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
1e1c0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
1e1d0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
1e1e0 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
1e1f0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
1e200 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
1e210 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
1e220 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1e230 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1e240 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1e250 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1e260 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1e270 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1e280 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1e290 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1e2a0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1e2b0 72 72 6f 72 43 6f 64 65 20 44 69 73 63 6f 6e 6e  rrorCode Disconn
1e2c0 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
1e2d0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1e2e0 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e  able table /* in
1e2f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1e300 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
1e310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e350 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1e360 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1e370 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
1e380 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
1e390 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
1e3a0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
1e3b0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
1e3c0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
1e3d0 65 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d  e.xDestroy" /> m
1e3e0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
1e3f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1e400 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1e410 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
1e420 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1e430 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
1e440 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
1e450 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
1e460 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
1e470 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
1e480 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
1e490 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
1e4a0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1e4b0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1e4c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1e4d0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1e4e0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1e4f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1e500 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1e510 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44  QLiteErrorCode D
1e520 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20  estroy(..       
1e530 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
1e540 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a  alTable table /*
1e550 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1e560 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1e570 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e5c0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1e5d0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1e5e0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1e5f0 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1e600 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1e610 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1e620 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1e630 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d  dule.xOpen" /> m
1e640 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
1e650 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1e660 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1e670 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
1e680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1e690 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
1e6a0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
1e6b0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
1e6c0 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
1e6d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
1e6e0 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
1e6f0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
1e700 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1e710 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1e720 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20  ame="cursor">.. 
1e730 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
1e740 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
1e750 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
1e760 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74  modified to cont
1e770 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ain the..       
1e780 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
1e790 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1e7a0 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a  leCursor" /> obj
1e7b0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
1e7c0 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
1e7d0 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 6e 65   /// with the ne
1e7e0 77 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75  wly opened virtu
1e7f0 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e  al table cursor.
1e800 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e810 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1e820 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1e830 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1e840 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1e850 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1e860 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1e870 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1e880 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28  eErrorCode Open(
1e890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1e8a0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1e8b0 20 74 61 62 6c 65 2c 20 20 20 20 20 20 20 20 20   table,         
1e8c0 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1e8d0 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69          ref SQLi
1e8e0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
1e8f0 72 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 6f  rsor cursor /* o
1e900 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
1e910 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
1e920 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1e930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e960 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e970 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1e980 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1e990 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
1e9a0 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65  lled in response
1e9b0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
1e9c0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
1e9d0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
1e9e0 75 6c 65 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d  ule.xClose" /> m
1e9f0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
1ea00 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1ea10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1ea20 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22  am name="cursor"
1ea30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1ea40 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
1ea50 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1ea60 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63  Cursor" /> objec
1ea70 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20  t instance..    
1ea80 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
1ea90 65 64 20 77 69 74 68 20 74 68 65 20 70 72 65 76  ed with the prev
1eaa0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69  iously opened vi
1eab0 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73  rtual table curs
1eac0 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20  or to be..      
1ead0 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20    /// used...   
1eae0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1eaf0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1eb00 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1eb10 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
1eb20 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
1eb30 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
1eb40 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
1eb50 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1eb60 72 43 6f 64 65 20 43 6c 6f 73 65 28 0d 0a 20 20  rCode Close(..  
1eb70 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1eb80 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1eb90 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 69 6e 20  or cursor /* in 
1eba0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1ebb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec00 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ec10 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1ec20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1ec30 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1ec40 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1ec50 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1ec60 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1ec70 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1ec80 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74  .xFilter" /> met
1ec90 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1eca0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1ecb0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1ecc0 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d   name="cursor">.
1ecd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1ece0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1ecf0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
1ed00 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
1ed10 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20  instance..      
1ed20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
1ed30 20 77 69 74 68 20 74 68 65 20 70 72 65 76 69 6f   with the previo
1ed40 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74  usly opened virt
1ed50 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
1ed60 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
1ed70 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20  /// used...     
1ed80 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1ed90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1eda0 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 4e  ram name="indexN
1edb0 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20 20 20 20  umber">..       
1edc0 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65 64   /// Number used
1edd0 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
1ede0 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
1edf0 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
1ee00 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1ee10 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1ee20 6e 61 6d 65 3d 22 69 6e 64 65 78 53 74 72 69 6e  name="indexStrin
1ee30 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  g">..        ///
1ee40 20 53 74 72 69 6e 67 20 75 73 65 64 20 74 6f 20   String used to 
1ee50 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
1ee60 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
1ee70 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ee80 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1ee90 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1eea0 3d 22 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20  ="values">..    
1eeb0 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75      /// The valu
1eec0 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
1eed0 20 74 6f 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   to each column 
1eee0 69 6e 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  in the selected 
1eef0 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
1ef00 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1ef10 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1ef20 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1ef30 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1ef40 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1ef50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1ef60 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1ef70 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1ef80 20 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20   Filter(..      
1ef90 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1efa0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
1efb0 75 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d  ursor, /* in */.
1efc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
1efd0 20 69 6e 64 65 78 4e 75 6d 62 65 72 2c 20 20 20   indexNumber,   
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1eff0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1f000 20 20 20 20 73 74 72 69 6e 67 20 69 6e 64 65 78      string index
1f010 53 74 72 69 6e 67 2c 20 20 20 20 20 20 20 20 20  String,         
1f020 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
1f030 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1f040 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73 20  eValue[] values 
1f050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
1f060 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1f070 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1f080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f0d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1f0e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1f0f0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
1f100 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
1f110 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1f120 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
1f130 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
1f140 6c 65 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74  le.xNext" /> met
1f150 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1f160 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1f170 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1f180 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d   name="cursor">.
1f190 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1f1a0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1f1b0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
1f1c0 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
1f1d0 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20  instance..      
1f1e0 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
1f1f0 20 77 69 74 68 20 74 68 65 20 70 72 65 76 69 6f   with the previo
1f200 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74  usly opened virt
1f210 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
1f220 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
1f230 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20  /// used...     
1f240 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1f250 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
1f260 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1f270 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
1f280 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
1f290 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1f2a0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1f2b0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1f2c0 6f 64 65 20 4e 65 78 74 28 0d 0a 20 20 20 20 20  ode Next(..     
1f2d0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
1f2e0 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
1f2f0 63 75 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d  cursor /* in */.
1f300 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1f310 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f360 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1f370 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1f380 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1f390 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
1f3a0 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
1f3b0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1f3c0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
1f3d0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45  eNativeModule.xE
1f3e0 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  of" /> method...
1f3f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1f400 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1f410 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1f420 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
1f430 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
1f440 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
1f450 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
1f460 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1f470 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
1f480 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1f490 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  the previously o
1f4a0 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61  pened virtual ta
1f4b0 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65  ble cursor to be
1f4c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73  ..        /// us
1f4d0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
1f4e0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1f4f0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1f500 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ..        /// No
1f510 6e 2d 7a 65 72 6f 20 69 66 20 6e 6f 20 6d 6f 72  n-zero if no mor
1f520 65 20 72 6f 77 73 20 61 72 65 20 61 76 61 69 6c  e rows are avail
1f530 61 62 6c 65 3b 20 7a 65 72 6f 20 6f 74 68 65 72  able; zero other
1f540 77 69 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  wise...        /
1f550 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1f560 20 20 20 20 20 20 20 62 6f 6f 6c 20 45 6f 66 28         bool Eof(
1f570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1f580 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1f590 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a  Cursor cursor /*
1f5a0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1f5b0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1f5c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f600 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f610 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1f620 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1f630 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1f640 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1f650 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1f660 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1f670 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1f680 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e  dule.xColumn" />
1f690 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
1f6a0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1f6b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1f6c0 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f  aram name="curso
1f6d0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
1f6e0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1f6f0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1f700 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a  leCursor" /> obj
1f710 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20  ect instance..  
1f720 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69        /// associ
1f730 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 72  ated with the pr
1f740 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
1f750 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
1f760 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20 20  rsor to be..    
1f770 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20      /// used... 
1f780 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1f790 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1f7a0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
1f7b0 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20  ntext">..       
1f7c0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1f7d0 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 74 65 78  ef="SQLiteContex
1f7e0 74 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  t" /> object ins
1f7f0 74 61 6e 63 65 20 74 6f 20 62 65 20 75 73 65 64  tance to be used
1f800 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f   for..        //
1f810 2f 20 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20  / returning the 
1f820 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
1f830 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20 53 51   value to the SQ
1f840 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
1f850 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
1f860 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1f870 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1f880 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20 20 20  e="index">..    
1f890 20 20 20 20 2f 2f 2f 20 54 68 65 20 7a 65 72 6f      /// The zero
1f8a0 2d 62 61 73 65 64 20 69 6e 64 65 78 20 63 6f 72  -based index cor
1f8b0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68  responding to th
1f8c0 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  e column contain
1f8d0 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
1f8e0 20 2f 2f 2f 20 76 61 6c 75 65 20 74 6f 20 62 65   /// value to be
1f8f0 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20   returned...    
1f900 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1f910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1f920 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1f930 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1f940 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1f950 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1f960 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1f970 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1f980 43 6f 64 65 20 43 6f 6c 75 6d 6e 28 0d 0a 20 20  Code Column(..  
1f990 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1f9a0 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1f9b0 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a 20 69 6e  or cursor, /* in
1f9c0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1f9d0 20 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 20 63   SQLiteContext c
1f9e0 6f 6e 74 65 78 74 2c 20 20 20 20 20 20 20 20 20  ontext,         
1f9f0 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1fa00 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
1fa10 78 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x               
1fa20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
1fa30 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
1fa40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1fa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1faa0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1fab0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1fac0 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
1fad0 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
1fae0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1faf0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
1fb00 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
1fb10 78 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f  xRowId" /> metho
1fb20 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1fb30 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1fb40 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1fb50 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20  ame="cursor">.. 
1fb60 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1fb70 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1fb80 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1fb90 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  or" /> object in
1fba0 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
1fbb0 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
1fbc0 69 74 68 20 74 68 65 20 70 72 65 76 69 6f 75 73  ith the previous
1fbd0 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61  ly opened virtua
1fbe0 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74  l table cursor t
1fbf0 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o be..        //
1fc00 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  / used...       
1fc10 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1fc20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1fc30 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d  m name="rowId">.
1fc40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f  .        /// Upo
1fc50 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20  n success, this 
1fc60 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62  parameter must b
1fc70 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f  e modified to co
1fc80 6e 74 61 69 6e 20 74 68 65 20 75 6e 69 71 75 65  ntain the unique
1fc90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
1fca0 74 65 67 65 72 20 72 6f 77 20 69 64 65 6e 74 69  teger row identi
1fcb0 66 69 65 72 20 66 6f 72 20 74 68 65 20 63 75 72  fier for the cur
1fcc0 72 65 6e 74 20 72 6f 77 20 66 6f 72 20 74 68 65  rent row for the
1fcd0 20 73 70 65 63 69 66 69 65 64 20 63 75 72 73 6f   specified curso
1fce0 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
1fcf0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1fd00 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1fd10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1fd20 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1fd30 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1fd40 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1fd50 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1fd60 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 77  iteErrorCode Row
1fd70 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id(..           
1fd80 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
1fd90 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
1fda0 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
1fdb0 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67          ref long
1fdc0 20 72 6f 77 49 64 20 20 20 20 20 20 20 20 20 20   rowId          
1fdd0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20           /* out 
1fde0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1fdf0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1fe00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe40 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fe50 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1fe60 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1fe70 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1fe80 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1fe90 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1fea0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1feb0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1fec0 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74  .xUpdate" /> met
1fed0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1fee0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1fef0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1ff00 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a   name="table">..
1ff10 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1ff20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
1ff30 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
1ff40 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1ff50 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
1ff60 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
1ff70 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c  his virtual tabl
1ff80 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1ff90 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1ffa0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1ffb0 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20  e="values">..   
1ffc0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72       /// The arr
1ffd0 61 79 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d  ay of <see cref=
1ffe0 22 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e  "SQLiteValue" />
1fff0 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
20000 73 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20  s containing..  
20010 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6e 65        /// the ne
20020 77 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 63 6f  w or modified co
20030 6c 75 6d 6e 20 76 61 6c 75 65 73 2c 20 69 66 20  lumn values, if 
20040 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  any...        //
20050 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
20060 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
20070 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20  ame="rowId">..  
20080 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73        /// Upon s
20090 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72  uccess, this par
200a0 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d  ameter must be m
200b0 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61  odified to conta
200c0 69 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20  in the unique.. 
200d0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67         /// integ
200e0 65 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65  er row identifie
200f0 72 20 66 6f 72 20 74 68 65 20 72 6f 77 20 74 68  r for the row th
20100 61 74 20 77 61 73 20 69 6e 73 65 72 74 65 64 2c  at was inserted,
20110 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20   if any...      
20120 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
20130 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
20140 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
20150 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
20160 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
20170 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20180 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
20190 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
201a0 64 65 20 55 70 64 61 74 65 28 0d 0a 20 20 20 20  de Update(..    
201b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
201c0 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
201d0 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
201e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61          SQLiteVa
201f0 6c 75 65 5b 5d 20 76 61 6c 75 65 73 2c 20 20 20  lue[] values,   
20200 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
20210 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67          ref long
20220 20 72 6f 77 49 64 20 20 20 20 20 20 20 20 20 20   rowId          
20230 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20    /* out */..   
20240 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
20250 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
202a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
202b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
202c0 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
202d0 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
202e0 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
202f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
20300 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
20310 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e  iveModule.xBegin
20320 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
20330 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
20340 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
20350 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
20360 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
20370 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
20380 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
20390 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
203a0 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
203b0 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
203c0 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74  / with this virt
203d0 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
203e0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
203f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
20400 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
20410 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
20420 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
20430 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
20440 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
20450 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
20460 43 6f 64 65 20 42 65 67 69 6e 28 0d 0a 20 20 20  Code Begin(..   
20470 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
20480 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
20490 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  e /* in */..    
204a0 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
204b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
204c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20500 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
20510 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
20520 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
20530 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
20540 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
20550 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
20560 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
20570 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20  veModule.xSync" 
20580 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
20590 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
205a0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
205b0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
205c0 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
205d0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
205e0 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
205f0 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
20600 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
20610 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
20620 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61  with this virtua
20630 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
20640 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
20650 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
20660 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
20670 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
20680 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
20690 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
206a0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
206b0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
206c0 64 65 20 53 79 6e 63 28 0d 0a 20 20 20 20 20 20  de Sync(..      
206d0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
206e0 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f  ualTable table /
206f0 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
20700 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
20710 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20760 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
20770 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
20780 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
20790 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
207a0 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
207b0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
207c0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
207d0 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f  odule.xCommit" /
207e0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
207f0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
20800 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
20810 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
20820 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
20830 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
20840 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
20850 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
20860 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
20870 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
20880 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c  ith this virtual
20890 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
208a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
208b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
208c0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
208d0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
208e0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
208f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
20900 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
20910 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
20920 65 20 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20  e Commit(..     
20930 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
20940 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20  tualTable table 
20950 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
20960 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
20970 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
209c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
209d0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
209e0 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
209f0 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
20a00 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
20a10 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
20a20 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
20a30 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
20a40 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
20a50 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
20a60 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
20a70 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
20a80 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
20a90 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
20aa0 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
20ab0 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
20ac0 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
20ad0 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
20ae0 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74  / with this virt
20af0 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
20b00 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
20b10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
20b20 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
20b30 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
20b40 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
20b50 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
20b60 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
20b70 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
20b80 43 6f 64 65 20 52 6f 6c 6c 62 61 63 6b 28 0d 0a  Code Rollback(..
20b90 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
20ba0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
20bb0 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  able /* in */.. 
20bc0 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
20bd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
20be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
20c30 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
20c40 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
20c50 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20  od is called in 
20c60 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d  response to the.
20c70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
20c80 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
20c90 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
20ca0 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65  dFunction" /> me
20cb0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
20cc0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
20cd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
20ce0 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d  m name="table">.
20cf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
20d00 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
20d10 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
20d20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
20d30 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  ce associated.. 
20d40 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20         /// with 
20d50 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62  this virtual tab
20d60 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
20d70 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
20d80 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
20d90 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e  me="argumentCoun
20da0 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
20db0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   The number of a
20dc0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
20dd0 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 73  function being s
20de0 6f 75 67 68 74 2e 0d 0a 20 20 20 20 20 20 20 20  ought...        
20df0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
20e00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
20e10 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20   name="name">.. 
20e20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
20e30 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
20e40 69 6f 6e 20 62 65 69 6e 67 20 73 6f 75 67 68 74  ion being sought
20e50 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20e60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
20e70 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
20e80 3d 22 66 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20  ="function">..  
20e90 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73        /// Upon s
20ea0 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72  uccess, this par
20eb0 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d  ameter must be m
20ec0 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61  odified to conta
20ed0 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..        
20ee0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
20ef0 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f  QLiteFunction" /
20f00 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
20f10 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  e responsible fo
20f20 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  r..        /// i
20f30 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20  mplementing the 
20f40 73 70 65 63 69 66 69 65 64 20 66 75 6e 63 74 69  specified functi
20f50 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
20f60 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
20f70 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
20f80 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74 61 22  me="pClientData"
20f90 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
20fa0 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
20fb0 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
20fc0 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
20fd0 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20  contain the..   
20fe0 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20       /// native 
20ff0 75 73 65 72 2d 64 61 74 61 20 70 6f 69 6e 74 65  user-data pointe
21000 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
21010 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  h..        /// <
21020 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 66  paramref name="f
21030 75 6e 63 74 69 6f 6e 22 20 2f 3e 2e 0d 0a 20 20  unction" />...  
21040 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
21050 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
21060 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
21070 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
21080 69 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  if the specified
21090 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 66 6f   function was fo
210a0 75 6e 64 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77  und; zero otherw
210b0 69 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ise...        //
210c0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
210d0 20 20 20 20 20 20 62 6f 6f 6c 20 46 69 6e 64 46        bool FindF
210e0 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
210f0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
21100 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20  ualTable table, 
21110 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
21120 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
21130 75 6d 65 6e 74 43 6f 75 6e 74 2c 20 20 20 20 20  umentCount,     
21140 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
21150 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
21160 6e 67 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20  ng name,        
21170 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
21180 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
21190 65 66 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ef SQLiteFunctio
211a0 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 2f 2a 20 6f  n function, /* o
211b0 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
211c0 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43     ref IntPtr pC
211d0 6c 69 65 6e 74 44 61 74 61 20 20 20 20 20 20 20  lientData       
211e0 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  /* out */..     
211f0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
21200 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21250 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
21260 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
21270 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
21280 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
21290 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
212a0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
212b0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
212c0 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22  eModule.xRename"
212d0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
212e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
212f0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
21300 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61   <param name="ta
21310 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
21320 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
21330 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
21340 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
21350 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
21360 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
21370 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75   with this virtu
21380 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
21390 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
213a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
213b0 72 61 6d 20 6e 61 6d 65 3d 22 6e 65 77 4e 61 6d  ram name="newNam
213c0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
213d0 20 54 68 65 20 6e 65 77 20 6e 61 6d 65 20 66 6f   The new name fo
213e0 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  r the virtual ta
213f0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
21400 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
21410 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
21420 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
21430 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
21440 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
21450 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
21460 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
21470 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52  QLiteErrorCode R
21480 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  ename(..        
21490 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
214a0 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
214b0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
214c0 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 4e 61      string newNa
214d0 6d 65 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  me            /*
214e0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
214f0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
21500 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21540 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21550 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
21560 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
21570 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
21580 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
21590 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
215a0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
215b0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
215c0 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 22  dule.xSavepoint"
215d0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
215e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
215f0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
21600 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61   <param name="ta
21610 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
21620 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
21630 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
21640 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
21650 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
21660 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
21670 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75   with this virtu
21680 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
21690 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
216a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
216b0 72 61 6d 20 6e 61 6d 65 3d 22 73 61 76 65 70 6f  ram name="savepo
216c0 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  int">..        /
216d0 2f 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e  // This is an in
216e0 74 65 67 65 72 20 69 64 65 6e 74 69 66 69 65 72  teger identifier
216f0 20 75 6e 64 65 72 20 77 68 69 63 68 20 74 68 65   under which the
21700 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
21710 74 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f  te of..        /
21720 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  // the virtual t
21730 61 62 6c 65 20 73 68 6f 75 6c 64 20 62 65 20 73  able should be s
21740 61 76 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  aved...        /
21750 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
21760 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
21770 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
21780 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
21790 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
217a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
217b0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
217c0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
217d0 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20  Savepoint(..    
217e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
217f0 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
21800 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
21810 20 20 20 20 20 20 20 20 69 6e 74 20 73 61 76 65          int save
21820 70 6f 69 6e 74 20 20 20 20 20 20 20 20 20 20 20  point           
21830 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
21840 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
21850 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
218a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
218b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
218c0 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
218d0 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
218e0 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
218f0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
21900 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
21910 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73  veModule.xReleas
21920 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
21930 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
21940 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
21950 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
21960 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  table">..       
21970 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
21980 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
21990 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  lTable" /> objec
219a0 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63  t instance assoc
219b0 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  iated..        /
219c0 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72  // with this vir
219d0 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
219e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
219f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
21a00 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 61 76 65  param name="save
21a10 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20  point">..       
21a20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6e 20   /// This is an 
21a30 69 6e 74 65 67 65 72 20 75 73 65 64 20 74 6f 20  integer used to 
21a40 69 6e 64 69 63 61 74 65 20 74 68 61 74 20 61 6e  indicate that an
21a50 79 20 73 61 76 65 64 20 73 74 61 74 65 73 20 77  y saved states w
21a60 69 74 68 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  ith an..        
21a70 2f 2f 2f 20 69 64 65 6e 74 69 66 69 65 72 20 67  /// identifier g
21a80 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
21a90 71 75 61 6c 20 74 6f 20 74 68 69 73 20 73 68 6f  qual to this sho
21aa0 75 6c 64 20 62 65 20 64 65 6c 65 74 65 64 20 62  uld be deleted b
21ab0 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  y the..        /
21ac0 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
21ad0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
21ae0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
21af0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
21b00 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
21b10 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
21b20 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
21b30 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
21b40 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
21b50 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65  teErrorCode Rele
21b60 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ase(..          
21b70 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
21b80 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69  able table, /* i
21b90 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
21ba0 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e 74 20    int savepoint 
21bb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
21bc0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
21bd0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
21be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21c30 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
21c40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21c50 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
21c60 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
21c70 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
21c80 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
21c90 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
21ca0 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20  le.xRollbackTo" 
21cb0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
21cc0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
21cd0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
21ce0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
21cf0 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
21d00 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
21d10 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
21d20 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
21d30 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
21d40 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
21d50 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61  with this virtua
21d60 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
21d70 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
21d80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
21d90 61 6d 20 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69  am name="savepoi
21da0 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nt">..        //
21db0 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74  / This is an int
21dc0 65 67 65 72 20 69 64 65 6e 74 69 66 69 65 72 20  eger identifier 
21dd0 75 73 65 64 20 74 6f 20 73 70 65 63 69 66 79 20  used to specify 
21de0 61 20 73 70 65 63 69 66 69 63 20 73 61 76 65 64  a specific saved
21df0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
21e00 61 74 65 20 66 6f 72 20 74 68 65 20 76 69 72 74  ate for the virt
21e10 75 61 6c 20 74 61 62 6c 65 20 66 6f 72 20 69 74  ual table for it
21e20 20 74 6f 20 72 65 73 74 6f 72 65 20 69 74 73 65   to restore itse
21e30 6c 66 20 62 61 63 6b 20 74 6f 2c 20 77 68 69 63  lf back to, whic
21e40 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  h..        /// s
21e50 68 6f 75 6c 64 20 61 6c 73 6f 20 68 61 76 65 20  hould also have 
21e60 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 64 65  the effect of de
21e70 6c 65 74 69 6e 67 20 61 6c 6c 20 73 61 76 65 64  leting all saved
21e80 20 73 74 61 74 65 73 20 77 69 74 68 20 61 6e 0d   states with an.
21e90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74  .        /// int
21ea0 65 67 65 72 20 69 64 65 6e 74 69 66 69 65 72 20  eger identifier 
21eb0 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 69  greater than thi
21ec0 73 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20  s one...        
21ed0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
21ee0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
21ef0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
21f00 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
21f10 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
21f20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
21f30 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
21f40 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
21f50 20 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20   RollbackTo(..  
21f60 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
21f70 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
21f80 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  le, /* in */..  
21f90 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 61            int sa
21fa0 76 65 70 6f 69 6e 74 20 20 20 20 20 20 20 20 20  vepoint         
21fb0 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
21fc0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 20 20            );..  
21fd0 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
21fe0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
21ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22030 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
22040 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 65 6d 6f  egion SQLiteMemo
22050 72 79 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d  ry Static Class.
22060 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
22070 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
22080 20 63 6c 61 73 73 20 63 6f 6e 74 61 69 6e 73 20   class contains 
22090 73 74 61 74 69 63 20 6d 65 74 68 6f 64 73 20 74  static methods t
220a0 68 61 74 20 61 72 65 20 75 73 65 64 20 74 6f 20  hat are used to 
220b0 61 6c 6c 6f 63 61 74 65 2c 0d 0a 20 20 20 20 2f  allocate,..    /
220c0 2f 2f 20 6d 61 6e 69 70 75 6c 61 74 65 2c 20 61  // manipulate, a
220d0 6e 64 20 66 72 65 65 20 6e 61 74 69 76 65 20 6d  nd free native m
220e0 65 6d 6f 72 79 20 70 72 6f 76 69 64 65 64 20 62  emory provided b
220f0 79 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  y the SQLite cor
22100 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...    
22110 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
22120 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
22130 74 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65  tic class SQLite
22140 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 7b 0d 0a 20  Memory..    {.. 
22150 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
22160 72 69 76 61 74 65 20 44 61 74 61 0d 0a 23 69 66  rivate Data..#if
22170 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59   TRACK_MEMORY_BY
22180 54 45 53 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  TES..        ///
22190 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
221a0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6f 62 6a      /// This obj
221b0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 69 73 20  ect instance is 
221c0 75 73 65 64 20 74 6f 20 73 79 6e 63 68 72 6f 6e  used to synchron
221d0 69 7a 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ize access to th
221e0 65 20 6f 74 68 65 72 0d 0a 20 20 20 20 20 20 20  e other..       
221f0 20 2f 2f 2f 20 73 74 61 74 69 63 20 66 69 65 6c   /// static fiel
22200 64 73 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ds of this class
22210 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
22220 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
22230 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
22240 63 20 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f  c object syncRoo
22250 74 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28 29  t = new object()
22260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
22290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
222c0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
222d0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 74         /// The t
222e0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6f  otal number of o
222f0 75 74 73 74 61 6e 64 69 6e 67 20 6d 65 6d 6f 72  utstanding memor
22300 79 20 62 79 74 65 73 20 61 6c 6c 6f 63 61 74 65  y bytes allocate
22310 64 20 62 79 20 74 68 69 73 0d 0a 20 20 20 20 20  d by this..     
22320 20 20 20 2f 2f 2f 20 63 6c 61 73 73 20 75 73 69     /// class usi
22330 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ng the SQLite co
22340 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  re library...   
22350 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
22360 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
22370 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
22380 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 3b 0d  bytesAllocated;.
22390 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
223f0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
22400 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 78       /// The max
22410 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 6f  imum number of o
22420 75 74 73 74 61 6e 64 69 6e 67 20 6d 65 6d 6f 72  utstanding memor
22430 79 20 62 79 74 65 73 20 65 76 65 72 20 61 6c 6c  y bytes ever all
22440 6f 63 61 74 65 64 20 62 79 0d 0a 20 20 20 20 20  ocated by..     
22450 20 20 20 2f 2f 2f 20 74 68 69 73 20 63 6c 61 73     /// this clas
22460 73 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c 69  s using the SQLi
22470 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
22480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
22490 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
224a0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
224b0 20 69 6e 74 20 6d 61 78 69 6d 75 6d 42 79 74 65   int maximumByte
224c0 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 23 65 6e  sAllocated;..#en
224d0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  dif..        #en
224e0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
224f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22540 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 65        #region Me
22550 6d 6f 72 79 20 41 6c 6c 6f 63 61 74 69 6f 6e 20  mory Allocation 
22560 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
22570 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
22580 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
22590 2f 2f 20 41 6c 6c 6f 63 61 74 65 73 20 61 74 20  // Allocates at 
225a0 6c 65 61 73 74 20 74 68 65 20 73 70 65 63 69 66  least the specif
225b0 69 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  ied number of by
225c0 74 65 73 20 6f 66 20 6e 61 74 69 76 65 20 6d 65  tes of native me
225d0 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  mory..        //
225e0 2f 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65  / via the SQLite
225f0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 73 71   core library sq
22600 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 66  lite3_malloc() f
22610 75 6e 63 74 69 6f 6e 20 61 6e 64 20 72 65 74 75  unction and retu
22620 72 6e 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rns..        ///
22630 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6e   the resulting n
22640 61 74 69 76 65 20 70 6f 69 6e 74 65 72 2e 0d 0a  ative pointer...
22650 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
22660 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
22670 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
22680 22 73 69 7a 65 22 3e 0d 0a 20 20 20 20 20 20 20  "size">..       
22690 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
226a0 6f 66 20 62 79 74 65 73 20 74 6f 20 61 6c 6c 6f  of bytes to allo
226b0 63 61 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  cate...        /
226c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
226d0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
226e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
226f0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
22700 65 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74  er that points t
22710 6f 20 61 20 62 6c 6f 63 6b 20 6f 66 20 6d 65 6d  o a block of mem
22720 6f 72 79 20 6f 66 20 61 74 20 6c 65 61 73 74 20  ory of at least 
22730 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
22740 20 73 70 65 63 69 66 69 65 64 20 73 69 7a 65 20   specified size 
22750 2d 4f 52 2d 20 3c 73 65 65 20 63 72 65 66 3d 22  -OR- <see cref="
22760 49 6e 74 50 74 72 2e 5a 65 72 6f 22 20 2f 3e 20  IntPtr.Zero" /> 
22770 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 6f  if the memory co
22780 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  uld..        ///
22790 20 6e 6f 74 20 62 65 20 61 6c 6c 6f 63 61 74 65   not be allocate
227a0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
227b0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
227c0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
227d0 63 20 49 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74  c IntPtr Allocat
227e0 65 28 69 6e 74 20 73 69 7a 65 29 0d 0a 20 20 20  e(int size)..   
227f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22800 20 20 20 20 49 6e 74 50 74 72 20 70 4d 65 6d 6f      IntPtr pMemo
22810 72 79 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ry = UnsafeNativ
22820 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
22830 5f 6d 61 6c 6c 6f 63 28 73 69 7a 65 29 3b 0d 0a  _malloc(size);..
22840 0d 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f  ..#if TRACK_MEMO
22850 52 59 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20  RY_BYTES..      
22860 20 20 20 20 20 20 69 66 20 28 70 4d 65 6d 6f 72        if (pMemor
22870 79 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  y != IntPtr.Zero
22880 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
22890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
228a0 20 20 69 6e 74 20 62 6c 6f 63 6b 53 69 7a 65 20    int blockSize 
228b0 3d 20 53 69 7a 65 28 70 4d 65 6d 6f 72 79 29 3b  = Size(pMemory);
228c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
228d0 20 20 20 20 69 66 20 28 62 6c 6f 63 6b 53 69 7a      if (blockSiz
228e0 65 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  e > 0)..        
228f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
22910 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
22920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22930 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
22950 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20 2b 3d  ytesAllocated +=
22960 20 62 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 0d 0a 20   blockSize;.... 
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22980 20 20 20 20 20 20 20 69 66 20 28 62 79 74 65 73         if (bytes
22990 41 6c 6c 6f 63 61 74 65 64 20 3e 20 6d 61 78 69  Allocated > maxi
229a0 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65  mumBytesAllocate
229b0 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
229c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229d0 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f  maximumBytesAllo
229e0 63 61 74 65 64 20 3d 20 62 79 74 65 73 41 6c 6c  cated = bytesAll
229f0 6f 63 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  ocated;..       
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
22a30 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
22a40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70          return p
22a50 4d 65 6d 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  Memory;..       
22a60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
22a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ab0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22ac0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
22ad0 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73          /// Gets
22ae0 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
22af0 20 61 63 74 75 61 6c 20 73 69 7a 65 20 6f 66 20   actual size of 
22b00 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 65  the specified me
22b10 6d 6f 72 79 20 62 6c 6f 63 6b 20 74 68 61 74 0d  mory block that.
22b20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 61 73  .        /// was
22b30 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 62 74 61   previously obta
22b40 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 3c 73  ined from the <s
22b50 65 65 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74  ee cref="Allocat
22b60 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
22b70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
22b80 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
22b90 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
22ba0 70 4d 65 6d 6f 72 79 22 3e 0d 0a 20 20 20 20 20  pMemory">..     
22bb0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
22bc0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
22bd0 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 70 72   memory block pr
22be0 65 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65  eviously obtaine
22bf0 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20  d from the..    
22c00 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
22c10 66 3d 22 41 6c 6c 6f 63 61 74 65 22 20 2f 3e 20  f="Allocate" /> 
22c20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
22c30 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
22c40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
22c50 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
22c60 2f 20 54 68 65 20 61 63 74 75 61 6c 20 73 69 7a  / The actual siz
22c70 65 2c 20 69 6e 20 62 79 74 65 73 2c 20 6f 66 20  e, in bytes, of 
22c80 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b  the memory block
22c90 20 73 70 65 63 69 66 69 65 64 20 76 69 61 20 74   specified via t
22ca0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
22cb0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 2e 0d  native pointer..
22cc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
22cd0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
22ce0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
22cf0 6e 74 20 53 69 7a 65 28 49 6e 74 50 74 72 20 70  nt Size(IntPtr p
22d00 4d 65 6d 6f 72 79 29 0d 0a 20 20 20 20 20 20 20  Memory)..       
22d10 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
22d20 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
22d30 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
22d40 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
22d50 2e 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f  .sqlite3_malloc_
22d60 73 69 7a 65 5f 69 6e 74 65 72 6f 70 28 70 4d 65  size_interop(pMe
22d70 6d 6f 72 79 29 3b 0d 0a 23 65 6c 69 66 20 54 52  mory);..#elif TR
22d80 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53  ACK_MEMORY_BYTES
22d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
22da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
22db0 20 48 41 43 4b 3a 20 4f 6b 2c 20 77 65 20 63 61   HACK: Ok, we ca
22dc0 6e 6e 6f 74 20 64 65 74 65 72 6d 69 6e 65 20 74  nnot determine t
22dd0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d  he size of the m
22de0 65 6d 6f 72 79 20 62 6c 6f 63 6b 3b 0d 0a 20 20  emory block;..  
22df0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
22e00 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75     therefore, ju
22e10 73 74 20 74 72 61 63 6b 20 6e 75 6d 62 65 72 20  st track number 
22e20 6f 66 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69  of allocations i
22e30 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20  nstead...       
22e40 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
22e50 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 4d 65       return (pMe
22e60 6d 6f 72 79 20 21 3d 20 49 6e 74 50 74 72 2e 5a  mory != IntPtr.Z
22e70 65 72 6f 29 20 3f 20 31 20 3a 20 30 3b 0d 0a 23  ero) ? 1 : 0;..#
22e80 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
22e90 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e    return 0;..#en
22ea0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
22eb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
22ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
22f10 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
22f20 20 20 20 20 2f 2f 2f 20 46 72 65 65 73 20 61 20      /// Frees a 
22f30 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65  memory block pre
22f40 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64  viously obtained
22f50 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20   from the..     
22f60 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
22f70 3d 22 41 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d  ="Allocate" /> m
22f80 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
22f90 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
22fa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
22fb0 61 6d 20 6e 61 6d 65 3d 22 70 4d 65 6d 6f 72 79  am name="pMemory
22fc0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
22fd0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
22fe0 65 72 20 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79  er to the memory
22ff0 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f 75 73 6c   block previousl
23000 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
23010 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
23020 20 3c 73 65 65 20 63 72 65 66 3d 22 41 6c 6c 6f   <see cref="Allo
23030 63 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  cate" /> method.
23040 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
23050 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
23060 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
23070 69 64 20 46 72 65 65 28 49 6e 74 50 74 72 20 70  id Free(IntPtr p
23080 4d 65 6d 6f 72 79 29 0d 0a 20 20 20 20 20 20 20  Memory)..       
23090 20 7b 0d 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45   {..#if TRACK_ME
230a0 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20 20 20  MORY_BYTES..    
230b0 20 20 20 20 20 20 20 20 69 66 20 28 70 4d 65 6d          if (pMem
230c0 6f 72 79 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ory != IntPtr.Ze
230d0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
230e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
230f0 20 20 20 20 69 6e 74 20 62 6c 6f 63 6b 53 69 7a      int blockSiz
23100 65 20 3d 20 53 69 7a 65 28 70 4d 65 6d 6f 72 79  e = Size(pMemory
23110 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23120 20 20 20 20 20 20 69 66 20 28 62 6c 6f 63 6b 53        if (blockS
23130 69 7a 65 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ize > 0)..      
23140 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23160 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
23170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23180 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231a0 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20   bytesAllocated 
231b0 2d 3d 20 62 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 20  -= blockSize;.. 
231c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
231e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
231f0 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
23200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
23210 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
23220 73 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70  s.sqlite3_free(p
23230 4d 65 6d 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  Memory);..      
23240 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
23250 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
23260 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
23270 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
23280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232c0 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
232d0 20 53 51 4c 69 74 65 53 74 72 69 6e 67 20 53 74   SQLiteString St
232e0 61 74 69 63 20 43 6c 61 73 73 0d 0a 20 20 20 20  atic Class..    
232f0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
23300 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73     /// This clas
23310 73 20 63 6f 6e 74 61 69 6e 73 20 73 74 61 74 69  s contains stati
23320 63 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 61  c methods that a
23330 72 65 20 75 73 65 64 20 74 6f 20 64 65 61 6c 20  re used to deal 
23340 77 69 74 68 20 6e 61 74 69 76 65 0d 0a 20 20 20  with native..   
23350 20 2f 2f 2f 20 55 54 46 2d 38 20 73 74 72 69 6e   /// UTF-8 strin
23360 67 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 62 65  g pointers to be
23370 20 75 73 65 64 20 77 69 74 68 20 74 68 65 20 53   used with the S
23380 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
23390 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ry...    /// </s
233a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74  ummary>..    int
233b0 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61  ernal static cla
233c0 73 73 20 53 51 4c 69 74 65 53 74 72 69 6e 67 0d  ss SQLiteString.
233d0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
233e0 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
233f0 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
23400 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
23410 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
23420 69 73 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  is is the maximu
23430 6d 20 70 6f 73 73 69 62 6c 65 20 6c 65 6e 67 74  m possible lengt
23440 68 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65  h for the native
23450 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 0d 0a   UTF-8 encoded..
23460 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 69          /// stri
23470 6e 67 73 20 75 73 65 64 20 77 69 74 68 20 74 68  ngs used with th
23480 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
23490 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  brary...        
234a0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
234b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
234c0 73 74 61 74 69 63 20 69 6e 74 20 54 68 69 72 74  static int Thirt
234d0 79 42 69 74 73 20 3d 20 30 78 33 66 66 66 66 66  yBits = 0x3fffff
234e0 66 66 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ff;....        /
234f0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23540 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
23550 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
23560 73 20 69 73 20 74 68 65 20 3c 73 65 65 20 63 72  s is the <see cr
23570 65 66 3d 22 45 6e 63 6f 64 69 6e 67 22 20 2f 3e  ef="Encoding" />
23580 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
23590 20 75 73 65 64 20 74 6f 20 68 61 6e 64 6c 65 0d   used to handle.
235a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e  .        /// con
235b0 76 65 72 73 69 6f 6e 73 20 66 72 6f 6d 2f 74 6f  versions from/to
235c0 20 55 54 46 2d 38 2e 0d 0a 20 20 20 20 20 20 20   UTF-8...       
235d0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
235e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
235f0 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
23600 20 45 6e 63 6f 64 69 6e 67 20 55 74 66 38 45 6e   Encoding Utf8En
23610 63 6f 64 69 6e 67 20 3d 20 45 6e 63 6f 64 69 6e  coding = Encodin
23620 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20  g.UTF8;..       
23630 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
23640 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23690 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
236a0 6e 20 55 54 46 2d 38 20 45 6e 63 6f 64 69 6e 67  n UTF-8 Encoding
236b0 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d   Helper Methods.
236c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
236d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
236e0 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74 68 65  /// Converts the
236f0 20 73 70 65 63 69 66 69 65 64 20 6d 61 6e 61 67   specified manag
23700 65 64 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 74  ed string into t
23710 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e  he UTF-8 encodin
23720 67 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f  g and..        /
23730 2f 2f 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  // returns the a
23740 72 72 61 79 20 6f 66 20 62 79 74 65 73 20 63 6f  rray of bytes co
23750 6e 74 61 69 6e 69 6e 67 20 69 74 73 20 72 65 70  ntaining its rep
23760 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 6e 20 74  resentation in t
23770 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  hat..        ///
23780 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20   encoding...    
23790 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
237a0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
237b0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
237c0 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ue">..        //
237d0 2f 20 54 68 65 20 6d 61 6e 61 67 65 64 20 73 74  / The managed st
237e0 72 69 6e 67 20 74 6f 20 63 6f 6e 76 65 72 74 2e  ring to convert.
237f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
23800 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
23810 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
23820 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61         /// The a
23830 72 72 61 79 20 6f 66 20 62 79 74 65 73 20 63 6f  rray of bytes co
23840 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 70  ntaining the rep
23850 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
23860 68 65 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20  he managed..    
23870 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 20 69      /// string i
23880 6e 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f  n the UTF-8 enco
23890 64 69 6e 67 20 6f 72 20 6e 75 6c 6c 20 75 70 6f  ding or null upo
238a0 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20  n failure...    
238b0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
238c0 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
238d0 69 63 20 73 74 61 74 69 63 20 62 79 74 65 5b 5d  ic static byte[]
238e0 20 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f   GetUtf8BytesFro
238f0 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  mString(..      
23900 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
23910 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
23920 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
23930 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
23940 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23960 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
23970 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
23980 20 55 74 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65   Utf8Encoding.Ge
23990 74 42 79 74 65 73 28 76 61 6c 75 65 29 3b 0d 0a  tBytes(value);..
239a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
239b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
239c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
23a00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
23a10 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
23a20 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74 68 65 20  // Converts the 
23a30 73 70 65 63 69 66 69 65 64 20 61 72 72 61 79 20  specified array 
23a40 6f 66 20 62 79 74 65 73 20 72 65 70 72 65 73 65  of bytes represe
23a50 6e 74 69 6e 67 20 61 20 73 74 72 69 6e 67 20 69  nting a string i
23a60 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
23a70 2f 2f 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e  // UTF-8 encodin
23a80 67 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20  g and returns a 
23a90 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 2e 0d  managed string..
23aa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
23ab0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
23ac0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
23ad0 3d 22 62 79 74 65 73 22 3e 0d 0a 20 20 20 20 20  ="bytes">..     
23ae0 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79     /// The array
23af0 20 6f 66 20 62 79 74 65 73 20 74 6f 20 63 6f 6e   of bytes to con
23b00 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  vert...        /
23b10 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
23b20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
23b30 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
23b40 54 68 65 20 6d 61 6e 61 67 65 64 20 73 74 72 69  The managed stri
23b50 6e 67 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20  ng or null upon 
23b60 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20  failure...      
23b70 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
23b80 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
23b90 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
23ba0 65 74 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38  etStringFromUtf8
23bb0 42 79 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Bytes(..        
23bc0 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73      byte[] bytes
23bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
23be0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
23bf0 20 20 20 20 20 20 20 20 69 66 20 28 62 79 74 65          if (byte
23c00 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
23c10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23c20 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20  rn null;....#if 
23c30 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
23c40 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
23c50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
23c60 74 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 53  tf8Encoding.GetS
23c70 74 72 69 6e 67 28 62 79 74 65 73 29 3b 0d 0a 23  tring(bytes);..#
23c80 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
23c90 20 20 72 65 74 75 72 6e 20 55 74 66 38 45 6e 63    return Utf8Enc
23ca0 6f 64 69 6e 67 2e 47 65 74 53 74 72 69 6e 67 28  oding.GetString(
23cb0 62 79 74 65 73 2c 20 30 2c 20 62 79 74 65 73 2e  bytes, 0, bytes.
23cc0 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66  Length);..#endif
23cd0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
23ce0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
23cf0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
23d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
23d50 65 67 69 6f 6e 20 55 54 46 2d 38 20 53 74 72 69  egion UTF-8 Stri
23d60 6e 67 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  ng Helper Method
23d70 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
23d80 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
23d90 20 20 2f 2f 2f 20 50 72 6f 62 65 73 20 61 20 6e    /// Probes a n
23da0 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
23db0 20 61 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65   a string in the
23dc0 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20   UTF-8 encoding 
23dd0 66 6f 72 20 69 74 73 0d 0a 20 20 20 20 20 20 20  for its..       
23de0 20 2f 2f 2f 20 74 65 72 6d 69 6e 61 74 69 6e 67   /// terminating
23df0 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2c 20   NUL character, 
23e00 77 69 74 68 69 6e 20 74 68 65 20 73 70 65 63 69  within the speci
23e10 66 69 65 64 20 6c 65 6e 67 74 68 20 6c 69 6d 69  fied length limi
23e20 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
23e30 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
23e40 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
23e50 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a 20  ame="pValue">.. 
23e60 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
23e70 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69 6e  ative NUL-termin
23e80 61 74 65 64 20 73 74 72 69 6e 67 20 70 6f 69 6e  ated string poin
23e90 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ter...        //
23ea0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
23eb0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
23ec0 61 6d 65 3d 22 6c 69 6d 69 74 22 3e 0d 0a 20 20  ame="limit">..  
23ed0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61        /// The ma
23ee0 78 69 6d 75 6d 20 6c 65 6e 67 74 68 20 6f 66 20  ximum length of 
23ef0 74 68 65 20 6e 61 74 69 76 65 20 73 74 72 69 6e  the native strin
23f00 67 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20 20  g, in bytes...  
23f10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
23f20 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
23f30 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
23f40 20 20 20 2f 2f 2f 20 54 68 65 20 6c 65 6e 67 74     /// The lengt
23f50 68 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20  h of the native 
23f60 73 74 72 69 6e 67 2c 20 69 6e 20 62 79 74 65 73  string, in bytes
23f70 20 2d 4f 52 2d 20 7a 65 72 6f 20 69 66 20 74 68   -OR- zero if th
23f80 65 20 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20 20  e length..      
23f90 20 20 2f 2f 2f 20 63 6f 75 6c 64 20 6e 6f 74 20    /// could not 
23fa0 62 65 20 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a  be determined...
23fb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
23fc0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
23fd0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
23fe0 74 20 50 72 6f 62 65 46 6f 72 55 74 66 38 42 79  t ProbeForUtf8By
23ff0 74 65 4c 65 6e 67 74 68 28 0d 0a 20 20 20 20 20  teLength(..     
24000 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
24010 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alue,..         
24020 20 20 20 69 6e 74 20 6c 69 6d 69 74 0d 0a 20 20     int limit..  
24030 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
24040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24050 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d      int length =
24060 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
24070 20 20 20 69 66 20 28 28 70 56 61 6c 75 65 20 21     if ((pValue !
24080 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 26  = IntPtr.Zero) &
24090 26 20 28 6c 69 6d 69 74 20 3e 20 30 29 29 0d 0a  & (limit > 0))..
240a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
240b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
240c0 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o..             
240d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
240e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61            if (Ma
240f0 72 73 68 61 6c 2e 52 65 61 64 42 79 74 65 28 70  rshal.ReadByte(p
24100 56 61 6c 75 65 2c 20 6c 65 6e 67 74 68 29 20 3d  Value, length) =
24110 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
24130 65 61 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  eak;....        
24140 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24150 6c 65 6e 67 74 68 20 3e 3d 20 6c 69 6d 69 74 29  length >= limit)
24160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24170 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
24180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24190 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 2b 2b          length++
241a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
241b0 20 20 20 7d 20 77 68 69 6c 65 20 28 74 72 75 65     } while (true
241c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
241d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
241e0 20 72 65 74 75 72 6e 20 6c 65 6e 67 74 68 3b 0d   return length;.
241f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
24200 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
24210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24250 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
24260 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
24270 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74 68 65  /// Converts the
24280 20 73 70 65 63 69 66 69 65 64 20 6e 61 74 69 76   specified nativ
24290 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64  e NUL-terminated
242a0 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f   UTF-8 string po
242b0 69 6e 74 65 72 0d 0a 20 20 20 20 20 20 20 20 2f  inter..        /
242c0 2f 2f 20 69 6e 74 6f 20 61 20 6d 61 6e 61 67 65  // into a manage
242d0 64 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20  d string...     
242e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
242f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
24300 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c  param name="pVal
24310 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ue">..        //
24320 2f 20 54 68 65 20 6e 61 74 69 76 65 20 4e 55 4c  / The native NUL
24330 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
24340 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
24350 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
24360 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
24370 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
24380 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
24390 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20 6f  managed string o
243a0 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c  r null upon fail
243b0 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
243c0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
243d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
243e0 74 69 63 20 73 74 72 69 6e 67 20 53 74 72 69 6e  tic string Strin
243f0 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28  gFromUtf8IntPtr(
24400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
24410 74 50 74 72 20 70 56 61 6c 75 65 0d 0a 20 20 20  tPtr pValue..   
24420 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
24430 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24440 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
24450 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 70  FromUtf8IntPtr(p
24460 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  Value,..        
24470 20 20 20 20 20 20 20 20 50 72 6f 62 65 46 6f 72          ProbeFor
24480 55 74 66 38 42 79 74 65 4c 65 6e 67 74 68 28 70  Utf8ByteLength(p
24490 56 61 6c 75 65 2c 20 54 68 69 72 74 79 42 69 74  Value, ThirtyBit
244a0 73 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  s));..        }.
244b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
244c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24500 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
24510 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
24520 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74       /// Convert
24530 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  s the specified 
24540 6e 61 74 69 76 65 20 55 54 46 2d 38 20 73 74 72  native UTF-8 str
24550 69 6e 67 20 70 6f 69 6e 74 65 72 20 6f 66 20 74  ing pointer of t
24560 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20  he specified..  
24570 20 20 20 20 20 20 2f 2f 2f 20 6c 65 6e 67 74 68        /// length
24580 20 69 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20   into a managed 
24590 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...       
245a0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
245b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
245c0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65  ram name="pValue
245d0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
245e0 54 68 65 20 6e 61 74 69 76 65 20 55 54 46 2d 38  The native UTF-8
245f0 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e   string pointer.
24600 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
24610 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
24620 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
24630 22 6c 65 6e 67 74 68 22 3e 0d 0a 20 20 20 20 20  "length">..     
24640 20 20 20 2f 2f 2f 20 54 68 65 20 6c 65 6e 67 74     /// The lengt
24650 68 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20  h of the native 
24660 73 74 72 69 6e 67 2c 20 69 6e 20 62 79 74 65 73  string, in bytes
24670 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
24680 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
24690 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
246a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
246b0 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20 6f  managed string o
246c0 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c  r null upon fail
246d0 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
246e0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
246f0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
24700 74 69 63 20 73 74 72 69 6e 67 20 53 74 72 69 6e  tic string Strin
24710 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28  gFromUtf8IntPtr(
24720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
24730 74 50 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20  tPtr pValue,..  
24740 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65            int le
24750 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20  ngth..          
24760 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
24770 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24780 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72  pValue == IntPtr
24790 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
247a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
247b0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
247c0 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3e      if (length >
247d0 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
247e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
247f0 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73      byte[] bytes
24800 20 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65 6e 67   = new byte[leng
24810 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  th];....        
24820 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
24830 43 6f 70 79 28 70 56 61 6c 75 65 2c 20 62 79 74  Copy(pValue, byt
24840 65 73 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d  es, 0, length);.
24850 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24860 20 20 20 72 65 74 75 72 6e 20 47 65 74 53 74 72     return GetStr
24870 69 6e 67 46 72 6f 6d 55 74 66 38 42 79 74 65 73  ingFromUtf8Bytes
24880 28 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20  (bytes);..      
24890 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
248a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
248b0 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20  ring.Empty;..   
248c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
248d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
248e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24910 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
24920 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
24930 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
24940 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65  Converts the spe
24950 63 69 66 69 65 64 20 6d 61 6e 61 67 65 64 20 73  cified managed s
24960 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 6e 61 74  tring into a nat
24970 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74  ive NUL-terminat
24980 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
24990 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69  UTF-8 string poi
249a0 6e 74 65 72 20 75 73 69 6e 67 20 6d 65 6d 6f 72  nter using memor
249b0 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
249c0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d  the SQLite core.
249d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62  .        /// lib
249e0 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
249f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
24a00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
24a10 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
24a20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
24a30 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20   managed string 
24a40 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
24a50 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
24a60 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
24a70 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
24a80 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
24a90 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20   NUL-terminated 
24aa0 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69  UTF-8 string poi
24ab0 6e 74 65 72 20 6f 72 0d 0a 20 20 20 20 20 20 20  nter or..       
24ac0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
24ad0 49 6e 74 50 74 72 2e 5a 65 72 6f 22 20 2f 3e 20  IntPtr.Zero" /> 
24ae0 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20  upon failure... 
24af0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
24b00 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
24b10 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74  ublic static Int
24b20 50 74 72 20 55 74 66 38 49 6e 74 50 74 72 46 72  Ptr Utf8IntPtrFr
24b30 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20  omString(..     
24b40 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
24b50 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
24b60 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
24b70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
24b80 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24ba0 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72  eturn IntPtr.Zer
24bb0 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
24bc0 20 20 49 6e 74 50 74 72 20 72 65 73 75 6c 74 20    IntPtr result 
24bd0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
24be0 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
24bf0 5b 5d 20 62 79 74 65 73 20 3d 20 47 65 74 55 74  [] bytes = GetUt
24c00 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72 69 6e  f8BytesFromStrin
24c10 67 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20  g(value);....   
24c20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 79 74           if (byt
24c30 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
24c40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
24c50 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  urn IntPtr.Zero;
24c60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24c70 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 62 79 74  int length = byt
24c80 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  es.Length;....  
24c90 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
24ca0 20 3d 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e   = SQLiteMemory.
24cb0 41 6c 6c 6f 63 61 74 65 28 6c 65 6e 67 74 68 20  Allocate(length 
24cc0 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  + 1);....       
24cd0 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 20       if (result 
24ce0 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
24cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24d00 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a   return IntPtr.Z
24d10 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
24d20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
24d30 28 62 79 74 65 73 2c 20 30 2c 20 72 65 73 75 6c  (bytes, 0, resul
24d40 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  t, length);..   
24d50 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
24d60 2e 57 72 69 74 65 42 79 74 65 28 72 65 73 75 6c  .WriteByte(resul
24d70 74 2c 20 6c 65 6e 67 74 68 2c 20 30 29 3b 0d 0a  t, length, 0);..
24d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
24d90 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
24da0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
24db0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
24dc0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24e10 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
24e20 6e 20 55 54 46 2d 38 20 53 74 72 69 6e 67 20 41  n UTF-8 String A
24e30 72 72 61 79 20 48 65 6c 70 65 72 20 4d 65 74 68  rray Helper Meth
24e40 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
24e50 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
24e60 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73      /// Converts
24e70 20 61 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79   a logical array
24e80 20 6f 66 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74   of native NUL-t
24e90 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
24ea0 73 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  string..        
24eb0 2f 2f 2f 20 70 6f 69 6e 74 65 72 73 20 69 6e 74  /// pointers int
24ec0 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 6d 61  o an array of ma
24ed0 6e 61 67 65 64 20 73 74 72 69 6e 67 73 2e 0d 0a  naged strings...
24ee0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
24ef0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
24f00 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
24f10 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20  "argc">..       
24f20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
24f30 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  of elements in t
24f40 68 65 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79  he logical array
24f50 20 6f 66 20 6e 61 74 69 76 65 0d 0a 20 20 20 20   of native..    
24f60 20 20 20 20 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d      /// NUL-term
24f70 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
24f80 69 6e 67 20 70 6f 69 6e 74 65 72 73 2e 0d 0a 20  ing pointers... 
24f90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
24fa0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
24fb0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
24fc0 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gv">..        //
24fd0 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
24fe0 6e 74 65 72 20 74 6f 20 74 68 65 20 6c 6f 67 69  nter to the logi
24ff0 63 61 6c 20 61 72 72 61 79 20 6f 66 20 6e 61 74  cal array of nat
25000 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74  ive NUL-terminat
25010 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
25020 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69  UTF-8 string poi
25030 6e 74 65 72 73 20 74 6f 20 63 6f 6e 76 65 72 74  nters to convert
25040 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
25050 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
25060 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
25070 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
25080 61 72 72 61 79 20 6f 66 20 6d 61 6e 61 67 65 64  array of managed
25090 20 73 74 72 69 6e 67 73 20 6f 72 20 6e 75 6c 6c   strings or null
250a0 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a   upon failure...
250b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
250c0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
250d0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
250e0 72 69 6e 67 5b 5d 20 53 74 72 69 6e 67 41 72 72  ring[] StringArr
250f0 61 79 46 72 6f 6d 55 74 66 38 53 69 7a 65 41 6e  ayFromUtf8SizeAn
25100 64 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20  dIntPtr(..      
25110 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d        int argc,.
25120 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
25130 50 74 72 20 61 72 67 76 0d 0a 20 20 20 20 20 20  Ptr argv..      
25140 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
25150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25160 69 66 20 28 61 72 67 63 20 3c 20 30 29 0d 0a 20  if (argc < 0).. 
25170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25180 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
25190 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
251a0 72 67 76 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  rgv == IntPtr.Ze
251b0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
251c0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
251d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
251e0 20 73 74 72 69 6e 67 5b 5d 20 72 65 73 75 6c 74   string[] result
251f0 20 3d 20 6e 65 77 20 73 74 72 69 6e 67 5b 61 72   = new string[ar
25200 67 63 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gc];....        
25210 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
25220 65 78 20 3d 20 30 2c 20 6f 66 66 73 65 74 20 3d  ex = 0, offset =
25230 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
25240 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 3c           index <
25250 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d   result.Length;.
25260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25270 20 20 20 20 20 69 6e 64 65 78 2b 2b 2c 20 6f 66       index++, of
25280 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53  fset += IntPtr.S
25290 69 7a 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ize)..          
252a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
252b0 20 20 20 20 20 49 6e 74 50 74 72 20 70 41 72 67       IntPtr pArg
252c0 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c   = SQLiteMarshal
252d0 2e 52 65 61 64 49 6e 74 50 74 72 28 61 72 67 76  .ReadIntPtr(argv
252e0 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20  , offset);....  
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25300 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20 28 70  sult[index] = (p
25310 41 72 67 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  Arg != IntPtr.Ze
25320 72 6f 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ro) ?..         
25330 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
25340 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28  gFromUtf8IntPtr(
25350 70 41 72 67 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  pArg) : null;.. 
25360 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25370 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
25380 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
25390 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
253a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
253b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
253f0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
25400 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
25410 6f 6e 76 65 72 74 73 20 61 6e 20 61 72 72 61 79  onverts an array
25420 20 6f 66 20 6d 61 6e 61 67 65 64 20 73 74 72 69   of managed stri
25430 6e 67 73 20 69 6e 74 6f 20 61 6e 20 61 72 72 61  ngs into an arra
25440 79 20 6f 66 20 6e 61 74 69 76 65 0d 0a 20 20 20  y of native..   
25450 20 20 20 20 20 2f 2f 2f 20 4e 55 4c 2d 74 65 72       /// NUL-ter
25460 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
25470 72 69 6e 67 20 70 6f 69 6e 74 65 72 73 2e 0d 0a  ring pointers...
25480 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
25490 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
254a0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
254b0 22 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20  "values">..     
254c0 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79     /// The array
254d0 20 6f 66 20 6d 61 6e 61 67 65 64 20 73 74 72 69   of managed stri
254e0 6e 67 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d  ngs to convert..
254f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
25500 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
25510 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
25520 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
25530 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20 4e 55  ray of native NU
25540 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  L-terminated UTF
25550 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  -8 string pointe
25560 72 73 20 6f 72 20 6e 75 6c 6c 0d 0a 20 20 20 20  rs or null..    
25570 20 20 20 20 2f 2f 2f 20 75 70 6f 6e 20 66 61 69      /// upon fai
25580 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lure...        /
25590 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
255a0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
255b0 61 74 69 63 20 49 6e 74 50 74 72 5b 5d 20 55 74  atic IntPtr[] Ut
255c0 66 38 49 6e 74 50 74 72 41 72 72 61 79 46 72 6f  f8IntPtrArrayFro
255d0 6d 53 74 72 69 6e 67 41 72 72 61 79 28 0d 0a 20  mStringArray(.. 
255e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
255f0 67 5b 5d 20 76 61 6c 75 65 73 0d 0a 20 20 20 20  g[] values..    
25600 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
25610 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25620 20 20 69 66 20 28 76 61 6c 75 65 73 20 3d 3d 20    if (values == 
25630 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
25640 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
25650 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
25660 20 20 20 49 6e 74 50 74 72 5b 5d 20 72 65 73 75     IntPtr[] resu
25670 6c 74 20 3d 20 6e 65 77 20 49 6e 74 50 74 72 5b  lt = new IntPtr[
25680 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d  values.Length];.
25690 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
256a0 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
256b0 30 3b 20 69 6e 64 65 78 20 3c 20 72 65 73 75 6c  0; index < resul
256c0 74 2e 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b  t.Length; index+
256d0 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
256e0 20 20 20 20 72 65 73 75 6c 74 5b 69 6e 64 65 78      result[index
256f0 5d 20 3d 20 55 74 66 38 49 6e 74 50 74 72 46 72  ] = Utf8IntPtrFr
25700 6f 6d 53 74 72 69 6e 67 28 76 61 6c 75 65 73 5b  omString(values[
25710 69 6e 64 65 78 5d 29 3b 0d 0a 0d 0a 20 20 20 20  index]);....    
25720 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
25730 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
25740 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
25750 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
25760 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
25770 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
25780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
257a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
257b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
257c0 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
257d0 51 4c 69 74 65 42 79 74 65 73 20 53 74 61 74 69  QLiteBytes Stati
257e0 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f  c Class..    ///
257f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
25800 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 63  /// This class c
25810 6f 6e 74 61 69 6e 73 20 73 74 61 74 69 63 20 6d  ontains static m
25820 65 74 68 6f 64 73 20 74 68 61 74 20 61 72 65 20  ethods that are 
25830 75 73 65 64 20 74 6f 20 64 65 61 6c 20 77 69 74  used to deal wit
25840 68 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f  h native..    //
25850 2f 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 6d 65  / pointers to me
25860 6d 6f 72 79 20 62 6c 6f 63 6b 73 20 74 68 61 74  mory blocks that
25870 20 6c 6f 67 69 63 61 6c 6c 79 20 63 6f 6e 74 61   logically conta
25880 69 6e 20 61 72 72 61 79 73 20 6f 66 20 62 79 74  in arrays of byt
25890 65 73 20 74 6f 20 62 65 0d 0a 20 20 20 20 2f 2f  es to be..    //
258a0 2f 20 75 73 65 64 20 77 69 74 68 20 74 68 65 20  / used with the 
258b0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
258c0 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ary...    /// </
258d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
258e0 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c  ternal static cl
258f0 61 73 73 20 53 51 4c 69 74 65 42 79 74 65 73 0d  ass SQLiteBytes.
25900 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
25910 23 72 65 67 69 6f 6e 20 42 79 74 65 20 41 72 72  #region Byte Arr
25920 61 79 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  ay Helper Method
25930 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
25940 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
25950 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61    /// Converts a
25960 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
25970 74 6f 20 61 20 6c 6f 67 69 63 61 6c 20 61 72 72  to a logical arr
25980 61 79 20 6f 66 20 62 79 74 65 73 20 6f 66 20 74  ay of bytes of t
25990 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
259a0 73 70 65 63 69 66 69 65 64 20 6c 65 6e 67 74 68  specified length
259b0 20 69 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20   into a managed 
259c0 62 79 74 65 20 61 72 72 61 79 2e 0d 0a 20 20 20  byte array...   
259d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
259e0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
259f0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
25a00 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  alue">..        
25a10 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
25a20 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6c 6f  ointer to the lo
25a30 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20 62  gical array of b
25a40 79 74 65 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e  ytes to convert.
25a50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
25a60 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
25a70 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
25a80 22 6c 65 6e 67 74 68 22 3e 0d 0a 20 20 20 20 20  "length">..     
25a90 20 20 20 2f 2f 2f 20 54 68 65 20 6c 65 6e 67 74     /// The lengt
25aa0 68 2c 20 69 6e 20 62 79 74 65 73 2c 20 6f 66 20  h, in bytes, of 
25ab0 74 68 65 20 6c 6f 67 69 63 61 6c 20 61 72 72 61  the logical arra
25ac0 79 20 6f 66 20 62 79 74 65 73 20 74 6f 20 63 6f  y of bytes to co
25ad0 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20  nvert...        
25ae0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
25af0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
25b00 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
25b10 20 54 68 65 20 6d 61 6e 61 67 65 64 20 62 79 74   The managed byt
25b20 65 20 61 72 72 61 79 20 6f 72 20 6e 75 6c 6c 20  e array or null 
25b30 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20  upon failure... 
25b40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
25b50 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
25b60 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 79 74  ublic static byt
25b70 65 5b 5d 20 46 72 6f 6d 49 6e 74 50 74 72 28 0d  e[] FromIntPtr(.
25b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
25b90 50 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20  Ptr pValue,..   
25ba0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e           int len
25bb0 67 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gth..           
25bc0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
25bd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
25be0 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e  Value == IntPtr.
25bf0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
25c00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
25c10 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
25c20 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d     if (length ==
25c30 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
25c40 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
25c50 62 79 74 65 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20  byte[0];....    
25c60 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 72          byte[] r
25c70 65 73 75 6c 74 20 3d 20 6e 65 77 20 62 79 74 65  esult = new byte
25c80 5b 6c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20  [length];....   
25c90 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
25ca0 2e 43 6f 70 79 28 70 56 61 6c 75 65 2c 20 72 65  .Copy(pValue, re
25cb0 73 75 6c 74 2c 20 30 2c 20 6c 65 6e 67 74 68 29  sult, 0, length)
25cc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25cd0 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
25ce0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
25cf0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25d40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
25d50 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
25d60 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6d  /// Converts a m
25d70 61 6e 61 67 65 64 20 62 79 74 65 20 61 72 72 61  anaged byte arra
25d80 79 20 69 6e 74 6f 20 61 20 6e 61 74 69 76 65 20  y into a native 
25d90 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 6c 6f 67  pointer to a log
25da0 69 63 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ical..        //
25db0 2f 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73  / array of bytes
25dc0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
25dd0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
25de0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
25df0 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20  me="value">..   
25e00 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e       /// The man
25e10 61 67 65 64 20 62 79 74 65 20 61 72 72 61 79 20  aged byte array 
25e20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
25e30 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
25e40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
25e50 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
25e60 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
25e70 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 6c 6f   pointer to a lo
25e80 67 69 63 61 6c 20 62 79 74 65 20 61 72 72 61 79  gical byte array
25e90 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61   or null upon fa
25ea0 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  ilure...        
25eb0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
25ec0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
25ed0 74 61 74 69 63 20 49 6e 74 50 74 72 20 54 6f 49  tatic IntPtr ToI
25ee0 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
25ef0 20 20 20 20 62 79 74 65 5b 5d 20 76 61 6c 75 65      byte[] value
25f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
25f10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
25f20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
25f30 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
25f40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
25f50 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d  rn IntPtr.Zero;.
25f60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25f70 6e 74 20 6c 65 6e 67 74 68 20 3d 20 76 61 6c 75  nt length = valu
25f80 65 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  e.Length;....   
25f90 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e           if (len
25fa0 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  gth == 0)..     
25fb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25fc0 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  n IntPtr.Zero;..
25fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
25fe0 74 50 74 72 20 72 65 73 75 6c 74 20 3d 20 53 51  tPtr result = SQ
25ff0 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63  LiteMemory.Alloc
26000 61 74 65 28 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a  ate(length);....
26010 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26020 72 65 73 75 6c 74 20 3d 3d 20 49 6e 74 50 74 72  result == IntPtr
26030 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
26040 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
26050 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
26060 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
26070 61 6c 2e 43 6f 70 79 28 76 61 6c 75 65 2c 20 30  al.Copy(value, 0
26080 2c 20 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68  , result, length
26090 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
260a0 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
260b0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
260c0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
260d0 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
260e0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
260f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26130 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
26140 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d   #region SQLiteM
26150 61 72 73 68 61 6c 20 53 74 61 74 69 63 20 43 6c  arshal Static Cl
26160 61 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ass..    interna
26170 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53  l static class S
26180 51 4c 69 74 65 4d 61 72 73 68 61 6c 0d 0a 20 20  QLiteMarshal..  
26190 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
261a0 67 69 6f 6e 20 49 6e 74 50 74 72 20 48 65 6c 70  gion IntPtr Help
261b0 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
261c0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
261d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52  >..        /// R
261e0 65 74 75 72 6e 73 20 61 20 6e 65 77 20 3c 73 65  eturns a new <se
261f0 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
26200 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
26210 63 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 0d  ce based on the.
26220 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65  .        /// spe
26230 63 69 66 69 65 64 20 3c 73 65 65 20 63 72 65 66  cified <see cref
26240 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a  ="IntPtr" /> obj
26250 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 6e 64  ect instance and
26260 20 61 6e 20 69 6e 74 65 67 65 72 0d 0a 20 20 20   an integer..   
26270 20 20 20 20 20 2f 2f 2f 20 6f 66 66 73 65 74 2e       /// offset.
26280 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
26290 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
262a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
262b0 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20  e="pointer">..  
262c0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
262d0 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22  ee cref="IntPtr"
262e0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
262f0 6e 63 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  nce representing
26300 20 74 68 65 20 62 61 73 65 0d 0a 20 20 20 20 20   the base..     
26310 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f     /// memory lo
26320 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
26330 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
26340 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
26350 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e  m name="offset">
26360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
26370 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74  e integer offset
26380 20 66 72 6f 6d 20 74 68 65 20 62 61 73 65 20 6d   from the base m
26390 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
263a0 68 61 74 20 74 68 65 20 6e 65 77 0d 0a 20 20 20  hat the new..   
263b0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
263c0 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f  ef="IntPtr" /> o
263d0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 73  bject instance s
263e0 68 6f 75 6c 64 20 70 6f 69 6e 74 20 74 6f 2e 0d  hould point to..
263f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
26400 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
26410 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
26420 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65        /// The ne
26430 77 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  w <see cref="Int
26440 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  Ptr" /> object i
26450 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
26460 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
26470 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
26480 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20 49   static IntPtr I
26490 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 0d  ntPtrForOffset(.
264a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
264b0 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20  Ptr pointer,..  
264c0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66            int of
264d0 66 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20  fset..          
264e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
264f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26500 72 6e 20 6e 65 77 20 49 6e 74 50 74 72 28 70 6f  rn new IntPtr(po
26510 69 6e 74 65 72 2e 54 6f 49 6e 74 36 34 28 29 20  inter.ToInt64() 
26520 2b 20 6f 66 66 73 65 74 29 3b 0d 0a 20 20 20 20  + offset);..    
26530 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26540 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26580 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26590 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
265a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44  >..        /// D
265b0 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 73 69  etermines the si
265c0 7a 65 20 6f 66 20 61 20 3c 73 65 65 20 63 72 65  ze of a <see cre
265d0 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 77 68 65  f="Int32" /> whe
265e0 6e 20 69 74 20 72 65 73 69 64 65 73 0d 0a 20 20  n it resides..  
265f0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 69 64 65        /// inside
26600 20 6f 66 20 61 20 6e 61 74 69 76 65 20 73 74 72   of a native str
26610 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
26620 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
26630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
26640 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
26650 2f 2f 2f 20 54 68 65 20 73 69 7a 65 20 6f 66 20  /// The size of 
26660 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
26670 6e 74 33 32 22 20 2f 3e 20 74 79 70 65 2c 20 69  nt32" /> type, i
26680 6e 20 62 79 74 65 73 2c 20 77 68 65 6e 20 69 74  n bytes, when it
26690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65  ..        /// re
266a0 73 69 64 65 73 20 69 6e 73 69 64 65 20 61 20 6e  sides inside a n
266b0 61 74 69 76 65 20 73 74 72 75 63 74 75 72 65 2e  ative structure.
266c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
266d0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
266e0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
266f0 69 6e 74 20 53 69 7a 65 4f 66 53 74 72 75 63 74  int SizeOfStruct
26700 49 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  Int()..        {
26710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
26720 74 75 72 6e 20 49 6e 74 50 74 72 2e 53 69 7a 65  turn IntPtr.Size
26730 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
26740 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
26750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
26760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
267b0 72 65 67 69 6f 6e 20 4d 61 72 73 68 61 6c 20 52  region Marshal R
267c0 65 61 64 20 48 65 6c 70 65 72 20 4d 65 74 68 6f  ead Helper Metho
267d0 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
267e0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
267f0 20 20 20 2f 2f 2f 20 52 65 61 64 73 20 61 20 3c     /// Reads a <
26800 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22  see cref="Int32"
26810 20 2f 3e 20 76 61 6c 75 65 20 66 72 6f 6d 20 74   /> value from t
26820 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d  he specified mem
26830 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ory..        ///
26840 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20   location...    
26850 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
26860 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
26870 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69  <param name="poi
26880 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  nter">..        
26890 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
268a0 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62  f="IntPtr" /> ob
268b0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65  ject instance re
268c0 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62  presenting the b
268d0 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ase..        ///
268e0 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
268f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
26900 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
26910 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
26920 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20  ="offset">..    
26930 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65      /// The inte
26940 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  ger offset from 
26950 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20  the base memory 
26960 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74  location where t
26970 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
26980 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32  <see cref="Int32
26990 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62 65  " /> value to be
269a0 20 72 65 61 64 20 69 73 20 6c 6f 63 61 74 65 64   read is located
269b0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
269c0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
269d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
269e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
269f0 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32  <see cref="Int32
26a00 22 20 2f 3e 20 76 61 6c 75 65 20 61 74 20 74 68  " /> value at th
26a10 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f  e specified memo
26a20 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  ry location...  
26a30 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
26a40 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
26a50 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
26a60 52 65 61 64 49 6e 74 33 32 28 0d 0a 20 20 20 20  ReadInt32(..    
26a70 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
26a80 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20  ointer,..       
26a90 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 0d       int offset.
26aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
26ab0 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
26ac0 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
26ad0 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
26ae0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61         return Ma
26af0 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33 32 28  rshal.ReadInt32(
26b00 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29  pointer, offset)
26b10 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
26b20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72        return Mar
26b30 73 68 61 6c 2e 52 65 61 64 49 6e 74 33 32 28 49  shal.ReadInt32(I
26b40 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
26b50 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29  ointer, offset))
26b60 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
26b70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bc0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26bd0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
26be0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65  ..        /// Re
26bf0 61 64 73 20 61 20 3c 73 65 65 20 63 72 65 66 3d  ads a <see cref=
26c00 22 44 6f 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75  "Double" /> valu
26c10 65 20 66 72 6f 6d 20 74 68 65 20 73 70 65 63 69  e from the speci
26c20 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20  fied memory..   
26c30 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f       /// locatio
26c40 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
26c50 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
26c60 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
26c70 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a  ame="pointer">..
26c80 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
26c90 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74  <see cref="IntPt
26ca0 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  r" /> object ins
26cb0 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e 74 69  tance representi
26cc0 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20 20 20  ng the base..   
26cd0 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20       /// memory 
26ce0 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  location...     
26cf0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
26d00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
26d10 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74  ram name="offset
26d20 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
26d30 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73  The integer offs
26d40 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61 73 65  et from the base
26d50 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
26d60 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20 20 20   where the..    
26d70 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
26d80 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20 74 6f  f="Double" /> to
26d90 20 62 65 20 72 65 61 64 20 69 73 20 6c 6f 63 61   be read is loca
26da0 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ted...        //
26db0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
26dc0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
26dd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
26de0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f  he <see cref="Do
26df0 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 61  uble" /> value a
26e00 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
26e10 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e  memory location.
26e20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
26e30 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
26e40 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
26e50 64 6f 75 62 6c 65 20 52 65 61 64 44 6f 75 62 6c  double ReadDoubl
26e60 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
26e70 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d  IntPtr pointer,.
26e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
26e90 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20 20 20   offset..       
26ea0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
26eb0 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
26ec0 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
26ed0 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  K..            r
26ee0 65 74 75 72 6e 20 42 69 74 43 6f 6e 76 65 72 74  eturn BitConvert
26ef0 65 72 2e 49 6e 74 36 34 42 69 74 73 54 6f 44 6f  er.Int64BitsToDo
26f00 75 62 6c 65 28 4d 61 72 73 68 61 6c 2e 52 65 61  uble(Marshal.Rea
26f10 64 49 6e 74 36 34 28 0d 0a 20 20 20 20 20 20 20  dInt64(..       
26f20 20 20 20 20 20 20 20 20 20 70 6f 69 6e 74 65 72           pointer
26f30 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65 6c  , offset));..#el
26f40 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
26f50 72 65 74 75 72 6e 20 42 69 74 43 6f 6e 76 65 72  return BitConver
26f60 74 65 72 2e 54 6f 44 6f 75 62 6c 65 28 42 69 74  ter.ToDouble(Bit
26f70 43 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  Converter.GetByt
26f80 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
26f90 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 52 65 61       Marshal.Rea
26fa0 64 49 6e 74 36 34 28 49 6e 74 50 74 72 46 6f 72  dInt64(IntPtrFor
26fb0 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20  Offset(pointer, 
26fc0 6f 66 66 73 65 74 29 29 29 2c 20 30 29 3b 0d 0a  offset))), 0);..
26fd0 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
26fe0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
26ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27030 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
27040 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
27050 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 61 64 73         /// Reads
27060 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 49   an <see cref="I
27070 6e 74 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20  ntPtr" /> value 
27080 66 72 6f 6d 20 74 68 65 20 73 70 65 63 69 66 69  from the specifi
27090 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20  ed memory..     
270a0 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e     /// location.
270b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
270c0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
270d0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
270e0 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20  e="pointer">..  
270f0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
27100 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22  ee cref="IntPtr"
27110 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
27120 6e 63 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  nce representing
27130 20 74 68 65 20 62 61 73 65 0d 0a 20 20 20 20 20   the base..     
27140 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f     /// memory lo
27150 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
27160 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
27170 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
27180 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e  m name="offset">
27190 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
271a0 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74  e integer offset
271b0 20 66 72 6f 6d 20 74 68 65 20 62 61 73 65 20 6d   from the base m
271c0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77  emory location w
271d0 68 65 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20  here the..      
271e0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
271f0 22 49 6e 74 50 74 72 22 20 2f 3e 20 76 61 6c 75  "IntPtr" /> valu
27200 65 20 74 6f 20 62 65 20 72 65 61 64 20 69 73 20  e to be read is 
27210 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20  located...      
27220 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
27230 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
27240 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
27250 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
27260 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76 61 6c  ="IntPtr" /> val
27270 75 65 20 61 74 20 74 68 65 20 73 70 65 63 69 66  ue at the specif
27280 69 65 64 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  ied memory locat
27290 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
272a0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
272b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
272c0 74 69 63 20 49 6e 74 50 74 72 20 52 65 61 64 49  tic IntPtr ReadI
272d0 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
272e0 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74      IntPtr point
272f0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
27300 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20 20   int offset..   
27310 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
27320 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
27330 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
27340 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
27350 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61     return Marsha
27360 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 70 6f 69  l.ReadIntPtr(poi
27370 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  nter, offset);..
27380 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
27390 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61     return Marsha
273a0 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 49 6e 74  l.ReadIntPtr(Int
273b0 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69  PtrForOffset(poi
273c0 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29 3b 0d  nter, offset));.
273d0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
273e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
273f0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
27400 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
27410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27440 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
27450 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 61 72       #region Mar
27460 73 68 61 6c 20 57 72 69 74 65 20 48 65 6c 70 65  shal Write Helpe
27470 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
27480 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
27490 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 57 72  ..        /// Wr
274a0 69 74 65 73 20 61 6e 20 3c 73 65 65 20 63 72 65  ites an <see cre
274b0 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c  f="Int32" /> val
274c0 75 65 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  ue to the specif
274d0 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20  ied memory..    
274e0 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e      /// location
274f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
27500 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
27510 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
27520 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20  me="pointer">.. 
27530 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
27540 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72  see cref="IntPtr
27550 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
27560 61 6e 63 65 20 72 65 70 72 65 73 65 6e 74 69 6e  ance representin
27570 67 20 74 68 65 20 62 61 73 65 0d 0a 20 20 20 20  g the base..    
27580 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c      /// memory l
27590 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ocation...      
275a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
275b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
275c0 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22  am name="offset"
275d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
275e0 68 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65  he integer offse
275f0 74 20 66 72 6f 6d 20 74 68 65 20 62 61 73 65 20  t from the base 
27600 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  memory location 
27610 77 68 65 72 65 20 74 68 65 0d 0a 20 20 20 20 20  where the..     
27620 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
27630 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75  ="Int32" /> valu
27640 65 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20  e to be written 
27650 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20  is located...   
27660 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
27670 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
27680 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
27690 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
276a0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
276b0 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20  Int32" /> value 
276c0 74 6f 20 77 72 69 74 65 2e 0d 0a 20 20 20 20 20  to write...     
276d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
276e0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
276f0 73 74 61 74 69 63 20 76 6f 69 64 20 57 72 69 74  static void Writ
27700 65 49 6e 74 33 32 28 0d 0a 20 20 20 20 20 20 20  eInt32(..       
27710 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e       IntPtr poin
27720 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ter,..          
27730 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20    int offset,.. 
27740 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 76             int v
27750 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
27760 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
27770 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
27780 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
27790 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
277a0 68 61 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 70  hal.WriteInt32(p
277b0 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 2c 20  ointer, offset, 
277c0 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
277d0 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
277e0 68 61 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 49  hal.WriteInt32(I
277f0 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
27800 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c  ointer, offset),
27810 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
27820 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
27830 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
27890 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
278a0 20 2f 2f 2f 20 57 72 69 74 65 73 20 61 20 3c 73   /// Writes a <s
278b0 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22  ee cref="Double"
278c0 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 74 68 65   /> value to the
278d0 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72   specified memor
278e0 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  y..        /// l
278f0 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ocation...      
27900 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
27910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
27920 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74  aram name="point
27930 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  er">..        //
27940 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
27950 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65  "IntPtr" /> obje
27960 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72  ct instance repr
27970 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73  esenting the bas
27980 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  e..        /// m
27990 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d  emory location..
279a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
279b0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
279c0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
279d0 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20  offset">..      
279e0 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65    /// The intege
279f0 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  r offset from th
27a00 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f  e base memory lo
27a10 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65  cation where the
27a20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
27a30 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22  ee cref="Double"
27a40 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62 65 20   /> value to be 
27a50 77 72 69 74 74 65 6e 20 69 73 20 6c 6f 63 61 74  written is locat
27a60 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
27a70 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
27a80 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
27a90 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20  me="value">..   
27aa0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
27ab0 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20  e cref="Double" 
27ac0 2f 3e 20 76 61 6c 75 65 20 74 6f 20 77 72 69 74  /> value to writ
27ad0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
27ae0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
27af0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
27b00 76 6f 69 64 20 57 72 69 74 65 44 6f 75 62 6c 65  void WriteDouble
27b10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
27b20 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a  ntPtr pointer,..
27b30 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
27b40 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20  offset,..       
27b50 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
27b60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
27b70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
27b80 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
27b90 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
27ba0 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
27bb0 2e 57 72 69 74 65 49 6e 74 36 34 28 70 6f 69 6e  .WriteInt64(poin
27bc0 74 65 72 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20  ter, offset,..  
27bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 69                Bi
27be0 74 43 6f 6e 76 65 72 74 65 72 2e 44 6f 75 62 6c  tConverter.Doubl
27bf0 65 54 6f 49 6e 74 36 34 42 69 74 73 28 76 61 6c  eToInt64Bits(val
27c00 75 65 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ue));..#else..  
27c10 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
27c20 6c 2e 57 72 69 74 65 49 6e 74 36 34 28 49 6e 74  l.WriteInt64(Int
27c30 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69  PtrForOffset(poi
27c40 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c 0d 0a  nter, offset),..
27c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c60 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 54 6f 49  BitConverter.ToI
27c70 6e 74 36 34 28 42 69 74 43 6f 6e 76 65 72 74 65  nt64(BitConverte
27c80 72 2e 47 65 74 42 79 74 65 73 28 76 61 6c 75 65  r.GetBytes(value
27c90 29 2c 20 30 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), 0));..#endif.
27ca0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
27cb0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27d00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
27d10 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
27d20 2f 2f 2f 20 57 72 69 74 65 73 20 61 20 3c 73 65  /// Writes a <se
27d30 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
27d40 2f 3e 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20  /> value to the 
27d50 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79  specified memory
27d60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f  ..        /// lo
27d70 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
27d80 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
27d90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
27da0 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65  ram name="pointe
27db0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
27dc0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
27dd0 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63  IntPtr" /> objec
27de0 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65  t instance repre
27df0 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65  senting the base
27e00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
27e10 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  mory location...
27e20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
27e30 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
27e40 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f  / <param name="o
27e50 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20  ffset">..       
27e60 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
27e70 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
27e80 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63   base memory loc
27e90 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d  ation where the.
27ea0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
27eb0 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
27ec0 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 77  /> value to be w
27ed0 72 69 74 74 65 6e 20 69 73 20 6c 6f 63 61 74 65  ritten is locate
27ee0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
27ef0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
27f00 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
27f10 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20  e="value">..    
27f20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
27f30 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f   cref="IntPtr" /
27f40 3e 20 76 61 6c 75 65 20 74 6f 20 77 72 69 74 65  > value to write
27f50 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
27f60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
27f70 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
27f80 6f 69 64 20 57 72 69 74 65 49 6e 74 50 74 72 28  oid WriteIntPtr(
27f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
27fa0 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20  tPtr pointer,.. 
27fb0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f             int o
27fc0 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
27fd0 20 20 20 20 49 6e 74 50 74 72 20 76 61 6c 75 65      IntPtr value
27fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
27ff0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
28000 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
28010 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
28020 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
28030 57 72 69 74 65 49 6e 74 50 74 72 28 70 6f 69 6e  WriteIntPtr(poin
28040 74 65 72 2c 20 6f 66 66 73 65 74 2c 20 76 61 6c  ter, offset, val
28050 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
28060 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
28070 2e 57 72 69 74 65 49 6e 74 50 74 72 28 49 6e 74  .WriteIntPtr(Int
28080 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69  PtrForOffset(poi
28090 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c 20 76  nter, offset), v
280a0 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
280b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
280c0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
280d0 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
280e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
280f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28130 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
28140 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 6f 64  region SQLiteMod
28150 75 6c 65 20 42 61 73 65 20 43 6c 61 73 73 0d 0a  ule Base Class..
28160 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
28170 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
28180 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
28190 20 61 20 6d 61 6e 61 67 65 64 20 76 69 72 74 75   a managed virtu
281a0 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20  al table module 
281b0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
281c0 0a 20 20 20 20 2f 2f 2f 20 49 74 20 69 73 20 6e  .    /// It is n
281d0 6f 74 20 73 65 61 6c 65 64 20 61 6e 64 20 6d 75  ot sealed and mu
281e0 73 74 20 62 65 20 75 73 65 64 20 61 73 20 74 68  st be used as th
281f0 65 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f 72  e base class for
28200 20 61 6e 79 0d 0a 20 20 20 20 2f 2f 2f 20 75 73   any..    /// us
28210 65 72 2d 64 65 66 69 6e 65 64 20 76 69 72 74 75  er-defined virtu
28220 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20  al table module 
28230 63 6c 61 73 73 65 73 20 69 6d 70 6c 65 6d 65 6e  classes implemen
28240 74 65 64 20 69 6e 20 6d 61 6e 61 67 65 64 20 63  ted in managed c
28250 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
28260 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
28270 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 63 6c  blic abstract cl
28280 61 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ass SQLiteModule
28290 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
282a0 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
282b0 64 75 6c 65 2c 20 2f 2a 49 53 51 4c 69 74 65 4e  dule, /*ISQLiteN
282c0 61 74 69 76 65 4d 6f 64 75 6c 65 2c 2a 2f 0d 0a  ativeModule,*/..
282d0 20 20 20 20 20 20 20 20 20 20 20 20 49 44 69 73              IDis
282e0 70 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53  posable /* NOT S
282f0 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d  EALED */..    {.
28300 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
28310 20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64   SQLiteNativeMod
28320 75 6c 65 20 50 72 69 76 61 74 65 20 43 6c 61 73  ule Private Clas
28330 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
28340 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
28350 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
28360 6c 65 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  le :..          
28370 20 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74        ISQLiteNat
28380 69 76 65 4d 6f 64 75 6c 65 2c 20 49 44 69 73 70  iveModule, IDisp
28390 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  osable..        
283a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
283b0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
283c0 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20  onstants..      
283d0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
283e0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
283f0 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65   /// This is the
28400 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 61   value that is a
28410 6c 77 61 79 73 20 75 73 65 64 20 66 6f 72 20 74  lways used for t
28420 68 65 20 22 6c 6f 67 45 72 72 6f 72 73 22 0d 0a  he "logErrors"..
28430 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28440 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68 65  parameter to the
28450 20 76 61 72 69 6f 75 73 20 73 74 61 74 69 63 20   various static 
28460 65 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 6d  error handling m
28470 65 74 68 6f 64 73 20 70 72 6f 76 69 64 65 64 0d  ethods provided.
28480 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28490 20 62 79 20 74 68 65 20 3c 73 65 65 20 63 72 65   by the <see cre
284a0 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22  f="SQLiteModule"
284b0 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20   /> class...    
284c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
284d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
284e0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
284f0 74 20 62 6f 6f 6c 20 44 65 66 61 75 6c 74 4c 6f  t bool DefaultLo
28500 67 45 72 72 6f 72 73 20 3d 20 74 72 75 65 3b 0d  gErrors = true;.
28510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
28520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
28570 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
28580 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28590 20 54 68 69 73 20 69 73 20 74 68 65 20 65 72 72   This is the err
285a0 6f 72 20 6d 65 73 73 61 67 65 20 74 65 78 74 20  or message text 
285b0 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 63 6f  used when the co
285c0 6e 74 61 69 6e 65 64 0d 0a 20 20 20 20 20 20 20  ntained..       
285d0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
285e0 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
285f0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
28600 61 6e 63 65 20 69 73 20 6e 6f 74 20 61 76 61 69  ance is not avai
28610 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  lable..         
28620 20 20 20 2f 2f 2f 20 66 6f 72 20 61 6e 79 20 72     /// for any r
28630 65 61 73 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  eason...        
28640 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
28650 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
28660 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
28670 72 69 6e 67 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  ring ModuleNotAv
28680 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73 73  ailableErrorMess
28690 61 67 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  age =..         
286a0 20 20 20 20 20 20 20 22 6e 61 74 69 76 65 20 6d         "native m
286b0 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
286c0 74 69 6f 6e 20 6e 6f 74 20 61 76 61 69 6c 61 62  tion not availab
286d0 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  le";..          
286e0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
286f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
28700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
28750 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44  region Private D
28760 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
28770 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
28780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28790 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
287a0 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
287b0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
287c0 75 73 65 64 20 74 6f 20 70 72 6f 76 69 64 65 0d  used to provide.
287d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
287e0 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69   an implementati
287f0 6f 6e 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63  on of the <see c
28800 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
28810 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20  veModule" />..  
28820 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e            /// in
28830 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 20 20  terface...      
28840 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
28850 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
28860 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
28870 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 3b 0d 0a  Module module;..
28880 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
28890 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
288a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
288b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
288c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
288d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
288e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
288f0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
28900 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
28910 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
28920 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
28930 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28940 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
28950 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
28960 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
28970 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
28980 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
28990 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
289a0 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20  "module">..     
289b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
289c0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
289d0 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  Module" /> objec
289e0 74 20 69 6e 73 74 61 6e 63 65 20 75 73 65 64 20  t instance used 
289f0 74 6f 20 70 72 6f 76 69 64 65 0d 0a 20 20 20 20  to provide..    
28a00 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 20 69          /// an i
28a10 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
28a20 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
28a30 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
28a40 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20  ule" />..       
28a50 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61       /// interfa
28a60 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce...           
28a70 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
28a80 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
28a90 63 20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  c SQLiteNativeMo
28aa0 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  dule(..         
28ab0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64         SQLiteMod
28ac0 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20 20 20 20  ule module..    
28ad0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28ae0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
28b00 69 73 2e 6d 6f 64 75 6c 65 20 3d 20 6d 6f 64 75  is.module = modu
28b10 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le;..           
28b20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28b30 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
28b40 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
28b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b70 2f 2f 2f 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 0d 0a 0d  /////////////...
28b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
28ba0 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61  gion Private Sta
28bb0 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  tic Methods..   
28bc0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
28bd0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
28be0 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65      /// Sets the
28bf0 20 74 61 62 6c 65 20 65 72 72 6f 72 20 6d 65 73   table error mes
28c00 73 61 67 65 20 74 6f 20 6f 6e 65 20 74 68 61 74  sage to one that
28c10 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 6e   indicates the n
28c20 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 20  ative..         
28c30 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 69 6d     /// module im
28c40 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
28c50 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  not available...
28c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28c70 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
28c80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
28c90 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
28ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28cb0 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
28cc0 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
28cd0 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
28ce0 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
28cf0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
28d00 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
28d10 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
28d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28d30 2f 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 3c  / The value of <
28d40 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
28d50 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 22  ErrorCode.Error"
28d60 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20   />...          
28d70 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
28d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
28d90 69 76 61 74 65 20 73 74 61 74 69 63 20 53 51 4c  ivate static SQL
28da0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4d 6f 64  iteErrorCode Mod
28db0 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54  uleNotAvailableT
28dc0 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20 20 20 20  ableError(..    
28dd0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
28de0 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
28df0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
28e00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28e10 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54              SetT
28e20 61 62 6c 65 45 72 72 6f 72 28 6e 75 6c 6c 2c 20  ableError(null, 
28e30 70 56 74 61 62 2c 20 44 65 66 61 75 6c 74 4c 6f  pVtab, DefaultLo
28e40 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20  gErrors,..      
28e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
28e60 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
28e70 45 72 72 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a  ErrorMessage);..
28e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28e90 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
28ea0 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
28eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28f20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
28f30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28f40 53 65 74 73 20 74 68 65 20 74 61 62 6c 65 20 65  Sets the table e
28f50 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f 20  rror message to 
28f60 6f 6e 65 20 74 68 61 74 20 69 6e 64 69 63 61 74  one that indicat
28f70 65 73 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20  es the native.. 
28f80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d             /// m
28f90 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
28fa0 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 76 61 69  tion is not avai
28fb0 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  lable...        
28fc0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
28fd0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
28fe0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
28ff0 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
29000 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
29010 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
29020 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
29030 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65  ab_cursor derive
29040 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  d..            /
29050 2f 2f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  // structure... 
29060 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
29070 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
29080 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
29090 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
290a0 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 6f 66  /// The value of
290b0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
290c0 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
290d0 72 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20  r" />...        
290e0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
290f0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
29100 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 53  private static S
29110 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4d  QLiteErrorCode M
29120 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
29130 65 43 75 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20  eCursorError(.. 
29140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
29150 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
29160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
29170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29190 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72 28   SetCursorError(
291a0 6e 75 6c 6c 2c 20 70 43 75 72 73 6f 72 2c 20 44  null, pCursor, D
291b0 65 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72 73 2c  efaultLogErrors,
291c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
291d0 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41        ModuleNotA
291e0 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73  vailableErrorMes
291f0 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sage);....      
29200 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29210 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
29220 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
29230 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
29240 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
29250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
292b0 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65   #region ISQLite
292c0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 4d 65 6d  NativeModule Mem
292d0 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  bers..          
292e0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
292f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29300 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
29310 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
29320 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22  eModule.xCreate"
29330 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
29340 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
29350 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
29360 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
29370 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20  name="pDb">..   
29380 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
29390 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
293a0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
293b0 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
293c0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
293d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
293e0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
293f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
29400 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  pAux">..        
29410 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29420 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29430 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29440 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Create" /> metho
29450 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
29460 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
29470 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
29480 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22  aram name="argc"
29490 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
294a0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
294b0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
294c0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
294d0 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
294e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
294f0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
29500 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
29510 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20  name="argv">..  
29520 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
29530 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
29540 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
29550 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e  dule.xCreate" />
29560 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
29570 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
29580 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
29590 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
295a0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
295b0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
295c0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
295d0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
295e0 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74  .xCreate" /> met
295f0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
29600 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
29610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29620 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45 72  <param name="pEr
29630 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  ror">..         
29640 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
29650 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
29660 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
29670 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
29680 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29690 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
296a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
296b0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
296c0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
296d0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
296e0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
296f0 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Create" /> metho
29700 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
29710 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
29720 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
29730 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
29740 64 65 20 78 43 72 65 61 74 65 28 0d 0a 20 20 20  de xCreate(..   
29750 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
29760 50 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20  Ptr pDb,..      
29770 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
29780 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20   pAux,..        
29790 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63          int argc
297a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
297b0 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 2c 0d     IntPtr argv,.
297c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
297d0 20 72 65 66 20 49 6e 74 50 74 72 20 70 56 74 61   ref IntPtr pVta
297e0 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
297f0 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
29800 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  Error..         
29810 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
29820 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29830 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
29840 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29860 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
29870 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29880 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29890 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72              pErr
298a0 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  or = SQLiteStrin
298b0 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
298c0 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298e0 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
298f0 62 6c 65 45 72 72 6f 72 4d 65 73 73 61 67 65 29  bleErrorMessage)
29900 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29910 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29920 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
29930 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
29940 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29950 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
29960 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 72 65 61  urn module.xCrea
29970 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
29980 20 20 20 20 20 20 20 20 20 70 44 62 2c 20 70 41           pDb, pA
29990 75 78 2c 20 61 72 67 63 2c 20 61 72 67 76 2c 20  ux, argc, argv, 
299a0 72 65 66 20 70 56 74 61 62 2c 20 72 65 66 20 70  ref pVtab, ref p
299b0 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  Error);..       
299c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
299d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
299e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
299f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29a20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
29a30 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
29a40 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29a50 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29a60 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29a70 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68  Connect" /> meth
29a80 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
29a90 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
29aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29ab0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44   <param name="pD
29ac0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
29ad0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
29ae0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
29af0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
29b00 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
29b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29b20 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
29b30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
29b40 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22 3e 0d  am name="pAux">.
29b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29b60 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
29b70 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
29b80 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
29b90 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
29ba0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
29bb0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
29bc0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
29bd0 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20  ame="argc">..   
29be0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
29bf0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
29c00 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
29c10 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
29c20 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
29c30 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
29c40 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
29c50 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
29c60 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20  "argv">..       
29c70 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
29c80 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
29c90 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
29ca0 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  xConnect" /> met
29cb0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
29cc0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
29cd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29ce0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
29cf0 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ab">..          
29d00 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
29d10 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
29d20 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
29d30 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
29d40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29d50 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
29d60 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
29d70 72 61 6d 20 6e 61 6d 65 3d 22 70 45 72 72 6f 72  ram name="pError
29d80 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
29d90 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29da0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29db0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
29dc0 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ect" /> method..
29dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29de0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
29df0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
29e00 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
29e10 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
29e20 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
29e30 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
29e40 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
29e50 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29e60 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
29e70 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
29e80 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
29e90 65 20 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  e xConnect(..   
29ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
29eb0 50 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20  Ptr pDb,..      
29ec0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
29ed0 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20   pAux,..        
29ee0 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63          int argc
29ef0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29f00 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 2c 0d     IntPtr argv,.
29f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f20 20 72 65 66 20 49 6e 74 50 74 72 20 70 56 74 61   ref IntPtr pVta
29f30 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
29f40 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
29f50 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  Error..         
29f60 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
29f70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29f80 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
29f90 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
29fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fb0 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
29fc0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29fd0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29fe0 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72              pErr
29ff0 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  or = SQLiteStrin
2a000 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
2a010 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
2a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a030 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2a040 62 6c 65 45 72 72 6f 72 4d 65 73 73 61 67 65 29  bleErrorMessage)
2a050 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a060 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a070 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
2a080 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
2a090 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2a0b0 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  urn module.xConn
2a0c0 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
2a0d0 20 20 20 20 20 20 20 20 20 20 70 44 62 2c 20 70            pDb, p
2a0e0 41 75 78 2c 20 61 72 67 63 2c 20 61 72 67 76 2c  Aux, argc, argv,
2a0f0 20 72 65 66 20 70 56 74 61 62 2c 20 72 65 66 20   ref pVtab, ref 
2a100 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20  pError);..      
2a110 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a120 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a170 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2a180 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2a190 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2a1a0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2a1b0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2a1c0 78 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d  xBestIndex" /> m
2a1d0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2a1e0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2a1f0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2a200 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2a210 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
2a220 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2a230 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2a240 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2a250 2e 78 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20  .xBestIndex" /> 
2a260 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2a270 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2a280 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2a290 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2a2a0 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20  pIndex">..      
2a2b0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2a2c0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2a2d0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2a2e0 2e 78 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20  .xBestIndex" /> 
2a2f0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2a300 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2a310 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2a320 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
2a330 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2a340 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2a350 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2a360 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 22  dule.xBestIndex"
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 42 65 73  teErrorCode xBes
2a3c0 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20  tIndex(..       
2a3d0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2a3e0 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
2a3f0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2a400 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20  Index..         
2a410 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2a420 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a430 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
2a440 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a460 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
2a470 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a480 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a490 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2a4a0 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  leTableError(pVt
2a4b0 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
2a4c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
2a4d0 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
2a4e0 28 70 56 74 61 62 2c 20 70 49 6e 64 65 78 29 3b  (pVtab, pIndex);
2a4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
2a530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a550 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2a560 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2a570 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a580 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2a590 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2a5a0 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e  eModule.xDisconn
2a5b0 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ect" /> method..
2a5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a5d0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2a5e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2a5f0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
2a600 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2a610 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2a620 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2a630 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f  iveModule.xDisco
2a640 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
2a650 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a660 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2a670 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
2a680 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2a690 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2a6a0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2a6b0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2a6c0 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  Disconnect" /> m
2a6d0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2a6e0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2a6f0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2a700 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2a710 6f 72 43 6f 64 65 20 78 44 69 73 63 6f 6e 6e 65  orCode xDisconne
2a720 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
2a730 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
2a740 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b..             
2a750 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2a760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a770 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2a780 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2a790 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a7a0 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2a7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a7c0 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2a7d0 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61  leNotAvailableTa
2a7e0 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b  bleError(pVtab);
2a7f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a800 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c      return modul
2a810 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 28 70 56  e.xDisconnect(pV
2a820 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tab);..         
2a830 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a840 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a880 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a890 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2a8a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2a8b0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2a8c0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2a8d0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65  NativeModule.xDe
2a8e0 73 74 72 6f 79 22 20 2f 3e 20 6d 65 74 68 6f 64  stroy" /> method
2a8f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a900 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2a910 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2a920 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
2a930 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
2a940 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2a950 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2a960 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73  ativeModule.xDes
2a970 74 72 6f 79 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  troy" /> method.
2a980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a990 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2a9a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2a9b0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2a9c0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2a9d0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2a9e0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44  eNativeModule.xD
2a9f0 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65 74 68 6f  estroy" /> metho
2aa00 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2aa10 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2aa20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2aa30 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2aa40 64 65 20 78 44 65 73 74 72 6f 79 28 0d 0a 20 20  de xDestroy(..  
2aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2aa60 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2aa80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2aaa0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2aab0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2aac0 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2aad0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2aaf0 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2ab00 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f  ailableTableErro
2ab10 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  r(pVtab);....   
2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ab30 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 44 65 73 74  urn module.xDest
2ab40 72 6f 79 28 70 56 74 61 62 29 3b 0d 0a 20 20 20  roy(pVtab);..   
2ab50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2ab60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2ab70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2abb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2abc0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2abd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2abe0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2abf0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2ac00 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74  le.xOpen" /> met
2ac10 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2ac20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2ac30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ac40 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2ac50 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
2ac60 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2ac70 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2ac80 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2ac90 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Open" /> method.
2aca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2acb0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2acc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2acd0 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
2ace0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2acf0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2ad00 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2ad10 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e  tiveModule.xOpen
2ad20 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2ad30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2ad40 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2ad50 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2ad60 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2ad70 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2ad80 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2ad90 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22  iveModule.xOpen"
2ada0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2adb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2adc0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2add0 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2ade0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4f 70 65  teErrorCode xOpe
2adf0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
2ae00 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
2ae10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ae20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43     ref IntPtr pC
2ae30 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
2ae40 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2ae50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ae60 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
2ae70 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae90 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
2aea0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2aeb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2aec0 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2aed0 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  leTableError(pVt
2aee0 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
2aef0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
2af00 6f 64 75 6c 65 2e 78 4f 70 65 6e 28 70 56 74 61  odule.xOpen(pVta
2af10 62 2c 20 72 65 66 20 70 43 75 72 73 6f 72 29 3b  b, ref pCursor);
2af20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2af30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2af40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af80 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2af90 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2afa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2afb0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2afc0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2afd0 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 22 20  eModule.xClose" 
2afe0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2aff0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2b000 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2b010 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2b020 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a  ame="pCursor">..
2b030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b040 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b050 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b060 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 22 20 2f  Module.xClose" /
2b070 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2b080 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2b090 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2b0a0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2b0b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b0c0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b0d0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b0e0 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 22 20 2f  Module.xClose" /
2b0f0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2b100 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2b110 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2b120 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
2b130 45 72 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73 65  ErrorCode xClose
2b140 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2b150 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f     IntPtr pCurso
2b160 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
2b170 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2b180 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b190 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2b1a0 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2b1b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b1c0 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2b1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b1e0 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2b1f0 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75  leNotAvailableCu
2b200 72 73 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f  rsorError(pCurso
2b210 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
2b220 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2b230 64 75 6c 65 2e 78 43 6c 6f 73 65 28 70 43 75 72  dule.xClose(pCur
2b240 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  sor);..         
2b250 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2b260 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2b2b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2b2c0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2b2d0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2b2e0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2b2f0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
2b300 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
2b310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b320 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2b330 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2b340 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
2b350 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  or">..          
2b360 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2b370 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2b380 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
2b390 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
2b3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b3b0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2b3c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2b3d0 61 6d 20 6e 61 6d 65 3d 22 69 64 78 4e 75 6d 22  am name="idxNum"
2b3e0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2b3f0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2b400 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2b410 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65  iveModule.xFilte
2b420 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  r" /> method... 
2b430 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2b440 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2b450 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2b460 6e 61 6d 65 3d 22 69 64 78 53 74 72 22 3e 0d 0a  name="idxStr">..
2b470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b480 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b490 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b4a0 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2b4b0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2b4c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2b4d0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2b4e0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2b4f0 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20  e="argc">..     
2b500 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2b510 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2b520 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2b530 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  e.xFilter" /> me
2b540 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2b550 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2b560 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b570 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
2b580 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  gv">..          
2b590 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2b5a0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2b5b0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
2b5c0 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
2b5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b5e0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2b5f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2b600 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2b610 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2b620 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2b630 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
2b640 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64  ilter" /> method
2b650 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b660 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2b670 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2b680 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2b690 65 20 78 46 69 6c 74 65 72 28 0d 0a 20 20 20 20  e xFilter(..    
2b6a0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2b6b0 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20  tr pCursor,..   
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2b6d0 20 69 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20   idxNum,..      
2b6e0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2b6f0 20 69 64 78 53 74 72 2c 0d 0a 20 20 20 20 20 20   idxStr,..      
2b700 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72            int ar
2b710 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gc,..           
2b720 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76       IntPtr argv
2b730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b740 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2b750 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b760 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70      // CheckDisp
2b770 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
2b780 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2b790 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7b0 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c      return Modul
2b7c0 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75 72  eNotAvailableCur
2b7d0 73 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f 72  sorError(pCursor
2b7e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b7f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
2b800 75 6c 65 2e 78 46 69 6c 74 65 72 28 70 43 75 72  ule.xFilter(pCur
2b810 73 6f 72 2c 20 69 64 78 4e 75 6d 2c 20 69 64 78  sor, idxNum, idx
2b820 53 74 72 2c 20 61 72 67 63 2c 20 61 72 67 76 29  Str, argc, argv)
2b830 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2b840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b890 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2b8a0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2b8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b8c0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2b8d0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2b8e0 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 22 20  veModule.xNext" 
2b8f0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2b900 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2b910 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2b920 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2b930 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a  ame="pCursor">..
2b940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b950 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b960 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b970 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 22 20 2f 3e  Module.xNext" />
2b980 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2b990 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2b9a0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2b9b0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2b9c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2b9d0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2b9e0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2b9f0 6f 64 75 6c 65 2e 78 4e 65 78 74 22 20 2f 3e 20  odule.xNext" /> 
2ba00 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2ba10 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2ba20 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2ba30 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2ba40 72 6f 72 43 6f 64 65 20 78 4e 65 78 74 28 0d 0a  rorCode xNext(..
2ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba60 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
2ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ba90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2baa0 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
2bab0 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2bac0 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2bad0 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2baf0 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
2bb00 6f 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f  otAvailableCurso
2bb10 72 45 72 72 6f 72 28 70 43 75 72 73 6f 72 29 3b  rError(pCursor);
2bb20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2bb30 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c      return modul
2bb40 65 2e 78 4e 65 78 74 28 70 43 75 72 73 6f 72 29  e.xNext(pCursor)
2bb50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2bb60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bbb0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2bbc0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2bbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2bbe0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2bbf0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2bc00 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22 20 2f  veModule.xEof" /
2bc10 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2bc20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2bc30 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2bc40 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2bc50 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
2bc60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2bc70 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2bc80 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2bc90 6f 64 75 6c 65 2e 78 45 6f 66 22 20 2f 3e 20 6d  odule.xEof" /> m
2bca0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2bcb0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2bcc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2bcd0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2bce0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2bcf0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2bd00 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2bd10 75 6c 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74  ule.xEof" /> met
2bd20 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2bd30 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2bd40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2bd50 62 6c 69 63 20 69 6e 74 20 78 45 6f 66 28 0d 0a  blic int xEof(..
2bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd70 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
2bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2bda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bdb0 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
2bdc0 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2bdd0 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2bde0 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2be00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be10 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76       ModuleNotAv
2be20 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72  ailableCursorErr
2be30 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20  or(pCursor);..  
2be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be50 20 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20    return 1;..   
2be60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2be70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2be80 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2be90 78 45 6f 66 28 70 43 75 72 73 6f 72 29 3b 0d 0a  xEof(pCursor);..
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2beb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2bf10 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2bf20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2bf30 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2bf40 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2bf50 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f  odule.xColumn" /
2bf60 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2bf70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2bf80 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2bf90 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2bfa0 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
2bfb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2bfc0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2bfd0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2bfe0 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f  odule.xColumn" /
2bff0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2c000 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2c010 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2c020 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2c030 3d 22 70 43 6f 6e 74 65 78 74 22 3e 0d 0a 20 20  ="pContext">..  
2c040 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2c050 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2c060 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2c070 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e  dule.xColumn" />
2c080 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2c090 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2c0a0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2c0b0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2c0c0 22 69 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20  "index">..      
2c0d0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2c0e0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2c0f0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2c100 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74  .xColumn" /> met
2c110 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2c120 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2c130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c140 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
2c150 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2c160 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2c170 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2c180 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65  e.xColumn" /> me
2c190 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2c1a0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
2c1b0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
2c1c0 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
2c1d0 72 43 6f 64 65 20 78 43 6f 6c 75 6d 6e 28 0d 0a  rCode xColumn(..
2c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1f0 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d  IntPtr pCursor,.
2c200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c210 20 49 6e 74 50 74 72 20 70 43 6f 6e 74 65 78 74   IntPtr pContext
2c220 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c230 20 20 20 69 6e 74 20 69 6e 64 65 78 0d 0a 20 20     int index..  
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2c250 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c270 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2c280 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2c290 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2c2a0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2c0 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
2c2d0 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45  AvailableCursorE
2c2e0 72 72 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a  rror(pCursor);..
2c2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c300 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2c310 78 43 6f 6c 75 6d 6e 28 70 43 75 72 73 6f 72 2c  xColumn(pCursor,
2c320 20 70 43 6f 6e 74 65 78 74 2c 20 69 6e 64 65 78   pContext, index
2c330 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2c340 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c350 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c390 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c3a0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2c3b0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c3c0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2c3d0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2c3e0 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64  iveModule.xRowId
2c3f0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2c400 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2c410 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2c420 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2c430 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e   name="pCursor">
2c440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c450 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2c460 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2c470 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 22  veModule.xRowId"
2c480 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2c490 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2c4a0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2c4b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2c4c0 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
2c4d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2c4e0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2c4f0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2c500 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d  ule.xRowId" /> m
2c510 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2c520 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2c530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c540 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
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 52 6f 77 49 64 22 20 2f 3e 20 6d  ule.xRowId" /> m
2c590 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2c5a0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2c5b0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2c5c0 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2c5d0 6f 72 43 6f 64 65 20 78 52 6f 77 49 64 28 0d 0a  orCode xRowId(..
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5f0 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d  IntPtr pCursor,.
2c600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c610 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d   ref long rowId.
2c620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c630 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2c640 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c650 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2c660 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2c670 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2c680 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6a0 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2c6b0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73  NotAvailableCurs
2c6c0 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f 72 29  orError(pCursor)
2c6d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c6e0 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75       return modu
2c6f0 6c 65 2e 78 52 6f 77 49 64 28 70 43 75 72 73 6f  le.xRowId(pCurso
2c700 72 2c 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a  r, ref rowId);..
2c710 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c720 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c780 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2c790 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2c7a0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2c7b0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2c7c0 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f  odule.xUpdate" /
2c7d0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2c7e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2c7f0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2c800 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2c810 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
2c820 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2c830 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2c840 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2c850 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20  ule.xUpdate" /> 
2c860 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2c870 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2c880 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c890 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2c8a0 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
2c8b0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2c8c0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2c8d0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2c8e0 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Update" /> metho
2c8f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2c900 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2c910 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2c920 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22  aram name="argv"
2c930 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c940 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2c950 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2c960 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74  iveModule.xUpdat
2c970 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
2c980 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c990 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2c9a0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2c9b0 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20  name="rowId">.. 
2c9c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2c9d0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2c9e0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2c9f0 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f  odule.xUpdate" /
2ca00 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2ca10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2ca20 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2ca30 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2ca40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ca50 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2ca60 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2ca70 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 22 20  Module.xUpdate" 
2ca80 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2ca90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
2caa0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2cab0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2cac0 65 45 72 72 6f 72 43 6f 64 65 20 78 55 70 64 61  eErrorCode xUpda
2cad0 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
2cae0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
2caf0 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
2cb00 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
2cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2cb20 6e 74 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20  ntPtr argv,..   
2cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2cb40 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20   long rowId..   
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2cb60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2cb80 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2cb90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2cba0 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2cbb0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2cbd0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2cbe0 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2cbf0 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
2cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2cc10 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 55 70 64  turn module.xUpd
2cc20 61 74 65 28 70 56 74 61 62 2c 20 61 72 67 63 2c  ate(pVtab, argc,
2cc30 20 61 72 67 76 2c 20 72 65 66 20 72 6f 77 49 64   argv, ref rowId
2cc40 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2cc50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2cc60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2cc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cca0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2ccb0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2ccc0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2ccd0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2cce0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2ccf0 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e  iveModule.xBegin
2cd00 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2cd10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2cd20 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2cd30 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2cd40 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2cd60 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2cd70 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2cd80 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f  Module.xBegin" /
2cd90 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2cda0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2cdb0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2cdc0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2cdd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2cde0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2cdf0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2ce00 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f  Module.xBegin" /
2ce10 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2ce20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2ce30 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2ce40 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
2ce50 45 72 72 6f 72 43 6f 64 65 20 78 42 65 67 69 6e  ErrorCode xBegin
2ce60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ce70 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
2ce80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce90 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2cea0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ceb0 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2cec0 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2ced0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2cee0 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf00 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2cf10 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2cf20 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2cf30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cf40 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2cf50 78 42 65 67 69 6e 28 70 56 74 61 62 29 3b 0d 0a  xBegin(pVtab);..
2cf60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2cf70 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2cf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cfd0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2cfe0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2cff0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2d000 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2d010 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20  odule.xSync" /> 
2d020 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2d030 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2d040 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2d050 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2d060 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2d070 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2d080 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2d090 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2d0a0 65 2e 78 53 79 6e 63 22 20 2f 3e 20 6d 65 74 68  e.xSync" /> meth
2d0b0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d0c0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2d0d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d0e0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2d0f0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2d100 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2d110 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2d120 2e 78 53 79 6e 63 22 20 2f 3e 20 6d 65 74 68 6f  .xSync" /> metho
2d130 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2d140 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2d150 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2d160 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2d170 64 65 20 78 53 79 6e 63 28 0d 0a 20 20 20 20 20  de xSync(..     
2d180 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2d190 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
2d1a0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2d1b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d1c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
2d1d0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
2d1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d1f0 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
2d200 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2d210 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d220 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
2d230 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70  ableTableError(p
2d240 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
2d250 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d260 20 6d 6f 64 75 6c 65 2e 78 53 79 6e 63 28 70 56   module.xSync(pV
2d270 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tab);..         
2d280 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2d290 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2d2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2d2e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2d2f0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2d300 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2d310 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2d320 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
2d330 6d 6d 69 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  mmit" /> method.
2d340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d350 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2d360 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2d370 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
2d380 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2d390 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d3a0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d3b0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d  tiveModule.xComm
2d3c0 69 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  it" /> method...
2d3d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d3e0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2d3f0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2d400 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2d410 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2d420 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2d430 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d  ativeModule.xCom
2d440 6d 69 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  mit" /> method..
2d450 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d460 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2d470 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2d480 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2d490 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20  xCommit(..      
2d4a0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2d4b0 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
2d4c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2d4d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d4e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2d4f0 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2d500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d510 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2d520 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2d530 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d540 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2d550 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56  bleTableError(pV
2d560 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
2d570 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d580 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 28 70  module.xCommit(p
2d590 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  Vtab);..        
2d5a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d5b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2d5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d5f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d600 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2d610 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2d620 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2d630 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2d640 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2d650 6f 6c 6c 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68  ollback" /> meth
2d660 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d670 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2d680 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d690 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
2d6a0 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  tab">..         
2d6b0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2d6c0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2d6d0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2d6e0 6f 6c 6c 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68  ollback" /> meth
2d6f0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d700 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2d710 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d720 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2d730 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2d740 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2d750 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2d760 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f 3e 20 6d  .xRollback" /> m
2d770 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2d780 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2d790 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2d7a0 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2d7b0 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b  orCode xRollback
2d7c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d7d0 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
2d7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d7f0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2d800 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d810 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2d820 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2d830 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2d840 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d860 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2d870 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2d880 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2d890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d8a0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2d8b0 78 52 6f 6c 6c 62 61 63 6b 28 70 56 74 61 62 29  xRollback(pVtab)
2d8c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d8d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d920 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2d930 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2d940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d950 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2d960 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2d970 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  veModule.xFindFu
2d980 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  nction" /> metho
2d990 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2d9a0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2d9b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d9c0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
2d9d0 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ab">..          
2d9e0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2d9f0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2da00 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
2da10 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d  ndFunction" /> m
2da20 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2da30 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2da40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2da50 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
2da60 41 72 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  Arg">..         
2da70 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2da80 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2da90 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
2daa0 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  indFunction" /> 
2dab0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2dac0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2dad0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2dae0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2daf0 7a 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20  zName">..       
2db00 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2db10 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2db20 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2db30 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f  xFindFunction" /
2db40 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2db50 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2db60 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2db70 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2db80 3d 22 63 61 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20  ="callback">..  
2db90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2dba0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2dbb0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2dbc0 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69  dule.xFindFuncti
2dbd0 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  on" /> method...
2dbe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2dbf0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2dc00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2dc10 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61   name="pClientDa
2dc20 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ta">..          
2dc30 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2dc40 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2dc50 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
2dc60 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d  ndFunction" /> m
2dc70 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2dc80 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2dc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2dca0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2dcb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2dcc0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2dcd0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2dce0 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
2dcf0 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
2dd00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2dd10 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2dd20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e         public in
2dd30 74 20 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  t xFindFunction(
2dd40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dd50 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
2dd60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dd70 20 69 6e 74 20 6e 41 72 67 2c 0d 0a 20 20 20 20   int nArg,..    
2dd80 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2dd90 74 72 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  tr zName,..     
2dda0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53             ref S
2ddb0 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 63 61  QLiteCallback ca
2ddc0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
2ddd0 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
2dde0 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 0d  Ptr pClientData.
2ddf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de00 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2de10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2de20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2de30 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2de40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2de50 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2de70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de80 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41        ModuleNotA
2de90 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2dea0 6f 72 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20  or(pVtab);..    
2deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dec0 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20  return 0;..     
2ded0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2def0 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 46  return module.xF
2df00 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
2df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df20 20 20 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 7a    pVtab, nArg, z
2df30 4e 61 6d 65 2c 20 72 65 66 20 63 61 6c 6c 62 61  Name, ref callba
2df40 63 6b 2c 20 72 65 66 20 70 43 6c 69 65 6e 74 44  ck, ref pClientD
2df50 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata);..         
2df60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2df70 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2df80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dfb0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2dfc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2dfd0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2dfe0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2dff0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2e000 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  NativeModule.xRe
2e010 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  name" /> method.
2e020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e030 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2e040 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2e050 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
2e060 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2e070 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2e080 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2e090 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61  tiveModule.xRena
2e0a0 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  me" /> method...
2e0b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e0c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2e0d0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2e0e0 20 6e 61 6d 65 3d 22 7a 4e 65 77 22 3e 0d 0a 20   name="zNew">.. 
2e0f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2e100 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2e110 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2e120 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f  odule.xRename" /
2e130 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2e140 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2e150 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2e160 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
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 52 65 6e 61 6d 65 22 20  Module.xRename" 
2e1b0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2e1c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
2e1d0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2e1e0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2e1f0 65 45 72 72 6f 72 43 6f 64 65 20 78 52 65 6e 61  eErrorCode xRena
2e200 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2e210 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
2e220 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
2e230 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 65 77 0d      IntPtr zNew.
2e240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e250 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2e260 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e270 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2e280 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2e290 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2e2a0 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2c0 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2e2d0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2e2e0 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2e2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e300 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2e310 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 7a  xRename(pVtab, z
2e320 4e 65 77 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  New);..         
2e330 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e340 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2e350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e380 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e390 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2e3a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2e3b0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2e3c0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2e3d0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61  NativeModule.xSa
2e3e0 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68  vepoint" /> meth
2e3f0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2e400 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2e410 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e420 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
2e430 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  tab">..         
2e440 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2e450 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2e460 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53  eNativeModule.xS
2e470 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74  avepoint" /> met
2e480 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2e490 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2e4a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e4b0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61  <param name="iSa
2e4c0 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20  vepoint">..     
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 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e  e.xSavepoint" />
2e510 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2e520 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2e530 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2e540 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2e550 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2e560 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2e570 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2e580 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74  odule.xSavepoint
2e590 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2e5a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2e5b0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2e5c0 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2e5d0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 61  iteErrorCode xSa
2e5e0 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20  vepoint(..      
2e5f0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2e600 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
2e610 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61           int iSa
2e620 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  vepoint..       
2e630 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2e640 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e650 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
2e660 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
2e670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e680 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
2e690 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e6a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e6b0 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
2e6c0 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70  ableTableError(p
2e6d0 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
2e6e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e6f0 20 6d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69   module.xSavepoi
2e700 6e 74 28 70 56 74 61 62 2c 20 69 53 61 76 65 70  nt(pVtab, iSavep
2e710 6f 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  oint);..        
2e720 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e730 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2e740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e770 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2e780 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2e790 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2e7a0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2e7b0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2e7c0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2e7d0 65 6c 65 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f  elease" /> metho
2e7e0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2e7f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2e800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e810 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
2e820 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ab">..          
2e830 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2e840 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2e850 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  NativeModule.xRe
2e860 6c 65 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64  lease" /> method
2e870 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e880 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
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 69 53 61 76 65 70  ram name="iSavep
2e8b0 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  oint">..        
2e8c0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2e8d0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2e8e0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2e8f0 52 65 6c 65 61 73 65 22 20 2f 3e 20 6d 65 74 68  Release" /> meth
2e900 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2e910 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2e920 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e930 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2e940 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2e950 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2e960 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2e970 2e 78 52 65 6c 65 61 73 65 22 20 2f 3e 20 6d 65  .xRelease" /> me
2e980 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2e990 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
2e9a0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
2e9b0 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
2e9c0 72 43 6f 64 65 20 78 52 65 6c 65 61 73 65 28 0d  rCode xRelease(.
2e9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e9e0 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea00 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a  int iSavepoint..
2ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ea30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ea40 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
2ea50 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2ea60 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2ea70 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea90 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
2eaa0 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
2eab0 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d  Error(pVtab);...
2eac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ead0 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
2eae0 52 65 6c 65 61 73 65 28 70 56 74 61 62 2c 20 69  Release(pVtab, i
2eaf0 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20 20 20  Savepoint);..   
2eb00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2eb10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2eb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2eb70 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2eb80 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2eb90 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2eba0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2ebb0 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20  le.xRollbackTo" 
2ebc0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2ebd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2ebe0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2ebf0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2ec00 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
2ec10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2ec20 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2ec30 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2ec40 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f  dule.xRollbackTo
2ec50 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2ec60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2ec70 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2ec80 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2ec90 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74 22  ame="iSavepoint"
2eca0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2ecb0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2ecc0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2ecd0 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  iveModule.xRollb
2ece0 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64  ackTo" /> method
2ecf0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ed00 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2ed10 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
2ed20 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2ed30 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2ed40 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2ed50 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2ed60 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d  RollbackTo" /> m
2ed70 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2ed80 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2ed90 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2eda0 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2edb0 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b  orCode xRollback
2edc0 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  To(..           
2edd0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
2ede0 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
2edf0 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69      int iSavepoi
2ee00 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
2ee10 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
2ee20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ee30 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69        // CheckDi
2ee40 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2ee60 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (module == null)
2ee70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ee80 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64        return Mod
2ee90 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54  uleNotAvailableT
2eea0 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29  ableError(pVtab)
2eeb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2eec0 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75       return modu
2eed0 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 70  le.xRollbackTo(p
2eee0 56 74 61 62 2c 20 69 53 61 76 65 70 6f 69 6e 74  Vtab, iSavepoint
2eef0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2ef00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2ef10 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2ef20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2ef30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2ef80 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
2ef90 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
2efa0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2efb0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2efc0 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20  /// Disposes of 
2efd0 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
2efe0 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ance...         
2eff0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2f000 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
2f010 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f  ublic void Dispo
2f020 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se()..          
2f030 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f040 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75       Dispose(tru
2f050 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2f060 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73       GC.Suppress
2f070 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d  Finalize(this);.
2f080 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2f090 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2f0a0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2f0b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2f0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2f100 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
2f110 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
2f120 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
2f130 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2f140 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
2f150 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
2f160 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2f170 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54             /// T
2f180 68 72 6f 77 73 20 61 6e 20 3c 73 65 65 20 63 72  hrows an <see cr
2f190 65 66 3d 22 4f 62 6a 65 63 74 44 69 73 70 6f 73  ef="ObjectDispos
2f1a0 65 64 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20  edException" /> 
2f1b0 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a  if this object..
2f1c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f1d0 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65 65  instance has bee
2f1e0 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20  n disposed...   
2f1f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
2f200 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2f210 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
2f220 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
2f230 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
2f240 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
2f250 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f  f THROW_ON_DISPO
2f260 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SED..           
2f270 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
2f280 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
2f290 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f2a0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
2f2b0 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
2f2c0 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
2f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2e0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51         typeof(SQ
2f2f0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2f300 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ).Name);..      
2f310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
2f320 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
2f330 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2f340 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2f350 2f 2f 2f 2f 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 2f 2f 2f 2f 2f 2f  ////////////////
2f380 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2f390 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2f3a0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2f3b0 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20  /// Disposes of 
2f3c0 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
2f3d0 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ance...         
2f3e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2f3f0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2f400 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2f410 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20  disposing">..   
2f420 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e           /// Non
2f430 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65  -zero if this me
2f440 74 68 6f 64 20 69 73 20 62 65 69 6e 67 20 63 61  thod is being ca
2f450 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20  lled from the.. 
2f460 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2f470 73 65 65 20 63 72 65 66 3d 22 44 69 73 70 6f 73  see cref="Dispos
2f480 65 28 29 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 20  e()" /> method. 
2f490 20 5a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65   Zero if this me
2f4a0 74 68 6f 64 20 69 73 20 62 65 69 6e 67 0d 0a 20  thod is being.. 
2f4b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 63             /// c
2f4c0 61 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 66  alled from the f
2f4d0 69 6e 61 6c 69 7a 65 72 2e 0d 0a 20 20 20 20 20  inalizer...     
2f4e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2f4f0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2f500 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74   private /* prot
2f510 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f  ected virtual */
2f520 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f   void Dispose(bo
2f530 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  ol disposing).. 
2f540 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2f560 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
2f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2f580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f590 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f       //if (dispo
2f5a0 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
2f5b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a             //{..
2f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5d0 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
2f5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f610 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73      //    // dis
2f620 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
2f630 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
2f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f650 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
2f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f690 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20      //}....     
2f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6d0 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
2f6e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
2f6f0 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
2f700 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
2f710 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f720 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2f730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2f750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f760 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2f770 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2f780 4e 4f 54 45 3a 20 54 68 65 20 6d 6f 64 75 6c 65  NOTE: The module
2f790 20 69 73 20 6e 6f 74 20 6f 77 6e 65 64 20 62 79   is not owned by
2f7a0 20 75 73 3b 20 74 68 65 72 65 66 6f 72 65 2c 20   us; therefore, 
2f7b0 64 6f 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  do not..        
2f7c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2f7d0 20 20 20 20 20 64 69 73 70 6f 73 65 20 69 74 2e       dispose it.
2f7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f7f0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2f810 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c 6c   (module != null
2f820 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f830 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
2f840 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
2f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f860 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65   disposed = true
2f870 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f880 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2f890 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2f8a0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2f8b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2f8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2f910 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72  egion Destructor
2f920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f930 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2f940 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 69 6e           /// Fin
2f950 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65  alizes this obje
2f960 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
2f970 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2f980 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2f990 20 20 20 20 20 20 7e 53 51 4c 69 74 65 4e 61 74        ~SQLiteNat
2f9a0 69 76 65 4d 6f 64 75 6c 65 28 29 0d 0a 20 20 20  iveModule()..   
2f9b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
2f9d0 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ose(false);..   
2f9e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2f9f0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2fa00 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
2fa10 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2fa20 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
2fa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2fa80 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
2fa90 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
2faa0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2fab0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
2fac0 65 20 64 65 66 61 75 6c 74 20 65 73 74 69 6d 61  e default estima
2fad0 74 65 64 20 63 6f 73 74 20 66 6f 72 20 75 73 65  ted cost for use
2fae0 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20   with the..     
2faf0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
2fb00 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
2fb10 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78  Module.BestIndex
2fb20 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2fb30 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2fb40 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
2fb50 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
2fb60 64 6f 6e 6c 79 20 64 6f 75 62 6c 65 20 44 65 66  donly double Def
2fb70 61 75 6c 74 45 73 74 69 6d 61 74 65 64 43 6f 73  aultEstimatedCos
2fb80 74 20 3d 20 64 6f 75 62 6c 65 2e 4d 61 78 56 61  t = double.MaxVa
2fb90 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
2fba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fbe0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2fbf0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2fc00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
2fc10 65 20 64 65 66 61 75 6c 74 20 76 65 72 73 69 6f  e default versio
2fc20 6e 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20  n of the native 
2fc30 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73  sqlite3_module s
2fc40 74 72 75 63 74 75 72 65 20 69 6e 20 75 73 65 2e  tructure in use.
2fc50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2fc60 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2fc70 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2fc80 20 72 65 61 64 6f 6e 6c 79 20 69 6e 74 20 44 65   readonly int De
2fc90 66 61 75 6c 74 4d 6f 64 75 6c 65 56 65 72 73 69  faultModuleVersi
2fca0 6f 6e 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20 20  on = 2;..       
2fcb0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2fcc0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2fd10 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2fd20 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a  n Private Data..
2fd30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2fd40 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2fd50 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69 73  // This field is
2fd60 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2fd70 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
2fd80 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  3_module structu
2fd90 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  re..        /// 
2fda0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2fdb0 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
2fdc0 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
2fdd0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2fde0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 55         private U
2fdf0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2fe00 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ds.sqlite3_modul
2fe10 65 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d  e nativeModule;.
2fe20 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
2fe80 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2fe90 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 69       /// This fi
2fea0 65 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20 73  eld is used to s
2feb0 74 6f 72 65 20 61 20 70 6f 69 6e 74 65 72 20 74  tore a pointer t
2fec0 6f 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  o the native sql
2fed0 69 74 65 33 5f 6d 6f 64 75 6c 65 0d 0a 20 20 20  ite3_module..   
2fee0 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75       /// structu
2fef0 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  re returned by t
2ff00 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  he sqlite3_creat
2ff10 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64  e_disposable_mod
2ff20 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ule..        ///
2ff30 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20   function...    
2ff40 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2ff50 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
2ff60 61 74 65 20 49 6e 74 50 74 72 20 64 69 73 70 6f  ate IntPtr dispo
2ff70 73 61 62 6c 65 4d 6f 64 75 6c 65 3b 0d 0a 0d 0a  sableModule;....
2ff80 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2ffd0 0a 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f  ...#if PLATFORM_
2ffe0 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
2fff0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
30000 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
30010 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
30020 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  is used to hold 
30030 74 68 65 20 62 6c 6f 63 6b 20 6f 66 20 6e 61 74  the block of nat
30040 69 76 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 20  ive memory that 
30050 63 6f 6e 74 61 69 6e 73 0d 0a 20 20 20 20 20 20  contains..      
30060 20 20 2f 2f 2f 20 74 68 65 20 6e 61 74 69 76 65    /// the native
30070 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
30080 73 74 72 75 63 74 75 72 65 20 61 73 73 6f 63 69  structure associ
30090 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  ated with this o
300a0 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f  bject..        /
300b0 2f 2f 20 69 6e 73 74 61 6e 63 65 20 77 68 65 6e  // instance when
300c0 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74 68 65 20   running on the 
300d0 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46 72 61  .NET Compact Fra
300e0 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20  mework...       
300f0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
30100 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
30110 20 49 6e 74 50 74 72 20 70 4e 61 74 69 76 65 4d   IntPtr pNativeM
30120 6f 64 75 6c 65 3b 0d 0a 23 65 6e 64 69 66 0d 0a  odule;..#endif..
30130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
30140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30180 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
30190 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
301a0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65      /// This fie
301b0 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ld is used to st
301c0 6f 72 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ore the virtual 
301d0 74 61 62 6c 65 20 69 6e 73 74 61 6e 63 65 73 20  table instances 
301e0 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
301f0 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
30200 73 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 6e  s module.  The n
30210 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
30220 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
30230 62 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 20  b derived..     
30240 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65     /// structure
30250 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 79 20   is used to key 
30260 69 6e 74 6f 20 74 68 69 73 20 63 6f 6c 6c 65 63  into this collec
30270 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
30280 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
30290 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 44         private D
302a0 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72  ictionary<IntPtr
302b0 2c 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  , SQLiteVirtualT
302c0 61 62 6c 65 3e 20 74 61 62 6c 65 73 3b 0d 0a 0d  able> tables;...
302d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
302e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
30330 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
30340 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c     /// This fiel
30350 64 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  d is used to sto
30360 72 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  re the virtual t
30370 61 62 6c 65 20 63 75 72 73 6f 72 20 69 6e 73 74  able cursor inst
30380 61 6e 63 65 73 0d 0a 20 20 20 20 20 20 20 20 2f  ances..        /
30390 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
303a0 74 68 20 74 68 69 73 20 6d 6f 64 75 6c 65 2e 20  th this module. 
303b0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
303c0 74 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ter to the..    
303d0 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
303e0 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69  vtab_cursor deri
303f0 76 65 64 20 73 74 72 75 63 74 75 72 65 20 69 73  ved structure is
30400 20 75 73 65 64 20 74 6f 20 6b 65 79 20 69 6e 74   used to key int
30410 6f 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  o this..        
30420 2f 2f 2f 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d  /// collection..
30430 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
30440 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
30450 20 70 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e   private Diction
30460 61 72 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69  ary<IntPtr, SQLi
30470 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
30480 72 73 6f 72 3e 20 63 75 72 73 6f 72 73 3b 0d 0a  rsor> cursors;..
30490 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
304a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
304f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
30500 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65      /// This fie
30510 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ld is used to st
30520 6f 72 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ore the virtual 
30530 74 61 62 6c 65 20 66 75 6e 63 74 69 6f 6e 20 69  table function i
30540 6e 73 74 61 6e 63 65 73 0d 0a 20 20 20 20 20 20  nstances..      
30550 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
30560 20 77 69 74 68 20 74 68 69 73 20 6d 6f 64 75 6c   with this modul
30570 65 2e 20 20 54 68 65 20 63 61 73 65 2d 69 6e 73  e.  The case-ins
30580 65 6e 73 69 74 69 76 65 20 66 75 6e 63 74 69 6f  ensitive functio
30590 6e 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  n name..        
305a0 2f 2f 2f 20 61 6e 64 20 74 68 65 20 6e 75 6d 62  /// and the numb
305b0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
305c0 28 77 69 74 68 20 2d 31 20 6d 65 61 6e 69 6e 67  (with -1 meaning
305d0 20 22 61 6e 79 22 29 20 61 72 65 20 75 73 65 64   "any") are used
305e0 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
305f0 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73   construct the s
30600 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 75 73  tring that is us
30610 65 64 20 74 6f 20 6b 65 79 20 69 6e 74 6f 20 74  ed to key into t
30620 68 69 73 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d  his collection..
30630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
30640 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
30650 20 70 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e   private Diction
30660 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69  ary<string, SQLi
30670 74 65 46 75 6e 63 74 69 6f 6e 3e 20 66 75 6e 63  teFunction> func
30680 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20  tions;..        
30690 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
306a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
306b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
306f0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
30700 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
30710 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tors..        //
30720 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
30730 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75       /// Constru
30740 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  cts an instance 
30750 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a  of this class...
30760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
30770 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
30780 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
30790 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20  "name">..       
307a0 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
307b0 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68   the module.  Th
307c0 69 73 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  is parameter can
307d0 6e 6f 74 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20  not be null...  
307e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
307f0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  m>..        publ
30800 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 28  ic SQLiteModule(
30810 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a 20 20  string name)..  
30820 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30830 20 20 20 20 20 69 66 20 28 6e 61 6d 65 20 3d 3d       if (name ==
30840 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30850 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
30860 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
30870 63 65 70 74 69 6f 6e 28 22 6e 61 6d 65 22 29 3b  ception("name");
30880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30890 74 68 69 73 2e 6e 61 6d 65 20 3d 20 6e 61 6d 65  this.name = name
308a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
308b0 68 69 73 2e 74 61 62 6c 65 73 20 3d 20 6e 65 77  his.tables = new
308c0 20 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50   Dictionary<IntP
308d0 74 72 2c 20 53 51 4c 69 74 65 56 69 72 74 75 61  tr, SQLiteVirtua
308e0 6c 54 61 62 6c 65 3e 28 29 3b 0d 0a 20 20 20 20  lTable>();..    
308f0 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 75 72          this.cur
30900 73 6f 72 73 20 3d 20 6e 65 77 20 44 69 63 74 69  sors = new Dicti
30910 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20 53 51  onary<IntPtr, SQ
30920 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
30930 43 75 72 73 6f 72 3e 28 29 3b 0d 0a 20 20 20 20  Cursor>();..    
30940 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 75 6e          this.fun
30950 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 44 69 63  ctions = new Dic
30960 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20  tionary<string, 
30970 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28  SQLiteFunction>(
30980 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
30990 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
309a0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
309b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
30a00 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c  #region Internal
30a10 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
30a20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
30a30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 61 6c  .        /// Cal
30a40 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51  ls the native SQ
30a50 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
30a60 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 72  y in order to cr
30a70 65 61 74 65 20 61 20 6e 65 77 0d 0a 20 20 20 20  eate a new..    
30a80 20 20 20 20 2f 2f 2f 20 64 69 73 70 6f 73 61 62      /// disposab
30a90 6c 65 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69  le module contai
30aa0 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65  ning the impleme
30ab0 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72  ntation of a vir
30ac0 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
30ad0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
30ae0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
30af0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44   <param name="pD
30b00 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
30b10 20 54 68 65 20 6e 61 74 69 76 65 20 64 61 74 61   The native data
30b20 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
30b30 70 6f 69 6e 74 65 72 20 74 6f 20 75 73 65 2e 0d  pointer to use..
30b40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
30b50 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
30b60 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
30b70 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
30b80 72 6f 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e  ro upon success.
30b90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
30ba0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
30bb0 20 20 69 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20    internal bool 
30bc0 43 72 65 61 74 65 44 69 73 70 6f 73 61 62 6c 65  CreateDisposable
30bd0 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20  Module(..       
30be0 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62 0d       IntPtr pDb.
30bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
30c00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30c10 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
30c20 73 61 62 6c 65 4d 6f 64 75 6c 65 20 21 3d 20 49  sableModule != I
30c30 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
30c40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
30c50 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
30c60 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
30c70 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a  pName = IntPtr.Z
30c80 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
30c90 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
30ca0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30cb0 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20          pName = 
30cc0 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
30cd0 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
30ce0 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  g(name);....    
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
30d00 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
30d10 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6e  sqlite3_module n
30d20 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 0d 0a 20  ativeModule =.. 
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d40 20 20 20 41 6c 6c 6f 63 61 74 65 4e 61 74 69 76     AllocateNativ
30d50 65 4d 6f 64 75 6c 65 28 29 3b 0d 0a 0d 0a 23 69  eModule();....#i
30d60 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
30d70 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
30d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
30d90 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 20 3d  sposableModule =
30da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30db0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
30dc0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
30dd0 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61  3_create_disposa
30de0 62 6c 65 5f 6d 6f 64 75 6c 65 28 0d 0a 20 20 20  ble_module(..   
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e00 20 20 20 20 20 70 44 62 2c 20 70 4e 61 6d 65 2c       pDb, pName,
30e10 20 72 65 66 20 6e 61 74 69 76 65 4d 6f 64 75 6c   ref nativeModul
30e20 65 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  e, IntPtr.Zero, 
30e30 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
30e40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30e50 20 28 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75   (disposableModu
30e60 6c 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  le != IntPtr.Zer
30e70 6f 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  o);..#elif !SQLI
30e80 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
30e90 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
30ea0 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 20 3d 0d  posableModule =.
30eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30ec0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
30ed0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
30ee0 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62  _create_disposab
30ef0 6c 65 5f 6d 6f 64 75 6c 65 5f 69 6e 74 65 72 6f  le_module_intero
30f00 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p(..            
30f10 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2c 20             pDb, 
30f20 70 4e 61 6d 65 2c 20 41 6c 6c 6f 63 61 74 65 4e  pName, AllocateN
30f30 61 74 69 76 65 4d 6f 64 75 6c 65 49 6e 74 65 72  ativeModuleInter
30f40 6f 70 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  op(),..         
30f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
30f60 74 69 76 65 4d 6f 64 75 6c 65 2e 69 56 65 72 73  tiveModule.iVers
30f70 69 6f 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c  ion, nativeModul
30f80 65 2e 78 43 72 65 61 74 65 2c 0d 0a 20 20 20 20  e.xCreate,..    
30f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fa0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
30fb0 78 43 6f 6e 6e 65 63 74 2c 20 6e 61 74 69 76 65  xConnect, native
30fc0 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  Module.xBestInde
30fd0 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
30fe0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
30ff0 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e  eModule.xDisconn
31000 65 63 74 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c  ect, nativeModul
31010 65 2e 78 44 65 73 74 72 6f 79 2c 0d 0a 20 20 20  e.xDestroy,..   
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31030 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
31040 2e 78 4f 70 65 6e 2c 20 6e 61 74 69 76 65 4d 6f  .xOpen, nativeMo
31050 64 75 6c 65 2e 78 43 6c 6f 73 65 2c 0d 0a 20 20  dule.xClose,..  
31060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31070 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
31080 65 2e 78 46 69 6c 74 65 72 2c 20 6e 61 74 69 76  e.xFilter, nativ
31090 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 2c 0d 0a  eModule.xNext,..
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310b0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
310c0 75 6c 65 2e 78 45 6f 66 2c 20 6e 61 74 69 76 65  ule.xEof, native
310d0 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 2c 0d  Module.xColumn,.
310e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
310f0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
31100 64 75 6c 65 2e 78 52 6f 77 49 64 2c 20 6e 61 74  dule.xRowId, nat
31110 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74  iveModule.xUpdat
31120 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
31130 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
31140 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 2c 20  eModule.xBegin, 
31150 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79  nativeModule.xSy
31160 6e 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nc,..           
31170 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31180 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74  veModule.xCommit
31190 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  , nativeModule.x
311a0 52 6f 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Rollback,..     
311b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311c0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
311d0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 2c 20 6e 61  FindFunction, na
311e0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61  tiveModule.xRena
311f0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
31200 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31210 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f  veModule.xSavepo
31220 69 6e 74 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c  int, nativeModul
31230 65 2e 78 52 65 6c 65 61 73 65 2c 0d 0a 20 20 20  e.xRelease,..   
31240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31250 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
31260 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 2c 20 49 6e  .xRollbackTo, In
31270 74 50 74 72 2e 5a 65 72 6f 2c 20 6e 75 6c 6c 29  tPtr.Zero, null)
31280 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31290 20 20 20 20 20 72 65 74 75 72 6e 20 28 64 69 73       return (dis
312a0 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 20 21 3d  posableModule !=
312b0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
312c0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
312d0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
312e0 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
312f0 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
31300 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
31310 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
31320 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
31330 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31340 20 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d          if (pNam
31350 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e != IntPtr.Zero
31360 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31370 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31380 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
31390 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d  Memory.Free(pNam
313a0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
313b0 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d           pName =
313c0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
313e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
313f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
31400 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
31410 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
31420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31460 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
31470 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
31480 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
31490 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
314a0 20 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73       /// Creates
314b0 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
314c0 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f 6d   native sqlite_m
314d0 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 20  odule structure 
314e0 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  using the..     
314f0 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 65     /// configure
31500 64 20 28 6f 72 20 64 65 66 61 75 6c 74 29 20 3c  d (or default) <
31510 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
31520 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f  eNativeModule" /
31530 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  >..        /// i
31540 6e 74 65 72 66 61 63 65 20 69 6d 70 6c 65 6d 65  nterface impleme
31550 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ntation...      
31560 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
31570 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
31580 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
31590 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
315a0 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74  sqlite_module st
315b0 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 74 68  ructure using th
315c0 65 20 63 6f 6e 66 69 67 75 72 65 64 20 28 6f 72  e configured (or
315d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65  ..        /// de
315e0 66 61 75 6c 74 29 20 3c 73 65 65 20 63 72 65 66  fault) <see cref
315f0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
31600 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66  odule" /> interf
31610 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ace..        ///
31620 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
31630 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
31640 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
31650 20 20 70 72 69 76 61 74 65 20 55 6e 73 61 66 65    private Unsafe
31660 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
31670 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 41 6c 6c  lite3_module All
31680 6f 63 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  ocateNativeModul
31690 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e()..        {..
316a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
316b0 72 6e 20 41 6c 6c 6f 63 61 74 65 4e 61 74 69 76  rn AllocateNativ
316c0 65 4d 6f 64 75 6c 65 28 47 65 74 4e 61 74 69 76  eModule(GetNativ
316d0 65 4d 6f 64 75 6c 65 49 6d 70 6c 28 29 29 3b 0d  eModuleImpl());.
316e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
316f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
31740 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f  .#if PLATFORM_CO
31750 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
31760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
31770 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
31780 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 64 20 72  // Creates and r
31790 65 74 75 72 6e 73 20 61 20 6d 65 6d 6f 72 79 20  eturns a memory 
317a0 62 6c 6f 63 6b 20 6f 62 74 61 69 6e 65 64 20 66  block obtained f
317b0 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63  rom the SQLite c
317c0 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ore..        ///
317d0 20 6c 69 62 72 61 72 79 20 75 73 65 64 20 74 6f   library used to
317e0 20 73 74 6f 72 65 20 74 68 65 20 6e 61 74 69 76   store the nativ
317f0 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  e sqlite3_module
31800 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
31810 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
31820 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
31830 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e   when running on
31840 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d 70 61 63   the .NET Compac
31850 74 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20  t Framework...  
31860 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
31870 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
31880 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
31890 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
318a0 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
318b0 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
318c0 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  3_module structu
318d0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
318e0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
318f0 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 74       private Int
31900 50 74 72 20 41 6c 6c 6f 63 61 74 65 4e 61 74 69  Ptr AllocateNati
31910 76 65 4d 6f 64 75 6c 65 49 6e 74 65 72 6f 70 28  veModuleInterop(
31920 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
31930 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4e            if (pN
31940 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 3d 20 49  ativeModule == I
31950 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
31960 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
31980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31990 2f 2f 20 48 41 43 4b 3a 20 4e 6f 20 65 61 73 79  // HACK: No easy
319a0 20 77 61 79 20 74 6f 20 64 65 74 65 72 6d 69 6e   way to determin
319b0 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  e the size of th
319c0 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  e native..      
319d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
319e0 20 20 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65     sqlite_module
319f0 20 73 74 72 75 63 74 75 72 65 20 77 68 65 6e 20   structure when 
31a00 72 75 6e 6e 69 6e 67 20 6f 6e 20 74 68 65 20 2e  running on the .
31a10 4e 45 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20  NET..           
31a20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 43 6f       //       Co
31a30 6d 70 61 63 74 20 46 72 61 6d 65 77 6f 72 6b 3b  mpact Framework;
31a40 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74   therefore, just
31a50 20 62 61 73 65 20 74 68 65 20 73 69 7a 65 0d 0a   base the size..
31a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a70 2f 2f 20 20 20 20 20 20 20 6f 6e 20 77 68 61 74  //       on what
31a80 20 77 65 20 6b 6e 6f 77 3a 0d 0a 20 20 20 20 20   we know:..     
31a90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31ab0 2f 20 20 20 20 20 20 20 54 68 65 72 65 20 69 73  /       There is
31ac0 20 6f 6e 65 20 69 6e 74 65 67 65 72 20 6d 65 6d   one integer mem
31ad0 62 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ber...          
31ae0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 54        //       T
31af0 68 65 72 65 20 61 72 65 20 32 32 20 66 75 6e 63  here are 22 func
31b00 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 6d 65 6d  tion pointer mem
31b10 62 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  bers...         
31b20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
31b30 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 74 69             pNati
31b40 76 65 4d 6f 64 75 6c 65 20 3d 20 53 51 4c 69 74  veModule = SQLit
31b50 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65  eMemory.Allocate
31b60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31b70 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72         SQLiteMar
31b80 73 68 61 6c 2e 53 69 7a 65 4f 66 53 74 72 75 63  shal.SizeOfStruc
31b90 74 49 6e 74 28 29 20 2b 20 28 32 32 20 2a 20 49  tInt() + (22 * I
31ba0 6e 74 50 74 72 2e 53 69 7a 65 29 29 3b 0d 0a 0d  ntPtr.Size));...
31bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31bc0 20 69 66 20 28 70 4e 61 74 69 76 65 4d 6f 64 75   if (pNativeModu
31bd0 6c 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  le == IntPtr.Zer
31be0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
31bf0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
31c00 77 20 4f 75 74 4f 66 4d 65 6d 6f 72 79 45 78 63  w OutOfMemoryExc
31c10 65 70 74 69 6f 6e 28 22 73 71 6c 69 74 65 33 5f  eption("sqlite3_
31c20 6d 6f 64 75 6c 65 22 29 3b 0d 0a 20 20 20 20 20  module");..     
31c30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31c40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70          return p
31c50 4e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a 20  NativeModule;.. 
31c60 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
31c70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
31c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31cc0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
31cd0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
31ce0 20 20 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65        /// Create
31cf0 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
31d00 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f  e native sqlite_
31d10 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65  module structure
31d20 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20   using the..    
31d30 20 20 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 65      /// specifie
31d40 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  d <see cref="ISQ
31d50 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
31d60 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65 0d 0a  " /> interface..
31d70 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
31d80 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
31d90 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
31da0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
31db0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
31dc0 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  dule">..        
31dd0 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
31de0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
31df0 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72  Module" /> inter
31e00 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  face implementat
31e10 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ion to..        
31e20 2f 2f 2f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20  /// use...      
31e30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
31e40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
31e50 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
31e60 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 73 71  // The native sq
31e70 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75  lite_module stru
31e80 63 74 75 72 65 20 75 73 69 6e 67 20 74 68 65 20  cture using the 
31e90 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20  specified..     
31ea0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
31eb0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
31ec0 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66  odule" /> interf
31ed0 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ace implementati
31ee0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
31ef0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
31f00 20 20 20 20 20 70 72 69 76 61 74 65 20 55 6e 73       private Uns
31f10 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
31f20 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  .sqlite3_module 
31f30 41 6c 6c 6f 63 61 74 65 4e 61 74 69 76 65 4d 6f  AllocateNativeMo
31f40 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  dule(..         
31f50 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65     ISQLiteNative
31f60 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20  Module module.. 
31f70 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
31f80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31f90 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
31fa0 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
31fb0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
31fc0 74 65 33 5f 6d 6f 64 75 6c 65 28 29 3b 0d 0a 20  te3_module();.. 
31fd0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
31fe0 65 4d 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f 6e  eModule.iVersion
31ff0 20 3d 20 44 65 66 61 75 6c 74 4d 6f 64 75 6c 65   = DefaultModule
32000 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20  Version;....    
32010 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
32020 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le != null)..   
32030 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32040 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
32050 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
32060 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
32070 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 72 65 61  iveMethods.xCrea
32080 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
32090 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
320a0 43 72 65 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  Create);....    
320b0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
320c0 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
320d0 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
320e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6e  tiveMethods.xCon
320f0 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
32100 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
32110 65 2e 78 43 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a  e.xConnect);....
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32130 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65  nativeModule.xBe
32140 73 74 49 6e 64 65 78 20 3d 20 6e 65 77 20 55 6e  stIndex = new Un
32150 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
32160 73 2e 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20  s.xBestIndex(.. 
32170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32180 20 20 20 6d 6f 64 75 6c 65 2e 78 42 65 73 74 49     module.xBestI
32190 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
321a0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
321b0 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65  Module.xDisconne
321c0 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ct = new UnsafeN
321d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 69  ativeMethods.xDi
321e0 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20  sconnect(..     
321f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
32200 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63  odule.xDisconnec
32210 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
32220 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
32230 75 6c 65 2e 78 44 65 73 74 72 6f 79 20 3d 20 6e  ule.xDestroy = n
32240 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32250 65 74 68 6f 64 73 2e 78 44 65 73 74 72 6f 79 28  ethods.xDestroy(
32260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32270 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 44 65        module.xDe
32280 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  stroy);....     
32290 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
322a0 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20  eModule.xOpen = 
322b0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
322c0 4d 65 74 68 6f 64 73 2e 78 4f 70 65 6e 28 0d 0a  Methods.xOpen(..
322d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322e0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e      module.xOpen
322f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32300 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
32310 6c 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20  le.xClose = new 
32320 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
32330 6f 64 73 2e 78 43 6c 6f 73 65 28 0d 0a 20 20 20  ods.xClose(..   
32340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32350 20 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 29 3b   module.xClose);
32360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32370 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
32380 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65 77 20 55  .xFilter = new U
32390 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
323a0 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a 20 20 20  ds.xFilter(..   
323b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323c0 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 29   module.xFilter)
323d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
323e0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
323f0 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20 55 6e  e.xNext = new Un
32400 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
32410 73 2e 78 4e 65 78 74 28 0d 0a 20 20 20 20 20 20  s.xNext(..      
32420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
32430 64 75 6c 65 2e 78 4e 65 78 74 29 3b 0d 0a 0d 0a  dule.xNext);....
32440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32450 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f  nativeModule.xEo
32460 66 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  f = new UnsafeNa
32470 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 45 6f 66  tiveMethods.xEof
32480 28 6d 6f 64 75 6c 65 2e 78 45 6f 66 29 3b 0d 0a  (module.xEof);..
32490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
324a0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
324b0 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20 55 6e 73  Column = new Uns
324c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
324d0 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20  .xColumn(..     
324e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
324f0 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 29 3b 0d  odule.xColumn);.
32500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32510 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
32520 78 52 6f 77 49 64 20 3d 20 6e 65 77 20 55 6e 73  xRowId = new Uns
32530 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
32540 2e 78 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20  .xRowId(..      
32550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
32560 64 75 6c 65 2e 78 52 6f 77 49 64 29 3b 0d 0a 0d  dule.xRowId);...
32570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32580 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55   nativeModule.xU
32590 70 64 61 74 65 20 3d 20 6e 65 77 20 55 6e 73 61  pdate = new Unsa
325a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
325b0 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20  xUpdate(..      
325c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
325d0 64 75 6c 65 2e 78 55 70 64 61 74 65 29 3b 0d 0a  dule.xUpdate);..
325e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
325f0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
32600 42 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e 73 61  Begin = new Unsa
32610 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
32620 78 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20  xBegin(..       
32630 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
32640 75 6c 65 2e 78 42 65 67 69 6e 29 3b 0d 0a 0d 0a  ule.xBegin);....
32650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32660 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79  nativeModule.xSy
32670 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  nc = new UnsafeN
32680 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 79  ativeMethods.xSy
32690 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nc(..           
326a0 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
326b0 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 20  xSync);....     
326c0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
326d0 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20  eModule.xCommit 
326e0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
326f0 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69  veMethods.xCommi
32700 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
32710 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
32720 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20 20  Commit);....    
32730 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
32740 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61  veModule.xRollba
32750 63 6b 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ck = new UnsafeN
32760 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f  ativeMethods.xRo
32770 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
32790 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d  ule.xRollback);.
327a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
327b0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
327c0 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20  xFindFunction = 
327d0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
327e0 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64 46 75 6e  Methods.xFindFun
327f0 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
32800 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
32810 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
32820 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32830 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
32840 6c 65 2e 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77  le.xRename = new
32850 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
32860 68 6f 64 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20  hods.xRename(.. 
32870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32880 20 20 20 6d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d     module.xRenam
32890 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
328a0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
328b0 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 20 3d  ule.xSavepoint =
328c0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
328d0 65 4d 65 74 68 6f 64 73 2e 78 53 61 76 65 70 6f  eMethods.xSavepo
328e0 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  int(..          
328f0 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
32900 2e 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d  .xSavepoint);...
32910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32920 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
32930 65 6c 65 61 73 65 20 3d 20 6e 65 77 20 55 6e 73  elease = new Uns
32940 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
32950 2e 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20  .xRelease(..    
32960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32970 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 29  module.xRelease)
32980 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32990 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
329a0 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20  e.xRollbackTo = 
329b0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
329c0 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63  Methods.xRollbac
329d0 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20  kTo(..          
329e0 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
329f0 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a  .xRollbackTo);..
32a00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32a10 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
32a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a40 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  nativeModule.xCr
32a50 65 61 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66  eate = new Unsaf
32a60 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
32a70 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20  Create(..       
32a80 20 20 20 20 20 20 20 20 20 20 20 20 20 78 43 72               xCr
32a90 65 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  eate);....      
32aa0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
32ab0 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20  Module.xConnect 
32ac0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
32ad0 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65  veMethods.xConne
32ae0 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
32af0 20 20 20 20 20 20 20 20 20 78 43 6f 6e 6e 65 63           xConnec
32b00 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
32b10 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
32b20 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 20 3d  ule.xBestIndex =
32b30 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
32b40 65 4d 65 74 68 6f 64 73 2e 78 42 65 73 74 49 6e  eMethods.xBestIn
32b50 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20  dex(..          
32b60 20 20 20 20 20 20 20 20 20 20 78 42 65 73 74 49            xBestI
32b70 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
32b80 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
32b90 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65  Module.xDisconne
32ba0 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ct = new UnsafeN
32bb0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 69  ativeMethods.xDi
32bc0 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20  sconnect(..     
32bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
32be0 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a  Disconnect);....
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c00 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65  nativeModule.xDe
32c10 73 74 72 6f 79 20 3d 20 6e 65 77 20 55 6e 73 61  stroy = new Unsa
32c20 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
32c30 78 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20  xDestroy(..     
32c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
32c50 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20  Destroy);....   
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
32c70 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20  iveModule.xOpen 
32c80 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
32c90 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65 6e 28  veMethods.xOpen(
32ca0 78 4f 70 65 6e 29 3b 0d 0a 20 20 20 20 20 20 20  xOpen);..       
32cb0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
32cc0 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3d 20 6e  odule.xClose = n
32cd0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32ce0 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65 28 78 43  ethods.xClose(xC
32cf0 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lose);....      
32d00 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
32d10 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20 3d  Module.xFilter =
32d20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
32d30 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c 74 65 72  eMethods.xFilter
32d40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32d50 20 20 20 20 20 20 20 78 46 69 6c 74 65 72 29 3b         xFilter);
32d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32d70 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
32d80 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20 55 6e 73  .xNext = new Uns
32d90 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
32da0 2e 78 4e 65 78 74 28 78 4e 65 78 74 29 3b 0d 0a  .xNext(xNext);..
32db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32dc0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f  nativeModule.xEo
32dd0 66 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  f = new UnsafeNa
32de0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 45 6f 66  tiveMethods.xEof
32df0 28 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20 20 20 20  (xEof);....     
32e00 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
32e10 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20  eModule.xColumn 
32e20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
32e30 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6c 75 6d  veMethods.xColum
32e40 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
32e50 20 20 20 20 20 20 20 20 78 43 6f 6c 75 6d 6e 29          xColumn)
32e60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32e70 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
32e80 65 2e 78 52 6f 77 49 64 20 3d 20 6e 65 77 20 55  e.xRowId = new U
32e90 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32ea0 64 73 2e 78 52 6f 77 49 64 28 78 52 6f 77 49 64  ds.xRowId(xRowId
32eb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32ec0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
32ed0 6c 65 2e 78 55 70 64 61 74 65 20 3d 20 6e 65 77  le.xUpdate = new
32ee0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
32ef0 68 6f 64 73 2e 78 55 70 64 61 74 65 28 0d 0a 20  hods.xUpdate(.. 
32f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f10 20 20 20 78 55 70 64 61 74 65 29 3b 0d 0a 0d 0a     xUpdate);....
32f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f30 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65  nativeModule.xBe
32f40 67 69 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  gin = new Unsafe
32f50 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42  NativeMethods.xB
32f60 65 67 69 6e 28 78 42 65 67 69 6e 29 3b 0d 0a 20  egin(xBegin);.. 
32f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
32f80 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e  ativeModule.xSyn
32f90 63 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  c = new UnsafeNa
32fa0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 79 6e  tiveMethods.xSyn
32fb0 63 28 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20  c(xSync);....   
32fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
32fd0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69  iveModule.xCommi
32fe0 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
32ff0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6d  tiveMethods.xCom
33000 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mit(..          
33010 20 20 20 20 20 20 20 20 20 20 78 43 6f 6d 6d 69            xCommi
33020 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
33030 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
33040 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20  ule.xRollback = 
33050 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
33060 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63  Methods.xRollbac
33070 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
33080 20 20 20 20 20 20 20 20 78 52 6f 6c 6c 62 61 63          xRollbac
33090 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
330a0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
330b0 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
330c0 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
330d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e  tiveMethods.xFin
330e0 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
330f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33100 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d  xFindFunction);.
33110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33120 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
33130 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e  xRename = new Un
33140 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
33150 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20  s.xRename(..    
33160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33170 78 52 65 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  xRename);....   
33180 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
33190 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70  iveModule.xSavep
331a0 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  oint = new Unsaf
331b0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
331c0 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20  Savepoint(..    
331d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331e0 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a  xSavepoint);....
331f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33200 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  nativeModule.xRe
33210 6c 65 61 73 65 20 3d 20 6e 65 77 20 55 6e 73 61  lease = new Unsa
33220 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
33230 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20  xRelease(..     
33240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
33250 52 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a 20 20 20  Release);....   
33260 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
33270 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  iveModule.xRollb
33280 61 63 6b 54 6f 20 3d 20 6e 65 77 20 55 6e 73 61  ackTo = new Unsa
33290 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
332a0 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20  xRollbackTo(..  
332b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332c0 20 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d    xRollbackTo);.
332d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
332e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
332f0 74 75 72 6e 20 6e 61 74 69 76 65 4d 6f 64 75 6c  turn nativeModul
33300 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
33310 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
33320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
33370 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
33380 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61     /// Creates a
33390 20 63 6f 70 79 20 6f 66 20 74 68 65 20 73 70 65   copy of the spe
333a0 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20 20  cified..        
333b0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 55  /// <see cref="U
333c0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
333d0 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ds.sqlite3_modul
333e0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
333f0 74 61 6e 63 65 2c 0d 0a 20 20 20 20 20 20 20 20  tance,..        
33400 2f 2f 2f 20 75 73 69 6e 67 20 64 65 66 61 75 6c  /// using defaul
33410 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  t implementation
33420 73 20 66 6f 72 20 74 68 65 20 63 6f 6e 74 61 69  s for the contai
33430 6e 65 64 20 64 65 6c 65 67 61 74 65 73 20 77 68  ned delegates wh
33440 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  en..        /// 
33450 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20  necessary...    
33460 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
33470 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
33480 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
33490 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ule">..        /
334a0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
334b0 3d 22 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  ="UnsafeNativeMe
334c0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f  thods.sqlite3_mo
334d0 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d  dule" /> object.
334e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73  .        /// ins
334f0 74 61 6e 63 65 20 74 6f 20 63 6f 70 79 2e 0d 0a  tance to copy...
33500 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
33510 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
33520 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
33530 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77       /// The new
33540 20 3c 73 65 65 20 63 72 65 66 3d 22 55 6e 73 61   <see cref="Unsa
33550 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
33560 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22 20  sqlite3_module" 
33570 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20  /> object..     
33580 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e     /// instance.
33590 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
335a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
335b0 20 20 70 72 69 76 61 74 65 20 55 6e 73 61 66 65    private Unsafe
335c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
335d0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 43 6f 70  lite3_module Cop
335e0 79 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 0d 0a  yNativeModule(..
335f0 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
33600 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
33610 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d  sqlite3_module m
33620 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  odule..         
33630 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
33640 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
33650 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
33660 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  .sqlite3_module 
33670 6e 65 77 4d 6f 64 75 6c 65 20 3d 0d 0a 20 20 20  newModule =..   
33680 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
33690 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
336a0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64  hods.sqlite3_mod
336b0 75 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ule();....      
336c0 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e        newModule.
336d0 69 56 65 72 73 69 6f 6e 20 3d 20 6d 6f 64 75 6c  iVersion = modul
336e0 65 2e 69 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20  e.iVersion;.... 
336f0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f             newMo
33700 64 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20 6e  dule.xCreate = n
33710 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
33720 65 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28 0d  ethods.xCreate(.
33730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33740 20 28 6d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65   (module.xCreate
33750 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
33760 6c 65 2e 78 43 72 65 61 74 65 20 3a 20 78 43 72  le.xCreate : xCr
33770 65 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  eate);....      
33780 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e        newModule.
33790 78 43 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55  xConnect = new U
337a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
337b0 64 73 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20  ds.xConnect(..  
337c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
337d0 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 21  odule.xConnect !
337e0 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65  = null) ? module
337f0 2e 78 43 6f 6e 6e 65 63 74 20 3a 20 78 43 6f 6e  .xConnect : xCon
33800 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nect);....      
33810 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e        newModule.
33820 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65 77  xBestIndex = new
33830 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
33840 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78 28  hods.xBestIndex(
33850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33860 20 20 28 6d 6f 64 75 6c 65 2e 78 42 65 73 74 49    (module.xBestI
33870 6e 64 65 78 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  ndex != null) ? 
33880 6d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  module.xBestInde
33890 78 20 3a 20 78 42 65 73 74 49 6e 64 65 78 29 3b  x : xBestIndex);
338a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
338b0 6e 65 77 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f  newModule.xDisco
338c0 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61  nnect = new Unsa
338d0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
338e0 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20  xDisconnect(..  
338f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
33900 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63  odule.xDisconnec
33910 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  t != null) ? mod
33920 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20  ule.xDisconnect 
33930 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
33940 20 20 20 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b     xDisconnect);
33950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33960 6e 65 77 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72  newModule.xDestr
33970 6f 79 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  oy = new UnsafeN
33980 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 65  ativeMethods.xDe
33990 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20  stroy(..        
339a0 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e          (module.
339b0 78 44 65 73 74 72 6f 79 20 21 3d 20 6e 75 6c 6c  xDestroy != null
339c0 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 44 65 73 74  ) ? module.xDest
339d0 72 6f 79 20 3a 20 78 44 65 73 74 72 6f 79 29 3b  roy : xDestroy);
339e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
339f0 6e 65 77 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20  newModule.xOpen 
33a00 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
33a10 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65 6e 28  veMethods.xOpen(
33a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33a30 20 20 28 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20    (module.xOpen 
33a40 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
33a50 65 2e 78 4f 70 65 6e 20 3a 20 78 4f 70 65 6e 29  e.xOpen : xOpen)
33a60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33a70 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73   newModule.xClos
33a80 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
33a90 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6c 6f  tiveMethods.xClo
33aa0 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
33ab0 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43 6c       (module.xCl
33ac0 6f 73 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  ose != null) ? m
33ad0 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3a 20 78  odule.xClose : x
33ae0 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  Close);....     
33af0 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
33b00 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65 77 20 55  .xFilter = new U
33b10 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
33b20 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a 20 20 20  ds.xFilter(..   
33b30 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f               (mo
33b40 64 75 6c 65 2e 78 46 69 6c 74 65 72 20 21 3d 20  dule.xFilter != 
33b50 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
33b60 46 69 6c 74 65 72 20 3a 20 78 46 69 6c 74 65 72  Filter : xFilter
33b70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
33b80 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 4e 65 78    newModule.xNex
33b90 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
33ba0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e 65 78  tiveMethods.xNex
33bb0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
33bc0 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 4e 65 78      (module.xNex
33bd0 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  t != null) ? mod
33be0 75 6c 65 2e 78 4e 65 78 74 20 3a 20 78 4e 65 78  ule.xNext : xNex
33bf0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
33c00 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 45 6f     newModule.xEo
33c10 66 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  f = new UnsafeNa
33c20 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 45 6f 66  tiveMethods.xEof
33c30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33c40 20 20 20 28 6d 6f 64 75 6c 65 2e 78 45 6f 66 20     (module.xEof 
33c50 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
33c60 65 2e 78 45 6f 66 20 3a 20 78 45 6f 66 29 3b 0d  e.xEof : xEof);.
33c70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ...            n
33c80 65 77 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e  ewModule.xColumn
33c90 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
33ca0 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6c 75  iveMethods.xColu
33cb0 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn(..           
33cc0 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43 6f       (module.xCo
33cd0 6c 75 6d 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  lumn != null) ? 
33ce0 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3a  module.xColumn :
33cf0 20 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20 20   xColumn);....  
33d00 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64            newMod
33d10 75 6c 65 2e 78 52 6f 77 49 64 20 3d 20 6e 65 77  ule.xRowId = new
33d20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
33d30 68 6f 64 73 2e 78 52 6f 77 49 64 28 0d 0a 20 20  hods.xRowId(..  
33d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
33d50 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20 21 3d 20  odule.xRowId != 
33d60 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
33d70 52 6f 77 49 64 20 3a 20 78 52 6f 77 49 64 29 3b  RowId : xRowId);
33d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33d90 6e 65 77 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74  newModule.xUpdat
33da0 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
33db0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 55 70 64  tiveMethods.xUpd
33dc0 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
33dd0 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 55        (module.xU
33de0 70 64 61 74 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  pdate != null) ?
33df0 20 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 20   module.xUpdate 
33e00 3a 20 78 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20  : xUpdate);.... 
33e10 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f             newMo
33e20 64 75 6c 65 2e 78 42 65 67 69 6e 20 3d 20 6e 65  dule.xBegin = ne
33e30 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
33e40 74 68 6f 64 73 2e 78 42 65 67 69 6e 28 0d 0a 20  thods.xBegin(.. 
33e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
33e60 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20 21 3d  module.xBegin !=
33e70 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
33e80 78 42 65 67 69 6e 20 3a 20 78 42 65 67 69 6e 29  xBegin : xBegin)
33e90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33ea0 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 53 79 6e 63   newModule.xSync
33eb0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
33ec0 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63  iveMethods.xSync
33ed0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33ee0 20 20 20 28 6d 6f 64 75 6c 65 2e 78 53 79 6e 63     (module.xSync
33ef0 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
33f00 6c 65 2e 78 53 79 6e 63 20 3a 20 78 53 79 6e 63  le.xSync : xSync
33f10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
33f20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 6f 6d    newModule.xCom
33f30 6d 69 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  mit = new Unsafe
33f40 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
33f50 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20  ommit(..        
33f60 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e          (module.
33f70 78 43 6f 6d 6d 69 74 20 21 3d 20 6e 75 6c 6c 29  xCommit != null)
33f80 20 3f 20 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69   ? module.xCommi
33f90 74 20 3a 20 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d  t : xCommit);...
33fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
33fb0 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
33fc0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
33fd0 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c  iveMethods.xRoll
33fe0 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
33ff0 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78         (module.x
34000 52 6f 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c  Rollback != null
34010 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  ) ? module.xRoll
34020 62 61 63 6b 20 3a 20 78 52 6f 6c 6c 62 61 63 6b  back : xRollback
34030 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34040 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 46 69 6e    newModule.xFin
34050 64 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20  dFunction = new 
34060 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
34070 6f 64 73 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ods.xFindFunctio
34080 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
34090 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 46 69 6e      (module.xFin
340a0 64 46 75 6e 63 74 69 6f 6e 20 21 3d 20 6e 75 6c  dFunction != nul
340b0 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 46 69 6e  l) ? module.xFin
340c0 64 46 75 6e 63 74 69 6f 6e 20 3a 0d 0a 20 20 20  dFunction :..   
340d0 20 20 20 20 20 20 20 20 20 20 20 20 20 78 46 69               xFi
340e0 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a  ndFunction);....
340f0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
34100 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3d 20  odule.xRename = 
34110 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
34120 4d 65 74 68 6f 64 73 2e 78 52 65 6e 61 6d 65 28  Methods.xRename(
34130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34140 20 20 28 6d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d    (module.xRenam
34150 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  e != null) ? mod
34160 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3a 20 78 52  ule.xRename : xR
34170 65 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  ename);....     
34180 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
34190 2e 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 6e 65  .xSavepoint = ne
341a0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
341b0 74 68 6f 64 73 2e 78 53 61 76 65 70 6f 69 6e 74  thods.xSavepoint
341c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
341d0 20 20 20 28 6d 6f 64 75 6c 65 2e 78 53 61 76 65     (module.xSave
341e0 70 6f 69 6e 74 20 21 3d 20 6e 75 6c 6c 29 20 3f  point != null) ?
341f0 20 6d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69   module.xSavepoi
34200 6e 74 20 3a 20 78 53 61 76 65 70 6f 69 6e 74 29  nt : xSavepoint)
34210 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34220 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52 65 6c 65   newModule.xRele
34230 61 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ase = new Unsafe
34240 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52  NativeMethods.xR
34250 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20  elease(..       
34260 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
34270 2e 78 52 65 6c 65 61 73 65 20 21 3d 20 6e 75 6c  .xRelease != nul
34280 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 65 6c  l) ? module.xRel
34290 65 61 73 65 20 3a 20 78 52 65 6c 65 61 73 65 29  ease : xRelease)
342a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
342b0 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c   newModule.xRoll
342c0 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20 55 6e 73  backTo = new Uns
342d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
342e0 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20  .xRollbackTo(.. 
342f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
34300 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  module.xRollback
34310 54 6f 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f  To != null) ? mo
34320 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f  dule.xRollbackTo
34330 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
34340 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 29      xRollbackTo)
34350 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34360 20 72 65 74 75 72 6e 20 6e 65 77 4d 6f 64 75 6c   return newModul
34370 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
34380 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
34390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
343e0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
343f0 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 6f 6e 65     /// Calls one
34400 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   of the virtual 
34410 74 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  table initializa
34420 74 69 6f 6e 20 6d 65 74 68 6f 64 73 2e 0d 0a 20  tion methods... 
34430 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
34440 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
34450 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
34460 63 72 65 61 74 65 22 3e 0d 0a 20 20 20 20 20 20  create">..      
34470 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74    /// Non-zero t
34480 6f 20 63 61 6c 6c 20 74 68 65 20 3c 73 65 65 20  o call the <see 
34490 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
344a0 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74  agedModule.Creat
344b0 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  e" />..        /
344c0 2f 2f 20 6d 65 74 68 6f 64 3b 20 6f 74 68 65 72  // method; other
344d0 77 69 73 65 2c 20 74 68 65 20 3c 73 65 65 20 63  wise, the <see c
344e0 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
344f0 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63  gedModule.Connec
34500 74 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  t" />..        /
34510 2f 2f 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 62  // method will b
34520 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  e called...     
34530 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
34540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
34550 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d  ram name="pDb">.
34560 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
34570 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65   native database
34580 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
34590 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
345a0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
345b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
345c0 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20 20  me="pAux">..    
345d0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67      /// The orig
345e0 69 6e 61 6c 20 6e 61 74 69 76 65 20 70 6f 69 6e  inal native poin
345f0 74 65 72 20 76 61 6c 75 65 20 74 68 61 74 20 77  ter value that w
34600 61 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74  as provided to t
34610 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
34620 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
34630 6f 64 75 6c 65 28 29 2c 20 73 71 6c 69 74 65 33  odule(), sqlite3
34640 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76  _create_module_v
34650 32 28 29 20 6f 72 0d 0a 20 20 20 20 20 20 20 20  2() or..        
34660 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61  /// sqlite3_crea
34670 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f  te_disposable_mo
34680 64 75 6c 65 28 29 20 66 75 6e 63 74 69 6f 6e 73  dule() functions
34690 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
346a0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
346b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
346c0 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20  ="argc">..      
346d0 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
346e0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66 72   of arguments fr
346f0 6f 6d 20 74 68 65 20 43 52 45 41 54 45 20 56 49  om the CREATE VI
34700 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
34710 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ement...        
34720 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
34730 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
34740 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20   name="argv">.. 
34750 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61         /// The a
34760 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 20 61  rray of string a
34770 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68  rguments from th
34780 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
34790 20 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20   TABLE..        
347a0 2f 2f 2f 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  /// statement...
347b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
347c0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
347d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
347e0 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
347f0 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
34800 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
34810 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
34820 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  d to point to th
34830 65 20 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20 20  e newly..       
34840 20 2f 2f 2f 20 63 72 65 61 74 65 64 20 6e 61 74   /// created nat
34850 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ive sqlite3_vtab
34860 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
34870 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
34880 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
34890 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
348a0 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20  me="pError">..  
348b0 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66        /// Upon f
348c0 61 69 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72  ailure, this par
348d0 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d  ameter must be m
348e0 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74  odified to point
348f0 20 74 6f 20 74 68 65 20 65 72 72 6f 72 0d 0a 20   to the error.. 
34900 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61         /// messa
34910 67 65 2c 20 77 69 74 68 20 74 68 65 20 75 6e 64  ge, with the und
34920 65 72 6c 79 69 6e 67 20 6d 65 6d 6f 72 79 20 68  erlying memory h
34930 61 76 69 6e 67 20 62 65 65 6e 20 6f 62 74 61 69  aving been obtai
34940 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20  ned from the..  
34950 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
34960 33 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74  3_malloc() funct
34970 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
34980 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
34990 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
349a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
349b0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
349c0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
349d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
349e0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
349f0 72 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72  rivate SQLiteErr
34a00 6f 72 43 6f 64 65 20 43 72 65 61 74 65 4f 72 43  orCode CreateOrC
34a10 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
34a20 20 20 20 20 20 62 6f 6f 6c 20 63 72 65 61 74 65       bool create
34a30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
34a40 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20 20 20 20  ntPtr pDb,..    
34a50 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
34a60 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Aux,..          
34a70 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
34a80 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
34a90 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20  argv,..         
34aa0 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 56     ref IntPtr pV
34ab0 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
34ac0 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 45 72    ref IntPtr pEr
34ad0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
34ae0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
34af0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
34b00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
34b20 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d  tring fileName =
34b30 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74   SQLiteString.St
34b40 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50  ringFromUtf8IntP
34b50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
34b60 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
34b70 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
34b80 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61 6d 65  ite3_db_filename
34b90 28 70 44 62 2c 20 49 6e 74 50 74 72 2e 5a 65 72  (pDb, IntPtr.Zer
34ba0 6f 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  o));....        
34bb0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
34bc0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
34bd0 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77  connection = new
34be0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
34bf0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
34c00 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2c              pDb,
34c10 20 66 69 6c 65 4e 61 6d 65 2c 20 66 61 6c 73 65   fileName, false
34c20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
34c30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34c40 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
34c50 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
34c60 62 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ble = null;..   
34c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c80 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 3d 20   string error = 
34c90 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
34cb0 28 28 63 72 65 61 74 65 20 26 26 20 43 72 65 61  ((create && Crea
34cc0 74 65 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 70  te(connection, p
34cd0 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Aux,..          
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cf0 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53    SQLiteString.S
34d00 74 72 69 6e 67 41 72 72 61 79 46 72 6f 6d 55 74  tringArrayFromUt
34d10 66 38 53 69 7a 65 41 6e 64 49 6e 74 50 74 72 28  f8SizeAndIntPtr(
34d20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20  argc,..         
34d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d40 20 20 20 61 72 67 76 29 2c 20 72 65 66 20 74 61     argv), ref ta
34d50 62 6c 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20  ble, ref error) 
34d60 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
34d70 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20  de.Ok) ||..     
34d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d90 20 20 20 28 21 63 72 65 61 74 65 20 26 26 20 43     (!create && C
34da0 6f 6e 6e 65 63 74 28 63 6f 6e 6e 65 63 74 69 6f  onnect(connectio
34db0 6e 2c 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20  n, pAux,..      
34dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34dd0 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 72 69        SQLiteStri
34de0 6e 67 2e 53 74 72 69 6e 67 41 72 72 61 79 46 72  ng.StringArrayFr
34df0 6f 6d 55 74 66 38 53 69 7a 65 41 6e 64 49 6e 74  omUtf8SizeAndInt
34e00 50 74 72 28 61 72 67 63 2c 0d 0a 20 20 20 20 20  Ptr(argc,..     
34e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e20 20 20 20 20 20 20 20 61 72 67 76 29 2c 20 72 65         argv), re
34e30 66 20 74 61 62 6c 65 2c 20 72 65 66 20 65 72 72  f table, ref err
34e40 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  or) == SQLiteErr
34e50 6f 72 43 6f 64 65 2e 4f 6b 29 29 0d 0a 20 20 20  orCode.Ok))..   
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34e80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34e90 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  table != null)..
34ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34eb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ed0 20 20 20 20 20 20 20 70 56 74 61 62 20 3d 20 54         pVtab = T
34ee0 61 62 6c 65 54 6f 49 6e 74 50 74 72 28 74 61 62  ableToIntPtr(tab
34ef0 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  le);..          
34f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f10 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
34f20 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20  rrorCode.Ok;..  
34f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
34f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f60 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
34f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
34f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
34fa0 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72  rror = SQLiteStr
34fb0 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
34fc0 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20  omString(..     
34fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fe0 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 74             "no t
34ff0 61 62 6c 65 20 77 61 73 20 63 72 65 61 74 65 64  able was created
35000 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
35020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35030 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
35040 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
35050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35060 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35080 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53  pError = SQLiteS
35090 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
350a0 46 72 6f 6d 53 74 72 69 6e 67 28 65 72 72 6f 72  FromString(error
350b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
350c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
350d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
350e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
350f0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
35100 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20  Exception e) /* 
35110 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68  NOTE: Must catch
35120 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20   ALL. */..      
35130 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35140 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20           pError 
35150 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
35160 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
35170 69 6e 67 28 65 2e 54 6f 53 74 72 69 6e 67 28 29  ing(e.ToString()
35180 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
35190 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
351a0 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
351b0 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
351c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
351d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
351e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
35220 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
35230 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
35240 2f 2f 20 43 61 6c 6c 73 20 6f 6e 65 20 6f 66 20  // Calls one of 
35250 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
35260 65 20 66 69 6e 61 6c 69 7a 61 74 69 6f 6e 20 6d  e finalization m
35270 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20 20  ethods...       
35280 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
35290 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
352a0 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 72 6f  ram name="destro
352b0 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  y">..        ///
352c0 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 63 61 6c   Non-zero to cal
352d0 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  l the <see cref=
352e0 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
352f0 6f 64 75 6c 65 2e 44 65 73 74 72 6f 79 22 20 2f  odule.Destroy" /
35300 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
35310 65 74 68 6f 64 3b 20 6f 74 68 65 72 77 69 73 65  ethod; otherwise
35320 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  , the..        /
35330 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
35340 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
35350 6c 65 2e 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f  le.Disconnect" /
35360 3e 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 62 65  > method will be
35370 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61  ..        /// ca
35380 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lled...        /
35390 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
353a0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
353b0 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
353c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
353d0 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
353e0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
353f0 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
35400 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
35410 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
35420 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
35430 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
35440 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
35450 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
35460 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
35470 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
35480 72 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72  rivate SQLiteErr
35490 6f 72 43 6f 64 65 20 44 65 73 74 72 6f 79 4f 72  orCode DestroyOr
354a0 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  Disconnect(..   
354b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 65           bool de
354c0 73 74 72 6f 79 2c 0d 0a 20 20 20 20 20 20 20 20  stroy,..        
354d0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
354e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
354f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
35500 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
35510 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35520 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
35530 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
35540 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d  able = TableFrom
35550 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a  IntPtr(pVtab);..
35560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35570 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e    if (table != n
35580 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
35590 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
355a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
355b0 28 28 64 65 73 74 72 6f 79 20 26 26 20 28 44 65  ((destroy && (De
355c0 73 74 72 6f 79 28 74 61 62 6c 65 29 20 3d 3d 20  stroy(table) == 
355d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
355e0 4f 6b 29 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  Ok)) ||..       
355f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35600 20 28 21 64 65 73 74 72 6f 79 20 26 26 20 28 44   (!destroy && (D
35610 69 73 63 6f 6e 6e 65 63 74 28 74 61 62 6c 65 29  isconnect(table)
35620 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
35630 6f 64 65 2e 4f 6b 29 29 29 0d 0a 20 20 20 20 20  ode.Ok)))..     
35640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35660 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 61            if (ta
35670 62 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  bles != null).. 
35680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35690 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c 65             table
356a0 73 2e 52 65 6d 6f 76 65 28 70 56 74 61 62 29 3b  s.Remove(pVtab);
356b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
356c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
356d0 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
356e0 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20  de.Ok;..        
356f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
35720 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
35730 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
35740 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63   /* NOTE: Must c
35750 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20  atch ALL. */..  
35760 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35770 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
35780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35790 20 2f 2f 20 4e 4f 54 45 3a 20 41 74 20 74 68 69   // NOTE: At thi
357a0 73 20 70 6f 69 6e 74 2c 20 74 68 65 72 65 20 69  s point, there i
357b0 73 20 6e 6f 20 77 61 79 20 74 6f 20 72 65 70 6f  s no way to repo
357c0 72 74 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20  rt the error..  
357d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
357e0 20 20 20 20 20 20 20 63 6f 6e 64 69 74 69 6f 6e         condition
357f0 20 62 61 63 6b 20 74 6f 20 74 68 65 20 63 61 6c   back to the cal
35800 6c 65 72 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ler; therefore, 
35810 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  use the..       
35820 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
35830 20 20 6c 6f 67 67 69 6e 67 20 66 61 63 69 6c 69    logging facili
35840 74 79 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20  ty instead...   
35850 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
35860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35870 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
35880 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35890 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
358a0 28 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 4e 6f  (LogExceptionsNo
358b0 54 68 72 6f 77 29 0d 0a 20 20 20 20 20 20 20 20  Throw)..        
358c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
358d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358e0 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
358f0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
35900 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
35910 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
35920 28 53 51 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f  (SQLiteBase.COR_
35930 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20  E_EXCEPTION,..  
35940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35950 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
35960 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
35970 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
35980 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
35990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359a0 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74 69   "Caught excepti
359b0 6f 6e 20 69 6e 20 5c 22 7b 30 7d 5c 22 20 6d 65  on in \"{0}\" me
359c0 74 68 6f 64 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  thod: {1}",..   
359d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359e0 20 20 20 20 20 20 20 20 20 64 65 73 74 72 6f 79           destroy
359f0 20 3f 20 22 78 44 65 73 74 72 6f 79 22 20 3a 20   ? "xDestroy" : 
35a00 22 78 44 69 73 63 6f 6e 6e 65 63 74 22 2c 20 65  "xDisconnect", e
35a10 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
35a20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
35a30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
35a50 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
35a60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35a70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
35a80 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
35a90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
35aa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35ab0 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
35ac0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
35ad0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35ae0 20 20 20 46 72 65 65 54 61 62 6c 65 28 70 56 74     FreeTable(pVt
35af0 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ab);..          
35b00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
35b10 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
35b20 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
35b30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
35b40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
35b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35b90 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
35ba0 6e 20 53 74 61 74 69 63 20 45 72 72 6f 72 20 48  n Static Error H
35bb0 61 6e 64 6c 69 6e 67 20 48 65 6c 70 65 72 20 4d  andling Helper M
35bc0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
35bd0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
35be0 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e         /// Arran
35bf0 67 65 73 20 66 6f 72 20 74 68 65 20 73 70 65 63  ges for the spec
35c00 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
35c10 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64  age to be placed
35c20 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20   into the..     
35c30 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66     /// zErrMsg f
35c40 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65  ield of a sqlite
35c50 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
35c60 74 72 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e  tructure, freein
35c70 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
35c80 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f  // existing erro
35c90 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e  r message, if an
35ca0 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
35cb0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
35cc0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
35cd0 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
35ce0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
35cf0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
35d00 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  Module" /> objec
35d10 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65  t instance to be
35d20 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20   used...        
35d30 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
35d40 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
35d50 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
35d60 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
35d70 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
35d80 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
35d90 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
35da0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
35db0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
35dc0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
35dd0 6e 61 6d 65 3d 22 6c 6f 67 45 72 72 6f 72 73 22  name="logErrors"
35de0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
35df0 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20  on-zero if this 
35e00 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 68  error message sh
35e10 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20 6c 6f 67  ould also be log
35e20 67 65 64 20 75 73 69 6e 67 20 74 68 65 0d 0a 20  ged using the.. 
35e30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
35e40 63 72 65 66 3d 22 53 51 4c 69 74 65 4c 6f 67 22  cref="SQLiteLog"
35e50 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20   /> class...    
35e60 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
35e70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
35e80 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72  aram name="error
35e90 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
35ea0 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  The error messag
35eb0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
35ec0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
35ed0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
35ee0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
35ef0 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65  -zero upon succe
35f00 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
35f10 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
35f20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
35f30 74 69 63 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c  tic bool SetTabl
35f40 65 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20  eError(..       
35f50 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
35f60 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
35f70 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
35f80 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
35f90 20 20 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f 72 73    bool logErrors
35fa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
35fb0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
35fc0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
35fd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35fe0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
35ff0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36000 20 20 20 20 20 20 20 69 66 20 28 6c 6f 67 45 72         if (logEr
36010 72 6f 72 73 29 0d 0a 20 20 20 20 20 20 20 20 20  rors)..         
36020 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
36040 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
36050 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ge(SQLiteErrorCo
36060 64 65 2e 45 72 72 6f 72 2c 0d 0a 20 20 20 20 20  de.Error,..     
36070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36080 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
36090 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72  (CultureInfo.Cur
360a0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
360b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360c0 20 20 20 20 20 20 22 56 69 72 74 75 61 6c 20 74        "Virtual t
360d0 61 62 6c 65 20 65 72 72 6f 72 3a 20 7b 30 7d 22  able error: {0}"
360e0 2c 20 65 72 72 6f 72 29 29 3b 20 2f 2a 20 74 68  , error)); /* th
360f0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
36100 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
36110 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
36120 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
36130 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
36140 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
36150 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
36160 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
36170 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74           if (pVt
36180 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ab == IntPtr.Zer
36190 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
361a0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
361b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
361c0 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20 49 6e   int offset = In
361d0 74 50 74 72 2e 53 69 7a 65 20 2b 20 53 51 4c 69  tPtr.Size + SQLi
361e0 74 65 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66  teMarshal.SizeOf
361f0 53 74 72 75 63 74 49 6e 74 28 29 3b 0d 0a 20 20  StructInt();..  
36200 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
36210 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65   pError = SQLite
36220 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50  Marshal.ReadIntP
36230 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74  tr(pVtab, offset
36240 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
36250 20 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20    if (pError != 
36260 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
36270 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36280 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
36290 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
362a0 45 72 72 6f 72 29 3b 20 70 45 72 72 6f 72 20 3d  Error); pError =
362b0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
362c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
362d0 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69  QLiteMarshal.Wri
362e0 74 65 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20  teIntPtr(pVtab, 
362f0 6f 66 66 73 65 74 2c 20 70 45 72 72 6f 72 29 3b  offset, pError);
36300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
36310 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
36320 66 20 28 65 72 72 6f 72 20 3d 3d 20 6e 75 6c 6c  f (error == null
36330 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36340 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
36350 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ...            b
36360 6f 6f 6c 20 73 75 63 63 65 73 73 20 3d 20 66 61  ool success = fa
36370 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
36380 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
36390 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
363a0 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
363b0 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
363c0 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
363d0 6e 67 28 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ng(error);..    
363e0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
363f0 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49  teMarshal.WriteI
36400 6e 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66  ntPtr(pVtab, off
36410 73 65 74 2c 20 70 45 72 72 6f 72 29 3b 0d 0a 20  set, pError);.. 
36420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
36430 75 63 63 65 73 73 20 3d 20 74 72 75 65 3b 0d 0a  uccess = true;..
36440 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
36450 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
36460 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
36470 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36480 20 20 20 69 66 20 28 21 73 75 63 63 65 73 73 20     if (!success 
36490 26 26 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e  && (pError != In
364a0 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20  tPtr.Zero))..   
364b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
364c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364d0 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79      SQLiteMemory
364e0 2e 46 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a  .Free(pError);..
364f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36500 20 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e 74      pError = Int
36510 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
36520 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
36530 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36540 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
36550 6e 20 73 75 63 63 65 73 73 3b 0d 0a 20 20 20 20  n success;..    
36560 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36570 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
36580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
365a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
365b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
365c0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
365d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
365e0 72 72 61 6e 67 65 73 20 66 6f 72 20 74 68 65 20  rranges for the 
365f0 73 70 65 63 69 66 69 65 64 20 65 72 72 6f 72 20  specified error 
36600 6d 65 73 73 61 67 65 20 74 6f 20 62 65 20 70 6c  message to be pl
36610 61 63 65 64 20 69 6e 74 6f 20 74 68 65 0d 0a 20  aced into the.. 
36620 20 20 20 20 20 20 20 2f 2f 2f 20 7a 45 72 72 4d         /// zErrM
36630 73 67 20 66 69 65 6c 64 20 6f 66 20 61 20 73 71  sg field of a sq
36640 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
36650 65 64 20 73 74 72 75 63 74 75 72 65 2c 20 66 72  ed structure, fr
36660 65 65 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  eeing the..     
36670 20 20 20 2f 2f 2f 20 65 78 69 73 74 69 6e 67 20     /// existing 
36680 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2c 20 69  error message, i
36690 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20  f any...        
366a0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
366b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
366c0 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
366d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
366e0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
366f0 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f  LiteModule" /> o
36700 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
36710 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20  o be used...    
36720 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
36730 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
36740 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
36750 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
36760 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
36770 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
36780 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
36790 74 61 6e 63 65 20 75 73 65 64 20 74 6f 0d 0a 20  tance used to.. 
367a0 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 6f 6b 75         /// looku
367b0 70 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69  p the native poi
367c0 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
367d0 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
367e0 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
367f0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
36800 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
36810 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45  param name="logE
36820 72 72 6f 72 73 22 3e 0d 0a 20 20 20 20 20 20 20  rrors">..       
36830 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
36840 20 74 68 69 73 20 65 72 72 6f 72 20 6d 65 73 73   this error mess
36850 61 67 65 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20  age should also 
36860 62 65 20 6c 6f 67 67 65 64 20 75 73 69 6e 67 20  be logged using 
36870 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
36880 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
36890 74 65 4c 6f 67 22 20 2f 3e 20 63 6c 61 73 73 2e  teLog" /> class.
368a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
368b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
368c0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
368d0 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20  "error">..      
368e0 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
368f0 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20  message...      
36900 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
36910 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
36920 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
36930 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e  // Non-zero upon
36940 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20   success...     
36950 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
36960 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
36970 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53  te static bool S
36980 65 74 54 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20  etTableError(.. 
36990 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
369a0 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d  eModule module,.
369b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
369c0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
369d0 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
369e0 20 20 20 20 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f      bool logErro
369f0 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs,..           
36a00 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
36a10 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
36a20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36a30 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 3d       if (table =
36a40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
36a50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
36a60 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
36a70 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
36a80 61 62 20 3d 20 74 61 62 6c 65 2e 4e 61 74 69 76  ab = table.Nativ
36a90 65 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20  eHandle;....    
36aa0 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61          if (pVta
36ab0 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b == IntPtr.Zero
36ac0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36ad0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
36ae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36af0 72 65 74 75 72 6e 20 53 65 74 54 61 62 6c 65 45  return SetTableE
36b00 72 72 6f 72 28 6d 6f 64 75 6c 65 2c 20 70 56 74  rror(module, pVt
36b10 61 62 2c 20 6c 6f 67 45 72 72 6f 72 73 2c 20 65  ab, logErrors, e
36b20 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
36b30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
36b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
36b90 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
36ba0 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e         /// Arran
36bb0 67 65 73 20 66 6f 72 20 74 68 65 20 73 70 65 63  ges for the spec
36bc0 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
36bd0 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64  age to be placed
36be0 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20   into the..     
36bf0 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66     /// zErrMsg f
36c00 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65  ield of a sqlite
36c10 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
36c20 74 72 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e  tructure, freein
36c30 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
36c40 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f  // existing erro
36c50 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e  r message, if an
36c60 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
36c70 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
36c80 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
36c90 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
36ca0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
36cb0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
36cc0 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  Module" /> objec
36cd0 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65  t instance to be
36ce0 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20   used...        
36cf0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
36d00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
36d10 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e   name="pCursor">
36d20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
36d30 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
36d40 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
36d50 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69  vtab_cursor deri
36d60 76 65 64 20 73 74 72 75 63 74 75 72 65 0d 0a 20  ved structure.. 
36d70 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 20         /// used 
36d80 74 6f 20 67 65 74 20 74 68 65 20 6e 61 74 69 76  to get the nativ
36d90 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
36da0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
36db0 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  rived..        /
36dc0 2f 2f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  // structure... 
36dd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
36de0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
36df0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 6f   <param name="lo
36e00 67 45 72 72 6f 72 73 22 3e 0d 0a 20 20 20 20 20  gErrors">..     
36e10 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
36e20 69 66 20 74 68 69 73 20 65 72 72 6f 72 20 6d 65  if this error me
36e30 73 73 61 67 65 20 73 68 6f 75 6c 64 20 61 6c 73  ssage should als
36e40 6f 20 62 65 20 6c 6f 67 67 65 64 20 75 73 69 6e  o be logged usin
36e50 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
36e60 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
36e70 4c 69 74 65 4c 6f 67 22 20 2f 3e 20 63 6c 61 73  LiteLog" /> clas
36e80 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
36e90 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
36ea0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
36eb0 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
36ec0 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f      /// The erro
36ed0 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20  r message...    
36ee0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
36ef0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
36f00 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
36f10 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70   /// Non-zero up
36f20 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20  on success...   
36f30 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
36f40 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ns>..        pri
36f50 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
36f60 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72 28   SetCursorError(
36f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
36f80 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
36f90 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
36fa0 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d  IntPtr pCursor,.
36fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
36fc0 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20  l logErrors,..  
36fd0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
36fe0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
36ff0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
37000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
37010 20 28 70 43 75 72 73 6f 72 20 3d 3d 20 49 6e 74   (pCursor == Int
37020 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
37030 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
37040 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
37050 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
37060 56 74 61 62 20 3d 20 54 61 62 6c 65 46 72 6f 6d  Vtab = TableFrom
37070 43 75 72 73 6f 72 28 6d 6f 64 75 6c 65 2c 20 70  Cursor(module, p
37080 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  Cursor);....    
37090 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61          if (pVta
370a0 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b == IntPtr.Zero
370b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
370c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
370d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
370e0 72 65 74 75 72 6e 20 53 65 74 54 61 62 6c 65 45  return SetTableE
370f0 72 72 6f 72 28 6d 6f 64 75 6c 65 2c 20 70 56 74  rror(module, pVt
37100 61 62 2c 20 6c 6f 67 45 72 72 6f 72 73 2c 20 65  ab, logErrors, e
37110 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
37120 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
37130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37170 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
37180 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
37190 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e         /// Arran
371a0 67 65 73 20 66 6f 72 20 74 68 65 20 73 70 65 63  ges for the spec
371b0 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
371c0 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64  age to be placed
371d0 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20   into the..     
371e0 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66     /// zErrMsg f
371f0 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65  ield of a sqlite
37200 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
37210 74 72 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e  tructure, freein
37220 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
37230 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f  // existing erro
37240 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e  r message, if an
37250 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
37260 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
37270 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
37280 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
37290 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
372a0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
372b0 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  Module" /> objec
372c0 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65  t instance to be
372d0 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20   used...        
372e0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
372f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
37300 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d   name="cursor">.
37310 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
37320 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
37330 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
37340 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
37350 69 6e 73 74 61 6e 63 65 20 75 73 65 64 20 74 6f  instance used to
37360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f  ..        /// lo
37370 6f 6b 75 70 20 74 68 65 20 6e 61 74 69 76 65 20  okup the native 
37380 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
37390 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
373a0 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
373b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
373c0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
373d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
373e0 6f 67 45 72 72 6f 72 73 22 3e 0d 0a 20 20 20 20  ogErrors">..    
373f0 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
37400 20 69 66 20 74 68 69 73 20 65 72 72 6f 72 20 6d   if this error m
37410 65 73 73 61 67 65 20 73 68 6f 75 6c 64 20 61 6c  essage should al
37420 73 6f 20 62 65 20 6c 6f 67 67 65 64 20 75 73 69  so be logged usi
37430 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ng the..        
37440 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
37450 51 4c 69 74 65 4c 6f 67 22 20 2f 3e 20 63 6c 61  QLiteLog" /> cla
37460 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
37470 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
37480 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
37490 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
374a0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 72 72       /// The err
374b0 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20  or message...   
374c0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
374d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
374e0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
374f0 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75    /// Non-zero u
37500 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20  pon success...  
37510 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
37520 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
37530 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
37540 6c 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72  l SetCursorError
37550 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
37560 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
37570 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
37580 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
37590 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
375a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
375b0 6f 6f 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d 0a  ool logErrors,..
375c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
375d0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
375e0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
375f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37600 69 66 20 28 63 75 72 73 6f 72 20 3d 3d 20 6e 75  if (cursor == nu
37610 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
37620 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
37630 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
37640 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72    IntPtr pCursor
37650 20 3d 20 63 75 72 73 6f 72 2e 4e 61 74 69 76 65   = cursor.Native
37660 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  Handle;....     
37670 20 20 20 20 20 20 20 69 66 20 28 70 43 75 72 73         if (pCurs
37680 6f 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  or == IntPtr.Zer
37690 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
376a0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
376b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
376c0 20 72 65 74 75 72 6e 20 53 65 74 43 75 72 73 6f   return SetCurso
376d0 72 45 72 72 6f 72 28 6d 6f 64 75 6c 65 2c 20 70  rError(module, p
376e0 43 75 72 73 6f 72 2c 20 6c 6f 67 45 72 72 6f 72  Cursor, logError
376f0 73 2c 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  s, error);..    
37700 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
37710 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
37720 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
37730 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
37740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
37790 69 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d 65  ion Protected Me
377a0 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 23  mbers..        #
377b0 72 65 67 69 6f 6e 20 4d 6f 64 75 6c 65 20 48 65  region Module He
377c0 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
377d0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
377e0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
377f0 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e   Gets and return
37800 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  s the <see cref=
37810 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
37820 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61  dule" /> interfa
37830 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
37840 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
37850 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
37860 72 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74 69  reating the nati
37870 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ve sqlite3_modul
37880 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
37890 74 72 75 63 74 75 72 65 2e 20 20 44 65 72 69 76  tructure.  Deriv
378a0 65 64 20 63 6c 61 73 73 65 73 20 6d 61 79 20 6f  ed classes may o
378b0 76 65 72 72 69 64 65 20 74 68 69 73 20 6d 65 74  verride this met
378c0 68 6f 64 20 74 6f 20 73 75 70 70 6c 79 20 61 6e  hod to supply an
378d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c  ..        /// al
378e0 74 65 72 6e 61 74 65 20 69 6d 70 6c 65 6d 65 6e  ternate implemen
378f0 74 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 3c  tation for the <
37900 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
37910 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f  eNativeModule" /
37920 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  >..        /// i
37930 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 20  nterface...     
37940 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
37950 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
37960 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
37970 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
37980 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
37990 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74  veModule" /> int
379a0 65 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74  erface implement
379b0 61 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20  ation to..      
379c0 20 20 2f 2f 2f 20 62 65 20 75 73 65 64 20 77 68    /// be used wh
379d0 65 6e 20 70 6f 70 75 6c 61 74 69 6e 67 20 74 68  en populating th
379e0 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  e native sqlite3
379f0 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72  _module structur
37a00 65 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20  e.  If..        
37a10 2f 2f 2f 20 74 68 65 20 72 65 74 75 72 6e 65 64  /// the returned
37a20 20 76 61 6c 75 65 20 69 73 20 6e 75 6c 6c 2c 20   value is null, 
37a30 74 68 65 20 70 72 69 76 61 74 65 20 6d 65 74 68  the private meth
37a40 6f 64 73 20 70 72 6f 76 69 64 65 64 20 62 79 20  ods provided by 
37a50 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
37a60 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
37a70 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 63 6c 61  teModule" /> cla
37a80 73 73 20 61 6e 64 20 72 65 6c 61 74 69 6e 67 20  ss and relating 
37a90 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
37aa0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
37ab0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
37ac0 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65  le" /> interface
37ad0 20 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74    will be used t
37ae0 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  o..        /// c
37af0 72 65 61 74 65 20 74 68 65 20 6e 65 63 65 73 73  reate the necess
37b00 61 72 79 20 64 65 6c 65 67 61 74 65 73 2e 0d 0a  ary delegates...
37b10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
37b20 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
37b30 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
37b40 6c 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  l ISQLiteNativeM
37b50 6f 64 75 6c 65 20 47 65 74 4e 61 74 69 76 65 4d  odule GetNativeM
37b60 6f 64 75 6c 65 49 6d 70 6c 28 29 0d 0a 20 20 20  oduleImpl()..   
37b70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37b80 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
37b90 20 2f 2a 20 4e 4f 54 45 3a 20 55 73 65 20 74 68   /* NOTE: Use th
37ba0 65 20 62 75 69 6c 74 2d 69 6e 20 64 65 66 61 75  e built-in defau
37bb0 6c 74 20 64 65 6c 65 67 61 74 65 73 2e 20 2a 2f  lt delegates. */
37bc0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
37bd0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
37be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
37c20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
37c30 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
37c40 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 64   /// Creates and
37c50 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73 65   returns the <se
37c60 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
37c70 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d  ativeModule" />.
37c80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74  .        /// int
37c90 65 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74  erface implement
37ca0 61 74 69 6f 6e 20 63 6f 72 72 65 73 70 6f 6e 64  ation correspond
37cb0 69 6e 67 20 74 6f 20 74 68 65 20 63 75 72 72 65  ing to the curre
37cc0 6e 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  nt..        /// 
37cd0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
37ce0 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65  eModule" /> obje
37cf0 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
37d00 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
37d10 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
37d20 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..