System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact cfe7b5d7229aefd24b2a32c06cc2e1008a28be95:


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 2f  ///....        /
8040: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
8050: 20 20 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d        /// Determ
8060: 69 6e 65 73 20 69 66 20 74 68 65 20 6e 61 74 69  ines if the nati
8070: 76 65 20 65 73 74 69 6d 61 74 65 64 52 6f 77 73  ve estimatedRows
8080: 20 66 69 65 6c 64 20 63 61 6e 20 62 65 20 75 73   field can be us
8090: 65 64 2c 20 62 61 73 65 64 20 6f 6e 0d 0a 20 20  ed, based on..  
80a0: 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 61 76        /// the av
80b0: 61 69 6c 61 62 6c 65 20 76 65 72 73 69 6f 6e 20  ailable version 
80c0: 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  of the SQLite co
80d0: 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  re library...   
80e0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
80f0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
8100: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
8110: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
8120: 20 69 66 20 74 68 65 20 3c 73 65 65 20 63 72 65   if the <see cre
8130: 66 3d 22 45 73 74 69 6d 61 74 65 64 52 6f 77 73  f="EstimatedRows
8140: 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20 69 73  " /> property is
8150: 20 73 75 70 70 6f 72 74 65 64 0d 0a 20 20 20 20   supported..    
8160: 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 65 20 53      /// by the S
8170: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
8180: 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry...        ///
8190: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
81a0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
81b0: 20 43 61 6e 55 73 65 45 73 74 69 6d 61 74 65 64   CanUseEstimated
81c0: 52 6f 77 73 28 29 0d 0a 20 20 20 20 20 20 20 20  Rows()..        
81d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
81e0: 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  f (UnsafeNativeM
81f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
8200: 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72  ibversion_number
8210: 28 29 20 3e 3d 20 33 30 30 38 30 30 32 29 0d 0a  () >= 3008002)..
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8230: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
8240: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8250: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
8260: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
82c0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
82d0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
82e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
82f0: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
8300: 69 6e 74 55 73 61 67 65 5b 5d 20 63 6f 6e 73 74  intUsage[] const
8310: 72 61 69 6e 74 55 73 61 67 65 73 3b 0d 0a 20 20  raintUsages;..  
8320: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
8330: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
8340: 20 41 6e 20 61 72 72 61 79 20 6f 66 20 3c 73 65   An array of <se
8350: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
8360: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  dexConstraintUsa
8370: 67 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20  ge" /> object.. 
8380: 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61         /// insta
8390: 6e 63 65 73 2c 20 65 61 63 68 20 63 6f 6e 74 61  nces, each conta
83a0: 69 6e 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  ining informatio
83b0: 6e 20 74 6f 20 62 65 20 73 75 70 70 6c 69 65 64  n to be supplied
83c0: 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 0d 0a   to the SQLite..
83d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72 65          /// core
83e0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
83f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8400: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
8410: 63 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  c SQLiteIndexCon
8420: 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 20 43  straintUsage[] C
8430: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 0d  onstraintUsages.
8440: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8450: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
8460: 74 75 72 6e 20 63 6f 6e 73 74 72 61 69 6e 74 55  turn constraintU
8470: 73 61 67 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20  sages; }..      
8480: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
84e0: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 69 6e    private int in
84f0: 64 65 78 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20  dexNumber;..    
8500: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8510: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
8520: 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 68 65  umber used to he
8530: 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20  lp identify the 
8540: 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 20  selected index. 
8550: 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
8560: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61  ..        /// la
8570: 74 65 72 20 62 65 20 70 72 6f 76 69 64 65 64 20  ter be provided 
8580: 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
8590: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
85a0: 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22 20 2f  Module.Filter" /
85b0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
85c0: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
85d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
85e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69          public i
85f0: 6e 74 20 49 6e 64 65 78 4e 75 6d 62 65 72 0d 0a  nt IndexNumber..
8600: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8610: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
8620: 75 72 6e 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b  urn indexNumber;
8630: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8640: 73 65 74 20 7b 20 69 6e 64 65 78 4e 75 6d 62 65  set { indexNumbe
8650: 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  r = value; }..  
8660: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8670: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
86c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
86d0: 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67  ring indexString
86e0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
86f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8700: 20 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65    /// String use
8710: 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69  d to help identi
8720: 66 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  fy the selected 
8730: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 76 61 6c  index.  This val
8740: 75 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  ue will..       
8750: 20 2f 2f 2f 20 6c 61 74 65 72 20 62 65 20 70 72   /// later be pr
8760: 6f 76 69 64 65 64 20 74 6f 20 74 68 65 20 3c 73  ovided to the <s
8770: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
8780: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69  ManagedModule.Fi
8790: 6c 74 65 72 22 20 2f 3e 0d 0a 20 20 20 20 20 20  lter" />..      
87a0: 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20    /// method... 
87b0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
87c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
87d0: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 49 6e 64  ublic string Ind
87e0: 65 78 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20  exString..      
87f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8800: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e   get { return in
8810: 64 65 78 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20  dexString; }..  
8820: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
8830: 69 6e 64 65 78 53 74 72 69 6e 67 20 3d 20 76 61  indexString = va
8840: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
8850: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
8860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88a0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
88b0: 70 72 69 76 61 74 65 20 69 6e 74 20 6e 65 65 64  private int need
88c0: 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e  ToFreeIndexStrin
88d0: 67 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  g;..        /// 
88e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
88f0: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
8900: 69 66 20 74 68 65 20 69 6e 64 65 78 20 73 74 72  if the index str
8910: 69 6e 67 20 6d 75 73 74 20 62 65 20 66 72 65 65  ing must be free
8920: 64 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20  d by the SQLite 
8930: 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  core..        //
8940: 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  / library...    
8950: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8960: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
8970: 69 63 20 69 6e 74 20 4e 65 65 64 54 6f 46 72 65  ic int NeedToFre
8980: 65 49 6e 64 65 78 53 74 72 69 6e 67 0d 0a 20 20  eIndexString..  
8990: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
89a0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
89b0: 6e 20 6e 65 65 64 54 6f 46 72 65 65 49 6e 64 65  n needToFreeInde
89c0: 78 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20  xString; }..    
89d0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 65          set { ne
89e0: 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72  edToFreeIndexStr
89f0: 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ing = value; }..
8a00: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8a10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8a60: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
8a70: 69 6e 74 20 6f 72 64 65 72 42 79 43 6f 6e 73 75  int orderByConsu
8a80: 6d 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  med;..        //
8a90: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8aa0: 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66       /// True if
8ab0: 20 6f 75 74 70 75 74 20 69 73 20 61 6c 72 65 61   output is alrea
8ac0: 64 79 20 6f 72 64 65 72 65 64 2e 0d 0a 20 20 20  dy ordered...   
8ad0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
8ae0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
8af0: 6c 69 63 20 69 6e 74 20 4f 72 64 65 72 42 79 43  lic int OrderByC
8b00: 6f 6e 73 75 6d 65 64 0d 0a 20 20 20 20 20 20 20  onsumed..       
8b10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8b20: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6f 72 64  get { return ord
8b30: 65 72 42 79 43 6f 6e 73 75 6d 65 64 3b 20 7d 0d  erByConsumed; }.
8b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
8b50: 20 7b 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d   { orderByConsum
8b60: 65 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ed = value; }.. 
8b70: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8b80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8bd0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 64         private d
8be0: 6f 75 62 6c 65 3f 20 65 73 74 69 6d 61 74 65 64  ouble? estimated
8bf0: 43 6f 73 74 3b 0d 0a 20 20 20 20 20 20 20 20 2f  Cost;..        /
8c00: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
8c10: 20 20 20 20 20 20 2f 2f 2f 20 45 73 74 69 6d 61        /// Estima
8c20: 74 65 64 20 63 6f 73 74 20 6f 66 20 75 73 69 6e  ted cost of usin
8c30: 67 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 55  g this index.  U
8c40: 73 69 6e 67 20 61 20 6e 75 6c 6c 20 76 61 6c 75  sing a null valu
8c50: 65 20 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20  e here..        
8c60: 2f 2f 2f 20 69 6e 64 69 63 61 74 65 73 20 74 68  /// indicates th
8c70: 61 74 20 61 20 64 65 66 61 75 6c 74 20 65 73 74  at a default est
8c80: 69 6d 61 74 65 64 20 63 6f 73 74 20 76 61 6c 75  imated cost valu
8c90: 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  e should be used
8ca0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
8cb0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
8cc0: 20 20 20 70 75 62 6c 69 63 20 64 6f 75 62 6c 65     public double
8cd0: 3f 20 45 73 74 69 6d 61 74 65 64 43 6f 73 74 0d  ? EstimatedCost.
8ce0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8cf0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
8d00: 74 75 72 6e 20 65 73 74 69 6d 61 74 65 64 43 6f  turn estimatedCo
8d10: 73 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  st; }..         
8d20: 20 20 20 73 65 74 20 7b 20 65 73 74 69 6d 61 74     set { estimat
8d30: 65 64 43 6f 73 74 20 3d 20 76 61 6c 75 65 3b 20  edCost = value; 
8d40: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
8d50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8da0: 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
8db0: 74 65 20 6c 6f 6e 67 3f 20 65 73 74 69 6d 61 74  te long? estimat
8dc0: 65 64 52 6f 77 73 3b 0d 0a 20 20 20 20 20 20 20  edRows;..       
8dd0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8de0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 73 74 69          /// Esti
8df0: 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
8e00: 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2e 20 20  rows returned.  
8e10: 55 73 69 6e 67 20 61 20 6e 75 6c 6c 20 76 61 6c  Using a null val
8e20: 75 65 20 68 65 72 65 0d 0a 20 20 20 20 20 20 20  ue here..       
8e30: 20 2f 2f 2f 20 69 6e 64 69 63 61 74 65 73 20 74   /// indicates t
8e40: 68 61 74 20 61 20 64 65 66 61 75 6c 74 20 65 73  hat a default es
8e50: 74 69 6d 61 74 65 64 20 72 6f 77 73 20 76 61 6c  timated rows val
8e60: 75 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  ue should be use
8e70: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
8e80: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8e90: 20 20 20 20 70 75 62 6c 69 63 20 6c 6f 6e 67 3f      public long?
8ea0: 20 45 73 74 69 6d 61 74 65 64 52 6f 77 73 0d 0a   EstimatedRows..
8eb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8ec0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
8ed0: 75 72 6e 20 65 73 74 69 6d 61 74 65 64 52 6f 77  urn estimatedRow
8ee0: 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
8ef0: 20 20 73 65 74 20 7b 20 65 73 74 69 6d 61 74 65    set { estimate
8f00: 64 52 6f 77 73 20 3d 20 76 61 6c 75 65 3b 20 7d  dRows = value; }
8f10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
8f20: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
8f30: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
8f40: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
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 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8fa0: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49   #region SQLiteI
8fb0: 6e 64 65 78 20 48 65 6c 70 65 72 20 43 6c 61 73  ndex Helper Clas
8fc0: 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  s..    /// <summ
8fd0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
8fe0: 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65  is class represe
8ff0: 6e 74 73 20 74 68 65 20 76 61 72 69 6f 75 73 20  nts the various 
9000: 69 6e 70 75 74 73 20 61 6e 64 20 6f 75 74 70 75  inputs and outpu
9010: 74 73 20 75 73 65 64 20 77 69 74 68 20 74 68 65  ts used with the
9020: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63  ..    /// <see c
9030: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
9040: 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e  gedModule.BestIn
9050: 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  dex" /> method..
9060: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
9070: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
9080: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c  sealed class SQL
9090: 69 74 65 49 6e 64 65 78 0d 0a 20 20 20 20 7b 0d  iteIndex..    {.
90a0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
90b0: 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72   Internal Constr
90c0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
90d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
90e0: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
90f0: 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
9100: 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e  e of this class.
9110: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
9120: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
9130: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
9140: 65 3d 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22 3e  e="nConstraint">
9150: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
9160: 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65  e number of <see
9170: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
9180: 65 78 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e  exConstraint" />
9190: 20 28 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f   (and..        /
91a0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
91b0: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
91c0: 69 6e 74 55 73 61 67 65 22 20 2f 3e 29 20 69 6e  intUsage" />) in
91d0: 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20 20  stances to..    
91e0: 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c 6f      /// pre-allo
91f0: 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e 0d  cate space for..
9200: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
9210: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
9220: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
9230: 6e 4f 72 64 65 72 42 79 22 3e 0d 0a 20 20 20 20  nOrderBy">..    
9240: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
9250: 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d  er of <see cref=
9260: 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65  "SQLiteIndexOrde
9270: 72 42 79 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65  rBy" /> instance
9280: 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s to..        //
9290: 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20 73  / pre-allocate s
92a0: 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20 20  pace for...     
92b0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
92c0: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
92d0: 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 28 0d 0a  l SQLiteIndex(..
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
92f0: 6e 43 6f 6e 73 74 72 61 69 6e 74 2c 0d 0a 20 20  nConstraint,..  
9300: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4f            int nO
9310: 72 64 65 72 42 79 0d 0a 20 20 20 20 20 20 20 20  rderBy..        
9320: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
9330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
9340: 70 75 74 73 20 3d 20 6e 65 77 20 53 51 4c 69 74  puts = new SQLit
9350: 65 49 6e 64 65 78 49 6e 70 75 74 73 28 6e 43 6f  eIndexInputs(nCo
9360: 6e 73 74 72 61 69 6e 74 2c 20 6e 4f 72 64 65 72  nstraint, nOrder
9370: 42 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  By);..          
9380: 20 20 6f 75 74 70 75 74 73 20 3d 20 6e 65 77 20    outputs = new 
9390: 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75  SQLiteIndexOutpu
93a0: 74 73 28 6e 43 6f 6e 73 74 72 61 69 6e 74 29 3b  ts(nConstraint);
93b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
93c0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
93d0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
93e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9420: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
9430: 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 4d  egion Internal M
9440: 61 72 73 68 61 6c 20 48 65 6c 70 65 72 20 4d 65  arshal Helper Me
9450: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
9460: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9470: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72        /// Conver
9480: 74 73 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e  ts a native poin
9490: 74 65 72 20 74 6f 20 61 20 6e 61 74 69 76 65 20  ter to a native 
94a0: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
94b0: 66 6f 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20  fo structure..  
94c0: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 6f 20 61        /// into a
94d0: 20 6e 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22   new <see cref="
94e0: 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20  SQLiteIndex" /> 
94f0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
9500: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
9510: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
9520: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
9530: 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20  e="pIndex">..   
9540: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
9550: 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
9560: 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
9570: 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72  3_index_info str
9580: 75 63 74 75 72 65 20 74 6f 0d 0a 20 20 20 20 20  ucture to..     
9590: 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 74 2e 0d     /// convert..
95a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
95b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
95c0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
95d0: 69 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20  index">..       
95e0: 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
95f0: 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  s, this paramete
9600: 72 20 77 69 6c 6c 20 62 65 20 6d 6f 64 69 66 69  r will be modifi
9610: 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
9620: 65 20 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20 20  e newly..       
9630: 20 2f 2f 2f 20 63 72 65 61 74 65 64 20 3c 73 65   /// created <se
9640: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
9650: 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  dex" /> object i
9660: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
9670: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
9680: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
9690: 20 73 74 61 74 69 63 20 76 6f 69 64 20 46 72 6f   static void Fro
96a0: 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20  mIntPtr(..      
96b0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 49 6e        IntPtr pIn
96c0: 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  dex,..          
96d0: 20 20 72 65 66 20 53 51 4c 69 74 65 49 6e 64 65    ref SQLiteInde
96e0: 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20  x index..       
96f0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9700: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
9710: 66 20 28 70 49 6e 64 65 78 20 3d 3d 20 49 6e 74  f (pIndex == Int
9720: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
9730: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9740: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
9750: 20 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20 30    int offset = 0
9760: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9770: 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74   int nConstraint
9780: 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c   = SQLiteMarshal
9790: 2e 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65  .ReadInt32(pInde
97a0: 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20  x, offset);.... 
97b0: 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65             offse
97c0: 74 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61  t = SQLiteMarsha
97d0: 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f  l.NextOffsetOf(o
97e0: 66 66 73 65 74 2c 20 73 69 7a 65 6f 66 28 69 6e  ffset, sizeof(in
97f0: 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
9800: 20 20 20 20 20 49 6e 74 50 74 72 2e 53 69 7a 65       IntPtr.Size
9810: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9820: 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 73 74 72    IntPtr pConstr
9830: 61 69 6e 74 20 3d 20 53 51 4c 69 74 65 4d 61 72  aint = SQLiteMar
9840: 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28  shal.ReadIntPtr(
9850: 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b  pIndex, offset);
9860: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9870: 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d  offset = SQLiteM
9880: 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65  arshal.NextOffse
9890: 74 4f 66 28 6f 66 66 73 65 74 2c 20 49 6e 74 50  tOf(offset, IntP
98a0: 74 72 2e 53 69 7a 65 2c 0d 0a 20 20 20 20 20 20  tr.Size,..      
98b0: 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
98c0: 28 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  (int));....     
98d0: 20 20 20 20 20 20 20 69 6e 74 20 6e 4f 72 64 65         int nOrde
98e0: 72 42 79 20 3d 20 53 51 4c 69 74 65 4d 61 72 73  rBy = SQLiteMars
98f0: 68 61 6c 2e 52 65 61 64 49 6e 74 33 32 28 70 49  hal.ReadInt32(pI
9900: 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
9910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
9920: 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72  fset = SQLiteMar
9930: 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f  shal.NextOffsetO
9940: 66 28 6f 66 66 73 65 74 2c 20 73 69 7a 65 6f 66  f(offset, sizeof
9950: 28 69 6e 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  (int),..        
9960: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 2e 53          IntPtr.S
9970: 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ize);....       
9980: 20 20 20 20 20 49 6e 74 50 74 72 20 70 4f 72 64       IntPtr pOrd
9990: 65 72 42 79 20 3d 20 53 51 4c 69 74 65 4d 61 72  erBy = SQLiteMar
99a0: 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28  shal.ReadIntPtr(
99b0: 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b  pIndex, offset);
99c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
99d0: 69 6e 64 65 78 20 3d 20 6e 65 77 20 53 51 4c 69  index = new SQLi
99e0: 74 65 49 6e 64 65 78 28 6e 43 6f 6e 73 74 72 61  teIndex(nConstra
99f0: 69 6e 74 2c 20 6e 4f 72 64 65 72 42 79 29 3b 0d  int, nOrderBy);.
9a00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  ...            T
9a10: 79 70 65 20 69 6e 64 65 78 43 6f 6e 73 74 72 61  ype indexConstra
9a20: 69 6e 74 54 79 70 65 20 3d 20 74 79 70 65 6f 66  intType = typeof
9a30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9a40: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
9a50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
9a60: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 29  ndex_constraint)
9a70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9a80: 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f 6e 73 74   int sizeOfConst
9a90: 72 61 69 6e 74 54 79 70 65 20 3d 20 4d 61 72 73  raintType = Mars
9aa0: 68 61 6c 2e 53 69 7a 65 4f 66 28 69 6e 64 65 78  hal.SizeOf(index
9ab0: 43 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 29 3b  ConstraintType);
9ac0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9ad0: 66 6f 72 20 28 69 6e 74 20 69 43 6f 6e 73 74 72  for (int iConstr
9ae0: 61 69 6e 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74  aint = 0; iConst
9af0: 72 61 69 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61  raint < nConstra
9b00: 69 6e 74 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74  int; iConstraint
9b10: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
9b20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9b30: 20 20 20 20 49 6e 74 50 74 72 20 70 4f 66 66 73      IntPtr pOffs
9b40: 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68  et = SQLiteMarsh
9b50: 61 6c 2e 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  al.IntPtrForOffs
9b60: 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et(..           
9b70: 20 20 20 20 20 20 20 20 20 70 43 6f 6e 73 74 72           pConstr
9b80: 61 69 6e 74 2c 20 69 43 6f 6e 73 74 72 61 69 6e  aint, iConstrain
9b90: 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72  t * sizeOfConstr
9ba0: 61 69 6e 74 54 79 70 65 29 3b 0d 0a 0d 0a 20 20  aintType);....  
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
9bc0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9bd0: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
9be0: 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73 74  constraint const
9bf0: 72 61 69 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20  raint =..       
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 55 6e               (Un
9c10: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9c20: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
9c30: 63 6f 6e 73 74 72 61 69 6e 74 29 0d 0a 20 20 20  constraint)..   
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c50: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 50 74 72       Marshal.Ptr
9c60: 54 6f 53 74 72 75 63 74 75 72 65 28 70 4f 66 66  ToStructure(pOff
9c70: 73 65 74 2c 20 69 6e 64 65 78 43 6f 6e 73 74 72  set, indexConstr
9c80: 61 69 6e 74 54 79 70 65 29 3b 0d 0a 0d 0a 20 20  aintType);....  
9c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
9ca0: 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74  dex.Inputs.Const
9cb0: 72 61 69 6e 74 73 5b 69 43 6f 6e 73 74 72 61 69  raints[iConstrai
9cc0: 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  nt] =..         
9cd0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
9ce0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
9cf0: 61 69 6e 74 28 63 6f 6e 73 74 72 61 69 6e 74 29  aint(constraint)
9d00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9d20: 54 79 70 65 20 69 6e 64 65 78 4f 72 64 65 72 42  Type indexOrderB
9d30: 79 54 79 70 65 20 3d 20 74 79 70 65 6f 66 28 0d  yType = typeof(.
9d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9d50: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9d60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
9d70: 65 78 5f 6f 72 64 65 72 62 79 29 3b 0d 0a 0d 0a  ex_orderby);....
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
9d90: 73 69 7a 65 4f 66 4f 72 64 65 72 42 79 54 79 70  sizeOfOrderByTyp
9da0: 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65  e = Marshal.Size
9db0: 4f 66 28 69 6e 64 65 78 4f 72 64 65 72 42 79 54  Of(indexOrderByT
9dc0: 79 70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ype);....       
9dd0: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 4f       for (int iO
9de0: 72 64 65 72 42 79 20 3d 20 30 3b 20 69 4f 72 64  rderBy = 0; iOrd
9df0: 65 72 42 79 20 3c 20 6e 4f 72 64 65 72 42 79 3b  erBy < nOrderBy;
9e00: 20 69 4f 72 64 65 72 42 79 2b 2b 29 0d 0a 20 20   iOrderBy++)..  
9e10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
9e30: 50 74 72 20 70 4f 66 66 73 65 74 20 3d 20 53 51  Ptr pOffset = SQ
9e40: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49 6e 74 50  LiteMarshal.IntP
9e50: 74 72 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20  trForOffset(..  
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e70: 20 20 70 4f 72 64 65 72 42 79 2c 20 69 4f 72 64    pOrderBy, iOrd
9e80: 65 72 42 79 20 2a 20 73 69 7a 65 4f 66 4f 72 64  erBy * sizeOfOrd
9e90: 65 72 42 79 54 79 70 65 29 3b 0d 0a 0d 0a 20 20  erByType);....  
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
9eb0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9ec0: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
9ed0: 6f 72 64 65 72 62 79 20 6f 72 64 65 72 42 79 20  orderby orderBy 
9ee0: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
9ef0: 20 20 20 20 20 20 20 28 55 6e 73 61 66 65 4e 61         (UnsafeNa
9f00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9f10: 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62  te3_index_orderb
9f20: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
9f30: 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
9f40: 68 61 6c 2e 50 74 72 54 6f 53 74 72 75 63 74 75  hal.PtrToStructu
9f50: 72 65 28 70 4f 66 66 73 65 74 2c 20 69 6e 64 65  re(pOffset, inde
9f60: 78 4f 72 64 65 72 42 79 54 79 70 65 29 3b 0d 0a  xOrderByType);..
9f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f80: 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 4f    index.Inputs.O
9f90: 72 64 65 72 42 79 73 5b 69 4f 72 64 65 72 42 79  rderBys[iOrderBy
9fa0: 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] =..           
9fb0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
9fc0: 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 28  iteIndexOrderBy(
9fd0: 6f 72 64 65 72 42 79 29 3b 0d 0a 20 20 20 20 20  orderBy);..     
9fe0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9ff0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a040: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a050: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
a060: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 50 6f 70  .        /// Pop
a070: 75 6c 61 74 65 73 20 74 68 65 20 6f 75 74 70 75  ulates the outpu
a080: 74 73 20 6f 66 20 61 20 70 72 65 2d 61 6c 6c 6f  ts of a pre-allo
a090: 63 61 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c  cated native sql
a0a0: 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 0d  ite3_index_info.
a0b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72  .        /// str
a0c0: 75 63 74 75 72 65 20 75 73 69 6e 67 20 61 6e 20  ucture using an 
a0d0: 65 78 69 73 74 69 6e 67 20 3c 73 65 65 20 63 72  existing <see cr
a0e0: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22  ef="SQLiteIndex"
a0f0: 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20   /> object..    
a100: 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
a110: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
a120: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
a130: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
a140: 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20 20  me="index">..   
a150: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 78 69       /// The exi
a160: 73 74 69 6e 67 20 3c 73 65 65 20 63 72 65 66 3d  sting <see cref=
a170: 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e  "SQLiteIndex" />
a180: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
a190: 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
a1a0: 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6f 75 74       /// the out
a1b0: 70 75 74 20 64 61 74 61 20 74 6f 20 75 73 65 2e  put data to use.
a1c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
a1d0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
a1e0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
a1f0: 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20  "pIndex">..     
a200: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
a210: 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
a220: 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 64 20 6e   pre-allocated n
a230: 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e  ative sqlite3_in
a240: 64 65 78 5f 69 6e 66 6f 0d 0a 20 20 20 20 20 20  dex_info..      
a250: 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 2e    /// structure.
a260: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
a270: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
a280: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
a290: 76 6f 69 64 20 54 6f 49 6e 74 50 74 72 28 0d 0a  void ToIntPtr(..
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
a2b0: 74 65 49 6e 64 65 78 20 69 6e 64 65 78 2c 0d 0a  teIndex index,..
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
a2d0: 74 72 20 70 49 6e 64 65 78 0d 0a 20 20 20 20 20  tr pIndex..     
a2e0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
a2f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a300: 20 69 66 20 28 28 69 6e 64 65 78 20 3d 3d 20 6e   if ((index == n
a310: 75 6c 6c 29 20 7c 7c 20 28 69 6e 64 65 78 2e 49  ull) || (index.I
a320: 6e 70 75 74 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c  nputs == null) |
a330: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
a340: 20 20 20 28 69 6e 64 65 78 2e 49 6e 70 75 74 73     (index.Inputs
a350: 2e 43 6f 6e 73 74 72 61 69 6e 74 73 20 3d 3d 20  .Constraints == 
a360: 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20  null) ||..      
a370: 20 20 20 20 20 20 20 20 20 20 28 69 6e 64 65 78            (index
a380: 2e 4f 75 74 70 75 74 73 20 3d 3d 20 6e 75 6c 6c  .Outputs == null
a390: 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
a3a0: 20 20 20 20 20 20 28 69 6e 64 65 78 2e 4f 75 74        (index.Out
a3b0: 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
a3c0: 73 61 67 65 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d  sages == null)).
a3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3f0: 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20  return;..       
a400: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a410: 20 20 20 20 20 20 69 66 20 28 70 49 6e 64 65 78        if (pIndex
a420: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
a430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a440: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
a450: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
a460: 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  set = 0;....    
a470: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e          int nCon
a480: 73 74 72 61 69 6e 74 20 3d 20 53 51 4c 69 74 65  straint = SQLite
a490: 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33  Marshal.ReadInt3
a4a0: 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  2(pIndex, offset
a4b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
a4c0: 20 20 69 66 20 28 6e 43 6f 6e 73 74 72 61 69 6e    if (nConstrain
a4d0: 74 20 21 3d 20 69 6e 64 65 78 2e 49 6e 70 75 74  t != index.Input
a4e0: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e 4c 65  s.Constraints.Le
a4f0: 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20  ngth)..         
a500: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
a510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
a520: 20 28 6e 43 6f 6e 73 74 72 61 69 6e 74 20 21 3d   (nConstraint !=
a530: 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43   index.Outputs.C
a540: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 2e  onstraintUsages.
a550: 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20  Length)..       
a560: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
a570: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a580: 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d  offset = SQLiteM
a590: 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65  arshal.NextOffse
a5a0: 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69 7a 65  tOf(offset, size
a5b0: 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20 20 20  of(int),..      
a5c0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
a5d0: 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Size);....     
a5e0: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20         offset = 
a5f0: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65  SQLiteMarshal.Ne
a600: 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65  xtOffsetOf(offse
a610: 74 2c 20 49 6e 74 50 74 72 2e 53 69 7a 65 2c 0d  t, IntPtr.Size,.
a620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a630: 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d 0a   sizeof(int));..
a640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
a650: 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72  fset = SQLiteMar
a660: 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f  shal.NextOffsetO
a670: 66 28 6f 66 66 73 65 74 2c 20 73 69 7a 65 6f 66  f(offset, sizeof
a680: 28 69 6e 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  (int),..        
a690: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 2e 53          IntPtr.S
a6a0: 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ize);....       
a6b0: 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51       offset = SQ
a6c0: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74  LiteMarshal.Next
a6d0: 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c  OffsetOf(offset,
a6e0: 20 49 6e 74 50 74 72 2e 53 69 7a 65 2c 0d 0a 20   IntPtr.Size,.. 
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
a700: 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 0d 0a  izeof(int));....
a710: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
a720: 74 72 20 70 43 6f 6e 73 74 72 61 69 6e 74 55 73  tr pConstraintUs
a730: 61 67 65 20 3d 20 53 51 4c 69 74 65 4d 61 72 73  age = SQLiteMars
a740: 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 70  hal.ReadIntPtr(p
a750: 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d  Index, offset);.
a760: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
a770: 6e 74 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61  nt sizeOfConstra
a780: 69 6e 74 55 73 61 67 65 54 79 70 65 20 3d 20 4d  intUsageType = M
a790: 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79  arshal.SizeOf(ty
a7a0: 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20  peof(..         
a7b0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
a7c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a7d0: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
a7e0: 69 6e 74 5f 75 73 61 67 65 29 29 3b 0d 0a 0d 0a  int_usage));....
a7f0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
a800: 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e 74  (int iConstraint
a810: 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e   = 0; iConstrain
a820: 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b  t < nConstraint;
a830: 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d   iConstraint++).
a840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a860: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a870: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
a880: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61  x_constraint_usa
a890: 67 65 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61  ge constraintUsa
a8a0: 67 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ge =..          
a8b0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e            new Un
a8c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a8d0: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
a8e0: 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65  constraint_usage
a8f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a900: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
a910: 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61  .Outputs.Constra
a920: 69 6e 74 55 73 61 67 65 73 5b 69 43 6f 6e 73 74  intUsages[iConst
a930: 72 61 69 6e 74 5d 29 3b 0d 0a 0d 0a 20 20 20 20  raint]);....    
a940: 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
a950: 68 61 6c 2e 53 74 72 75 63 74 75 72 65 54 6f 50  hal.StructureToP
a960: 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
a970: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61           constra
a980: 69 6e 74 55 73 61 67 65 2c 20 53 51 4c 69 74 65  intUsage, SQLite
a990: 4d 61 72 73 68 61 6c 2e 49 6e 74 50 74 72 46 6f  Marshal.IntPtrFo
a9a0: 72 4f 66 66 73 65 74 28 0d 0a 20 20 20 20 20 20  rOffset(..      
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
a9c0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2c 20  onstraintUsage, 
a9d0: 69 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73 69  iConstraint * si
a9e0: 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55 73  zeOfConstraintUs
a9f0: 61 67 65 54 79 70 65 29 2c 0d 0a 20 20 20 20 20  ageType),..     
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
aa10: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
aa20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
aa30: 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51       offset = SQ
aa40: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74  LiteMarshal.Next
aa50: 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c  OffsetOf(offset,
aa60: 20 49 6e 74 50 74 72 2e 53 69 7a 65 2c 0d 0a 20   IntPtr.Size,.. 
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
aa80: 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 0d 0a  izeof(int));....
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
aaa0: 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49  teMarshal.WriteI
aab0: 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66  nt32(pIndex, off
aac0: 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  set,..          
aad0: 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70        index.Outp
aae0: 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65 72 29  uts.IndexNumber)
aaf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ab00: 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65   offset = SQLite
ab10: 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73  Marshal.NextOffs
ab20: 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69 7a  etOf(offset, siz
ab30: 65 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20 20  eof(int),..     
ab40: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
ab50: 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20  r.Size);....    
ab60: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61          SQLiteMa
ab70: 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74  rshal.WriteIntPt
ab80: 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  r(pIndex, offset
ab90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
aba0: 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e     SQLiteString.
abb0: 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
abc0: 72 69 6e 67 28 69 6e 64 65 78 2e 4f 75 74 70 75  ring(index.Outpu
abd0: 74 73 2e 49 6e 64 65 78 53 74 72 69 6e 67 29 29  ts.IndexString))
abe0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
abf0: 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65   offset = SQLite
ac00: 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73  Marshal.NextOffs
ac10: 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 49 6e 74  etOf(offset, Int
ac20: 50 74 72 2e 53 69 7a 65 2c 0d 0a 20 20 20 20 20  Ptr.Size,..     
ac30: 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
ac40: 66 28 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  f(int));....    
ac50: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ac60: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
ac70: 20 57 65 20 6a 75 73 74 20 61 6c 6c 6f 63 61 74   We just allocat
ac80: 65 64 20 74 68 65 20 49 6e 64 65 78 53 74 72 69  ed the IndexStri
ac90: 6e 67 20 66 69 65 6c 64 3b 20 74 68 65 72 65 66  ng field; theref
aca0: 6f 72 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20  ore, we..       
acb0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 65       //       ne
acc0: 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 4e 65  ed to set the Ne
acd0: 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72  edToFreeIndexStr
ace0: 69 6e 67 20 66 69 65 6c 64 20 74 6f 20 6e 6f 6e  ing field to non
acf0: 2d 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20  -zero...        
ad00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ad10: 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61      SQLiteMarsha
ad20: 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 70 49 6e  l.WriteInt32(pIn
ad30: 64 65 78 2c 20 6f 66 66 73 65 74 2c 20 31 29 3b  dex, offset, 1);
ad40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ad50: 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d  offset = SQLiteM
ad60: 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65  arshal.NextOffse
ad70: 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69 7a 65  tOf(offset, size
ad80: 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20 20 20  of(int),..      
ad90: 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
ada0: 28 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  (int));....     
adb0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72         SQLiteMar
adc0: 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 33 32 28  shal.WriteInt32(
add0: 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d  pIndex, offset,.
ade0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
adf0: 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 4f   index.Outputs.O
ae00: 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 29 3b  rderByConsumed);
ae10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ae20: 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d  offset = SQLiteM
ae30: 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65  arshal.NextOffse
ae40: 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69 7a 65  tOf(offset, size
ae50: 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20 20 20  of(int),..      
ae60: 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
ae70: 28 64 6f 75 62 6c 65 29 29 3b 0d 0a 0d 0a 20 20  (double));....  
ae80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
ae90: 64 65 78 2e 4f 75 74 70 75 74 73 2e 45 73 74 69  dex.Outputs.Esti
aea0: 6d 61 74 65 64 43 6f 73 74 2e 48 61 73 56 61 6c  matedCost.HasVal
aeb0: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue)..           
aec0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
aed0: 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61      SQLiteMarsha
aee0: 6c 2e 57 72 69 74 65 44 6f 75 62 6c 65 28 70 49  l.WriteDouble(pI
aef0: 6e 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20  ndex, offset,.. 
af00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af10: 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73     index.Outputs
af20: 2e 45 73 74 69 6d 61 74 65 64 43 6f 73 74 2e 47  .EstimatedCost.G
af30: 65 74 56 61 6c 75 65 4f 72 44 65 66 61 75 6c 74  etValueOrDefault
af40: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
af50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
af60: 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74     if (index.Out
af70: 70 75 74 73 2e 43 61 6e 55 73 65 45 73 74 69 6d  puts.CanUseEstim
af80: 61 74 65 64 52 6f 77 73 28 29 20 26 26 0d 0a 20  atedRows() &&.. 
af90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
afa0: 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 45 73 74  ndex.Outputs.Est
afb0: 69 6d 61 74 65 64 52 6f 77 73 2e 48 61 73 56 61  imatedRows.HasVa
afc0: 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lue)..          
afd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
afe0: 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68       SQLiteMarsh
aff0: 61 6c 2e 57 72 69 74 65 49 6e 74 36 34 28 70 49  al.WriteInt64(pI
b000: 6e 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20  ndex, offset,.. 
b010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b020: 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73     index.Outputs
b030: 2e 45 73 74 69 6d 61 74 65 64 52 6f 77 73 2e 47  .EstimatedRows.G
b040: 65 74 56 61 6c 75 65 4f 72 44 65 66 61 75 6c 74  etValueOrDefault
b050: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
b060: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
b070: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b080: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b0e0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
b0f0: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
b100: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
b110: 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20 69 6e  teIndexInputs in
b120: 70 75 74 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f  puts;..        /
b130: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
b140: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
b150: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
b160: 6e 64 65 78 49 6e 70 75 74 73 22 20 2f 3e 20 6f  ndexInputs" /> o
b170: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63  bject instance c
b180: 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20  ontaining..     
b190: 20 20 20 2f 2f 2f 20 74 68 65 20 69 6e 70 75 74     /// the input
b1a0: 73 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  s to the <see cr
b1b0: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
b1c0: 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64  edModule.BestInd
b1d0: 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  ex" />..        
b1e0: 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  /// method...   
b1f0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
b200: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
b210: 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65 78 49  lic SQLiteIndexI
b220: 6e 70 75 74 73 20 49 6e 70 75 74 73 0d 0a 20 20  nputs Inputs..  
b230: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b240: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
b250: 6e 20 69 6e 70 75 74 73 3b 20 7d 0d 0a 20 20 20  n inputs; }..   
b260: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b270: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b2c0: 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
b2d0: 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73 20  iteIndexOutputs 
b2e0: 6f 75 74 70 75 74 73 3b 0d 0a 20 20 20 20 20 20  outputs;..      
b2f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
b300: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
b310: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
b320: 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73 22 20  teIndexOutputs" 
b330: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
b340: 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
b350: 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6f         /// the o
b360: 75 74 70 75 74 73 20 66 72 6f 6d 20 74 68 65 20  utputs from the 
b370: 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
b380: 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e  teManagedModule.
b390: 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a 20  BestIndex" />.. 
b3a0: 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
b3b0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
b3c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
b3d0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
b3e0: 65 49 6e 64 65 78 4f 75 74 70 75 74 73 20 4f 75  eIndexOutputs Ou
b3f0: 74 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 7b  tputs..        {
b400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
b410: 74 20 7b 20 72 65 74 75 72 6e 20 6f 75 74 70 75  t { return outpu
b420: 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  ts; }..        }
b430: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
b440: 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
b450: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
b460: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b4b0: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
b4c0: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
b4d0: 20 42 61 73 65 20 43 6c 61 73 73 0d 0a 20 20 20   Base Class..   
b4e0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
b4f0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
b500: 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ss represents a 
b510: 6d 61 6e 61 67 65 64 20 76 69 72 74 75 61 6c 20  managed virtual 
b520: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
b530: 74 69 6f 6e 2e 20 20 49 74 20 69 73 0d 0a 20 20  tion.  It is..  
b540: 20 20 2f 2f 2f 20 6e 6f 74 20 73 65 61 6c 65 64    /// not sealed
b550: 20 61 6e 64 20 73 68 6f 75 6c 64 20 62 65 20 75   and should be u
b560: 73 65 64 20 61 73 20 74 68 65 20 62 61 73 65 20  sed as the base 
b570: 63 6c 61 73 73 20 66 6f 72 20 61 6e 79 20 75 73  class for any us
b580: 65 72 2d 64 65 66 69 6e 65 64 0d 0a 20 20 20 20  er-defined..    
b590: 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c  /// virtual tabl
b5a0: 65 20 63 6c 61 73 73 65 73 20 69 6d 70 6c 65 6d  e classes implem
b5b0: 65 6e 74 65 64 20 69 6e 20 6d 61 6e 61 67 65 64  ented in managed
b5c0: 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
b5d0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
b5e0: 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c  public class SQL
b5f0: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
b600: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  :..            I
b610: 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64  SQLiteNativeHand
b620: 6c 65 2c 20 49 44 69 73 70 6f 73 61 62 6c 65 20  le, IDisposable 
b630: 2f 2a 20 4e 4f 54 20 53 45 41 4c 45 44 20 2a 2f  /* NOT SEALED */
b640: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
b650: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
b660: 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20   Constants..    
b670: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
b680: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
b690: 68 65 20 69 6e 64 65 78 20 77 69 74 68 69 6e 20  he index within 
b6a0: 74 68 65 20 61 72 72 61 79 20 6f 66 20 73 74 72  the array of str
b6b0: 69 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74 6f  ings provided to
b6c0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
b6d0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
b6e0: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
b6f0: 65 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e 64  e.Create" /> and
b700: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b710: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
b720: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f  ManagedModule.Co
b730: 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
b740: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  s containing the
b750: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61  ..        /// na
b760: 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  me of the module
b770: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
b780: 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  is virtual table
b790: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
b7a0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
b7b0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
b7c0: 20 69 6e 74 20 4d 6f 64 75 6c 65 4e 61 6d 65 49   int ModuleNameI
b7d0: 6e 64 65 78 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  ndex = 0;....   
b7e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b830: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
b840: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
b850: 2f 2f 20 54 68 65 20 69 6e 64 65 78 20 77 69 74  // The index wit
b860: 68 69 6e 20 74 68 65 20 61 72 72 61 79 20 6f 66  hin the array of
b870: 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69 64 65   strings provide
b880: 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  d to the..      
b890: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
b8a0: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
b8b0: 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e  odule.Create" />
b8c0: 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f   and..        //
b8d0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
b8e0: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
b8f0: 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  e.Connect" /> me
b900: 74 68 6f 64 73 20 63 6f 6e 74 61 69 6e 69 6e 67  thods containing
b910: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
b920: 2f 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61  / name of the da
b930: 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e  tabase containin
b940: 67 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  g this virtual t
b950: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
b960: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
b970: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
b980: 6f 6e 73 74 20 69 6e 74 20 44 61 74 61 62 61 73  onst int Databas
b990: 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 31 3b 0d  eNameIndex = 1;.
b9a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
b9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
ba00: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
ba10: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64       /// The ind
ba20: 65 78 20 77 69 74 68 69 6e 20 74 68 65 20 61 72  ex within the ar
ba30: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 70  ray of strings p
ba40: 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a  rovided to the..
ba50: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
ba60: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
ba70: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61  nagedModule.Crea
ba80: 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20  te" /> and..    
ba90: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
baa0: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
bab0: 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22  dModule.Connect"
bac0: 20 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f 6e 74   /> methods cont
bad0: 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  aining the..    
bae0: 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66 20      /// name of 
baf0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
bb00: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
bb10: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
bb20: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
bb30: 74 20 69 6e 74 20 54 61 62 6c 65 4e 61 6d 65 49  t int TableNameI
bb40: 6e 64 65 78 20 3d 20 32 3b 0d 0a 20 20 20 20 20  ndex = 2;..     
bb50: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
bb60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
bbc0: 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
bbd0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
bbe0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
bbf0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
bc00: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
bc10: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
bc20: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
bc30: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
bc40: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
bc50: 6d 65 3d 22 61 72 67 75 6d 65 6e 74 73 22 3e 0d  me="arguments">.
bc60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
bc70: 20 6f 72 69 67 69 6e 61 6c 20 61 72 72 61 79 20   original array 
bc80: 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69  of strings provi
bc90: 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ded to the..    
bca0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
bcb0: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
bcc0: 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20  dModule.Create" 
bcd0: 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  /> and..        
bce0: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
bcf0: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
bd00: 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  ule.Connect" /> 
bd10: 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20  methods...      
bd20: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
bd30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
bd40: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
bd50: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
bd60: 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e  string[] argumen
bd70: 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
bd80: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
bd90: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 61            this.a
bda0: 72 67 75 6d 65 6e 74 73 20 3d 20 61 72 67 75 6d  rguments = argum
bdb0: 65 6e 74 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ents;..        }
bdc0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
bdd0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
bde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
be30: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
be40: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
be50: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
be60: 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73  ring[] arguments
be70: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
be80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
be90: 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e    /// The origin
bea0: 61 6c 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  al array of stri
beb0: 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20  ngs provided to 
bec0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
bed0: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
bee0: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
bef0: 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d  .Create" /> and.
bf00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
bf10: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
bf20: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e  anagedModule.Con
bf30: 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73  nect" /> methods
bf40: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
bf50: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
bf60: 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61     public virtua
bf70: 6c 20 73 74 72 69 6e 67 5b 5d 20 41 72 67 75 6d  l string[] Argum
bf80: 65 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ents..        {.
bf90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
bfa0: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
bfb0: 28 29 3b 20 72 65 74 75 72 6e 20 61 72 67 75 6d  (); return argum
bfc0: 65 6e 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ents; }..       
bfd0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
bfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c020: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c030: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
c040: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
c050: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64 75  name of the modu
c060: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  le implementing 
c070: 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62  this virtual tab
c080: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
c090: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
c0a0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
c0b0: 75 61 6c 20 73 74 72 69 6e 67 20 4d 6f 64 75 6c  ual string Modul
c0c0: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7b  eName..        {
c0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
c0e0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
c0f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c100: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
c110: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c120: 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
c130: 72 67 75 6d 65 6e 74 73 20 3d 20 41 72 67 75 6d  rguments = Argum
c140: 65 6e 74 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ents;....       
c150: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72           if ((ar
c160: 67 75 6d 65 6e 74 73 20 21 3d 20 6e 75 6c 6c 29  guments != null)
c170: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
c180: 20 20 20 20 20 20 20 20 20 28 61 72 67 75 6d 65           (argume
c190: 6e 74 73 2e 4c 65 6e 67 74 68 20 3e 20 4d 6f 64  nts.Length > Mod
c1a0: 75 6c 65 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a  uleNameIndex))..
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c1d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72         return ar
c1e0: 67 75 6d 65 6e 74 73 5b 4d 6f 64 75 6c 65 4e 61  guments[ModuleNa
c1f0: 6d 65 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  meIndex];..     
c200: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
c220: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
c230: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c240: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c250: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
c260: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c270: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c280: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c2e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
c2f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
c300: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61  e name of the da
c310: 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e  tabase containin
c320: 67 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  g this virtual t
c330: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
c340: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
c350: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69         public vi
c360: 72 74 75 61 6c 20 73 74 72 69 6e 67 20 44 61 74  rtual string Dat
c370: 61 62 61 73 65 4e 61 6d 65 0d 0a 20 20 20 20 20  abaseName..     
c380: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c390: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
c3a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c3b0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
c3c0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
c3d0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
c3e0: 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20 3d 20 41  [] arguments = A
c3f0: 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20 20 20  rguments;....   
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
c410: 28 28 61 72 67 75 6d 65 6e 74 73 20 21 3d 20 6e  ((arguments != n
c420: 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ull) &&..       
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 72               (ar
c440: 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68 20 3e  guments.Length >
c450: 20 44 61 74 61 62 61 73 65 4e 61 6d 65 49 6e 64   DatabaseNameInd
c460: 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ex))..          
c470: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c480: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c490: 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 44 61  urn arguments[Da
c4a0: 74 61 62 61 73 65 4e 61 6d 65 49 6e 64 65 78 5d  tabaseNameIndex]
c4b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
c4c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
c4d0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c500: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
c510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c520: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
c530: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
c540: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
c590: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
c5a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
c5b0: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
c5c0: 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
c5d0: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
c5e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
c5f0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
c600: 74 75 61 6c 20 73 74 72 69 6e 67 20 54 61 62 6c  tual string Tabl
c610: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7b  eName..        {
c620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
c630: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
c640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c650: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
c660: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c670: 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
c680: 72 67 75 6d 65 6e 74 73 20 3d 20 41 72 67 75 6d  rguments = Argum
c690: 65 6e 74 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ents;....       
c6a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72           if ((ar
c6b0: 67 75 6d 65 6e 74 73 20 21 3d 20 6e 75 6c 6c 29  guments != null)
c6c0: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
c6d0: 20 20 20 20 20 20 20 20 20 28 61 72 67 75 6d 65           (argume
c6e0: 6e 74 73 2e 4c 65 6e 67 74 68 20 3e 20 54 61 62  nts.Length > Tab
c6f0: 6c 65 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20  leNameIndex)).. 
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c720: 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 67        return arg
c730: 75 6d 65 6e 74 73 5b 54 61 62 6c 65 4e 61 6d 65  uments[TableName
c740: 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20  Index];..       
c750: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c760: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
c770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c780: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c790: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
c7a0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
c7b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c7c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c7d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
c7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c820: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c830: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 49   private SQLiteI
c840: 6e 64 65 78 20 69 6e 64 65 78 3b 0d 0a 20 20 20  ndex index;..   
c850: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
c860: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
c870: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
c880: 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f  QLiteIndex" /> o
c890: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63  bject instance c
c8a0: 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74 68  ontaining all th
c8b0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  e..        /// d
c8c0: 61 74 61 20 66 6f 72 20 74 68 65 20 69 6e 70 75  ata for the inpu
c8d0: 74 73 20 61 6e 64 20 6f 75 74 70 75 74 73 20 72  ts and outputs r
c8e0: 65 6c 61 74 69 6e 67 20 74 6f 20 74 68 65 20 6d  elating to the m
c8f0: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 64 65 78  ost recent index
c900: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 65  ..        /// se
c910: 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  lection...      
c920: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
c930: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
c940: 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74 65 49   virtual SQLiteI
c950: 6e 64 65 78 20 49 6e 64 65 78 0d 0a 20 20 20 20  ndex Index..    
c960: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c970: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
c980: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
c990: 20 69 6e 64 65 78 3b 20 7d 0d 0a 20 20 20 20 20   index; }..     
c9a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
c9b0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
c9c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
c9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ca10: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
ca20: 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
ca30: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
ca40: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
ca50: 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 73 68  / This method sh
ca60: 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 62 65  ould normally be
ca70: 20 75 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20   used by the..  
ca80: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
ca90: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
caa0: 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e  gedModule.BestIn
cab0: 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 20 69  dex" /> method i
cac0: 6e 20 6f 72 64 65 72 20 74 6f 0d 0a 20 20 20 20  n order to..    
cad0: 20 20 20 20 2f 2f 2f 20 70 65 72 66 6f 72 6d 20      /// perform 
cae0: 69 6e 64 65 78 20 73 65 6c 65 63 74 69 6f 6e 20  index selection 
caf0: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6e  based on the con
cb00: 73 74 72 61 69 6e 74 73 20 70 72 6f 76 69 64 65  straints provide
cb10: 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
cb20: 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72    /// SQLite cor
cb30: 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...    
cb40: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
cb50: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
cb60: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64  <param name="ind
cb70: 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ex">..        //
cb80: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
cb90: 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e  "SQLiteIndex" />
cba0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
cbb0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20   containing all 
cbc0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
cbd0: 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 6e   data for the in
cbe0: 70 75 74 73 20 61 6e 64 20 6f 75 74 70 75 74 73  puts and outputs
cbf0: 20 72 65 6c 61 74 69 6e 67 20 74 6f 20 69 6e 64   relating to ind
cc00: 65 78 20 73 65 6c 65 63 74 69 6f 6e 2e 0d 0a 20  ex selection... 
cc10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
cc20: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
cc30: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
cc40: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
cc50: 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a   upon success...
cc60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
cc70: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
cc80: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 62  public virtual b
cc90: 6f 6f 6c 20 42 65 73 74 49 6e 64 65 78 28 0d 0a  ool BestIndex(..
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
ccb0: 74 65 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a 20  teIndex index.. 
ccc0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
ccd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cce0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
ccf0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
cd00: 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 20       this.index 
cd10: 3d 20 69 6e 64 65 78 3b 0d 0a 0d 0a 20 20 20 20  = index;....    
cd20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
cd30: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
cd40: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
cd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
cda0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
cdb0: 20 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74       /// Attempt
cdc0: 73 20 74 6f 20 72 65 63 6f 72 64 20 74 68 65 20  s to record the 
cdd0: 72 65 6e 61 6d 69 6e 67 20 6f 66 20 74 68 65 20  renaming of the 
cde0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 61 73  virtual table as
cdf0: 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
ce00: 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
ce10: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
ce20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
ce30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
ce40: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
ce50: 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20  e="name">..     
ce60: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 6e     /// The new n
ce70: 61 6d 65 20 66 6f 72 20 74 68 65 20 76 69 72 74  ame for the virt
ce80: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
ce90: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
cea0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
ceb0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
cec0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70   /// Non-zero up
ced0: 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20  on success...   
cee0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
cef0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
cf00: 6c 69 63 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c  lic virtual bool
cf10: 20 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20   Rename(..      
cf20: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
cf30: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
cf40: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
cf50: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
cf60: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
cf70: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72           if ((ar
cf80: 67 75 6d 65 6e 74 73 20 21 3d 20 6e 75 6c 6c 29  guments != null)
cf90: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
cfa0: 20 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e       (arguments.
cfb0: 4c 65 6e 67 74 68 20 3e 20 54 61 62 6c 65 4e 61  Length > TableNa
cfc0: 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20  meIndex))..     
cfd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cfe0: 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
cff0: 6e 74 73 5b 54 61 62 6c 65 4e 61 6d 65 49 6e 64  nts[TableNameInd
d000: 65 78 5d 20 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20  ex] = name;..   
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d020: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
d030: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d040: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
d050: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
d060: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
d070: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
d080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d0d0: 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69     #region ISQLi
d0e0: 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 4d  teNativeHandle M
d0f0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
d100: 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20 6e  private IntPtr n
d110: 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 20 20  ativeHandle;..  
d120: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
d130: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
d140: 20 52 65 74 75 72 6e 73 20 74 68 65 20 75 6e 64   Returns the und
d150: 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 20 6e  erlying SQLite n
d160: 61 74 69 76 65 20 68 61 6e 64 6c 65 20 61 73 73  ative handle ass
d170: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
d180: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  s..        /// o
d190: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
d1a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
d1b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
d1c0: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
d1d0: 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e  IntPtr NativeHan
d1e0: 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  dle..        {..
d1f0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
d200: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
d210: 29 3b 20 72 65 74 75 72 6e 20 6e 61 74 69 76 65  ); return native
d220: 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20 20 20  Handle; }..     
d230: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
d240: 73 65 74 20 7b 20 6e 61 74 69 76 65 48 61 6e 64  set { nativeHand
d250: 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  le = value; }.. 
d260: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d270: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
d280: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d2d0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
d2e0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
d2f0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
d300: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d310: 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f         /// Dispo
d320: 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  ses of this obje
d330: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
d340: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
d350: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
d360: 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73  blic void Dispos
d370: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e()..        {..
d380: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
d390: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
d3a0: 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72          GC.Suppr
d3b0: 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73  essFinalize(this
d3c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
d3d0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
d3e0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
d3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d430: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
d440: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
d450: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
d460: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70  mbers..        p
d470: 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70  rivate bool disp
d480: 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f  osed;..        /
d490: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
d4a0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73        /// Throws
d4b0: 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 4f   an <see cref="O
d4c0: 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
d4d0: 65 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74 68  eption" /> if th
d4e0: 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20  is object..     
d4f0: 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20     /// instance 
d500: 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f 73 65  has been dispose
d510: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
d520: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
d530: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
d540: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
d550: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
d560: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52        {..#if THR
d570: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
d580: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d590: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
d5a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d5b0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
d5c0: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
d5d0: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5f0: 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 56    typeof(SQLiteV
d600: 69 72 74 75 61 6c 54 61 62 6c 65 29 2e 4e 61 6d  irtualTable).Nam
d610: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
d620: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
d630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d640: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
d650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d680: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d690: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
d6a0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44  >..        /// D
d6b0: 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20  isposes of this 
d6c0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
d6d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
d6e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
d6f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
d700: 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a  e="disposing">..
d710: 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
d720: 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74  zero if this met
d730: 68 6f 64 20 69 73 20 62 65 69 6e 67 20 63 61 6c  hod is being cal
d740: 6c 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20  led from the..  
d750: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
d760: 72 65 66 3d 22 44 69 73 70 6f 73 65 28 29 22 20  ref="Dispose()" 
d770: 2f 3e 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f  /> method.  Zero
d780: 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20   if this method 
d790: 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 0d  is being called.
d7a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 72 6f  .        /// fro
d7b0: 6d 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 2e  m the finalizer.
d7c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
d7d0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
d7e0: 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
d7f0: 6c 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  l void Dispose(b
d800: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
d810: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d820: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
d830: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
d840: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d850: 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70        //if (disp
d860: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
d870: 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
d890: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
d8c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
d8d0: 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65  / dispose manage
d8e0: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
d8f0: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
d900: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f       //    /////
d910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d940: 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   //}....        
d950: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d990: 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e  // release unman
d9a0: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
d9b0: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
d9c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
da00: 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75    disposed = tru
da10: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
da20: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
da30: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
da40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
da50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
daa0: 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f  region Destructo
dab0: 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  r..        /// <
dac0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
dad0: 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73 20    /// Finalizes 
dae0: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
daf0: 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
db00: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
db10: 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65 56 69         ~SQLiteVi
db20: 72 74 75 61 6c 54 61 62 6c 65 28 29 0d 0a 20 20  rtualTable()..  
db30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
db40: 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c       Dispose(fal
db50: 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  se);..        }.
db60: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
db70: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
db80: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
db90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
dba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
dbe0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
dbf0: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
dc00: 75 72 73 6f 72 20 42 61 73 65 20 43 6c 61 73 73  ursor Base Class
dc10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
dc20: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
dc30: 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e  s class represen
dc40: 74 73 20 61 20 6d 61 6e 61 67 65 64 20 76 69 72  ts a managed vir
dc50: 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
dc60: 72 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  r implementation
dc70: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 74 20 69 73  ...    /// It is
dc80: 20 6e 6f 74 20 73 65 61 6c 65 64 20 61 6e 64 20   not sealed and 
dc90: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 61  should be used a
dca0: 73 20 74 68 65 20 62 61 73 65 20 63 6c 61 73 73  s the base class
dcb0: 20 66 6f 72 20 61 6e 79 0d 0a 20 20 20 20 2f 2f   for any..    //
dcc0: 2f 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 76  / user-defined v
dcd0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
dce0: 73 6f 72 20 63 6c 61 73 73 65 73 20 69 6d 70 6c  sor classes impl
dcf0: 65 6d 65 6e 74 65 64 20 69 6e 20 6d 61 6e 61 67  emented in manag
dd00: 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  ed code...    //
dd10: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
dd20: 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53    public class S
dd30: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
dd40: 65 43 75 72 73 6f 72 20 3a 0d 0a 20 20 20 20 20  eCursor :..     
dd50: 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61         ISQLiteNa
dd60: 74 69 76 65 48 61 6e 64 6c 65 2c 20 49 44 69 73  tiveHandle, IDis
dd70: 70 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53  posable /* NOT S
dd80: 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d  EALED */..    {.
dd90: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
dda0: 20 50 72 6f 74 65 63 74 65 64 20 43 6f 6e 73 74   Protected Const
ddb0: 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ants..        //
ddc0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
ddd0: 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61       /// This va
dde0: 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  lue represents a
ddf0: 6e 20 69 6e 76 61 6c 69 64 20 69 6e 74 65 67 65  n invalid intege
de00: 72 20 72 6f 77 20 73 65 71 75 65 6e 63 65 20 6e  r row sequence n
de10: 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  umber...        
de20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
de30: 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
de40: 64 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  d static readonl
de50: 79 20 69 6e 74 20 49 6e 76 61 6c 69 64 52 6f 77  y int InvalidRow
de60: 49 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20 20  Index = 0;..    
de70: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
de80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
de90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
deb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ded0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
dee0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
def0: 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  a..        /// <
df00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
df10: 20 20 2f 2f 2f 20 54 68 65 20 66 69 65 6c 64 20    /// The field 
df20: 68 6f 6c 64 73 20 74 68 65 20 69 6e 74 65 67 65  holds the intege
df30: 72 20 72 6f 77 20 73 65 71 75 65 6e 63 65 20 6e  r row sequence n
df40: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 63 75  umber for the cu
df50: 72 72 65 6e 74 20 72 6f 77 0d 0a 20 20 20 20 20  rrent row..     
df60: 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65 64 20 74     /// pointed t
df70: 6f 20 62 79 20 74 68 69 73 20 63 75 72 73 6f 72  o by this cursor
df80: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
df90: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
dfa0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
dfb0: 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 72     private int r
dfc0: 6f 77 49 6e 64 65 78 3b 0d 0a 20 20 20 20 20 20  owIndex;..      
dfd0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
dfe0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
dff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e030: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
e040: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
e050: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
e060: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
e070: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
e080: 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
e090: 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e  e of this class.
e0a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
e0b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e0c0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
e0d0: 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
e0e0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
e0f0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
e100: 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
e110: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
e120: 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
e130: 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
e140: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
e150: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
e160: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
e170: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 56 69 72  public SQLiteVir
e180: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28  tualTableCursor(
e190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
e1a0: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
e1b0: 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
e1c0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
e1d0: 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20     : this()..   
e1e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e1f0: 20 20 20 20 74 68 69 73 2e 74 61 62 6c 65 20 3d      this.table =
e200: 20 74 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20   table;..       
e210: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
e220: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
e230: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
e240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e280: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
e290: 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72  vate Constructor
e2a0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
e2b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e2c0: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
e2d0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
e2e0: 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
e2f0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
e300: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
e310: 76 61 74 65 20 53 51 4c 69 74 65 56 69 72 74 75  vate SQLiteVirtu
e320: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28 29 0d  alTableCursor().
e330: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e340: 20 20 20 20 20 20 20 20 72 6f 77 49 6e 64 65 78          rowIndex
e350: 20 3d 20 49 6e 76 61 6c 69 64 52 6f 77 49 6e 64   = InvalidRowInd
e360: 65 78 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ex;..        }..
e370: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
e380: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
e390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
e3e0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
e3f0: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
e400: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
e410: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
e420: 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 2f  able;..        /
e430: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
e440: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
e450: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
e460: 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
e470: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
e480: 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
e490: 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
e4a0: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
e4b0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
e4c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
e4d0: 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75      public virtu
e4e0: 61 6c 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  al SQLiteVirtual
e4f0: 54 61 62 6c 65 20 54 61 62 6c 65 0d 0a 20 20 20  Table Table..   
e500: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e510: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
e520: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
e530: 6e 20 74 61 62 6c 65 3b 20 7d 0d 0a 20 20 20 20  n table; }..    
e540: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e550: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e590: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e5a0: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
e5b0: 69 6e 64 65 78 4e 75 6d 62 65 72 3b 0d 0a 20 20  indexNumber;..  
e5c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
e5d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
e5e0: 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   Number used to 
e5f0: 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
e600: 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
e610: 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 77 69  .  This value wi
e620: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ll..        /// 
e630: 62 65 20 73 65 74 20 76 69 61 20 74 68 65 20 3c  be set via the <
e640: 73 65 65 20 63 72 65 66 3d 22 46 69 6c 74 65 72  see cref="Filter
e650: 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
e660: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
e670: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
e680: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 69 6e 74  blic virtual int
e690: 20 49 6e 64 65 78 4e 75 6d 62 65 72 0d 0a 20 20   IndexNumber..  
e6a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e6b0: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
e6c0: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
e6d0: 72 6e 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b 20  rn indexNumber; 
e6e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
e6f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e740: 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
e750: 74 65 20 73 74 72 69 6e 67 20 69 6e 64 65 78 53  te string indexS
e760: 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  tring;..        
e770: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
e780: 20 20 20 20 20 20 20 2f 2f 2f 20 53 74 72 69 6e         /// Strin
e790: 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  g used to help i
e7a0: 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
e7b0: 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54 68 69  cted index.  Thi
e7c0: 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20  s value will..  
e7d0: 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 73 65 74        /// be set
e7e0: 20 76 69 61 20 74 68 65 20 3c 73 65 65 20 63 72   via the <see cr
e7f0: 65 66 3d 22 46 69 6c 74 65 72 22 20 2f 3e 20 6d  ef="Filter" /> m
e800: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
e810: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
e820: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
e830: 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20 49 6e  irtual string In
e840: 64 65 78 53 74 72 69 6e 67 0d 0a 20 20 20 20 20  dexString..     
e850: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e860: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
e870: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
e880: 69 6e 64 65 78 53 74 72 69 6e 67 3b 20 7d 0d 0a  indexString; }..
e890: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
e8a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
e8f0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
e900: 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61  SQLiteValue[] va
e910: 6c 75 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f  lues;..        /
e920: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
e930: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61        /// The va
e940: 6c 75 65 73 20 75 73 65 64 20 74 6f 20 66 69 6c  lues used to fil
e950: 74 65 72 20 74 68 65 20 72 6f 77 73 20 72 65 74  ter the rows ret
e960: 75 72 6e 65 64 20 76 69 61 20 74 68 69 73 20 63  urned via this c
e970: 75 72 73 6f 72 20 6f 62 6a 65 63 74 0d 0a 20 20  ursor object..  
e980: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
e990: 63 65 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ce.  This value 
e9a0: 77 69 6c 6c 20 62 65 20 73 65 74 20 76 69 61 20  will be set via 
e9b0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 46  the <see cref="F
e9c0: 69 6c 74 65 72 22 20 2f 3e 0d 0a 20 20 20 20 20  ilter" />..     
e9d0: 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a     /// method...
e9e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
e9f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
ea00: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 53  public virtual S
ea10: 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 56 61 6c  QLiteValue[] Val
ea20: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ues..        {..
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
ea40: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
ea50: 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ); return values
ea60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
ea70: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
ea80: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
ea90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ead0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eae0: 20 23 72 65 67 69 6f 6e 20 50 72 6f 74 65 63 74   #region Protect
eaf0: 65 64 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ed Methods..    
eb00: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
eb10: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
eb20: 74 74 65 6d 70 74 73 20 74 6f 20 70 65 72 73 69  ttempts to persi
eb30: 73 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  st the specified
eb40: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
eb50: 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62 6a 65  teValue" /> obje
eb60: 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ct..        /// 
eb70: 69 6e 73 74 61 6e 63 65 73 20 69 6e 20 6f 72 64  instances in ord
eb80: 65 72 20 74 6f 20 6d 61 6b 65 20 74 68 65 6d 20  er to make them 
eb90: 61 76 61 69 6c 61 62 6c 65 20 61 66 74 65 72 20  available after 
eba0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
ebb0: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
ebc0: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
ebd0: 2e 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68  .Filter" /> meth
ebe0: 6f 64 20 72 65 74 75 72 6e 73 2e 0d 0a 20 20 20  od returns...   
ebf0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
ec00: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
ec10: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
ec20: 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  lues">..        
ec30: 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66  /// The array of
ec40: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
ec50: 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62 6a 65  teValue" /> obje
ec60: 63 74 20 69 6e 73 74 61 6e 63 65 73 20 74 6f 20  ct instances to 
ec70: 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
ec80: 70 65 72 73 69 73 74 65 64 2e 0d 0a 20 20 20 20  persisted...    
ec90: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
eca0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
ecb0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
ecc0: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
ecd0: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
ece0: 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62  LiteValue" /> ob
ecf0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20 74  ject instances t
ed00: 68 61 74 20 77 65 72 65 0d 0a 20 20 20 20 20 20  hat were..      
ed10: 20 20 2f 2f 2f 20 73 75 63 63 65 73 73 66 75 6c    /// successful
ed20: 6c 79 20 70 65 72 73 69 73 74 65 64 2e 0d 0a 20  ly persisted... 
ed30: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
ed40: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
ed50: 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
ed60: 20 69 6e 74 20 54 72 79 50 65 72 73 69 73 74 56   int TryPersistV
ed70: 61 6c 75 65 73 28 0d 0a 20 20 20 20 20 20 20 20  alues(..        
ed80: 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b      SQLiteValue[
ed90: 5d 20 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  ] values..      
eda0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
edb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
edc0: 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d  int result = 0;.
edd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
ede0: 66 20 28 76 61 6c 75 65 73 20 21 3d 20 6e 75 6c  f (values != nul
edf0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
ee00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ee10: 20 20 20 66 6f 72 65 61 63 68 20 28 53 51 4c 69     foreach (SQLi
ee20: 74 65 56 61 6c 75 65 20 76 61 6c 75 65 20 69 6e  teValue value in
ee30: 20 76 61 6c 75 65 73 29 0d 0a 20 20 20 20 20 20   values)..      
ee40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee60: 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
ee70: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
ee80: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
ee90: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
eea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
eeb0: 20 28 76 61 6c 75 65 2e 50 65 72 73 69 73 74 28   (value.Persist(
eec0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
eee0: 6c 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  lt++;..         
eef0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ef00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ef10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
ef20: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
ef30: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
ef40: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
ef50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
efa0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
efb0: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
efc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
efd0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
efe0: 69 73 20 6d 65 74 68 6f 64 20 73 68 6f 75 6c 64  is method should
eff0: 20 6e 6f 72 6d 61 6c 6c 79 20 62 65 20 75 73 65   normally be use
f000: 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
f010: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
f020: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
f030: 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e  odule.Filter" />
f040: 20 6d 65 74 68 6f 64 20 69 6e 20 6f 72 64 65 72   method in order
f050: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
f060: 20 70 65 72 66 6f 72 6d 20 66 69 6c 74 65 72 69   perform filteri
f070: 6e 67 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ng of the result
f080: 20 72 6f 77 73 20 61 6e 64 2f 6f 72 20 74 6f 20   rows and/or to 
f090: 72 65 63 6f 72 64 20 74 68 65 20 66 69 6c 74 65  record the filte
f0a0: 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ring..        //
f0b0: 2f 20 63 72 69 74 65 72 69 61 20 70 72 6f 76 69  / criteria provi
f0c0: 64 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  ded by the SQLit
f0d0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
f0e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
f0f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
f100: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
f110: 3d 22 69 6e 64 65 78 4e 75 6d 62 65 72 22 3e 0d  ="indexNumber">.
f120: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d  .        /// Num
f130: 62 65 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ber used to help
f140: 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
f150: 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20  lected index... 
f160: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
f170: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
f180: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e   <param name="in
f190: 64 65 78 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20  dexString">..   
f1a0: 20 20 20 20 20 2f 2f 2f 20 53 74 72 69 6e 67 20       /// String 
f1b0: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
f1c0: 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
f1d0: 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20  ed index...     
f1e0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
f1f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
f200: 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73  ram name="values
f210: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
f220: 54 68 65 20 76 61 6c 75 65 73 20 63 6f 72 72 65  The values corre
f230: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 65 61 63 68  sponding to each
f240: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 73   column in the s
f250: 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a  elected index...
f260: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
f270: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
f280: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 76 6f 69  blic virtual voi
f290: 64 20 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20  d Filter(..     
f2a0: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
f2b0: 4e 75 6d 62 65 72 2c 0d 0a 20 20 20 20 20 20 20  Number,..       
f2c0: 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 64 65       string inde
f2d0: 78 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20  xString,..      
f2e0: 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75        SQLiteValu
f2f0: 65 5b 5d 20 76 61 6c 75 65 73 0d 0a 20 20 20 20  e[] values..    
f300: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
f310: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f320: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
f330: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f340: 20 20 69 66 20 28 28 76 61 6c 75 65 73 20 21 3d    if ((values !=
f350: 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20   null) &&..     
f360: 20 20 20 20 20 20 20 20 20 20 20 28 54 72 79 50             (TryP
f370: 65 72 73 69 73 74 56 61 6c 75 65 73 28 76 61 6c  ersistValues(val
f380: 75 65 73 29 20 21 3d 20 76 61 6c 75 65 73 2e 4c  ues) != values.L
f390: 65 6e 67 74 68 29 29 0d 0a 20 20 20 20 20 20 20  ength))..       
f3a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f3b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
f3c0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
f3d0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
f3e0: 20 20 20 20 20 20 20 20 22 66 61 69 6c 65 64 20          "failed 
f3f0: 74 6f 20 70 65 72 73 69 73 74 20 6f 6e 65 20 6f  to persist one o
f400: 72 20 6d 6f 72 65 20 76 61 6c 75 65 73 22 29 3b  r more values");
f410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
f420: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
f430: 68 69 73 2e 69 6e 64 65 78 4e 75 6d 62 65 72 20  his.indexNumber 
f440: 3d 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b 0d 0a  = indexNumber;..
f450: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f460: 2e 69 6e 64 65 78 53 74 72 69 6e 67 20 3d 20 69  .indexString = i
f470: 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a 20 20 20  ndexString;..   
f480: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 61           this.va
f490: 6c 75 65 73 20 3d 20 76 61 6c 75 65 73 3b 0d 0a  lues = values;..
f4a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f4b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
f4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
f500: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
f510: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
f520: 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68  // Determines th
f530: 65 20 69 6e 74 65 67 65 72 20 72 6f 77 20 73 65  e integer row se
f540: 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
f550: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  r the current ro
f560: 77 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  w...        /// 
f570: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
f580: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
f590: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
f5a0: 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77 20 73  he integer row s
f5b0: 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66  equence number f
f5c0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  or the current r
f5d0: 6f 77 20 2d 4f 52 2d 20 7a 65 72 6f 20 69 66 0d  ow -OR- zero if.
f5e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 74 20  .        /// it 
f5f0: 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d  cannot be determ
f600: 69 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ined...        /
f610: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
f620: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69         public vi
f630: 72 74 75 61 6c 20 69 6e 74 20 47 65 74 52 6f 77  rtual int GetRow
f640: 49 6e 64 65 78 28 29 0d 0a 20 20 20 20 20 20 20  Index()..       
f650: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f660: 72 65 74 75 72 6e 20 72 6f 77 49 6e 64 65 78 3b  return rowIndex;
f670: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
f680: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
f6d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
f6e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
f6f0: 20 2f 2f 2f 20 41 64 6a 75 73 74 73 20 74 68 65   /// Adjusts the
f700: 20 69 6e 74 65 67 65 72 20 72 6f 77 20 73 65 71   integer row seq
f710: 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20  uence number so 
f720: 74 68 61 74 20 69 74 20 72 65 66 65 72 73 20 74  that it refers t
f730: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
f740: 2f 2f 20 6e 65 78 74 20 72 6f 77 2e 0d 0a 20 20  // next row...  
f750: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
f760: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
f770: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 76 6f 69  blic virtual voi
f780: 64 20 4e 65 78 74 52 6f 77 49 6e 64 65 78 28 29  d NextRowIndex()
f790: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f7a0: 20 20 20 20 20 20 20 20 20 72 6f 77 49 6e 64 65           rowInde
f7b0: 78 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  x++;..        }.
f7c0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
f7d0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
f7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f820: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f830: 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74    #region ISQLit
f840: 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 4d 65  eNativeHandle Me
f850: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70  mbers..        p
f860: 72 69 76 61 74 65 20 49 6e 74 50 74 72 20 6e 61  rivate IntPtr na
f870: 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 20 20 20  tiveHandle;..   
f880: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
f890: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
f8a0: 52 65 74 75 72 6e 73 20 74 68 65 20 75 6e 64 65  Returns the unde
f8b0: 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 20 6e 61  rlying SQLite na
f8c0: 74 69 76 65 20 68 61 6e 64 6c 65 20 61 73 73 6f  tive handle asso
f8d0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
f8e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62  ..        /// ob
f8f0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
f900: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
f910: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
f920: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 49  public virtual I
f930: 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e 64  ntPtr NativeHand
f940: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
f950: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
f960: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
f970: 3b 20 72 65 74 75 72 6e 20 6e 61 74 69 76 65 48  ; return nativeH
f980: 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20  andle; }..      
f990: 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73        internal s
f9a0: 65 74 20 7b 20 6e 61 74 69 76 65 48 61 6e 64 6c  et { nativeHandl
f9b0: 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
f9c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f9d0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
f9e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
fa30: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
fa40: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65  n IDisposable Me
fa50: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f  mbers..        /
fa60: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
fa70: 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73        /// Dispos
fa80: 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  es of this objec
fa90: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
faa0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
fab0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
fac0: 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65  lic void Dispose
fad0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
fae0: 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
faf0: 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20  se(true);..     
fb00: 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65         GC.Suppre
fb10: 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29  ssFinalize(this)
fb20: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
fb30: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
fb40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
fb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
fba0: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
fbb0: 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d  le "Pattern" Mem
fbc0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72  bers..        pr
fbd0: 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
fbe0: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed;..        //
fbf0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
fc00: 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20       /// Throws 
fc10: 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62  an <see cref="Ob
fc20: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
fc30: 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74 68 69  ption" /> if thi
fc40: 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20  s object..      
fc50: 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 68    /// instance h
fc60: 61 73 20 62 65 65 6e 20 64 69 73 70 6f 73 65 64  as been disposed
fc70: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
fc80: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
fc90: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
fca0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20  CheckDisposed() 
fcb0: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
fcc0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f       {..#if THRO
fcd0: 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20  W_ON_DISPOSED.. 
fce0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
fcf0: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
fd00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fd10: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
fd20: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
fd30: 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  dException(..   
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd50: 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 56 69   typeof(SQLiteVi
fd60: 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
fd70: 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ).Name);..      
fd80: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
fd90: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
fda0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
fdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
fdf0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
fe00: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
fe10: 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20  /// Disposes of 
fe20: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
fe30: 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
fe40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
fe50: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
fe60: 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e  m name="disposin
fe70: 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  g">..        ///
fe80: 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69   Non-zero if thi
fe90: 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e  s method is bein
fea0: 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74 68  g called from th
feb0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
fec0: 73 65 65 20 63 72 65 66 3d 22 44 69 73 70 6f 73  see cref="Dispos
fed0: 65 28 29 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 20  e()" /> method. 
fee0: 20 5a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65   Zero if this me
fef0: 74 68 6f 64 20 69 73 20 62 65 69 6e 67 20 63 61  thod is being ca
ff00: 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lled..        //
ff10: 2f 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c  / from the final
ff20: 69 7a 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  izer...        /
ff30: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
ff40: 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76       protected v
ff50: 69 72 74 75 61 6c 20 76 6f 69 64 20 44 69 73 70  irtual void Disp
ff60: 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
ff70: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ng)..        {..
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ff90: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
ffa0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ffb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20             //if 
ffc0: 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20  (disposing)..   
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b               //{
ffe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fff0: 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f    //    ////////
10000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10030 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
10040 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
10050 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
10060 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
10070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10090 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
100a0 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20        //}....   
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
100c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100e0 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
100f0 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
10100 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
10110 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
10130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10150 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
10160 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
10170 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
10180 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10190 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
101a0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
101b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
101c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
10200 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
10210 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
10220 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10230 20 20 20 20 20 20 20 2f 2f 2f 20 46 69 6e 61 6c         /// Final
10240 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65 63 74  izes this object
10250 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
10260 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10270 79 3e 0d 0a 20 20 20 20 20 20 20 20 7e 53 51 4c  y>..        ~SQL
10280 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
10290 75 72 73 6f 72 28 29 0d 0a 20 20 20 20 20 20 20  ursor()..       
102a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
102b0 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d  Dispose(false);.
102c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
102d0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
102e0 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
102f0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
10300 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
10350 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e  #region ISQLiteN
10360 61 74 69 76 65 48 61 6e 64 6c 65 20 49 6e 74 65  ativeHandle Inte
10370 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rface..    /// <
10380 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
10390 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61 63 65  / This interface
103a0 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 6e 61   represents a na
103b0 74 69 76 65 20 68 61 6e 64 6c 65 20 70 72 6f 76  tive handle prov
103c0 69 64 65 64 20 62 79 20 74 68 65 20 53 51 4c 69  ided by the SQLi
103d0 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 2f 2f 2f  te core..    ///
103e0 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
103f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10400 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66     public interf
10410 61 63 65 20 49 53 51 4c 69 74 65 4e 61 74 69 76  ace ISQLiteNativ
10420 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a  eHandle..    {..
10430 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
10440 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
10450 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 68 61  // The native ha
10460 6e 64 6c 65 20 76 61 6c 75 65 2e 0d 0a 20 20 20  ndle value...   
10470 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
10480 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ry>..        Int
10490 50 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65  Ptr NativeHandle
104a0 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 7d   { get; }..    }
104b0 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
104c0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
104d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10510 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
10520 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  on ISQLiteNative
10530 4d 6f 64 75 6c 65 20 49 6e 74 65 72 66 61 63 65  Module Interface
10540 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
10550 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
10560 73 20 69 6e 74 65 72 66 61 63 65 20 72 65 70 72  s interface repr
10570 65 73 65 6e 74 73 20 61 20 76 69 72 74 75 61 6c  esents a virtual
10580 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
10590 61 74 69 6f 6e 20 77 72 69 74 74 65 6e 20 69 6e  ation written in
105a0 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65  ..    /// native
105b0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
105c0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
105d0 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63 65  public interface
105e0 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   ISQLiteNativeMo
105f0 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dule..    {..   
10600 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
10610 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
10620 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
10630 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
10640 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
10650 61 74 65 20 61 20 6e 65 77 20 69 6e 73 74 61 6e  ate a new instan
10660 63 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  ce of a virtual 
10670 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
10680 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  // in response t
10690 6f 20 61 20 43 52 45 41 54 45 20 56 49 52 54 55  o a CREATE VIRTU
106a0 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
106b0 6e 74 2e 20 54 68 65 20 64 62 20 70 61 72 61 6d  nt. The db param
106c0 65 74 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  eter..        //
106d0 2f 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  / is a pointer t
106e0 6f 20 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  o the SQLite dat
106f0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
10700 20 74 68 61 74 20 69 73 20 65 78 65 63 75 74 69   that is executi
10710 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
10720 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
10730 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
10740 6e 74 2e 20 54 68 65 20 70 41 75 78 20 61 72 67  nt. The pAux arg
10750 75 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f 70  ument is the cop
10760 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  y..        /// o
10770 66 20 74 68 65 20 63 6c 69 65 6e 74 20 64 61 74  f the client dat
10780 61 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 77  a pointer that w
10790 61 73 20 74 68 65 20 66 6f 75 72 74 68 20 61 72  as the fourth ar
107a0 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0d 0a 20  gument to the.. 
107b0 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
107c0 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
107d0 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f 63 72  () or sqlite3_cr
107e0 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29  eate_module_v2()
107f0 20 63 61 6c 6c 20 74 68 61 74 0d 0a 20 20 20 20   call that..    
10800 20 20 20 20 2f 2f 2f 20 72 65 67 69 73 74 65 72      /// register
10810 65 64 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ed the virtual t
10820 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65  able module. The
10830 20 61 72 67 76 20 70 61 72 61 6d 65 74 65 72 20   argv parameter 
10840 69 73 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f  is an..        /
10850 2f 2f 20 61 72 72 61 79 20 6f 66 20 61 72 67 63  // array of argc
10860 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 6e 75 6c   pointers to nul
10870 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72  l terminated str
10880 69 6e 67 73 2e 20 54 68 65 20 66 69 72 73 74 0d  ings. The first.
10890 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72  .        /// str
108a0 69 6e 67 2c 20 61 72 67 76 5b 30 5d 2c 20 69 73  ing, argv[0], is
108b0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
108c0 20 6d 6f 64 75 6c 65 20 62 65 69 6e 67 20 69 6e   module being in
108d0 76 6f 6b 65 64 2e 20 54 68 65 0d 0a 20 20 20 20  voked. The..    
108e0 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 6e      /// module n
108f0 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
10900 70 72 6f 76 69 64 65 64 20 61 73 20 74 68 65 20  provided as the 
10910 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20  second argument 
10920 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
10930 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
10940 6f 64 75 6c 65 28 29 20 61 6e 64 20 61 73 20 74  odule() and as t
10950 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  he argument to t
10960 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
10970 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
10980 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
10990 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
109a0 6e 74 20 74 68 61 74 20 69 73 20 72 75 6e 6e 69  nt that is runni
109b0 6e 67 2e 20 54 68 65 20 73 65 63 6f 6e 64 2c 0d  ng. The second,.
109c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 67  .        /// arg
109d0 76 5b 31 5d 2c 20 69 73 20 74 68 65 20 6e 61 6d  v[1], is the nam
109e0 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
109f0 65 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e  e in which the n
10a00 65 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ew virtual table
10a10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 73  ..        /// is
10a20 20 62 65 69 6e 67 20 63 72 65 61 74 65 64 2e 20   being created. 
10a30 54 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d  The database nam
10a40 65 20 69 73 20 22 6d 61 69 6e 22 20 66 6f 72 20  e is "main" for 
10a50 74 68 65 20 70 72 69 6d 61 72 79 0d 0a 20 20 20  the primary..   
10a60 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73       /// databas
10a70 65 2c 20 6f 72 20 22 74 65 6d 70 22 20 66 6f 72  e, or "temp" for
10a80 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20   TEMP database, 
10a90 6f 72 20 74 68 65 20 6e 61 6d 65 20 67 69 76 65  or the name give
10aa0 6e 20 61 74 20 74 68 65 0d 0a 20 20 20 20 20 20  n at the..      
10ab0 20 20 2f 2f 2f 20 65 6e 64 20 6f 66 20 74 68 65    /// end of the
10ac0 20 41 54 54 41 43 48 20 73 74 61 74 65 6d 65 6e   ATTACH statemen
10ad0 74 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  t for attached d
10ae0 61 74 61 62 61 73 65 73 2e 20 54 68 65 20 74 68  atabases. The th
10af0 69 72 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ird..        ///
10b00 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
10b10 61 72 72 61 79 2c 20 61 72 67 76 5b 32 5d 2c 20  array, argv[2], 
10b20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
10b30 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 0d 0a  he new virtual..
10b40 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c          /// tabl
10b50 65 2c 20 61 73 20 73 70 65 63 69 66 69 65 64 20  e, as specified 
10b60 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 54 41  following the TA
10b70 42 4c 45 20 6b 65 79 77 6f 72 64 20 69 6e 20 74  BLE keyword in t
10b80 68 65 20 43 52 45 41 54 45 0d 0a 20 20 20 20 20  he CREATE..     
10b90 20 20 20 2f 2f 2f 20 56 49 52 54 55 41 4c 20 54     /// VIRTUAL T
10ba0 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  ABLE statement. 
10bb0 49 66 20 70 72 65 73 65 6e 74 2c 20 74 68 65 20  If present, the 
10bc0 66 6f 75 72 74 68 20 61 6e 64 20 73 75 62 73 65  fourth and subse
10bd0 71 75 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 2f  quent..        /
10be0 2f 2f 20 73 74 72 69 6e 67 73 20 69 6e 20 74 68  // strings in th
10bf0 65 20 61 72 67 76 5b 5d 20 61 72 72 61 79 20 72  e argv[] array r
10c00 65 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  eport the argume
10c10 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
10c20 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  e name..        
10c30 2f 2f 2f 20 69 6e 20 74 68 65 20 43 52 45 41 54  /// in the CREAT
10c40 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
10c50 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
10c60 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
10c70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
10c80 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
10c90 20 54 68 65 20 6a 6f 62 20 6f 66 20 74 68 69 73   The job of this
10ca0 20 6d 65 74 68 6f 64 20 69 73 20 74 6f 20 63 6f   method is to co
10cb0 6e 73 74 72 75 63 74 20 74 68 65 20 6e 65 77 20  nstruct the new 
10cc0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
10cd0 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
10ce0 2f 20 28 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  / (an sqlite3_vt
10cf0 61 62 20 6f 62 6a 65 63 74 29 20 61 6e 64 20 72  ab object) and r
10d00 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
10d10 74 6f 20 69 74 20 69 6e 20 2a 70 70 56 54 61 62  to it in *ppVTab
10d20 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
10d30 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
10d40 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
10d50 20 20 20 20 2f 2f 2f 20 41 73 20 70 61 72 74 20      /// As part 
10d60 6f 66 20 74 68 65 20 74 61 73 6b 20 6f 66 20 63  of the task of c
10d70 72 65 61 74 69 6e 67 20 61 20 6e 65 77 20 73 71  reating a new sq
10d80 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
10d90 74 75 72 65 2c 20 74 68 69 73 0d 0a 20 20 20 20  ture, this..    
10da0 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 6d      /// method m
10db0 75 73 74 20 69 6e 76 6f 6b 65 20 73 71 6c 69 74  ust invoke sqlit
10dc0 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
10dd0 29 20 74 6f 20 74 65 6c 6c 20 74 68 65 20 53 51  ) to tell the SQ
10de0 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20  Lite core..     
10df0 20 20 20 2f 2f 2f 20 61 62 6f 75 74 20 74 68 65     /// about the
10e00 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 64 61 74   columns and dat
10e10 61 74 79 70 65 73 20 69 6e 20 74 68 65 20 76 69  atypes in the vi
10e20 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 65  rtual table. The
10e30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
10e40 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
10e50 61 62 28 29 20 41 50 49 20 68 61 73 20 74 68 65  ab() API has the
10e60 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f 74 6f   following proto
10e70 74 79 70 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f  type:..        /
10e80 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
10e90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
10ea0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64          /// <cod
10eb0 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
10ec0 69 6e 74 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  int sqlite3_decl
10ed0 61 72 65 5f 76 74 61 62 28 73 71 6c 69 74 65 33  are_vtab(sqlite3
10ee0 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72   *db, const char
10ef0 20 2a 7a 43 72 65 61 74 65 54 61 62 6c 65 29 0d   *zCreateTable).
10f00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63  .        /// </c
10f10 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
10f20 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
10f30 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
10f40 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 66         /// The f
10f50 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
10f60 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
10f70 5f 76 74 61 62 28 29 20 6d 75 73 74 20 62 65 20  _vtab() must be 
10f80 74 68 65 20 73 61 6d 65 0d 0a 20 20 20 20 20 20  the same..      
10f90 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63    /// database c
10fa0 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
10fb0 72 20 61 73 20 74 68 65 20 66 69 72 73 74 20 70  r as the first p
10fc0 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68 69 73  arameter to this
10fd0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
10fe0 20 20 2f 2f 2f 20 54 68 65 20 73 65 63 6f 6e 64    /// The second
10ff0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
11000 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
11010 62 28 29 20 6d 75 73 74 20 61 0d 0a 20 20 20 20  b() must a..    
11020 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 2d 74 65 72      /// zero-ter
11030 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
11040 72 69 6e 67 20 74 68 61 74 20 63 6f 6e 74 61 69  ring that contai
11050 6e 73 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ns a well-formed
11060 20 43 52 45 41 54 45 0d 0a 20 20 20 20 20 20 20   CREATE..       
11070 20 2f 2f 2f 20 54 41 42 4c 45 20 73 74 61 74 65   /// TABLE state
11080 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
11090 73 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  s the columns in
110a0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
110b0 6c 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  le and..        
110c0 2f 2f 2f 20 74 68 65 69 72 20 64 61 74 61 20 74  /// their data t
110d0 79 70 65 73 2e 20 54 68 65 20 6e 61 6d 65 20 6f  ypes. The name o
110e0 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74  f the table in t
110f0 68 69 73 20 43 52 45 41 54 45 20 54 41 42 4c 45  his CREATE TABLE
11100 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
11110 61 74 65 6d 65 6e 74 20 69 73 20 69 67 6e 6f 72  atement is ignor
11120 65 64 2c 20 61 73 20 61 72 65 20 61 6c 6c 20 63  ed, as are all c
11130 6f 6e 73 74 72 61 69 6e 74 73 2e 20 4f 6e 6c 79  onstraints. Only
11140 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
11150 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  s..        /// a
11160 6e 64 20 64 61 74 61 74 79 70 65 73 20 6d 61 74  nd datatypes mat
11170 74 65 72 2e 20 54 68 65 20 43 52 45 41 54 45 20  ter. The CREATE 
11180 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
11190 73 74 72 69 6e 67 20 6e 65 65 64 20 6e 6f 74 20  string need not 
111a0 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
111b0 62 65 20 68 65 6c 64 20 69 6e 20 70 65 72 73 69  be held in persi
111c0 73 74 65 6e 74 20 6d 65 6d 6f 72 79 2e 20 54 68  stent memory. Th
111d0 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20  e string can be 
111e0 64 65 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 2f  deallocated and/
111f0 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
11200 72 65 75 73 65 64 20 61 73 20 73 6f 6f 6e 20 61  reused as soon a
11210 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 64 65  s the sqlite3_de
11220 63 6c 61 72 65 5f 76 74 61 62 28 29 20 72 6f 75  clare_vtab() rou
11230 74 69 6e 65 20 72 65 74 75 72 6e 73 2e 0d 0a 20  tine returns... 
11240 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
11250 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
11260 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
11270 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
11280 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20  ame="pDb">..    
11290 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
112a0 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ve database conn
112b0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a  ection handle...
112c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
112d0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
112e0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
112f0 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  Aux">..        /
11300 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  // The original 
11310 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 76  native pointer v
11320 61 6c 75 65 20 74 68 61 74 20 77 61 73 20 70 72  alue that was pr
11330 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20  ovided to the.. 
11340 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
11350 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
11360 28 29 2c 20 73 71 6c 69 74 65 33 5f 63 72 65 61  (), sqlite3_crea
11370 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 20 6f  te_module_v2() o
11380 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  r..        /// s
11390 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69  qlite3_create_di
113a0 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28  sposable_module(
113b0 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20  ) functions...  
113c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
113d0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
113e0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
113f0 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  c">..        ///
11400 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   The number of a
11410 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68  rguments from th
11420 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
11430 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
11440 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
11450 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
11460 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
11470 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20  ="argv">..      
11480 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
11490 6f 66 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65  of string argume
114a0 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52 45  nts from the CRE
114b0 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
114c0 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  E..        /// s
114d0 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20  tatement...     
114e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
114f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
11500 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
11510 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
11520 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
11530 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
11540 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
11550 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e 65 77  point to the new
11560 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ly..        /// 
11570 63 72 65 61 74 65 64 20 6e 61 74 69 76 65 20 73  created native s
11580 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
11590 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
115a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
115b0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
115c0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
115d0 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  Error">..       
115e0 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72   /// Upon failur
115f0 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  e, this paramete
11600 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
11610 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  ed to point to t
11620 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  he error..      
11630 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c 20 77    /// message, w
11640 69 74 68 20 74 68 65 20 75 6e 64 65 72 6c 79 69  ith the underlyi
11650 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76 69 6e 67  ng memory having
11660 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 66   been obtained f
11670 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20  rom the..       
11680 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61 6c   /// sqlite3_mal
11690 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0d  loc() function..
116a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
116b0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
116c0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
116d0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
116e0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
116f0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
11700 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
11710 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
11720 45 72 72 6f 72 43 6f 64 65 20 78 43 72 65 61 74  ErrorCode xCreat
11730 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
11740 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20 20 20  IntPtr pDb,..   
11750 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
11760 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  pAux,..         
11770 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
11780 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
11790 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20   argv,..        
117a0 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
117b0 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
117c0 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 45     ref IntPtr pE
117d0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
117e0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
117f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11830 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11840 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
11850 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
11860 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
11870 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74 20 6d  / The xConnect m
11880 65 74 68 6f 64 20 69 73 20 76 65 72 79 20 73 69  ethod is very si
11890 6d 69 6c 61 72 20 74 6f 20 78 43 72 65 61 74 65  milar to xCreate
118a0 2e 20 49 74 20 68 61 73 20 74 68 65 20 73 61 6d  . It has the sam
118b0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  e..        /// p
118c0 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20 63 6f  arameters and co
118d0 6e 73 74 72 75 63 74 73 20 61 20 6e 65 77 20 73  nstructs a new s
118e0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
118f0 63 74 75 72 65 20 6a 75 73 74 20 6c 69 6b 65 0d  cture just like.
11900 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 72  .        /// xCr
11910 65 61 74 65 2e 20 41 6e 64 20 69 74 20 6d 75 73  eate. And it mus
11920 74 20 61 6c 73 6f 20 63 61 6c 6c 20 73 71 6c 69  t also call sqli
11930 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
11940 28 29 20 6c 69 6b 65 20 78 43 72 65 61 74 65 2e  () like xCreate.
11950 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
11960 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
11970 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
11980 20 20 20 2f 2f 2f 20 54 68 65 20 64 69 66 66 65     /// The diffe
11990 72 65 6e 63 65 20 69 73 20 74 68 61 74 20 78 43  rence is that xC
119a0 6f 6e 6e 65 63 74 20 69 73 20 63 61 6c 6c 65 64  onnect is called
119b0 20 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20   to establish a 
119c0 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  new..        ///
119d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61   connection to a
119e0 6e 20 65 78 69 73 74 69 6e 67 20 76 69 72 74 75  n existing virtu
119f0 61 6c 20 74 61 62 6c 65 20 77 68 65 72 65 61 73  al table whereas
11a00 20 78 43 72 65 61 74 65 20 69 73 20 63 61 6c 6c   xCreate is call
11a10 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
11a20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
11a30 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 72  virtual table fr
11a40 6f 6d 20 73 63 72 61 74 63 68 2e 0d 0a 20 20 20  om scratch...   
11a50 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
11a60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
11a70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
11a80 2f 20 54 68 65 20 78 43 72 65 61 74 65 20 61 6e  / The xCreate an
11a90 64 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f  d xConnect metho
11aa0 64 73 20 61 72 65 20 6f 6e 6c 79 20 64 69 66 66  ds are only diff
11ab0 65 72 65 6e 74 20 77 68 65 6e 20 74 68 65 0d 0a  erent when the..
11ac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74          /// virt
11ad0 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 73 6f  ual table has so
11ae0 6d 65 20 6b 69 6e 64 20 6f 66 20 62 61 63 6b 69  me kind of backi
11af0 6e 67 20 73 74 6f 72 65 20 74 68 61 74 20 6d 75  ng store that mu
11b00 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  st be..        /
11b10 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  // initialized t
11b20 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 74 68  he first time th
11b30 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
11b40 69 73 20 63 72 65 61 74 65 64 2e 20 54 68 65 0d  is created. The.
11b50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 72  .        /// xCr
11b60 65 61 74 65 20 6d 65 74 68 6f 64 20 63 72 65 61  eate method crea
11b70 74 65 73 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  tes and initiali
11b80 7a 65 73 20 74 68 65 20 62 61 63 6b 69 6e 67 20  zes the backing 
11b90 73 74 6f 72 65 2e 20 54 68 65 0d 0a 20 20 20 20  store. The..    
11ba0 20 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e 65 63 74      /// xConnect
11bb0 20 6d 65 74 68 6f 64 20 6a 75 73 74 20 63 6f 6e   method just con
11bc0 6e 65 63 74 73 20 74 6f 20 61 6e 20 65 78 69 73  nects to an exis
11bd0 74 69 6e 67 20 62 61 63 6b 69 6e 67 20 73 74 6f  ting backing sto
11be0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
11bf0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
11c00 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
11c10 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 61 6e 20        /// As an 
11c20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65  example, conside
11c30 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  r a virtual tabl
11c40 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
11c50 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f   that..        /
11c60 2f 2f 20 70 72 6f 76 69 64 65 73 20 72 65 61 64  // provides read
11c70 2d 6f 6e 6c 79 20 61 63 63 65 73 73 20 74 6f 20  -only access to 
11c80 65 78 69 73 74 69 6e 67 20 63 6f 6d 6d 61 2d 73  existing comma-s
11c90 65 70 61 72 61 74 65 64 2d 76 61 6c 75 65 20 28  eparated-value (
11ca0 43 53 56 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  CSV)..        //
11cb0 2f 20 66 69 6c 65 73 20 6f 6e 20 64 69 73 6b 2e  / files on disk.
11cc0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 62 61 63   There is no bac
11cd0 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61 74 20  king store that 
11ce0 6e 65 65 64 73 20 74 6f 20 62 65 20 63 72 65 61  needs to be crea
11cf0 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
11d00 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   or initialized 
11d10 66 6f 72 20 73 75 63 68 20 61 20 76 69 72 74 75  for such a virtu
11d20 61 6c 20 74 61 62 6c 65 20 28 73 69 6e 63 65 20  al table (since 
11d30 74 68 65 20 43 53 56 20 66 69 6c 65 73 0d 0a 20  the CSV files.. 
11d40 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 72 65 61         /// alrea
11d50 64 79 20 65 78 69 73 74 20 6f 6e 20 64 69 73 6b  dy exist on disk
11d60 29 20 73 6f 20 74 68 65 20 78 43 72 65 61 74 65  ) so the xCreate
11d70 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20 6d 65   and xConnect me
11d80 74 68 6f 64 73 20 77 69 6c 6c 20 62 65 0d 0a 20  thods will be.. 
11d90 20 20 20 20 20 20 20 2f 2f 2f 20 69 64 65 6e 74         /// ident
11da0 69 63 61 6c 20 66 6f 72 20 74 68 61 74 20 6d 6f  ical for that mo
11db0 64 75 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  dule...        /
11dc0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
11dd0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
11de0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e 6f 74          /// Anot
11df0 68 65 72 20 65 78 61 6d 70 6c 65 20 69 73 20 61  her example is a
11e00 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74   virtual table t
11e10 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  hat implements a
11e20 20 66 75 6c 6c 2d 74 65 78 74 0d 0a 20 20 20 20   full-text..    
11e30 20 20 20 20 2f 2f 2f 20 69 6e 64 65 78 2e 20 54      /// index. T
11e40 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  he xCreate metho
11e50 64 20 6d 75 73 74 20 63 72 65 61 74 65 20 61 6e  d must create an
11e60 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 64 61 74  d initialize dat
11e70 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  a..        /// s
11e80 74 72 75 63 74 75 72 65 73 20 74 6f 20 68 6f 6c  tructures to hol
11e90 64 20 74 68 65 20 64 69 63 74 69 6f 6e 61 72 79  d the dictionary
11ea0 20 61 6e 64 20 70 6f 73 74 69 6e 67 20 6c 69 73   and posting lis
11eb0 74 73 20 66 6f 72 20 74 68 61 74 20 69 6e 64 65  ts for that inde
11ec0 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  x...        /// 
11ed0 54 68 65 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74  The xConnect met
11ee0 68 6f 64 2c 20 6f 6e 20 74 68 65 20 6f 74 68 65  hod, on the othe
11ef0 72 20 68 61 6e 64 2c 20 6f 6e 6c 79 20 68 61 73  r hand, only has
11f00 20 74 6f 20 6c 6f 63 61 74 65 20 61 6e 64 20 75   to locate and u
11f10 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  se..        /// 
11f20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 69 63 74  an existing dict
11f30 69 6f 6e 61 72 79 20 61 6e 64 20 70 6f 73 74 69  ionary and posti
11f40 6e 67 20 6c 69 73 74 73 20 74 68 61 74 20 77 65  ng lists that we
11f50 72 65 20 63 72 65 61 74 65 64 20 62 79 20 61 0d  re created by a.
11f60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 69  .        /// pri
11f70 6f 72 20 78 43 72 65 61 74 65 20 63 61 6c 6c 2e  or xCreate call.
11f80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
11f90 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
11fa0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
11fb0 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e     /// The xConn
11fc0 65 63 74 20 6d 65 74 68 6f 64 20 6d 75 73 74 20  ect method must 
11fd0 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
11fe0 20 69 66 20 69 74 20 69 73 20 73 75 63 63 65 73   if it is succes
11ff0 73 66 75 6c 20 69 6e 0d 0a 20 20 20 20 20 20 20  sful in..       
12000 20 2f 2f 2f 20 63 72 65 61 74 69 6e 67 20 74 68   /// creating th
12010 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61  e new virtual ta
12020 62 6c 65 2c 20 6f 72 20 53 51 4c 49 54 45 5f 45  ble, or SQLITE_E
12030 52 52 4f 52 20 69 66 20 69 74 20 69 73 20 6e 6f  RROR if it is no
12040 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  t..        /// s
12050 75 63 63 65 73 73 66 75 6c 2e 20 49 66 20 6e 6f  uccessful. If no
12060 74 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  t successful, th
12070 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
12080 74 72 75 63 74 75 72 65 20 6d 75 73 74 20 6e 6f  tructure must no
12090 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62  t..        /// b
120a0 65 20 61 6c 6c 6f 63 61 74 65 64 2e 20 41 6e 20  e allocated. An 
120b0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6d 61  error message ma
120c0 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20  y optionally be 
120d0 72 65 74 75 72 6e 65 64 20 69 6e 20 2a 70 7a 45  returned in *pzE
120e0 72 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rr..        /// 
120f0 69 66 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2e  if unsuccessful.
12100 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
12110 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
12120 20 73 74 72 69 6e 67 20 6d 75 73 74 20 62 65 0d   string must be.
12130 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 6c  .        /// all
12140 6f 63 61 74 65 64 20 75 73 69 6e 67 20 61 6e 20  ocated using an 
12150 53 51 4c 69 74 65 20 6d 65 6d 6f 72 79 20 61 6c  SQLite memory al
12160 6c 6f 63 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  location functio
12170 6e 20 6c 69 6b 65 0d 0a 20 20 20 20 20 20 20 20  n like..        
12180 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  /// sqlite3_mall
12190 6f 63 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f  oc() or sqlite3_
121a0 6d 70 72 69 6e 74 66 28 29 20 61 73 20 74 68 65  mprintf() as the
121b0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c   SQLite core wil
121c0 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  l..        /// a
121d0 74 74 65 6d 70 74 20 74 6f 20 66 72 65 65 20 74  ttempt to free t
121e0 68 65 20 73 70 61 63 65 20 75 73 69 6e 67 20 73  he space using s
121f0 71 6c 69 74 65 33 5f 66 72 65 65 28 29 20 61 66  qlite3_free() af
12200 74 65 72 20 74 68 65 20 65 72 72 6f 72 20 68 61  ter the error ha
12210 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62  s..        /// b
12220 65 65 6e 20 72 65 70 6f 72 74 65 64 20 75 70 20  een reported up 
12230 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  to the applicati
12240 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
12250 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
12260 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
12270 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43        /// The xC
12280 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 69 73  onnect method is
12290 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76   required for ev
122a0 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ery virtual tabl
122b0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
122c0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
122d0 68 6f 75 67 68 20 74 68 65 20 78 43 72 65 61 74  hough the xCreat
122e0 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20 70  e and xConnect p
122f0 6f 69 6e 74 65 72 73 20 6f 66 20 74 68 65 0d 0a  ointers of the..
12300 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
12310 74 65 33 5f 6d 6f 64 75 6c 65 20 6f 62 6a 65 63  te3_module objec
12320 74 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 74  t may point to t
12330 68 65 20 73 61 6d 65 20 66 75 6e 63 74 69 6f 6e  he same function
12340 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20   the virtual..  
12350 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20        /// table 
12360 64 6f 65 73 20 6e 6f 74 20 6e 65 65 64 20 74 6f  does not need to
12370 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61 63 6b   initialize back
12380 69 6e 67 20 73 74 6f 72 65 2e 0d 0a 20 20 20 20  ing store...    
12390 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
123a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
123b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
123c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
123d0 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20  ="pDb">..       
123e0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
123f0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12400 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20  ion handle...   
12410 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
12420 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
12430 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78  param name="pAux
12440 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
12450 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e 61 74  The original nat
12460 69 76 65 20 70 6f 69 6e 74 65 72 20 76 61 6c 75  ive pointer valu
12470 65 20 74 68 61 74 20 77 61 73 20 70 72 6f 76 69  e that was provi
12480 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ded to the..    
12490 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
124a0 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 2c  create_module(),
124b0 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
124c0 6d 6f 64 75 6c 65 5f 76 32 28 29 20 6f 72 0d 0a  module_v2() or..
124d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
124e0 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f  te3_create_dispo
124f0 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 29 20 66  sable_module() f
12500 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20  unctions...     
12510 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
12520 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
12530 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
12540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
12550 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
12560 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43  ments from the C
12570 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
12580 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  BLE statement...
12590 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
125a0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
125b0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
125c0 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rgv">..        /
125d0 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20  // The array of 
125e0 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  string arguments
125f0 20 66 72 6f 6d 20 74 68 65 20 43 52 45 41 54 45   from the CREATE
12600 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 0d 0a   VIRTUAL TABLE..
12610 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74          /// stat
12620 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ement...        
12630 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
12640 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
12650 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
12660 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
12670 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70   success, this p
12680 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65  arameter must be
12690 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69   modified to poi
126a0 6e 74 20 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d  nt to the newly.
126b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65  .        /// cre
126c0 61 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c 69  ated native sqli
126d0 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
126e0 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
126f0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
12700 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
12710 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45 72 72  param name="pErr
12720 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
12730 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20  / Upon failure, 
12740 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
12750 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
12760 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
12770 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  error..        /
12780 2f 2f 20 6d 65 73 73 61 67 65 2c 20 77 69 74 68  // message, with
12790 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
127a0 6d 65 6d 6f 72 79 20 68 61 76 69 6e 67 20 62 65  memory having be
127b0 65 6e 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  en obtained from
127c0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
127d0 2f 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  / sqlite3_malloc
127e0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20  () function...  
127f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
12800 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
12810 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
12820 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
12830 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
12840 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
12850 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
12860 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
12870 6f 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63 74 28  orCode xConnect(
12880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
12890 74 50 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20  tPtr pDb,..     
128a0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 41         IntPtr pA
128b0 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ux,..           
128c0 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20   int argc,..    
128d0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61          IntPtr a
128e0 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgv,..          
128f0 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 56 74    ref IntPtr pVt
12900 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
12910 20 72 65 66 20 49 6e 74 50 74 72 20 70 45 72 72   ref IntPtr pErr
12920 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
12930 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
12940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12980 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
12990 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
129a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
129b0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
129c0 53 51 4c 69 74 65 20 75 73 65 73 20 74 68 65 20  SQLite uses the 
129d0 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f  xBestIndex metho
129e0 64 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  d of a virtual t
129f0 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 6f 0d 0a  able module to..
12a00 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 74 65          /// dete
12a10 72 6d 69 6e 65 20 74 68 65 20 62 65 73 74 20 77  rmine the best w
12a20 61 79 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ay to access the
12a30 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
12a40 54 68 65 20 78 42 65 73 74 49 6e 64 65 78 0d 0a  The xBestIndex..
12a50 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68          /// meth
12a60 6f 64 20 68 61 73 20 61 20 70 72 6f 74 6f 74 79  od has a prototy
12a70 70 65 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20  pe like this:.. 
12a80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
12a90 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
12aa0 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  <code>..        
12ab0 2f 2f 2f 20 69 6e 74 20 28 2a 78 42 65 73 74 49  /// int (*xBestI
12ac0 6e 64 65 78 29 28 73 71 6c 69 74 65 33 5f 76 74  ndex)(sqlite3_vt
12ad0 61 62 20 2a 70 56 54 61 62 2c 20 73 71 6c 69 74  ab *pVTab, sqlit
12ae0 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 2a 29 3b  e3_index_info*);
12af0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
12b00 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
12b10 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
12b20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c 69 74     /// The SQLit
12b30 65 20 63 6f 72 65 20 63 6f 6d 6d 75 6e 69 63 61  e core communica
12b40 74 65 73 20 77 69 74 68 20 74 68 65 20 78 42 65  tes with the xBe
12b50 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 62  stIndex method b
12b60 79 20 66 69 6c 6c 69 6e 67 0d 0a 20 20 20 20 20  y filling..     
12b70 20 20 20 2f 2f 2f 20 69 6e 20 63 65 72 74 61 69     /// in certai
12b80 6e 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  n fields of the 
12b90 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
12ba0 66 6f 20 73 74 72 75 63 74 75 72 65 20 61 6e 64  fo structure and
12bb0 20 70 61 73 73 69 6e 67 20 61 0d 0a 20 20 20 20   passing a..    
12bc0 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65 72 20      /// pointer 
12bd0 74 6f 20 74 68 61 74 20 73 74 72 75 63 74 75 72  to that structur
12be0 65 20 69 6e 74 6f 20 78 42 65 73 74 49 6e 64 65  e into xBestInde
12bf0 78 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  x as the second 
12c00 70 61 72 61 6d 65 74 65 72 2e 0d 0a 20 20 20 20  parameter...    
12c10 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65 73      /// The xBes
12c20 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 66 69  tIndex method fi
12c30 6c 6c 73 20 6f 75 74 20 6f 74 68 65 72 20 66 69  lls out other fi
12c40 65 6c 64 73 20 6f 66 20 74 68 69 73 20 73 74 72  elds of this str
12c50 75 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  ucture..        
12c60 2f 2f 2f 20 77 68 69 63 68 20 66 6f 72 6d 73 20  /// which forms 
12c70 74 68 65 20 72 65 70 6c 79 2e 20 54 68 65 20 73  the reply. The s
12c80 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
12c90 6f 20 73 74 72 75 63 74 75 72 65 20 6c 6f 6f 6b  o structure look
12ca0 73 20 6c 69 6b 65 0d 0a 20 20 20 20 20 20 20 20  s like..        
12cb0 2f 2f 2f 20 74 68 69 73 3a 0d 0a 20 20 20 20 20  /// this:..     
12cc0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
12cd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64          /// <cod
12ce0 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
12cf0 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
12d00 69 6e 64 65 78 5f 69 6e 66 6f 20 7b 0d 0a 20 20  index_info {..  
12d10 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 2f 2a 20        ///    /* 
12d20 49 6e 70 75 74 73 20 2a 2f 0d 0a 20 20 20 20 20  Inputs */..     
12d30 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73 74 20     ///    const 
12d40 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b  int nConstraint;
12d50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12d60 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6e 73  entries in aCons
12d70 74 72 61 69 6e 74 20 2a 2f 0d 0a 20 20 20 20 20  traint */..     
12d80 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73 74 20     ///    const 
12d90 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 69  struct sqlite3_i
12da0 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20  ndex_constraint 
12db0 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  {..        ///  
12dc0 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e       int iColumn
12dd0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
12de0 6c 75 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68 61 6e  lumn on left-han
12df0 64 20 73 69 64 65 20 6f 66 0d 0a 20 20 20 20 20  d side of..     
12e00 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61 69 6e 74      * constraint
12e30 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
12e40 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20         unsigned 
12e50 63 68 61 72 20 6f 70 3b 20 20 20 20 20 2f 2a 20  char op;     /* 
12e60 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70 65 72 61  Constraint opera
12e70 74 6f 72 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  tor */..        
12e80 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e  ///       unsign
12e90 65 64 20 63 68 61 72 20 75 73 61 62 6c 65 3b 20  ed char usable; 
12ea0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
12eb0 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 75 73  constraint is us
12ec0 61 62 6c 65 20 2a 2f 0d 0a 20 20 20 20 20 20 20  able */..       
12ed0 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74 20 69   ///       int i
12ee0 54 65 72 6d 4f 66 66 73 65 74 3b 20 20 20 20 20  TermOffset;     
12ef0 20 2f 2a 20 55 73 65 64 20 69 6e 74 65 72 6e 61   /* Used interna
12f00 6c 6c 79 20 2d 20 78 42 65 73 74 49 6e 64 65 78  lly - xBestIndex
12f10 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20   should..       
12f20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20   ///            
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 2a 20 69 67 6e 6f 72 65 20 2a 2f 0d 0a 20    * ignore */.. 
12f50 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 7d 20         ///    } 
12f60 2a 63 6f 6e 73 74 20 61 43 6f 6e 73 74 72 61 69  *const aConstrai
12f70 6e 74 3b 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  nt;    /* Table 
12f80 6f 66 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  of WHERE clause 
12f90 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0d 0a  constraints */..
12fa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 63          ///    c
12fb0 6f 6e 73 74 20 69 6e 74 20 6e 4f 72 64 65 72 42  onst int nOrderB
12fc0 79 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  y;      /* Numbe
12fd0 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20 74 68  r of terms in th
12fe0 65 20 4f 52 44 45 52 20 42 59 0d 0a 20 20 20 20  e ORDER BY..    
12ff0 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
13000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13010 20 20 20 20 20 2a 20 63 6c 61 75 73 65 20 2a 2f       * clause */
13020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
13030 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 71   const struct sq
13040 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65  lite3_index_orde
13050 72 62 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f  rby {..        /
13060 2f 2f 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f  //       int iCo
13070 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
13080 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
13090 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
130a0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63        unsigned c
130b0 68 61 72 20 64 65 73 63 3b 20 20 20 2f 2a 20 54  har desc;   /* T
130c0 72 75 65 20 66 6f 72 20 44 45 53 43 2e 20 20 46  rue for DESC.  F
130d0 61 6c 73 65 20 66 6f 72 20 41 53 43 2e 20 2a 2f  alse for ASC. */
130e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
130f0 20 7d 20 2a 63 6f 6e 73 74 20 61 4f 72 64 65 72   } *const aOrder
13100 42 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  By;       /* The
13110 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
13120 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
13130 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 73 20 2a      /* Outputs *
13140 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  /..        ///  
13150 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
13160 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
13170 74 5f 75 73 61 67 65 20 7b 0d 0a 20 20 20 20 20  t_usage {..     
13180 20 20 20 2f 2f 2f 20 20 20 20 20 20 69 6e 74 20     ///      int 
13190 61 72 67 76 49 6e 64 65 78 3b 20 20 20 20 20 20  argvIndex;      
131a0 20 20 20 2f 2a 20 69 66 20 67 72 65 61 74 65 72     /* if greater
131b0 20 74 68 61 6e 20 7a 65 72 6f 2c 20 63 6f 6e 73   than zero, cons
131c0 74 72 61 69 6e 74 20 69 73 0d 0a 20 20 20 20 20  traint is..     
131d0 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131f0 20 20 20 20 2a 20 70 61 72 74 20 6f 66 20 61 72      * part of ar
13200 67 76 20 74 6f 20 78 46 69 6c 74 65 72 20 2a 2f  gv to xFilter */
13210 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
13220 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72     unsigned char
13230 20 6f 6d 69 74 3b 20 20 20 20 2f 2a 20 44 6f 20   omit;    /* Do 
13240 6e 6f 74 20 63 6f 64 65 20 61 20 74 65 73 74 20  not code a test 
13250 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20  for this..      
13260 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 20    ///           
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13280 20 20 20 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20     * constraint 
13290 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
132a0 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 43 6f 6e     } *const aCon
132b0 73 74 72 61 69 6e 74 55 73 61 67 65 3b 0d 0a 20  straintUsage;.. 
132c0 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 69 6e         ///    in
132d0 74 20 69 64 78 4e 75 6d 3b 20 20 20 20 20 20 20  t idxNum;       
132e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
132f0 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66   used to identif
13300 79 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0d 0a  y the index */..
13310 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 63          ///    c
13320 68 61 72 20 2a 69 64 78 53 74 72 3b 20 20 20 20  har *idxStr;    
13330 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
13340 67 2c 20 70 6f 73 73 69 62 6c 79 20 6f 62 74 61  g, possibly obta
13350 69 6e 65 64 20 66 72 6f 6d 0d 0a 20 20 20 20 20  ined from..     
13360 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 20 20 20 20 2a 20 73 71 6c 69 74 65 33 5f 6d 61      * sqlite3_ma
13390 6c 6c 6f 63 28 29 20 2a 2f 0d 0a 20 20 20 20 20  lloc() */..     
133a0 20 20 20 2f 2f 2f 20 20 20 20 69 6e 74 20 6e 65     ///    int ne
133b0 65 64 54 6f 46 72 65 65 49 64 78 53 74 72 3b 20  edToFreeIdxStr; 
133c0 20 20 20 2f 2a 20 46 72 65 65 20 69 64 78 53 74     /* Free idxSt
133d0 72 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  r using sqlite3_
133e0 66 72 65 65 28 29 20 69 66 0d 0a 20 20 20 20 20  free() if..     
133f0 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
13400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13410 20 20 20 20 2a 20 74 72 75 65 20 2a 2f 0d 0a 20      * true */.. 
13420 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 69 6e         ///    in
13430 74 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65  t orderByConsume
13440 64 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  d;     /* True i
13450 66 20 6f 75 74 70 75 74 20 69 73 20 61 6c 72 65  f output is alre
13460 61 64 79 20 6f 72 64 65 72 65 64 20 2a 2f 0d 0a  ady ordered */..
13470 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 64          ///    d
13480 6f 75 62 6c 65 20 65 73 74 69 6d 61 74 65 64 43  ouble estimatedC
13490 6f 73 74 3b 20 20 20 20 2f 2a 20 45 73 74 69 6d  ost;    /* Estim
134a0 61 74 65 64 20 63 6f 73 74 20 6f 66 20 75 73 69  ated cost of usi
134b0 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
134c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 7d  ..        ///  }
134d0 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
134e0 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
134f0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
13500 20 20 20 20 2f 2f 2f 20 49 6e 20 61 64 64 69 74      /// In addit
13510 69 6f 6e 2c 20 74 68 65 72 65 20 61 72 65 20 73  ion, there are s
13520 6f 6d 65 20 64 65 66 69 6e 65 64 20 63 6f 6e 73  ome defined cons
13530 74 61 6e 74 73 3a 0d 0a 20 20 20 20 20 20 20 20  tants:..        
13540 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
13550 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d       /// <code>.
13560 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64  .        ///  #d
13570 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44  efine SQLITE_IND
13580 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 45 51  EX_CONSTRAINT_EQ
13590 20 20 20 20 32 0d 0a 20 20 20 20 20 20 20 20 2f      2..        /
135a0 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  //  #define SQLI
135b0 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41  TE_INDEX_CONSTRA
135c0 49 4e 54 5f 47 54 20 20 20 20 34 0d 0a 20 20 20  INT_GT    4..   
135d0 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e       ///  #defin
135e0 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43  e SQLITE_INDEX_C
135f0 4f 4e 53 54 52 41 49 4e 54 5f 4c 45 20 20 20 20  ONSTRAINT_LE    
13600 38 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  8..        ///  
13610 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
13620 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
13630 4c 54 20 20 20 20 31 36 0d 0a 20 20 20 20 20 20  LT    16..      
13640 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20 53    ///  #define S
13650 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53  QLITE_INDEX_CONS
13660 54 52 41 49 4e 54 5f 47 45 20 20 20 20 33 32 0d  TRAINT_GE    32.
13670 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64  .        ///  #d
13680 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44  efine SQLITE_IND
13690 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 4d 41  EX_CONSTRAINT_MA
136a0 54 43 48 20 36 34 0d 0a 20 20 20 20 20 20 20 20  TCH 64..        
136b0 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20  /// </code>..   
136c0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
136d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
136e0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 63 61 6c   SQLite core cal
136f0 6c 73 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  ls the xBestInde
13700 78 20 6d 65 74 68 6f 64 20 77 68 65 6e 20 69 74  x method when it
13710 20 69 73 20 63 6f 6d 70 69 6c 69 6e 67 20 61 0d   is compiling a.
13720 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 71 75 65  .        /// que
13730 72 79 20 74 68 61 74 20 69 6e 76 6f 6c 76 65 73  ry that involves
13740 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
13750 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
13760 2c 20 53 51 4c 69 74 65 20 63 61 6c 6c 73 0d 0a  , SQLite calls..
13770 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73          /// this
13780 20 6d 65 74 68 6f 64 20 77 68 65 6e 20 69 74 20   method when it 
13790 69 73 20 72 75 6e 6e 69 6e 67 20 73 71 6c 69 74  is running sqlit
137a0 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 72 20  e3_prepare() or 
137b0 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 2e 0d  the equivalent..
137c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 42 79 20  .        /// By 
137d0 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65 74  calling this met
137e0 68 6f 64 2c 20 74 68 65 20 53 51 4c 69 74 65 20  hod, the SQLite 
137f0 63 6f 72 65 20 69 73 20 73 61 79 69 6e 67 20 74  core is saying t
13800 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20  o the virtual.. 
13810 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65         /// table
13820 20 74 68 61 74 20 69 74 20 6e 65 65 64 73 20 74   that it needs t
13830 6f 20 61 63 63 65 73 73 20 73 6f 6d 65 20 73 75  o access some su
13840 62 73 65 74 20 6f 66 20 74 68 65 20 72 6f 77 73  bset of the rows
13850 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20   in the..       
13860 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62   /// virtual tab
13870 6c 65 20 61 6e 64 20 69 74 20 77 61 6e 74 73 20  le and it wants 
13880 74 6f 20 6b 6e 6f 77 20 74 68 65 20 6d 6f 73 74  to know the most
13890 20 65 66 66 69 63 69 65 6e 74 20 77 61 79 20 74   efficient way t
138a0 6f 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o do..        //
138b0 2f 20 74 68 61 74 20 61 63 63 65 73 73 2e 20 54  / that access. T
138c0 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
138d0 74 68 6f 64 20 72 65 70 6c 69 65 73 20 77 69 74  thod replies wit
138e0 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  h information th
138f0 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  at..        /// 
13900 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
13910 63 61 6e 20 74 68 65 6e 20 75 73 65 20 74 6f 20  can then use to 
13920 63 6f 6e 64 75 63 74 20 61 6e 20 65 66 66 69 63  conduct an effic
13930 69 65 6e 74 20 73 65 61 72 63 68 20 6f 66 20 74  ient search of t
13940 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
13950 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
13960 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
13970 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
13980 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
13990 20 2f 2f 2f 20 57 68 69 6c 65 20 63 6f 6d 70 69   /// While compi
139a0 6c 69 6e 67 20 61 20 73 69 6e 67 6c 65 20 53 51  ling a single SQ
139b0 4c 20 71 75 65 72 79 2c 20 74 68 65 20 53 51 4c  L query, the SQL
139c0 69 74 65 20 63 6f 72 65 20 6d 69 67 68 74 20 63  ite core might c
139d0 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  all..        ///
139e0 20 78 42 65 73 74 49 6e 64 65 78 20 6d 75 6c 74   xBestIndex mult
139f0 69 70 6c 65 20 74 69 6d 65 73 20 77 69 74 68 20  iple times with 
13a00 64 69 66 66 65 72 65 6e 74 20 73 65 74 74 69 6e  different settin
13a10 67 73 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f  gs in..        /
13a20 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  // sqlite3_index
13a30 5f 69 6e 66 6f 2e 20 54 68 65 20 53 51 4c 69 74  _info. The SQLit
13a40 65 20 63 6f 72 65 20 77 69 6c 6c 20 74 68 65 6e  e core will then
13a50 20 73 65 6c 65 63 74 20 74 68 65 0d 0a 20 20 20   select the..   
13a60 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 62 69 6e 61       /// combina
13a70 74 69 6f 6e 20 74 68 61 74 20 61 70 70 65 61 72  tion that appear
13a80 73 20 74 6f 20 67 69 76 65 20 74 68 65 20 62 65  s to give the be
13a90 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2e 0d  st performance..
13aa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
13ab0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13ac0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
13ad0 20 20 2f 2f 2f 20 42 65 66 6f 72 65 20 63 61 6c    /// Before cal
13ae0 6c 69 6e 67 20 74 68 69 73 20 6d 65 74 68 6f 64  ling this method
13af0 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  , the SQLite cor
13b00 65 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 61 6e  e initializes an
13b10 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20   instance..     
13b20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20 73 71     /// of the sq
13b30 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
13b40 20 73 74 72 75 63 74 75 72 65 20 77 69 74 68 20   structure with 
13b50 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
13b60 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  t the..        /
13b70 2f 2f 20 71 75 65 72 79 20 74 68 61 74 20 69 74  // query that it
13b80 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 74 72   is currently tr
13b90 79 69 6e 67 20 74 6f 20 70 72 6f 63 65 73 73 2e  ying to process.
13ba0 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   This informatio
13bb0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  n..        /// d
13bc0 65 72 69 76 65 73 20 6d 61 69 6e 6c 79 20 66 72  erives mainly fr
13bd0 6f 6d 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  om the WHERE cla
13be0 75 73 65 20 61 6e 64 20 4f 52 44 45 52 20 42 59  use and ORDER BY
13bf0 20 6f 72 20 47 52 4f 55 50 20 42 59 0d 0a 20 20   or GROUP BY..  
13c00 20 20 20 20 20 20 2f 2f 2f 20 63 6c 61 75 73 65        /// clause
13c10 73 20 6f 66 20 74 68 65 20 71 75 65 72 79 2c 20  s of the query, 
13c20 62 75 74 20 61 6c 73 6f 20 66 72 6f 6d 20 61 6e  but also from an
13c30 79 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  y ON or USING cl
13c40 61 75 73 65 73 20 69 66 20 74 68 65 0d 0a 20 20  auses if the..  
13c50 20 20 20 20 20 20 2f 2f 2f 20 71 75 65 72 79 20        /// query 
13c60 69 73 20 61 20 6a 6f 69 6e 2e 20 54 68 65 20 69  is a join. The i
13c70 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
13c80 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
13c90 70 72 6f 76 69 64 65 73 20 74 6f 0d 0a 20 20 20  provides to..   
13ca0 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 78 42 65       /// the xBe
13cb0 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 69  stIndex method i
13cc0 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 70 61  s held in the pa
13cd0 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
13ce0 75 72 65 20 74 68 61 74 20 69 73 0d 0a 20 20 20  ure that is..   
13cf0 20 20 20 20 20 2f 2f 2f 20 6d 61 72 6b 65 64 20       /// marked 
13d00 61 73 20 22 49 6e 70 75 74 73 22 2e 20 54 68 65  as "Inputs". The
13d10 20 22 4f 75 74 70 75 74 73 22 20 73 65 63 74 69   "Outputs" secti
13d20 6f 6e 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  on is initialize
13d30 64 20 74 6f 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  d to zero...    
13d40 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
13d50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
13d60 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
13d70 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   The information
13d80 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f   in the sqlite3_
13d90 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63  index_info struc
13da0 74 75 72 65 20 69 73 20 65 70 68 65 6d 65 72 61  ture is ephemera
13db0 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  l..        /// a
13dc0 6e 64 20 6d 61 79 20 62 65 20 6f 76 65 72 77 72  nd may be overwr
13dd0 69 74 74 65 6e 20 6f 72 20 64 65 61 6c 6c 6f 63  itten or dealloc
13de0 61 74 65 64 20 61 73 20 73 6f 6f 6e 20 61 73 20  ated as soon as 
13df0 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0d 0a  the xBestIndex..
13e00 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68          /// meth
13e10 6f 64 20 72 65 74 75 72 6e 73 2e 20 49 66 20 74  od returns. If t
13e20 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
13e30 74 68 6f 64 20 6e 65 65 64 73 20 74 6f 20 72 65  thod needs to re
13e40 6d 65 6d 62 65 72 20 61 6e 79 20 70 61 72 74 0d  member any part.
13e50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20  .        /// of 
13e60 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  the sqlite3_inde
13e70 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  x_info structure
13e80 2c 20 69 74 20 73 68 6f 75 6c 64 20 6d 61 6b 65  , it should make
13e90 20 61 20 63 6f 70 79 2e 20 43 61 72 65 0d 0a 20   a copy. Care.. 
13ea0 20 20 20 20 20 20 20 2f 2f 2f 20 6d 75 73 74 20         /// must 
13eb0 62 65 20 74 61 6b 65 20 74 6f 20 73 74 6f 72 65  be take to store
13ec0 20 74 68 65 20 63 6f 70 79 20 69 6e 20 61 20 70   the copy in a p
13ed0 6c 61 63 65 20 77 68 65 72 65 20 69 74 20 77 69  lace where it wi
13ee0 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  ll be..        /
13ef0 2f 2f 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20  // deallocated, 
13f00 73 75 63 68 20 61 73 20 69 6e 20 74 68 65 20 69  such as in the i
13f10 64 78 53 74 72 20 66 69 65 6c 64 20 77 69 74 68  dxStr field with
13f20 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53 74   needToFreeIdxSt
13f30 72 20 73 65 74 0d 0a 20 20 20 20 20 20 20 20 2f  r set..        /
13f40 2f 2f 20 74 6f 20 31 2e 0d 0a 20 20 20 20 20 20  // to 1...      
13f50 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
13f60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
13f70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
13f80 6f 74 65 20 74 68 61 74 20 78 42 65 73 74 49 6e  ote that xBestIn
13f90 64 65 78 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  dex will always 
13fa0 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65  be called before
13fb0 20 78 46 69 6c 74 65 72 2c 20 73 69 6e 63 65 0d   xFilter, since.
13fc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
13fd0 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64 78 53   idxNum and idxS
13fe0 74 72 20 6f 75 74 70 75 74 73 20 66 72 6f 6d 20  tr outputs from 
13ff0 78 42 65 73 74 49 6e 64 65 78 20 61 72 65 20 72  xBestIndex are r
14000 65 71 75 69 72 65 64 20 69 6e 70 75 74 73 0d 0a  equired inputs..
14010 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78          /// to x
14020 46 69 6c 74 65 72 2e 20 48 6f 77 65 76 65 72 2c  Filter. However,
14030 20 74 68 65 72 65 20 69 73 20 6e 6f 20 67 75 61   there is no gua
14040 72 61 6e 74 65 65 20 74 68 61 74 20 78 46 69 6c  rantee that xFil
14050 74 65 72 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  ter will be..   
14060 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 20       /// called 
14070 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63  following a succ
14080 65 73 73 66 75 6c 20 78 42 65 73 74 49 6e 64 65  essful xBestInde
14090 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  x...        /// 
140a0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
140b0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
140c0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65       /// The xBe
140d0 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 69  stIndex method i
140e0 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
140f0 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62  very virtual tab
14100 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
14110 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
14120 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
14130 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
14140 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
14150 20 20 2f 2f 2f 20 32 2e 33 2e 31 20 49 6e 70 75    /// 2.3.1 Inpu
14160 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ts..        /// 
14170 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
14180 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
14190 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 69       /// The mai
141a0 6e 20 74 68 69 6e 67 20 74 68 61 74 20 74 68 65  n thing that the
141b0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69 73 20   SQLite core is 
141c0 74 72 79 69 6e 67 20 74 6f 20 63 6f 6d 6d 75 6e  trying to commun
141d0 69 63 61 74 65 20 74 6f 20 74 68 65 0d 0a 20 20  icate to the..  
141e0 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61        /// virtua
141f0 6c 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 63  l table is the c
14200 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74 20  onstraints that 
14210 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 74 6f  are available to
14220 20 6c 69 6d 69 74 20 74 68 65 0d 0a 20 20 20 20   limit the..    
14230 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72 20 6f      /// number o
14240 66 20 72 6f 77 73 20 74 68 61 74 20 6e 65 65 64  f rows that need
14250 20 74 6f 20 62 65 20 73 65 61 72 63 68 65 64 2e   to be searched.
14260 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74   The aConstraint
14270 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20 20 20 20  [] array..      
14280 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73 20 6f    /// contains o
14290 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
142a0 68 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 54 68  h constraint. Th
142b0 65 72 65 20 77 69 6c 6c 20 62 65 20 65 78 61 63  ere will be exac
142c0 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  tly..        ///
142d0 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 65 6e 74   nConstraint ent
142e0 72 69 65 73 20 69 6e 20 74 68 61 74 20 61 72 72  ries in that arr
142f0 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ay...        ///
14300 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
14310 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
14320 20 20 20 20 20 20 2f 2f 2f 20 45 61 63 68 20 63        /// Each c
14330 6f 6e 73 74 72 61 69 6e 74 20 77 69 6c 6c 20 63  onstraint will c
14340 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 74  orrespond to a t
14350 65 72 6d 20 69 6e 20 74 68 65 20 57 48 45 52 45  erm in the WHERE
14360 20 63 6c 61 75 73 65 20 6f 72 20 69 6e 0d 0a 20   clause or in.. 
14370 20 20 20 20 20 20 20 2f 2f 2f 20 61 20 55 53 49         /// a USI
14380 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20  NG or ON clause 
14390 74 68 61 74 20 69 73 20 6f 66 20 74 68 65 20 66  that is of the f
143a0 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  orm..        ///
143b0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
143c0 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20    /// <code>..  
143d0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 63 6f        ///     co
143e0 6c 75 6d 6e 20 4f 50 20 45 58 50 52 0d 0a 20 20  lumn OP EXPR..  
143f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65        /// </code
14400 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
14410 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
14420 2f 2f 20 57 68 65 72 65 20 22 63 6f 6c 75 6d 6e  // Where "column
14430 22 20 69 73 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  " is a column in
14440 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
14450 6c 65 2c 20 4f 50 20 69 73 20 61 6e 20 6f 70 65  le, OP is an ope
14460 72 61 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  rator..        /
14470 2f 2f 20 6c 69 6b 65 20 22 3d 22 20 6f 72 20 22  // like "=" or "
14480 26 6c 74 3b 22 2c 20 61 6e 64 20 45 58 50 52 20  &lt;", and EXPR 
14490 69 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  is an arbitrary 
144a0 65 78 70 72 65 73 73 69 6f 6e 2e 20 53 6f 2c 20  expression. So, 
144b0 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  for..        ///
144c0 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74 68 65   example, if the
144d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f   WHERE clause co
144e0 6e 74 61 69 6e 65 64 20 61 20 74 65 72 6d 20 6c  ntained a term l
144f0 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20 20 20 20  ike this:..     
14500 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
14510 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64          /// <cod
14520 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
14530 20 20 20 20 20 20 20 20 20 61 20 3d 20 35 0d 0a           a = 5..
14540 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f          /// </co
14550 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
14560 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
14570 20 2f 2f 2f 20 54 68 65 6e 20 6f 6e 65 20 6f 66   /// Then one of
14580 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73   the constraints
14590 20 77 6f 75 6c 64 20 62 65 20 6f 6e 20 74 68 65   would be on the
145a0 20 22 61 22 20 63 6f 6c 75 6d 6e 20 77 69 74 68   "a" column with
145b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70  ..        /// op
145c0 65 72 61 74 6f 72 20 22 3d 22 20 61 6e 64 20 61  erator "=" and a
145d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
145e0 22 35 22 2e 20 43 6f 6e 73 74 72 61 69 6e 74 73  "5". Constraints
145f0 20 6e 65 65 64 20 6e 6f 74 20 68 61 76 65 20 61   need not have a
14600 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69  ..        /// li
14610 74 65 72 61 6c 20 72 65 70 72 65 73 65 6e 74 61  teral representa
14620 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48 45 52  tion of the WHER
14630 45 20 63 6c 61 75 73 65 2e 20 54 68 65 20 71 75  E clause. The qu
14640 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 0d 0a 20  ery optimizer.. 
14650 20 20 20 20 20 20 20 2f 2f 2f 20 6d 69 67 68 74         /// might
14660 20 6d 61 6b 65 20 74 72 61 6e 73 66 6f 72 6d 61   make transforma
14670 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 57 48 45  tions to the WHE
14680 52 45 20 63 6c 61 75 73 65 20 69 6e 20 6f 72 64  RE clause in ord
14690 65 72 20 74 6f 20 65 78 74 72 61 63 74 0d 0a 20  er to extract.. 
146a0 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 20 6d 61         /// as ma
146b0 6e 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  ny constraints a
146c0 73 20 69 74 20 63 61 6e 2e 20 53 6f 2c 20 66 6f  s it can. So, fo
146d0 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74 68  r example, if th
146e0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 0d 0a  e WHERE clause..
146f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74          /// cont
14700 61 69 6e 65 64 20 73 6f 6d 65 74 68 69 6e 67 20  ained something 
14710 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20 20 20  like this:..    
14720 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
14730 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f  .        /// <co
14740 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
14750 20 20 20 20 20 20 20 20 20 20 78 20 42 45 54 57            x BETW
14760 45 45 4e 20 31 30 20 41 4e 44 20 31 30 30 20 41  EEN 10 AND 100 A
14770 4e 44 20 39 39 39 26 67 74 3b 79 0d 0a 20 20 20  ND 999&gt;y..   
14780 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
14790 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
147a0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
147b0 2f 20 54 68 65 20 71 75 65 72 79 20 6f 70 74 69  / The query opti
147c0 6d 69 7a 65 72 20 6d 69 67 68 74 20 74 72 61 6e  mizer might tran
147d0 73 6c 61 74 65 20 74 68 69 73 20 69 6e 74 6f 20  slate this into 
147e0 74 68 72 65 65 20 73 65 70 61 72 61 74 65 0d 0a  three separate..
147f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 73          /// cons
14800 74 72 61 69 6e 74 73 3a 0d 0a 20 20 20 20 20 20  traints:..      
14810 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
14820 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65         /// <code
14830 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  >..        ///  
14840 20 20 20 20 20 20 20 20 78 20 26 67 74 3b 3d 20          x &gt;= 
14850 31 30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  10..        /// 
14860 20 20 20 20 20 20 20 20 20 78 20 26 6c 74 3b 3d           x &lt;=
14870 20 31 30 30 0d 0a 20 20 20 20 20 20 20 20 2f 2f   100..        //
14880 2f 20 20 20 20 20 20 20 20 20 20 79 20 26 6c 74  /          y &lt
14890 3b 20 39 39 39 0d 0a 20 20 20 20 20 20 20 20 2f  ; 999..        /
148a0 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20  // </code>..    
148b0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
148c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 6f 72 20          /// For 
148d0 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 2c  each constraint,
148e0 20 74 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74   the aConstraint
148f0 5b 5d 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  [].iColumn field
14900 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20   indicates..    
14910 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20 63 6f      /// which co
14920 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 6f 6e 20  lumn appears on 
14930 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69  the left-hand si
14940 64 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  de of the constr
14950 61 69 6e 74 2e 20 54 68 65 0d 0a 20 20 20 20 20  aint. The..     
14960 20 20 20 2f 2f 2f 20 66 69 72 73 74 20 63 6f 6c     /// first col
14970 75 6d 6e 20 6f 66 20 74 68 65 20 76 69 72 74 75  umn of the virtu
14980 61 6c 20 74 61 62 6c 65 20 69 73 20 63 6f 6c 75  al table is colu
14990 6d 6e 20 30 2e 20 54 68 65 20 72 6f 77 69 64 20  mn 0. The rowid 
149a0 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
149b0 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c  /// virtual tabl
149c0 65 20 69 73 20 63 6f 6c 75 6d 6e 20 2d 31 2e 20  e is column -1. 
149d0 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b  The aConstraint[
149e0 5d 2e 6f 70 20 66 69 65 6c 64 20 69 6e 64 69 63  ].op field indic
149f0 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ates..        //
14a00 2f 20 77 68 69 63 68 20 6f 70 65 72 61 74 6f 72  / which operator
14a10 20 69 73 20 75 73 65 64 2e 20 54 68 65 20 53 51   is used. The SQ
14a20 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54  LITE_INDEX_CONST
14a30 52 41 49 4e 54 5f 2a 20 63 6f 6e 73 74 61 6e 74  RAINT_* constant
14a40 73 20 6d 61 70 0d 0a 20 20 20 20 20 20 20 20 2f  s map..        /
14a50 2f 2f 20 69 6e 74 65 67 65 72 20 63 6f 6e 73 74  // integer const
14a60 61 6e 74 73 20 69 6e 74 6f 20 6f 70 65 72 61 74  ants into operat
14a70 6f 72 20 76 61 6c 75 65 73 2e 20 43 6f 6c 75 6d  or values. Colum
14a80 6e 73 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20  ns occur in the 
14a90 6f 72 64 65 72 0d 0a 20 20 20 20 20 20 20 20 2f  order..        /
14aa0 2f 2f 20 74 68 65 79 20 77 65 72 65 20 64 65 66  // they were def
14ab0 69 6e 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c  ined by the call
14ac0 20 74 6f 20 73 71 6c 69 74 65 33 5f 64 65 63 6c   to sqlite3_decl
14ad0 61 72 65 5f 76 74 61 62 28 29 20 69 6e 20 74 68  are_vtab() in th
14ae0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
14af0 43 72 65 61 74 65 20 6f 72 20 78 43 6f 6e 6e 65  Create or xConne
14b00 63 74 20 6d 65 74 68 6f 64 2e 20 48 69 64 64 65  ct method. Hidde
14b10 6e 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f  n columns are co
14b20 75 6e 74 65 64 20 77 68 65 6e 0d 0a 20 20 20 20  unted when..    
14b30 20 20 20 20 2f 2f 2f 20 64 65 74 65 72 6d 69 6e      /// determin
14b40 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  ing the column i
14b50 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
14b60 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
14b70 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
14b80 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
14b90 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 61 72  aConstraint[] ar
14ba0 72 61 79 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ray contains inf
14bb0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
14bc0 6c 6c 20 63 6f 6e 73 74 72 61 69 6e 74 73 0d 0a  ll constraints..
14bd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61 74          /// that
14be0 20 61 70 70 6c 79 20 74 6f 20 74 68 65 20 76 69   apply to the vi
14bf0 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 42 75 74  rtual table. But
14c00 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   some of the con
14c10 73 74 72 61 69 6e 74 73 20 6d 69 67 68 74 0d 0a  straints might..
14c20 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f 74 20          /// not 
14c30 62 65 20 75 73 61 62 6c 65 20 62 65 63 61 75 73  be usable becaus
14c40 65 20 6f 66 20 74 68 65 20 77 61 79 20 74 61 62  e of the way tab
14c50 6c 65 73 20 61 72 65 20 6f 72 64 65 72 65 64 20  les are ordered 
14c60 69 6e 20 61 20 6a 6f 69 6e 2e 20 54 68 65 0d 0a  in a join. The..
14c70 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 42 65 73          /// xBes
14c80 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 6d 75  tIndex method mu
14c90 73 74 20 74 68 65 72 65 66 6f 72 65 20 6f 6e 6c  st therefore onl
14ca0 79 20 63 6f 6e 73 69 64 65 72 20 63 6f 6e 73 74  y consider const
14cb0 72 61 69 6e 74 73 20 74 68 61 74 0d 0a 20 20 20  raints that..   
14cc0 20 20 20 20 20 2f 2f 2f 20 68 61 76 65 20 61 6e       /// have an
14cd0 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 2e 75   aConstraint[].u
14ce0 73 61 62 6c 65 20 66 6c 61 67 20 77 68 69 63 68  sable flag which
14cf0 20 69 73 20 74 72 75 65 2e 0d 0a 20 20 20 20 20   is true...     
14d00 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
14d10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
14d20 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14d30 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 57  In addition to W
14d40 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f 6e 73  HERE clause cons
14d50 74 72 61 69 6e 74 73 2c 20 74 68 65 20 53 51 4c  traints, the SQL
14d60 69 74 65 20 63 6f 72 65 20 61 6c 73 6f 20 74 65  ite core also te
14d70 6c 6c 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  lls..        ///
14d80 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   the xBestIndex 
14d90 6d 65 74 68 6f 64 20 61 62 6f 75 74 20 74 68 65  method about the
14da0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
14db0 2e 20 28 49 6e 20 61 6e 20 61 67 67 72 65 67 61  . (In an aggrega
14dc0 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  te..        /// 
14dd0 71 75 65 72 79 2c 20 74 68 65 20 53 51 4c 69 74  query, the SQLit
14de0 65 20 63 6f 72 65 20 6d 69 67 68 74 20 70 75 74  e core might put
14df0 20 69 6e 20 47 52 4f 55 50 20 42 59 20 63 6c 61   in GROUP BY cla
14e00 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  use information 
14e10 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  in..        /// 
14e20 70 6c 61 63 65 20 6f 66 20 74 68 65 20 4f 52 44  place of the ORD
14e30 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 6e 66  ER BY clause inf
14e40 6f 72 6d 61 74 69 6f 6e 2c 20 62 75 74 20 74 68  ormation, but th
14e50 69 73 20 66 61 63 74 20 73 68 6f 75 6c 64 20 6e  is fact should n
14e60 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ot..        /// 
14e70 6d 61 6b 65 20 61 6e 79 20 64 69 66 66 65 72 65  make any differe
14e80 6e 63 65 20 74 6f 20 74 68 65 20 78 42 65 73 74  nce to the xBest
14e90 49 6e 64 65 78 20 6d 65 74 68 6f 64 2e 29 20 49  Index method.) I
14ea0 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74  f all terms of t
14eb0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
14ec0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
14ed0 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  are columns in t
14ee0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
14ef0 2c 20 74 68 65 6e 20 6e 4f 72 64 65 72 42 79 0d  , then nOrderBy.
14f00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 6c  .        /// wil
14f10 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20  l be the number 
14f20 6f 66 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20  of terms in the 
14f30 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
14f40 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20  and the..       
14f50 20 2f 2f 2f 20 61 4f 72 64 65 72 42 79 5b 5d 20   /// aOrderBy[] 
14f60 61 72 72 61 79 20 77 69 6c 6c 20 69 64 65 6e 74  array will ident
14f70 69 66 79 20 74 68 65 20 63 6f 6c 75 6d 6e 20 66  ify the column f
14f80 6f 72 20 65 61 63 68 20 74 65 72 6d 20 69 6e 20  or each term in 
14f90 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
14fa0 20 6f 72 64 65 72 20 62 79 20 63 6c 61 75 73 65   order by clause
14fb0 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
14fc0 6e 6f 74 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20  not that column 
14fd0 69 73 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0d  is ASC or DESC..
14fe0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
14ff0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
15000 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
15010 20 20 2f 2f 2f 20 32 2e 33 2e 32 20 4f 75 74 70    /// 2.3.2 Outp
15020 75 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  uts..        ///
15030 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
15040 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
15050 20 20 20 20 20 20 2f 2f 2f 20 47 69 76 65 6e 20        /// Given 
15060 61 6c 6c 20 6f 66 20 74 68 65 20 69 6e 66 6f 72  all of the infor
15070 6d 61 74 69 6f 6e 20 61 62 6f 76 65 2c 20 74 68  mation above, th
15080 65 20 6a 6f 62 20 6f 66 20 74 68 65 20 78 42 65  e job of the xBe
15090 73 74 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20  stIndex..       
150a0 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 69 74 20 74   /// method it t
150b0 6f 20 66 69 67 75 72 65 20 6f 75 74 20 74 68 65  o figure out the
150c0 20 62 65 73 74 20 77 61 79 20 74 6f 20 73 65 61   best way to sea
150d0 72 63 68 20 74 68 65 20 76 69 72 74 75 61 6c 20  rch the virtual 
150e0 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
150f0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
15100 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
15110 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
15120 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68   xBestIndex meth
15130 6f 64 20 66 69 6c 6c 73 20 74 68 65 20 69 64 78  od fills the idx
15140 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72 20 66  Num and idxStr f
15150 69 65 6c 64 73 20 77 69 74 68 0d 0a 20 20 20 20  ields with..    
15160 20 20 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61 74      /// informat
15170 69 6f 6e 20 74 68 61 74 20 63 6f 6d 6d 75 6e 69  ion that communi
15180 63 61 74 65 73 20 61 6e 20 69 6e 64 65 78 69 6e  cates an indexin
15190 67 20 73 74 72 61 74 65 67 79 20 74 6f 20 74 68  g strategy to th
151a0 65 20 78 46 69 6c 74 65 72 0d 0a 20 20 20 20 20  e xFilter..     
151b0 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 20 54     /// method. T
151c0 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  he information i
151d0 6e 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64 78  n idxNum and idx
151e0 53 74 72 20 69 73 20 61 72 62 69 74 72 61 72 79  Str is arbitrary
151f0 20 61 73 20 66 61 72 20 61 73 0d 0a 20 20 20 20   as far as..    
15200 20 20 20 20 2f 2f 2f 20 74 68 65 20 53 51 4c 69      /// the SQLi
15210 74 65 20 63 6f 72 65 20 69 73 20 63 6f 6e 63 65  te core is conce
15220 72 6e 65 64 2e 20 54 68 65 20 53 51 4c 69 74 65  rned. The SQLite
15230 20 63 6f 72 65 20 6a 75 73 74 20 63 6f 70 69 65   core just copie
15240 73 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  s the..        /
15250 2f 2f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  // information t
15260 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 78 46  hrough to the xF
15270 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 41 6e  ilter method. An
15280 79 20 64 65 73 69 72 65 64 20 6d 65 61 6e 69 6e  y desired meanin
15290 67 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f  g can..        /
152a0 2f 2f 20 62 65 20 61 73 73 69 67 6e 65 64 20 74  // be assigned t
152b0 6f 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64 78  o idxNum and idx
152c0 53 74 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 78  Str as long as x
152d0 42 65 73 74 49 6e 64 65 78 20 61 6e 64 20 78 46  BestIndex and xF
152e0 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20 20 2f  ilter..        /
152f0 2f 2f 20 61 67 72 65 65 20 6f 6e 20 77 68 61 74  // agree on what
15300 20 74 68 61 74 20 6d 65 61 6e 69 6e 67 20 69 73   that meaning is
15310 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15320 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
15330 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
15340 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 64 78 53      /// The idxS
15350 74 72 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  tr value may be 
15360 61 20 73 74 72 69 6e 67 20 6f 62 74 61 69 6e 65  a string obtaine
15370 64 20 66 72 6f 6d 20 61 6e 20 53 51 4c 69 74 65  d from an SQLite
15380 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20   memory..       
15390 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f 6e 20   /// allocation 
153a0 66 75 6e 63 74 69 6f 6e 20 73 75 63 68 20 61 73  function such as
153b0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
153c0 28 29 2e 20 49 66 20 74 68 69 73 20 69 73 20 74  (). If this is t
153d0 68 65 20 63 61 73 65 2c 0d 0a 20 20 20 20 20 20  he case,..      
153e0 20 20 2f 2f 2f 20 74 68 65 6e 20 74 68 65 20 6e    /// then the n
153f0 65 65 64 54 6f 46 72 65 65 49 64 78 53 74 72 20  eedToFreeIdxStr 
15400 66 6c 61 67 20 6d 75 73 74 20 62 65 20 73 65 74  flag must be set
15410 20 74 6f 20 74 72 75 65 20 73 6f 20 74 68 61 74   to true so that
15420 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
15430 2f 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69  / SQLite core wi
15440 6c 6c 20 6b 6e 6f 77 20 74 6f 20 63 61 6c 6c 20  ll know to call 
15450 73 71 6c 69 74 65 33 5f 66 72 65 65 28 29 20 6f  sqlite3_free() o
15460 6e 20 74 68 61 74 20 73 74 72 69 6e 67 20 77 68  n that string wh
15470 65 6e 20 69 74 0d 0a 20 20 20 20 20 20 20 20 2f  en it..        /
15480 2f 2f 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  // has finished 
15490 77 69 74 68 20 69 74 2c 20 61 6e 64 20 74 68 75  with it, and thu
154a0 73 20 61 76 6f 69 64 20 61 20 6d 65 6d 6f 72 79  s avoid a memory
154b0 20 6c 65 61 6b 2e 0d 0a 20 20 20 20 20 20 20 20   leak...        
154c0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
154d0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
154e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20  .        /// If 
154f0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
15500 65 20 77 69 6c 6c 20 6f 75 74 70 75 74 20 72 6f  e will output ro
15510 77 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  ws in the order 
15520 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
15530 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4f 52  ..        /// OR
15540 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
15550 68 65 6e 20 74 68 65 20 6f 72 64 65 72 42 79 43  hen the orderByC
15560 6f 6e 73 75 6d 65 64 20 66 6c 61 67 20 6d 61 79  onsumed flag may
15570 20 62 65 20 73 65 74 20 74 6f 20 74 72 75 65 2e   be set to true.
15580 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66  ..        /// If
15590 20 74 68 65 20 6f 75 74 70 75 74 20 69 73 20 6e   the output is n
155a0 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ot automatically
155b0 20 69 6e 20 74 68 65 20 63 6f 72 72 65 63 74 20   in the correct 
155c0 6f 72 64 65 72 20 74 68 65 6e 0d 0a 20 20 20 20  order then..    
155d0 20 20 20 20 2f 2f 2f 20 6f 72 64 65 72 42 79 43      /// orderByC
155e0 6f 6e 73 75 6d 65 64 20 6d 75 73 74 20 62 65 20  onsumed must be 
155f0 6c 65 66 74 20 69 6e 20 69 74 73 20 64 65 66 61  left in its defa
15600 75 6c 74 20 66 61 6c 73 65 20 73 65 74 74 69 6e  ult false settin
15610 67 2e 20 54 68 69 73 0d 0a 20 20 20 20 20 20 20  g. This..       
15620 20 2f 2f 2f 20 77 69 6c 6c 20 69 6e 64 69 63 61   /// will indica
15630 74 65 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65  te to the SQLite
15640 20 63 6f 72 65 20 74 68 61 74 20 69 74 20 77 69   core that it wi
15650 6c 6c 20 6e 65 65 64 20 74 6f 20 64 6f 20 61 20  ll need to do a 
15660 73 65 70 61 72 61 74 65 0d 0a 20 20 20 20 20 20  separate..      
15670 20 20 2f 2f 2f 20 73 6f 72 74 69 6e 67 20 70 61    /// sorting pa
15680 73 73 20 6f 76 65 72 20 74 68 65 20 64 61 74 61  ss over the data
15690 20 61 66 74 65 72 20 69 74 20 63 6f 6d 65 73 20   after it comes 
156a0 6f 75 74 20 6f 66 20 74 68 65 20 76 69 72 74 75  out of the virtu
156b0 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
156c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
156d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
156e0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
156f0 54 68 65 20 65 73 74 69 6d 61 74 65 64 43 6f 73  The estimatedCos
15700 74 20 66 69 65 6c 64 20 73 68 6f 75 6c 64 20 62  t field should b
15710 65 20 73 65 74 20 74 6f 20 74 68 65 20 65 73 74  e set to the est
15720 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
15730 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 69  ..        /// di
15740 73 6b 20 61 63 63 65 73 73 20 6f 70 65 72 61 74  sk access operat
15750 69 6f 6e 73 20 72 65 71 75 69 72 65 64 20 74 6f  ions required to
15760 20 65 78 65 63 75 74 65 20 74 68 69 73 20 71 75   execute this qu
15770 65 72 79 20 61 67 61 69 6e 73 74 20 74 68 65 0d  ery against the.
15780 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72  .        /// vir
15790 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 65 20  tual table. The 
157a0 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c  SQLite core will
157b0 20 6f 66 74 65 6e 20 63 61 6c 6c 20 78 42 65 73   often call xBes
157c0 74 49 6e 64 65 78 20 6d 75 6c 74 69 70 6c 65 0d  tIndex multiple.
157d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 69 6d  .        /// tim
157e0 65 73 20 77 69 74 68 20 64 69 66 66 65 72 65 6e  es with differen
157f0 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 6f  t constraints, o
15800 62 74 61 69 6e 20 6d 75 6c 74 69 70 6c 65 20 63  btain multiple c
15810 6f 73 74 20 65 73 74 69 6d 61 74 65 73 2c 0d 0a  ost estimates,..
15820 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 6e          /// then
15830 20 63 68 6f 6f 73 65 20 74 68 65 20 71 75 65 72   choose the quer
15840 79 20 70 6c 61 6e 20 74 68 61 74 20 67 69 76 65  y plan that give
15850 73 20 74 68 65 20 6c 6f 77 65 73 74 20 65 73 74  s the lowest est
15860 69 6d 61 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  imate...        
15870 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
15880 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
15890 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
158a0 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67   aConstraintUsag
158b0 65 5b 5d 20 61 72 72 61 79 20 63 6f 6e 74 61 69  e[] array contai
158c0 6e 73 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 20 66  ns one element f
158d0 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0d 0a  or each of the..
158e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 43 6f 6e          /// nCon
158f0 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69  straint constrai
15900 6e 74 73 20 69 6e 20 74 68 65 20 69 6e 70 75 74  nts in the input
15910 73 20 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65  s section of the
15920 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
15930 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
15940 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 20   structure. The 
15950 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  aConstraintUsage
15960 5b 5d 20 61 72 72 61 79 20 69 73 20 75 73 65 64  [] array is used
15970 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 79  ..        /// by
15980 20 78 42 65 73 74 49 6e 64 65 78 20 74 6f 20 74   xBestIndex to t
15990 65 6c 6c 20 74 68 65 20 63 6f 72 65 20 68 6f 77  ell the core how
159a0 20 69 74 20 69 73 20 75 73 69 6e 67 20 74 68 65   it is using the
159b0 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20   constraints... 
159c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
159d0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
159e0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
159f0 2f 2f 2f 20 54 68 65 20 78 42 65 73 74 49 6e 64  /// The xBestInd
15a00 65 78 20 6d 65 74 68 6f 64 20 6d 61 79 20 73 65  ex method may se
15a10 74 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  t aConstraintUsa
15a20 67 65 5b 5d 2e 61 72 67 76 49 6e 64 65 78 20 65  ge[].argvIndex e
15a30 6e 74 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20  ntries..        
15a40 2f 2f 2f 20 74 6f 20 76 61 6c 75 65 73 20 67 72  /// to values gr
15a50 65 61 74 65 72 20 74 68 61 6e 20 6f 6e 65 2e 20  eater than one. 
15a60 45 78 61 63 74 6c 79 20 6f 6e 65 20 65 6e 74 72  Exactly one entr
15a70 79 20 73 68 6f 75 6c 64 20 62 65 20 73 65 74 20  y should be set 
15a80 74 6f 20 31 2c 0d 0a 20 20 20 20 20 20 20 20 2f  to 1,..        /
15a90 2f 2f 20 61 6e 6f 74 68 65 72 20 74 6f 20 32 2c  // another to 2,
15aa0 20 61 6e 6f 74 68 65 72 20 74 6f 20 33 2c 20 61   another to 3, a
15ab0 6e 64 20 73 6f 20 66 6f 72 74 68 20 75 70 20 74  nd so forth up t
15ac0 6f 20 61 73 20 6d 61 6e 79 20 6f 72 20 61 73 20  o as many or as 
15ad0 66 65 77 20 61 73 0d 0a 20 20 20 20 20 20 20 20  few as..        
15ae0 2f 2f 2f 20 74 68 65 20 78 42 65 73 74 49 6e 64  /// the xBestInd
15af0 65 78 20 6d 65 74 68 6f 64 20 77 61 6e 74 73 2e  ex method wants.
15b00 20 54 68 65 20 45 58 50 52 20 6f 66 20 74 68 65   The EXPR of the
15b10 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0d 0a   corresponding..
15b20 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 73          /// cons
15b30 74 72 61 69 6e 74 73 20 77 69 6c 6c 20 74 68 65  traints will the
15b40 6e 20 62 65 20 70 61 73 73 65 64 20 69 6e 20 61  n be passed in a
15b50 73 20 74 68 65 20 61 72 67 76 5b 5d 20 70 61 72  s the argv[] par
15b60 61 6d 65 74 65 72 73 20 74 6f 0d 0a 20 20 20 20  ameters to..    
15b70 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74 65 72 2e      /// xFilter.
15b80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15b90 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15ba0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
15bb0 20 20 20 2f 2f 2f 20 46 6f 72 20 65 78 61 6d 70     /// For examp
15bc0 6c 65 2c 20 69 66 20 74 68 65 20 61 43 6f 6e 73  le, if the aCons
15bd0 74 72 61 69 6e 74 5b 33 5d 2e 61 72 67 76 49 6e  traint[3].argvIn
15be0 64 65 78 20 69 73 20 73 65 74 20 74 6f 20 31 2c  dex is set to 1,
15bf0 20 74 68 65 6e 20 77 68 65 6e 0d 0a 20 20 20 20   then when..    
15c00 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74 65 72 20      /// xFilter 
15c10 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 61  is called, the a
15c20 72 67 76 5b 30 5d 20 70 61 73 73 65 64 20 74 6f  rgv[0] passed to
15c30 20 78 46 69 6c 74 65 72 20 77 69 6c 6c 20 68 61   xFilter will ha
15c40 76 65 20 74 68 65 20 45 58 50 52 0d 0a 20 20 20  ve the EXPR..   
15c50 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 6f       /// value o
15c60 66 20 74 68 65 20 61 43 6f 6e 73 74 72 61 69 6e  f the aConstrain
15c70 74 5b 33 5d 20 63 6f 6e 73 74 72 61 69 6e 74 2e  t[3] constraint.
15c80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15c90 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15ca0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
15cb0 20 20 20 2f 2f 2f 20 42 79 20 64 65 66 61 75 6c     /// By defaul
15cc0 74 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  t, the SQLite co
15cd0 72 65 20 64 6f 75 62 6c 65 20 63 68 65 63 6b 73  re double checks
15ce0 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e 74 73   all constraints
15cf0 20 6f 6e 20 65 61 63 68 0d 0a 20 20 20 20 20 20   on each..      
15d00 20 20 2f 2f 2f 20 72 6f 77 20 6f 66 20 74 68 65    /// row of the
15d10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74   virtual table t
15d20 68 61 74 20 69 74 20 72 65 63 65 69 76 65 73 2e  hat it receives.
15d30 20 49 66 20 73 75 63 68 20 61 20 63 68 65 63 6b   If such a check
15d40 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   is..        ///
15d50 20 72 65 64 75 6e 64 61 6e 74 2c 20 74 68 65 20   redundant, the 
15d60 78 42 65 73 74 46 69 6c 74 65 72 20 6d 65 74 68  xBestFilter meth
15d70 6f 64 20 63 61 6e 20 73 75 70 70 72 65 73 73 20  od can suppress 
15d80 74 68 61 74 20 64 6f 75 62 6c 65 2d 63 68 65 63  that double-chec
15d90 6b 20 62 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  k by..        //
15da0 2f 20 73 65 74 74 69 6e 67 20 61 43 6f 6e 73 74  / setting aConst
15db0 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e 6f 6d 69  raintUsage[].omi
15dc0 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
15dd0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
15de0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
15df0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
15e00 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
15e10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
15e20 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
15e30 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
15e40 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
15e50 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
15e60 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
15e70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
15e80 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65 78 22  am name="pIndex"
15e90 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
15ea0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
15eb0 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
15ec0 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75  _index_info stru
15ed0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
15ee0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
15ef0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
15f00 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
15f10 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
15f20 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
15f30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
15f40 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
15f50 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15f60 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20   xBestIndex(..  
15f70 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
15f80 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
15f90 20 20 20 20 20 49 6e 74 50 74 72 20 70 49 6e 64       IntPtr pInd
15fa0 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
15fb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
15fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16000 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16010 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
16020 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
16030 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16040 54 68 69 73 20 6d 65 74 68 6f 64 20 72 65 6c 65  This method rele
16050 61 73 65 73 20 61 20 63 6f 6e 6e 65 63 74 69 6f  ases a connectio
16060 6e 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  n to a virtual t
16070 61 62 6c 65 2e 20 4f 6e 6c 79 20 74 68 65 0d 0a  able. Only the..
16080 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
16090 74 65 33 5f 76 74 61 62 20 6f 62 6a 65 63 74 20  te3_vtab object 
160a0 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 54 68  is destroyed. Th
160b0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
160c0 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  is not..        
160d0 2f 2f 2f 20 64 65 73 74 72 6f 79 65 64 20 61 6e  /// destroyed an
160e0 64 20 61 6e 79 20 62 61 63 6b 69 6e 67 20 73 74  d any backing st
160f0 6f 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ore associated w
16100 69 74 68 20 74 68 65 20 76 69 72 74 75 61 6c 20  ith the virtual 
16110 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
16120 2f 2f 20 70 65 72 73 69 73 74 73 2e 20 54 68 69  // persists. Thi
16130 73 20 6d 65 74 68 6f 64 20 75 6e 64 6f 65 73 20  s method undoes 
16140 74 68 65 20 77 6f 72 6b 20 6f 66 20 78 43 6f 6e  the work of xCon
16150 6e 65 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  nect...        /
16160 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
16170 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
16180 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
16190 20 6d 65 74 68 6f 64 20 69 73 20 61 20 64 65 73   method is a des
161a0 74 72 75 63 74 6f 72 20 66 6f 72 20 61 20 63 6f  tructor for a co
161b0 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20  nnection to the 
161c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
161d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 74          /// Cont
161e0 72 61 73 74 20 74 68 69 73 20 6d 65 74 68 6f 64  rast this method
161f0 20 77 69 74 68 20 78 44 65 73 74 72 6f 79 2e 20   with xDestroy. 
16200 54 68 65 20 78 44 65 73 74 72 6f 79 20 69 73 20  The xDestroy is 
16210 61 20 64 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  a destructor..  
16220 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 74 68        /// for th
16230 65 20 65 6e 74 69 72 65 20 76 69 72 74 75 61 6c  e entire virtual
16240 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
16250 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
16260 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
16270 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
16280 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65  e xDisconnect me
16290 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
162a0 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
162b0 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
162c0 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
162d0 74 69 6f 6e 2c 20 74 68 6f 75 67 68 20 69 74 20  tion, though it 
162e0 69 73 20 61 63 63 65 70 74 61 62 6c 65 20 66 6f  is acceptable fo
162f0 72 20 74 68 65 20 78 44 69 73 63 6f 6e 6e 65 63  r the xDisconnec
16300 74 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f  t and..        /
16310 2f 2f 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  // xDestroy meth
16320 6f 64 73 20 74 6f 20 62 65 20 74 68 65 20 73 61  ods to be the sa
16330 6d 65 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 74  me function if t
16340 68 61 74 20 6d 61 6b 65 73 20 73 65 6e 73 65 20  hat makes sense 
16350 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  for..        ///
16360 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
16370 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
16380 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
16390 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
163a0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
163b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
163c0 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
163d0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
163e0 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
163f0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
16400 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
16410 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
16420 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16430 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
16440 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
16450 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
16460 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
16470 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
16480 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
16490 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
164a0 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  Disconnect(..   
164b0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
164c0 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20  pVtab..         
164d0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
164e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
164f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16520 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16530 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
16540 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16550 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
16560 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 72  // This method r
16570 65 6c 65 61 73 65 73 20 61 20 63 6f 6e 6e 65 63  eleases a connec
16580 74 69 6f 6e 20 74 6f 20 61 20 76 69 72 74 75 61  tion to a virtua
16590 6c 20 74 61 62 6c 65 2c 20 6a 75 73 74 20 6c 69  l table, just li
165a0 6b 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ke the..        
165b0 2f 2f 2f 20 78 44 69 73 63 6f 6e 6e 65 63 74 20  /// xDisconnect 
165c0 6d 65 74 68 6f 64 2c 20 61 6e 64 20 69 74 20 61  method, and it a
165d0 6c 73 6f 20 64 65 73 74 72 6f 79 73 20 74 68 65  lso destroys the
165e0 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 61 62 6c   underlying tabl
165f0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
16600 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 54  mplementation. T
16610 68 69 73 20 6d 65 74 68 6f 64 20 75 6e 64 6f 65  his method undoe
16620 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 78 43  s the work of xC
16630 72 65 61 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  reate...        
16640 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
16650 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
16660 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
16670 20 78 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 74   xDisconnect met
16680 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 77 68  hod is called wh
16690 65 6e 65 76 65 72 20 61 20 64 61 74 61 62 61 73  enever a databas
166a0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  e connection..  
166b0 20 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 75        /// that u
166c0 73 65 73 20 61 20 76 69 72 74 75 61 6c 20 74 61  ses a virtual ta
166d0 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 54  ble is closed. T
166e0 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  he xDestroy meth
166f0 6f 64 20 69 73 20 6f 6e 6c 79 0d 0a 20 20 20 20  od is only..    
16700 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 20 77      /// called w
16710 68 65 6e 20 61 20 44 52 4f 50 20 54 41 42 4c 45  hen a DROP TABLE
16720 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
16730 65 63 75 74 65 64 20 61 67 61 69 6e 73 74 20 74  ecuted against t
16740 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20  he virtual..    
16750 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e 0d 0a      /// table...
16760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
16770 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
16780 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
16790 20 2f 2f 2f 20 54 68 65 20 78 44 65 73 74 72 6f   /// The xDestro
167a0 79 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  y method is requ
167b0 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
167c0 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
167d0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
167e0 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75 67 68  entation, though
167f0 20 69 74 20 69 73 20 61 63 63 65 70 74 61 62 6c   it is acceptabl
16800 65 20 66 6f 72 20 74 68 65 20 78 44 69 73 63 6f  e for the xDisco
16810 6e 6e 65 63 74 20 61 6e 64 0d 0a 20 20 20 20 20  nnect and..     
16820 20 20 20 2f 2f 2f 20 78 44 65 73 74 72 6f 79 20     /// xDestroy 
16830 6d 65 74 68 6f 64 73 20 74 6f 20 62 65 20 74 68  methods to be th
16840 65 20 73 61 6d 65 20 66 75 6e 63 74 69 6f 6e 20  e same function 
16850 69 66 20 74 68 61 74 20 6d 61 6b 65 73 20 73 65  if that makes se
16860 6e 73 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  nse for..       
16870 20 2f 2f 2f 20 74 68 65 20 70 61 72 74 69 63 75   /// the particu
16880 6c 61 72 20 76 69 72 74 75 61 6c 20 74 61 62 6c  lar virtual tabl
16890 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
168a0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
168b0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
168c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
168d0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
168e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
168f0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
16900 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
16910 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
16920 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
16930 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
16940 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
16950 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
16960 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
16970 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
16980 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16990 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
169a0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
169b0 64 65 20 78 44 65 73 74 72 6f 79 28 0d 0a 20 20  de xDestroy(..  
169c0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
169d0 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
169e0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
169f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
16a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
16a40 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
16a50 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
16a60 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
16a70 2f 2f 2f 20 54 68 65 20 78 4f 70 65 6e 20 6d 65  /// The xOpen me
16a80 74 68 6f 64 20 63 72 65 61 74 65 73 20 61 20 6e  thod creates a n
16a90 65 77 20 63 75 72 73 6f 72 20 75 73 65 64 20 66  ew cursor used f
16aa0 6f 72 20 61 63 63 65 73 73 69 6e 67 20 28 72 65  or accessing (re
16ab0 61 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ad..        /// 
16ac0 61 6e 64 2f 6f 72 20 77 72 69 74 69 6e 67 29 20  and/or writing) 
16ad0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
16ae0 20 41 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e   A successful in
16af0 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
16b00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
16b10 74 68 6f 64 20 77 69 6c 6c 20 61 6c 6c 6f 63 61  thod will alloca
16b20 74 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 66 6f  te the memory fo
16b30 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
16b40 61 62 5f 63 75 72 73 6f 72 20 28 6f 72 20 61 0d  ab_cursor (or a.
16b50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 62  .        /// sub
16b60 63 6c 61 73 73 29 2c 20 69 6e 69 74 69 61 6c 69  class), initiali
16b70 7a 65 20 74 68 65 20 6e 65 77 20 6f 62 6a 65 63  ze the new objec
16b80 74 2c 20 61 6e 64 20 6d 61 6b 65 20 2a 70 70 43  t, and make *ppC
16b90 75 72 73 6f 72 20 70 6f 69 6e 74 20 74 6f 0d 0a  ursor point to..
16ba0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
16bb0 6e 65 77 20 6f 62 6a 65 63 74 2e 20 54 68 65 20  new object. The 
16bc0 73 75 63 63 65 73 73 66 75 6c 20 63 61 6c 6c 20  successful call 
16bd0 74 68 65 6e 20 72 65 74 75 72 6e 73 20 53 51 4c  then returns SQL
16be0 49 54 45 5f 4f 4b 2e 0d 0a 20 20 20 20 20 20 20  ITE_OK...       
16bf0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
16c00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
16c10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 6f  ..        /// Fo
16c20 72 20 65 76 65 72 79 20 73 75 63 63 65 73 73 66  r every successf
16c30 75 6c 20 63 61 6c 6c 20 74 6f 20 74 68 69 73 20  ul call to this 
16c40 6d 65 74 68 6f 64 2c 20 74 68 65 20 53 51 4c 69  method, the SQLi
16c50 74 65 20 63 6f 72 65 20 77 69 6c 6c 0d 0a 20 20  te core will..  
16c60 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74 65 72 20        /// later 
16c70 69 6e 76 6f 6b 65 20 74 68 65 20 78 43 6c 6f 73  invoke the xClos
16c80 65 20 6d 65 74 68 6f 64 20 74 6f 20 64 65 73 74  e method to dest
16c90 72 6f 79 20 74 68 65 20 61 6c 6c 6f 63 61 74 65  roy the allocate
16ca0 64 20 63 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20  d cursor...     
16cb0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
16cc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
16cd0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16ce0 54 68 65 20 78 4f 70 65 6e 20 6d 65 74 68 6f 64  The xOpen method
16cf0 20 6e 65 65 64 20 6e 6f 74 20 69 6e 69 74 69 61   need not initia
16d00 6c 69 7a 65 20 74 68 65 20 70 56 74 61 62 20 66  lize the pVtab f
16d10 69 65 6c 64 20 6f 66 20 74 68 65 0d 0a 20 20 20  ield of the..   
16d20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
16d30 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 73 74 72  _vtab_cursor str
16d40 75 63 74 75 72 65 2e 20 54 68 65 20 53 51 4c 69  ucture. The SQLi
16d50 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 74 61 6b  te core will tak
16d60 65 20 63 61 72 65 20 6f 66 0d 0a 20 20 20 20 20  e care of..     
16d70 20 20 20 2f 2f 2f 20 74 68 61 74 20 63 68 6f 72     /// that chor
16d80 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  e automatically.
16d90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
16da0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
16db0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
16dc0 20 20 20 2f 2f 2f 20 41 20 76 69 72 74 75 61 6c     /// A virtual
16dd0 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
16de0 61 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 61 62  ation must be ab
16df0 6c 65 20 74 6f 20 73 75 70 70 6f 72 74 20 61 6e  le to support an
16e00 20 61 72 62 69 74 72 61 72 79 0d 0a 20 20 20 20   arbitrary..    
16e10 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72 20 6f      /// number o
16e20 66 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79  f simultaneously
16e30 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2e 0d 0a   open cursors...
16e40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
16e50 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
16e60 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
16e70 20 2f 2f 2f 20 57 68 65 6e 20 69 6e 69 74 69 61   /// When initia
16e80 6c 6c 79 20 6f 70 65 6e 65 64 2c 20 74 68 65 20  lly opened, the 
16e90 63 75 72 73 6f 72 20 69 73 20 69 6e 20 61 6e 20  cursor is in an 
16ea0 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e  undefined state.
16eb0 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   The..        //
16ec0 2f 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69  / SQLite core wi
16ed0 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46  ll invoke the xF
16ee0 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20  ilter method on 
16ef0 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72  the cursor prior
16f00 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
16f10 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20   any attempt to 
16f20 70 6f 73 69 74 69 6f 6e 20 6f 72 20 72 65 61 64  position or read
16f30 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73 6f 72   from the cursor
16f40 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16f50 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
16f60 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
16f70 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4f 70 65      /// The xOpe
16f80 6e 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  n method is requ
16f90 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
16fa0 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
16fb0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
16fc0 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
16fd0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
16fe0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
16ff0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
17000 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
17010 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
17020 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
17030 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
17040 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
17050 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
17060 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
17070 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
17080 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
17090 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
170a0 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
170b0 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
170c0 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
170d0 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f  fied to point to
170e0 20 74 68 65 20 6e 65 77 6c 79 0d 0a 20 20 20 20   the newly..    
170f0 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 65 64 20      /// created 
17100 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76  native sqlite3_v
17110 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76  tab_cursor deriv
17120 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
17130 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17140 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
17150 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
17160 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
17170 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
17180 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
17190 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
171a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
171b0 72 6f 72 43 6f 64 65 20 78 4f 70 65 6e 28 0d 0a  rorCode xOpen(..
171c0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
171d0 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
171e0 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
171f0 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
17200 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
17210 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
17220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
17260 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
17270 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
17280 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
17290 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6c 6f 73     /// The xClos
172a0 65 20 6d 65 74 68 6f 64 20 63 6c 6f 73 65 73 20  e method closes 
172b0 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75  a cursor previou
172c0 73 6c 79 20 6f 70 65 6e 65 64 20 62 79 20 78 4f  sly opened by xO
172d0 70 65 6e 2e 20 54 68 65 0d 0a 20 20 20 20 20 20  pen. The..      
172e0 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72    /// SQLite cor
172f0 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 63 61  e will always ca
17300 6c 6c 20 78 43 6c 6f 73 65 20 6f 6e 63 65 20 66  ll xClose once f
17310 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 6f  or each cursor o
17320 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  pened..        /
17330 2f 2f 20 75 73 69 6e 67 20 78 4f 70 65 6e 2e 0d  // using xOpen..
17340 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
17350 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
17360 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
17370 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
17380 64 20 6d 75 73 74 20 72 65 6c 65 61 73 65 20 61  d must release a
17390 6c 6c 20 72 65 73 6f 75 72 63 65 73 20 61 6c 6c  ll resources all
173a0 6f 63 61 74 65 64 20 62 79 20 74 68 65 0d 0a 20  ocated by the.. 
173b0 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72 72 65         /// corre
173c0 73 70 6f 6e 64 69 6e 67 20 78 4f 70 65 6e 20 63  sponding xOpen c
173d0 61 6c 6c 2e 20 54 68 65 20 72 6f 75 74 69 6e 65  all. The routine
173e0 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 63 61 6c   will not be cal
173f0 6c 65 64 20 61 67 61 69 6e 20 65 76 65 6e 0d 0a  led again even..
17400 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 66 20 69          /// if i
17410 74 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  t returns an err
17420 6f 72 2e 20 54 68 65 20 53 51 4c 69 74 65 20 63  or. The SQLite c
17430 6f 72 65 20 77 69 6c 6c 20 6e 6f 74 20 75 73 65  ore will not use
17440 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
17450 2f 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  / sqlite3_vtab_c
17460 75 72 73 6f 72 20 61 67 61 69 6e 20 61 66 74 65  ursor again afte
17470 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 63 6c  r it has been cl
17480 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  osed...        /
17490 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
174a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
174b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
174c0 78 43 6c 6f 73 65 20 6d 65 74 68 6f 64 20 69 73  xClose method is
174d0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76   required for ev
174e0 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ery virtual tabl
174f0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
17500 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a  mplementation...
17510 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
17520 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
17530 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
17540 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
17550 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
17560 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
17570 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
17580 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
17590 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76  tab_cursor deriv
175a0 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
175b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
175c0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
175d0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
175e0 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
175f0 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
17600 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
17610 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
17620 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
17630 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73 65 28 0d  rorCode xClose(.
17640 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
17650 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
17660 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
17670 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
176c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
176d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
176e0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
176f0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
17700 74 68 6f 64 20 62 65 67 69 6e 73 20 61 20 73 65  thod begins a se
17710 61 72 63 68 20 6f 66 20 61 20 76 69 72 74 75 61  arch of a virtua
17720 6c 20 74 61 62 6c 65 2e 20 54 68 65 20 66 69 72  l table. The fir
17730 73 74 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20  st argument..   
17740 20 20 20 20 20 2f 2f 2f 20 69 73 20 61 20 63 75       /// is a cu
17750 72 73 6f 72 20 6f 70 65 6e 65 64 20 62 79 20 78  rsor opened by x
17760 4f 70 65 6e 2e 20 54 68 65 20 6e 65 78 74 20 74  Open. The next t
17770 77 6f 20 61 72 67 75 6d 65 6e 74 20 64 65 66 69  wo argument defi
17780 6e 65 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ne a..        //
17790 2f 20 70 61 72 74 69 63 75 6c 61 72 20 73 65 61  / particular sea
177a0 72 63 68 20 69 6e 64 65 78 20 70 72 65 76 69 6f  rch index previo
177b0 75 73 6c 79 20 63 68 6f 73 65 6e 20 62 79 20 78  usly chosen by x
177c0 42 65 73 74 49 6e 64 65 78 2e 20 54 68 65 0d 0a  BestIndex. The..
177d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63          /// spec
177e0 69 66 69 63 20 6d 65 61 6e 69 6e 67 73 20 6f 66  ific meanings of
177f0 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64 78 53   idxNum and idxS
17800 74 72 20 61 72 65 20 75 6e 69 6d 70 6f 72 74 61  tr are unimporta
17810 6e 74 20 61 73 20 6c 6f 6e 67 20 61 73 0d 0a 20  nt as long as.. 
17820 20 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74         /// xFilt
17830 65 72 20 61 6e 64 20 78 42 65 73 74 49 6e 64 65  er and xBestInde
17840 78 20 61 67 72 65 65 20 6f 6e 20 77 68 61 74 20  x agree on what 
17850 74 68 61 74 20 6d 65 61 6e 69 6e 67 20 69 73 2e  that meaning is.
17860 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17870 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
17880 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
17890 20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65 73 74     /// The xBest
178a0 49 6e 64 65 78 20 66 75 6e 63 74 69 6f 6e 20 6d  Index function m
178b0 61 79 20 68 61 76 65 20 72 65 71 75 65 73 74 65  ay have requeste
178c0 64 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  d the values of 
178d0 63 65 72 74 61 69 6e 0d 0a 20 20 20 20 20 20 20  certain..       
178e0 20 2f 2f 2f 20 65 78 70 72 65 73 73 69 6f 6e 73   /// expressions
178f0 20 75 73 69 6e 67 20 74 68 65 20 61 43 6f 6e 73   using the aCons
17900 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e 61 72  traintUsage[].ar
17910 67 76 49 6e 64 65 78 20 76 61 6c 75 65 73 20 6f  gvIndex values o
17920 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
17930 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  // sqlite3_index
17940 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  _info structure.
17950 20 54 68 6f 73 65 20 76 61 6c 75 65 73 20 61 72   Those values ar
17960 65 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  e passed to xFil
17970 74 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ter..        ///
17980 20 75 73 69 6e 67 20 74 68 65 20 61 72 67 63 20   using the argc 
17990 61 6e 64 20 61 72 67 76 20 70 61 72 61 6d 65 74  and argv paramet
179a0 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ers...        //
179b0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
179c0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
179d0 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68         /// If th
179e0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
179f0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
17a00 6d 6f 72 65 20 72 6f 77 73 20 74 68 61 74 20 6d  more rows that m
17a10 61 74 63 68 20 74 68 65 0d 0a 20 20 20 20 20 20  atch the..      
17a20 20 20 2f 2f 2f 20 73 65 61 72 63 68 20 63 72 69    /// search cri
17a30 74 65 72 69 61 2c 20 74 68 65 6e 20 74 68 65 20  teria, then the 
17a40 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 6c  cursor must be l
17a50 65 66 74 20 70 6f 69 6e 74 20 61 74 20 74 68 65  eft point at the
17a60 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20   first..        
17a70 2f 2f 2f 20 72 6f 77 2e 20 53 75 62 73 65 71 75  /// row. Subsequ
17a80 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 78 45 6f  ent calls to xEo
17a90 66 20 6d 75 73 74 20 72 65 74 75 72 6e 20 66 61  f must return fa
17aa0 6c 73 65 20 28 7a 65 72 6f 29 2e 20 49 66 20 74  lse (zero). If t
17ab0 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  here..        //
17ac0 2f 20 61 72 65 20 6e 6f 20 72 6f 77 73 20 6d 61  / are no rows ma
17ad0 74 63 68 2c 20 74 68 65 6e 20 74 68 65 20 63 75  tch, then the cu
17ae0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 6c 65 66  rsor must be lef
17af0 74 20 69 6e 20 61 20 73 74 61 74 65 20 74 68 61  t in a state tha
17b00 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  t..        /// w
17b10 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20 78 45  ill cause the xE
17b20 6f 66 20 74 6f 20 72 65 74 75 72 6e 20 74 72 75  of to return tru
17b30 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 2e 20 54 68  e (non-zero). Th
17b40 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 0d  e SQLite engine.
17b50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 6c  .        /// wil
17b60 6c 20 75 73 65 20 74 68 65 20 78 43 6f 6c 75 6d  l use the xColum
17b70 6e 20 61 6e 64 20 78 52 6f 77 69 64 20 6d 65 74  n and xRowid met
17b80 68 6f 64 73 20 74 6f 20 61 63 63 65 73 73 20 74  hods to access t
17b90 68 61 74 20 72 6f 77 20 63 6f 6e 74 65 6e 74 2e  hat row content.
17ba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
17bb0 65 20 78 4e 65 78 74 20 6d 65 74 68 6f 64 20 77  e xNext method w
17bc0 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 61  ill be used to a
17bd0 64 76 61 6e 63 65 20 74 6f 20 74 68 65 20 6e 65  dvance to the ne
17be0 78 74 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20  xt row...       
17bf0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
17c00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
17c10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
17c20 69 73 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72  is method must r
17c30 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20  eturn SQLITE_OK 
17c40 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 6f  if successful, o
17c50 72 20 61 6e 20 73 71 6c 69 74 65 20 65 72 72 6f  r an sqlite erro
17c60 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  r..        /// c
17c70 6f 64 65 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ode if an error 
17c80 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20  occurs...       
17c90 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
17ca0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
17cb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
17cc0 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
17cd0 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
17ce0 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
17cf0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
17d00 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
17d10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17d20 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
17d30 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
17d40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
17d50 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
17d60 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
17d70 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
17d80 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
17d90 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65  3_vtab_cursor de
17da0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
17db0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17dc0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
17dd0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
17de0 22 69 64 78 4e 75 6d 22 3e 0d 0a 20 20 20 20 20  "idxNum">..     
17df0 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75 73     /// Number us
17e00 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74  ed to help ident
17e10 69 66 79 20 74 68 65 20 73 65 6c 65 63 74 65 64  ify the selected
17e20 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20   index...       
17e30 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17e40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
17e50 6d 20 6e 61 6d 65 3d 22 69 64 78 53 74 72 22 3e  m name="idxStr">
17e60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
17e70 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
17e80 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20 65 6e   to the UTF-8 en
17e90 63 6f 64 65 64 20 73 74 72 69 6e 67 20 63 6f 6e  coded string con
17ea0 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20  taining the..   
17eb0 20 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 20       /// string 
17ec0 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
17ed0 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
17ee0 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20  ed index...     
17ef0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
17f00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
17f10 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
17f20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
17f30 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 61 74 69  e number of nati
17f40 76 65 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 73  ve pointers to s
17f50 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 73 74 72  qlite3_value str
17f60 75 63 74 75 72 65 73 20 73 70 65 63 69 66 69 65  uctures specifie
17f70 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  d..        /// i
17f80 6e 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65  n <paramref name
17f90 3d 22 61 72 67 76 22 20 2f 3e 2e 0d 0a 20 20 20  ="argv" />...   
17fa0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
17fb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17fc0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76  param name="argv
17fd0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
17fe0 41 6e 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69  An array of nati
17ff0 76 65 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 73  ve pointers to s
18000 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 73 74 72  qlite3_value str
18010 75 63 74 75 72 65 73 20 63 6f 6e 74 61 69 6e 69  uctures containi
18020 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
18030 66 69 6c 74 65 72 69 6e 67 20 63 72 69 74 65 72  filtering criter
18040 69 61 20 66 6f 72 20 74 68 65 20 73 65 6c 65 63  ia for the selec
18050 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20  ted index...    
18060 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
18070 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
18080 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
18090 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
180a0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
180b0 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
180c0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
180d0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
180e0 43 6f 64 65 20 78 46 69 6c 74 65 72 28 0d 0a 20  Code xFilter(.. 
180f0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
18100 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20  r pCursor,..    
18110 20 20 20 20 20 20 20 20 69 6e 74 20 69 64 78 4e          int idxN
18120 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um,..           
18130 20 49 6e 74 50 74 72 20 69 64 78 53 74 72 2c 0d   IntPtr idxStr,.
18140 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
18150 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
18160 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 0d      IntPtr argv.
18170 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
18180 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
18190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
181e0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
181f0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
18200 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
18210 20 78 4e 65 78 74 20 6d 65 74 68 6f 64 20 61 64   xNext method ad
18220 76 61 6e 63 65 73 20 61 20 76 69 72 74 75 61 6c  vances a virtual
18230 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f   table cursor to
18240 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 6f 66   the next row of
18250 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 20  ..        /// a 
18260 72 65 73 75 6c 74 20 73 65 74 20 69 6e 69 74 69  result set initi
18270 61 74 65 64 20 62 79 20 78 46 69 6c 74 65 72 2e  ated by xFilter.
18280 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
18290 73 20 61 6c 72 65 61 64 79 0d 0a 20 20 20 20 20  s already..     
182a0 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 69 6e 67 20     /// pointing 
182b0 61 74 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20  at the last row 
182c0 77 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  when this routin
182d0 65 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65  e is called, the
182e0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
182f0 2f 2f 20 63 75 72 73 6f 72 20 6e 6f 20 6c 6f 6e  // cursor no lon
18300 67 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 76 61  ger points to va
18310 6c 69 64 20 64 61 74 61 20 61 6e 64 20 61 20 73  lid data and a s
18320 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20 74  ubsequent call t
18330 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
18340 2f 2f 20 78 45 6f 66 20 6d 65 74 68 6f 64 20 6d  // xEof method m
18350 75 73 74 20 72 65 74 75 72 6e 20 74 72 75 65 20  ust return true 
18360 28 6e 6f 6e 2d 7a 65 72 6f 29 2e 20 49 66 20 74  (non-zero). If t
18370 68 65 20 63 75 72 73 6f 72 20 69 73 0d 0a 20 20  he cursor is..  
18380 20 20 20 20 20 20 2f 2f 2f 20 73 75 63 63 65 73        /// succes
18390 73 66 75 6c 6c 79 20 61 64 76 61 6e 63 65 64 20  sfully advanced 
183a0 74 6f 20 61 6e 6f 74 68 65 72 20 72 6f 77 20 6f  to another row o
183b0 66 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65 6e 20  f content, then 
183c0 73 75 62 73 65 71 75 65 6e 74 0d 0a 20 20 20 20  subsequent..    
183d0 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 73 20 74 6f      /// calls to
183e0 20 78 45 6f 66 20 6d 75 73 74 20 72 65 74 75 72   xEof must retur
183f0 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f 29 2e 0d  n false (zero)..
18400 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
18410 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
18420 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
18430 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
18440 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20 53 51  d must return SQ
18450 4c 49 54 45 5f 4f 4b 20 69 66 20 73 75 63 63 65  LITE_OK if succe
18460 73 73 66 75 6c 2c 20 6f 72 20 61 6e 20 73 71 6c  ssful, or an sql
18470 69 74 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ite error..     
18480 20 20 20 2f 2f 2f 20 63 6f 64 65 20 69 66 20 61     /// code if a
18490 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2e 0d  n error occurs..
184a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
184b0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
184c0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
184d0 20 20 2f 2f 2f 20 54 68 65 20 78 4e 65 78 74 20    /// The xNext 
184e0 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72  method is requir
184f0 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72  ed for every vir
18500 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
18510 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e      /// implemen
18520 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  tation...       
18530 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
18540 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
18550 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
18560 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
18570 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
18580 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
18590 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
185a0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
185b0 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72 75  sor derived stru
185c0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
185d0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
185e0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
185f0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
18600 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
18610 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
18620 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
18630 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
18640 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18650 20 78 4e 65 78 74 28 0d 0a 20 20 20 20 20 20 20   xNext(..       
18660 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
18670 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
18680 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
18690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
186e0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
186f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
18700 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
18710 20 54 68 65 20 78 45 6f 66 20 6d 65 74 68 6f 64   The xEof method
18720 20 6d 75 73 74 20 72 65 74 75 72 6e 20 66 61 6c   must return fal
18730 73 65 20 28 7a 65 72 6f 29 20 69 66 20 74 68 65  se (zero) if the
18740 20 73 70 65 63 69 66 69 65 64 20 63 75 72 73 6f   specified curso
18750 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  r..        /// c
18760 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20  urrently points 
18770 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 6f  to a valid row o
18780 66 20 64 61 74 61 2c 20 6f 72 20 74 72 75 65 20  f data, or true 
18790 28 6e 6f 6e 2d 7a 65 72 6f 29 0d 0a 20 20 20 20  (non-zero)..    
187a0 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 77 69 73      /// otherwis
187b0 65 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  e. This method i
187c0 73 20 63 61 6c 6c 65 64 20 62 79 20 74 68 65 20  s called by the 
187d0 53 51 4c 20 65 6e 67 69 6e 65 20 69 6d 6d 65 64  SQL engine immed
187e0 69 61 74 65 6c 79 0d 0a 20 20 20 20 20 20 20 20  iately..        
187f0 2f 2f 2f 20 61 66 74 65 72 20 65 61 63 68 20 78  /// after each x
18800 46 69 6c 74 65 72 20 61 6e 64 20 78 4e 65 78 74  Filter and xNext
18810 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20   invocation...  
18820 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
18830 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18840 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18850 2f 2f 20 54 68 65 20 78 45 6f 66 20 6d 65 74 68  // The xEof meth
18860 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66  od is required f
18870 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c  or every virtual
18880 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
18890 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
188a0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
188b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
188c0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
188d0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
188e0 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
188f0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
18900 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
18910 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
18920 6f 72 20 64 65 72 69 76 65 64 20 73 74 72 75 63  or derived struc
18930 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
18940 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
18950 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
18960 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
18970 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 6e 6f 20 6d  Non-zero if no m
18980 6f 72 65 20 72 6f 77 73 20 61 72 65 20 61 76 61  ore rows are ava
18990 69 6c 61 62 6c 65 3b 20 7a 65 72 6f 20 6f 74 68  ilable; zero oth
189a0 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 20 20 20  erwise...       
189b0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
189c0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 78 45 6f  .        int xEo
189d0 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f(..            
189e0 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
189f0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
18a00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
18a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
18a60 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
18a70 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
18a80 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
18a90 53 51 4c 69 74 65 20 63 6f 72 65 20 69 6e 76 6f  SQLite core invo
18aa0 6b 65 73 20 74 68 69 73 20 6d 65 74 68 6f 64 20  kes this method 
18ab0 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 69 6e 64  in order to find
18ac0 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72 0d 0a   the value for..
18ad0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
18ae0 4e 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  N-th column of t
18af0 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20  he current row. 
18b00 4e 20 69 73 20 7a 65 72 6f 2d 62 61 73 65 64 20  N is zero-based 
18b10 73 6f 20 74 68 65 20 66 69 72 73 74 0d 0a 20 20  so the first..  
18b20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e        /// column
18b30 20 69 73 20 6e 75 6d 62 65 72 65 64 20 30 2e 20   is numbered 0. 
18b40 54 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68  The xColumn meth
18b50 6f 64 20 6d 61 79 20 72 65 74 75 72 6e 20 69 74  od may return it
18b60 73 20 72 65 73 75 6c 74 20 62 61 63 6b 0d 0a 20  s result back.. 
18b70 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 53 51         /// to SQ
18b80 4c 69 74 65 20 75 73 69 6e 67 20 6f 6e 65 20 6f  Lite using one o
18b90 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
18ba0 69 6e 74 65 72 66 61 63 65 3a 0d 0a 20 20 20 20  interface:..    
18bb0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
18bc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f  .        /// <co
18bd0 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
18be0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
18bf0 75 6c 74 5f 62 6c 6f 62 28 29 0d 0a 20 20 20 20  ult_blob()..    
18c00 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69      ///     sqli
18c10 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
18c20 65 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e()..        ///
18c30 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
18c40 75 6c 74 5f 69 6e 74 28 29 0d 0a 20 20 20 20 20  ult_int()..     
18c50 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74     ///     sqlit
18c60 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28  e3_result_int64(
18c70 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  )..        ///  
18c80 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
18c90 74 5f 6e 75 6c 6c 28 29 0d 0a 20 20 20 20 20 20  t_null()..      
18ca0 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65    ///     sqlite
18cb0 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 29 0d  3_result_text().
18cc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
18cd0 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
18ce0 74 65 78 74 31 36 28 29 0d 0a 20 20 20 20 20 20  text16()..      
18cf0 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65    ///     sqlite
18d00 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c  3_result_text16l
18d10 65 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e()..        ///
18d20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
18d30 75 6c 74 5f 74 65 78 74 31 36 62 65 28 29 0d 0a  ult_text16be()..
18d40 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
18d50 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a  sqlite3_result_z
18d60 65 72 6f 62 6c 6f 62 28 29 0d 0a 20 20 20 20 20  eroblob()..     
18d70 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a     /// </code>..
18d80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
18d90 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
18da0 49 66 20 74 68 65 20 78 43 6f 6c 75 6d 6e 20 6d  If the xColumn m
18db0 65 74 68 6f 64 20 69 6d 70 6c 65 6d 65 6e 74 61  ethod implementa
18dc0 74 69 6f 6e 20 63 61 6c 6c 73 20 6e 6f 6e 65 20  tion calls none 
18dd0 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
18de0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 62  ..        /// ab
18df0 6f 76 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ove, then the va
18e00 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  lue of the colum
18e10 6e 20 64 65 66 61 75 6c 74 73 20 74 6f 20 61 6e  n defaults to an
18e20 20 53 51 4c 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20   SQL NULL...    
18e30 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
18e40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
18e50 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
18e60 20 54 6f 20 72 61 69 73 65 20 61 6e 20 65 72 72   To raise an err
18e70 6f 72 2c 20 74 68 65 20 78 43 6f 6c 75 6d 6e 20  or, the xColumn 
18e80 6d 65 74 68 6f 64 20 73 68 6f 75 6c 64 20 75 73  method should us
18e90 65 20 6f 6e 65 20 6f 66 20 74 68 65 0d 0a 20 20  e one of the..  
18ea0 20 20 20 20 20 20 2f 2f 2f 20 72 65 73 75 6c 74        /// result
18eb0 5f 74 65 78 74 28 29 20 6d 65 74 68 6f 64 73 20  _text() methods 
18ec0 74 6f 20 73 65 74 20 74 68 65 20 65 72 72 6f 72  to set the error
18ed0 20 6d 65 73 73 61 67 65 20 74 65 78 74 2c 20 74   message text, t
18ee0 68 65 6e 20 72 65 74 75 72 6e 20 61 6e 0d 0a 20  hen return an.. 
18ef0 20 20 20 20 20 20 20 2f 2f 2f 20 61 70 70 72 6f         /// appro
18f00 70 72 69 61 74 65 20 65 72 72 6f 72 20 63 6f 64  priate error cod
18f10 65 2e 20 54 68 65 20 78 43 6f 6c 75 6d 6e 20 6d  e. The xColumn m
18f20 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72  ethod must retur
18f30 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 6f 6e 0d 0a  n SQLITE_OK on..
18f40 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 63 63          /// succ
18f50 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ess...        //
18f60 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
18f70 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
18f80 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
18f90 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 69 73  Column method is
18fa0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76   required for ev
18fb0 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ery virtual tabl
18fc0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
18fd0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a  mplementation...
18fe0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
18ff0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
19000 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
19010 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
19020 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
19030 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
19040 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
19050 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
19060 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76  tab_cursor deriv
19070 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
19080 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
19090 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
190a0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
190b0 6f 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20  ontext">..      
190c0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
190d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
190e0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
190f0 73 74 72 75 63 74 75 72 65 20 74 6f 20 62 65 20  structure to be 
19100 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  used..        //
19110 2f 20 66 6f 72 20 72 65 74 75 72 6e 69 6e 67 20  / for returning 
19120 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
19130 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 74 68  lumn value to th
19140 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20  e SQLite core.. 
19150 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61         /// libra
19160 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry...        ///
19170 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
19180 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
19190 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20 20  me="index">..   
191a0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 7a 65 72       /// The zer
191b0 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 63 6f  o-based index co
191c0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74  rresponding to t
191d0 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
191e0 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  ning the..      
191f0 20 20 2f 2f 2f 20 76 61 6c 75 65 20 74 6f 20 62    /// value to b
19200 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20  e returned...   
19210 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
19220 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
19230 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
19240 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
19250 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
19260 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
19270 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
19280 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
19290 72 43 6f 64 65 20 78 43 6f 6c 75 6d 6e 28 0d 0a  rCode xColumn(..
192a0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
192b0 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20  tr pCursor,..   
192c0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
192d0 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20  pContext,..     
192e0 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
192f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
19300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
19310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19350 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
19360 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
19370 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
19380 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
19390 73 75 63 63 65 73 73 66 75 6c 20 69 6e 76 6f 63  successful invoc
193a0 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6d 65  ation of this me
193b0 74 68 6f 64 20 77 69 6c 6c 20 63 61 75 73 65 20  thod will cause 
193c0 2a 70 52 6f 77 69 64 20 74 6f 20 62 65 0d 0a 20  *pRowid to be.. 
193d0 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 6c 6c 65         /// fille
193e0 64 20 77 69 74 68 20 74 68 65 20 72 6f 77 69 64  d with the rowid
193f0 20 6f 66 20 72 6f 77 20 74 68 61 74 20 74 68 65   of row that the
19400 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
19410 75 72 73 6f 72 20 70 43 75 72 20 69 73 0d 0a 20  ursor pCur is.. 
19420 20 20 20 20 20 20 20 2f 2f 2f 20 63 75 72 72 65         /// curre
19430 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 61 74  ntly pointing at
19440 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20 72 65  . This method re
19450 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 20  turns SQLITE_OK 
19460 6f 6e 20 73 75 63 63 65 73 73 2e 20 49 74 0d 0a  on success. It..
19470 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 74 75          /// retu
19480 72 6e 73 20 61 6e 20 61 70 70 72 6f 70 72 69 61  rns an appropria
19490 74 65 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 6e  te error code on
194a0 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
194b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
194c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
194d0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
194e0 54 68 65 20 78 52 6f 77 69 64 20 6d 65 74 68 6f  The xRowid metho
194f0 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  d is required fo
19500 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20  r every virtual 
19510 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
19520 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
19530 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
19540 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
19550 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
19560 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
19570 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
19580 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
19590 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
195a0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
195b0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
195c0 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
195d0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
195e0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
195f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
19600 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20  ="rowId">..     
19610 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
19620 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
19630 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
19640 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
19650 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20 20 20  the unique..    
19660 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20      /// integer 
19670 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72 20 66  row identifier f
19680 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  or the current r
19690 6f 77 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  ow for the speci
196a0 66 69 65 64 20 63 75 72 73 6f 72 2e 0d 0a 20 20  fied cursor...  
196b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
196c0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
196d0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
196e0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
196f0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
19700 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
19710 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
19720 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
19730 6f 72 43 6f 64 65 20 78 52 6f 77 49 64 28 0d 0a  orCode xRowId(..
19740 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
19750 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20  tr pCursor,..   
19760 20 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e           ref lon
19770 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20  g rowId..       
19780 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
19790 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
197a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
197b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
197c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
197d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
197e0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
197f0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
19800 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
19810 20 2f 2f 2f 20 41 6c 6c 20 63 68 61 6e 67 65 73   /// All changes
19820 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
19830 62 6c 65 20 61 72 65 20 6d 61 64 65 20 75 73 69  ble are made usi
19840 6e 67 20 74 68 65 20 78 55 70 64 61 74 65 20 6d  ng the xUpdate m
19850 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
19860 2f 2f 2f 20 54 68 69 73 20 6f 6e 65 20 6d 65 74  /// This one met
19870 68 6f 64 20 63 61 6e 20 62 65 20 75 73 65 64 20  hod can be used 
19880 74 6f 20 69 6e 73 65 72 74 2c 20 64 65 6c 65 74  to insert, delet
19890 65 2c 20 6f 72 20 75 70 64 61 74 65 2e 0d 0a 20  e, or update... 
198a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
198b0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
198c0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
198d0 2f 2f 2f 20 54 68 65 20 61 72 67 63 20 70 61 72  /// The argc par
198e0 61 6d 65 74 65 72 20 73 70 65 63 69 66 69 65 73  ameter specifies
198f0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
19900 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 61 72  ntries in the ar
19910 67 76 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  gv..        /// 
19920 61 72 72 61 79 2e 20 54 68 65 20 76 61 6c 75 65  array. The value
19930 20 6f 66 20 61 72 67 63 20 77 69 6c 6c 20 62 65   of argc will be
19940 20 31 20 66 6f 72 20 61 20 70 75 72 65 20 64 65   1 for a pure de
19950 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f  lete operation o
19960 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  r..        /// N
19970 2b 32 20 66 6f 72 20 61 6e 20 69 6e 73 65 72 74  +2 for an insert
19980 20 6f 72 20 72 65 70 6c 61 63 65 20 6f 72 20 75   or replace or u
19990 70 64 61 74 65 20 77 68 65 72 65 20 4e 20 69 73  pdate where N is
199a0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0d 0a   the number of..
199b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6c 75          /// colu
199c0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
199d0 2e 20 49 6e 20 74 68 65 20 70 72 65 76 69 6f 75  . In the previou
199e0 73 20 73 65 6e 74 65 6e 63 65 2c 20 4e 20 69 6e  s sentence, N in
199f0 63 6c 75 64 65 73 20 61 6e 79 0d 0a 20 20 20 20  cludes any..    
19a00 20 20 20 20 2f 2f 2f 20 68 69 64 64 65 6e 20 63      /// hidden c
19a10 6f 6c 75 6d 6e 73 2e 0d 0a 20 20 20 20 20 20 20  olumns...       
19a20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
19a30 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
19a40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 76  ..        /// Ev
19a50 65 72 79 20 61 72 67 76 20 65 6e 74 72 79 20 77  ery argv entry w
19a60 69 6c 6c 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e  ill have a non-N
19a70 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 43 20 62  ULL value in C b
19a80 75 74 20 6d 61 79 20 63 6f 6e 74 61 69 6e 0d 0a  ut may contain..
19a90 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
19aa0 53 51 4c 20 76 61 6c 75 65 20 4e 55 4c 4c 2e 20  SQL value NULL. 
19ab0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
19ac0 69 74 20 69 73 20 61 6c 77 61 79 73 20 74 72 75  it is always tru
19ad0 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20  e that..        
19ae0 2f 2f 2f 20 61 72 67 76 5b 69 5d 21 3d 30 20 66  /// argv[i]!=0 f
19af0 6f 72 20 69 20 62 65 74 77 65 65 6e 20 30 20 61  or i between 0 a
19b00 6e 64 20 61 72 67 63 2d 31 2e 20 48 6f 77 65 76  nd argc-1. Howev
19b10 65 72 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  er, it might be 
19b20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
19b30 20 63 61 73 65 20 74 68 61 74 20 73 71 6c 69 74   case that sqlit
19b40 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 61 72  e3_value_type(ar
19b50 67 76 5b 69 5d 29 3d 3d 53 51 4c 49 54 45 5f 4e  gv[i])==SQLITE_N
19b60 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ULL...        //
19b70 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
19b80 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
19b90 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61         /// The a
19ba0 72 67 76 5b 30 5d 20 70 61 72 61 6d 65 74 65 72  rgv[0] parameter
19bb0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
19bc0 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 76 69   a row in the vi
19bd0 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
19be0 20 20 20 20 20 2f 2f 2f 20 74 6f 20 62 65 20 64       /// to be d
19bf0 65 6c 65 74 65 64 2e 20 49 66 20 61 72 67 76 5b  eleted. If argv[
19c00 30 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e 55 4c  0] is an SQL NUL
19c10 4c 2c 20 74 68 65 6e 20 6e 6f 20 64 65 6c 65 74  L, then no delet
19c20 69 6f 6e 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20  ion occurs...   
19c30 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
19c40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
19c50 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
19c60 2f 20 54 68 65 20 61 72 67 76 5b 31 5d 20 70 61  / The argv[1] pa
19c70 72 61 6d 65 74 65 72 20 69 73 20 74 68 65 20 72  rameter is the r
19c80 6f 77 69 64 20 6f 66 20 61 20 6e 65 77 20 72 6f  owid of a new ro
19c90 77 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  w to be inserted
19ca0 20 69 6e 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f   into..        /
19cb0 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  // the virtual t
19cc0 61 62 6c 65 2e 20 49 66 20 61 72 67 76 5b 31 5d  able. If argv[1]
19cd0 20 69 73 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2c   is an SQL NULL,
19ce0 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 20   then the..     
19cf0 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74     /// implement
19d00 61 74 69 6f 6e 20 6d 75 73 74 20 63 68 6f 6f 73  ation must choos
19d10 65 20 61 20 72 6f 77 69 64 20 66 6f 72 20 74 68  e a rowid for th
19d20 65 20 6e 65 77 6c 79 20 69 6e 73 65 72 74 65 64  e newly inserted
19d30 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 2f   row...        /
19d40 2f 2f 20 53 75 62 73 65 71 75 65 6e 74 20 61 72  // Subsequent ar
19d50 67 76 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  gv[] entries con
19d60 74 61 69 6e 20 76 61 6c 75 65 73 20 6f 66 20 74  tain values of t
19d70 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
19d80 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
19d90 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20 69 6e  irtual table, in
19da0 20 74 68 65 20 6f 72 64 65 72 20 74 68 61 74 20   the order that 
19db0 74 68 65 20 63 6f 6c 75 6d 6e 73 20 77 65 72 65  the columns were
19dc0 20 64 65 63 6c 61 72 65 64 2e 20 54 68 65 0d 0a   declared. The..
19dd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62          /// numb
19de0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 77 69  er of columns wi
19df0 6c 6c 20 6d 61 74 63 68 20 74 68 65 20 74 61 62  ll match the tab
19e00 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  le declaration t
19e10 68 61 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20  hat the..       
19e20 20 2f 2f 2f 20 78 43 6f 6e 6e 65 63 74 20 6f 72   /// xConnect or
19e30 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20   xCreate method 
19e40 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 20 73  made using the s
19e50 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
19e60 74 61 62 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  tab()..        /
19e70 2f 2f 20 63 61 6c 6c 2e 20 41 6c 6c 20 68 69 64  // call. All hid
19e80 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  den columns are 
19e90 69 6e 63 6c 75 64 65 64 2e 0d 0a 20 20 20 20 20  included...     
19ea0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
19eb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
19ec0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
19ed0 57 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 69 6e  When doing an in
19ee0 73 65 72 74 20 77 69 74 68 6f 75 74 20 61 20 72  sert without a r
19ef0 6f 77 69 64 20 28 61 72 67 63 3e 31 2c 20 61 72  owid (argc>1, ar
19f00 67 76 5b 31 5d 20 69 73 20 61 6e 20 53 51 4c 0d  gv[1] is an SQL.
19f10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 55 4c  .        /// NUL
19f20 4c 29 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  L), the implemen
19f30 74 61 74 69 6f 6e 20 6d 75 73 74 20 73 65 74 20  tation must set 
19f40 2a 70 52 6f 77 69 64 20 74 6f 20 74 68 65 20 72  *pRowid to the r
19f50 6f 77 69 64 20 6f 66 20 74 68 65 0d 0a 20 20 20  owid of the..   
19f60 20 20 20 20 20 2f 2f 2f 20 6e 65 77 6c 79 20 69       /// newly i
19f70 6e 73 65 72 74 65 64 20 72 6f 77 3b 20 74 68 69  nserted row; thi
19f80 73 20 77 69 6c 6c 20 62 65 63 6f 6d 65 20 74 68  s will become th
19f90 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
19fa0 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20   by the..       
19fb0 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6c 61 73   /// sqlite3_las
19fc0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
19fd0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 74 74 69   function. Setti
19fe0 6e 67 20 74 68 69 73 20 76 61 6c 75 65 20 69 6e  ng this value in
19ff0 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20 20 20   all the..      
1a000 20 20 2f 2f 2f 20 6f 74 68 65 72 20 63 61 73 65    /// other case
1a010 73 20 69 73 20 61 20 68 61 72 6d 6c 65 73 73 20  s is a harmless 
1a020 6e 6f 2d 6f 70 3b 20 74 68 65 20 53 51 4c 69 74  no-op; the SQLit
1a030 65 20 65 6e 67 69 6e 65 20 69 67 6e 6f 72 65 73  e engine ignores
1a040 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1a050 2f 20 2a 70 52 6f 77 69 64 20 72 65 74 75 72 6e  / *pRowid return
1a060 20 76 61 6c 75 65 20 69 66 20 61 72 67 63 3d 3d   value if argc==
1a070 31 20 6f 72 20 61 72 67 76 5b 31 5d 20 69 73 20  1 or argv[1] is 
1a080 6e 6f 74 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e  not an SQL NULL.
1a090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1a0a0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1a0b0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1a0c0 20 20 20 2f 2f 2f 20 45 61 63 68 20 63 61 6c 6c     /// Each call
1a0d0 20 74 6f 20 78 55 70 64 61 74 65 20 77 69 6c 6c   to xUpdate will
1a0e0 20 66 61 6c 6c 20 69 6e 74 6f 20 6f 6e 65 20 6f   fall into one o
1a0f0 66 20 63 61 73 65 73 20 73 68 6f 77 6e 20 62 65  f cases shown be
1a100 6c 6f 77 2e 20 4e 6f 74 65 0d 0a 20 20 20 20 20  low. Note..     
1a110 20 20 20 2f 2f 2f 20 74 68 61 74 20 72 65 66 65     /// that refe
1a120 72 65 6e 63 65 73 20 74 6f 20 61 72 67 76 5b 69  rences to argv[i
1a130 5d 20 6d 65 61 6e 20 74 68 65 20 53 51 4c 20 76  ] mean the SQL v
1a140 61 6c 75 65 20 68 65 6c 64 20 77 69 74 68 69 6e  alue held within
1a150 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1a160 2f 20 61 72 67 76 5b 69 5d 20 6f 62 6a 65 63 74  / argv[i] object
1a170 2c 20 6e 6f 74 20 74 68 65 20 61 72 67 76 5b 69  , not the argv[i
1a180 5d 20 6f 62 6a 65 63 74 20 69 74 73 65 6c 66 2e  ] object itself.
1a190 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1a1a0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1a1b0 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20  // <code>..     
1a1c0 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63 20     ///     argc 
1a1d0 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  = 1..        ///
1a1e0 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20   </code>..      
1a1f0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1a200 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
1a210 20 20 54 68 65 20 73 69 6e 67 6c 65 20 72 6f 77    The single row
1a220 20 77 69 74 68 20 72 6f 77 69 64 20 65 71 75 61   with rowid equa
1a230 6c 20 74 6f 20 61 72 67 76 5b 30 5d 20 69 73 20  l to argv[0] is 
1a240 64 65 6c 65 74 65 64 2e 20 4e 6f 0d 0a 20 20 20  deleted. No..   
1a250 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
1a260 20 69 6e 73 65 72 74 20 6f 63 63 75 72 73 2e 0d   insert occurs..
1a270 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1a280 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1a290 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
1a2a0 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63 20 3e    ///     argc >
1a2b0 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   1..        /// 
1a2c0 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20 4e 55      argv[0] = NU
1a2d0 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  LL..        /// 
1a2e0 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20  </code>..       
1a2f0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1a300 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
1a310 20 41 20 6e 65 77 20 72 6f 77 20 69 73 20 69 6e   A new row is in
1a320 73 65 72 74 65 64 20 77 69 74 68 20 61 20 72 6f  serted with a ro
1a330 77 69 64 20 61 72 67 76 5b 31 5d 20 61 6e 64 20  wid argv[1] and 
1a340 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20  column..        
1a350 2f 2f 2f 20 20 20 20 20 20 20 20 20 76 61 6c 75  ///         valu
1a360 65 73 20 69 6e 20 61 72 67 76 5b 32 5d 20 61 6e  es in argv[2] an
1a370 64 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20 49 66 20  d following. If 
1a380 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20 53 51  argv[1] is an SQ
1a390 4c 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20  L NULL,..       
1a3a0 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 74 68 65   ///         the
1a3b0 20 61 20 6e 65 77 20 75 6e 69 71 75 65 20 72 6f   a new unique ro
1a3c0 77 69 64 20 69 73 20 67 65 6e 65 72 61 74 65 64  wid is generated
1a3d0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0d   automatically..
1a3e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1a3f0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1a400 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
1a410 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63 20 3e    ///     argc >
1a420 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   1..        /// 
1a430 20 20 20 20 61 72 67 76 5b 30 5d 20 3f 20 4e 55      argv[0] ? NU
1a440 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  LL..        /// 
1a450 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20 61 72      argv[0] = ar
1a460 67 76 5b 31 5d 0d 0a 20 20 20 20 20 20 20 20 2f  gv[1]..        /
1a470 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20  // </code>..    
1a480 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1a490 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
1a4a0 20 20 20 20 54 68 65 20 72 6f 77 20 77 69 74 68      The row with
1a4b0 20 72 6f 77 69 64 20 61 72 67 76 5b 30 5d 20 69   rowid argv[0] i
1a4c0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 6e  s updated with n
1a4d0 65 77 20 76 61 6c 75 65 73 20 69 6e 0d 0a 20 20  ew values in..  
1a4e0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
1a4f0 20 20 61 72 67 76 5b 32 5d 20 61 6e 64 20 66 6f    argv[2] and fo
1a500 6c 6c 6f 77 69 6e 67 20 70 61 72 61 6d 65 74 65  llowing paramete
1a510 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rs...        ///
1a520 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1a530 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20    /// <code>..  
1a540 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72        ///     ar
1a550 67 63 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20  gc > 1..        
1a560 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20  ///     argv[0] 
1a570 3f 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20  ? NULL..        
1a580 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20  ///     argv[0] 
1a590 3f 20 61 72 67 76 5b 31 5d 0d 0a 20 20 20 20 20  ? argv[1]..     
1a5a0 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a     /// </code>..
1a5b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1a5c0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1a5d0 20 20 20 20 20 20 20 20 54 68 65 20 72 6f 77 20          The row 
1a5e0 77 69 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b  with rowid argv[
1a5f0 30 5d 20 69 73 20 75 70 64 61 74 65 64 20 77 69  0] is updated wi
1a600 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b 31 5d  th rowid argv[1]
1a610 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
1a620 20 20 20 20 20 20 61 6e 64 20 6e 65 77 20 76 61        and new va
1a630 6c 75 65 73 20 69 6e 20 61 72 67 76 5b 32 5d 20  lues in argv[2] 
1a640 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61  and following pa
1a650 72 61 6d 65 74 65 72 73 2e 20 54 68 69 73 0d 0a  rameters. This..
1a660 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
1a670 20 20 20 20 77 69 6c 6c 20 6f 63 63 75 72 20 77      will occur w
1a680 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65  hen an SQL state
1a690 6d 65 6e 74 20 75 70 64 61 74 65 73 20 61 20 72  ment updates a r
1a6a0 6f 77 69 64 2c 20 61 73 20 69 6e 0d 0a 20 20 20  owid, as in..   
1a6b0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
1a6c0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 0d   the statement:.
1a6d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1a6e0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1a6f0 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
1a700 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 20    ///           
1a710 20 20 55 50 44 41 54 45 20 74 61 62 6c 65 20 53    UPDATE table S
1a720 45 54 20 72 6f 77 69 64 3d 72 6f 77 69 64 2b 31  ET rowid=rowid+1
1a730 20 57 48 45 52 45 20 2e 2e 2e 3b 0d 0a 20 20 20   WHERE ...;..   
1a740 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
1a750 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1a760 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1a770 2f 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  / The xUpdate me
1a780 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e  thod must return
1a790 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 61 6e   SQLITE_OK if an
1a7a0 64 20 6f 6e 6c 79 20 69 66 20 69 74 20 69 73 0d  d only if it is.
1a7b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 63  .        /// suc
1a7c0 63 65 73 73 66 75 6c 2e 20 49 66 20 61 20 66 61  cessful. If a fa
1a7d0 69 6c 75 72 65 20 6f 63 63 75 72 73 2c 20 74 68  ilure occurs, th
1a7e0 65 20 78 55 70 64 61 74 65 20 6d 75 73 74 20 72  e xUpdate must r
1a7f0 65 74 75 72 6e 20 61 6e 0d 0a 20 20 20 20 20 20  eturn an..      
1a800 20 20 2f 2f 2f 20 61 70 70 72 6f 70 72 69 61 74    /// appropriat
1a810 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 4f 6e  e error code. On
1a820 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20   a failure, the 
1a830 70 56 54 61 62 2d 3e 7a 45 72 72 4d 73 67 20 65  pVTab->zErrMsg e
1a840 6c 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  lement..        
1a850 2f 2f 2f 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c  /// may optional
1a860 6c 79 20 62 65 20 72 65 70 6c 61 63 65 64 20 77  ly be replaced w
1a870 69 74 68 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ith error messag
1a880 65 20 74 65 78 74 20 73 74 6f 72 65 64 20 69 6e  e text stored in
1a890 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20   memory..       
1a8a0 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 65 64 20 66   /// allocated f
1a8b0 72 6f 6d 20 53 51 4c 69 74 65 20 75 73 69 6e 67  rom SQLite using
1a8c0 20 66 75 6e 63 74 69 6f 6e 73 20 73 75 63 68 20   functions such 
1a8d0 61 73 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  as sqlite3_mprin
1a8e0 74 66 28 29 20 6f 72 0d 0a 20 20 20 20 20 20 20  tf() or..       
1a8f0 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61 6c   /// sqlite3_mal
1a900 6c 6f 63 28 29 2e 0d 0a 20 20 20 20 20 20 20 20  loc()...        
1a910 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
1a920 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1a930 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20  .        /// If 
1a940 74 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  the xUpdate meth
1a950 6f 64 20 76 69 6f 6c 61 74 65 73 20 73 6f 6d 65  od violates some
1a960 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66 20 74   constraint of t
1a970 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
1a980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 28 69  ..        /// (i
1a990 6e 63 6c 75 64 69 6e 67 2c 20 62 75 74 20 6e 6f  ncluding, but no
1a9a0 74 20 6c 69 6d 69 74 65 64 20 74 6f 2c 20 61 74  t limited to, at
1a9b0 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 74 6f 72  tempting to stor
1a9c0 65 20 61 20 76 61 6c 75 65 20 6f 66 20 74 68 65  e a value of the
1a9d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 72  ..        /// wr
1a9e0 6f 6e 67 20 64 61 74 61 74 79 70 65 2c 20 61 74  ong datatype, at
1a9f0 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 74 6f 72  tempting to stor
1aa00 65 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69  e a value that i
1aa10 73 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 0d 0a  s too large or..
1aa20 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 6f 20          /// too 
1aa30 73 6d 61 6c 6c 2c 20 6f 72 20 61 74 74 65 6d 70  small, or attemp
1aa40 74 69 6e 67 20 74 6f 20 63 68 61 6e 67 65 20 61  ting to change a
1aa50 20 72 65 61 64 2d 6f 6e 6c 79 20 76 61 6c 75 65   read-only value
1aa60 29 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20 20  ) then the..    
1aa70 20 20 20 20 2f 2f 2f 20 78 55 70 64 61 74 65 20      /// xUpdate 
1aa80 6d 75 73 74 20 66 61 69 6c 20 77 69 74 68 20 61  must fail with a
1aa90 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72  n appropriate er
1aaa0 72 6f 72 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  ror code...     
1aab0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1aac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1aad0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1aae0 54 68 65 72 65 20 6d 69 67 68 74 20 62 65 20 6f  There might be o
1aaf0 6e 65 20 6f 72 20 6d 6f 72 65 20 73 71 6c 69 74  ne or more sqlit
1ab00 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 6f  e3_vtab_cursor o
1ab10 62 6a 65 63 74 73 20 6f 70 65 6e 20 61 6e 64 20  bjects open and 
1ab20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  in..        /// 
1ab30 75 73 65 20 6f 6e 20 74 68 65 20 76 69 72 74 75  use on the virtu
1ab40 61 6c 20 74 61 62 6c 65 20 69 6e 73 74 61 6e 63  al table instanc
1ab50 65 20 61 6e 64 20 70 65 72 68 61 70 73 20 65 76  e and perhaps ev
1ab60 65 6e 20 6f 6e 20 74 68 65 20 72 6f 77 20 6f 66  en on the row of
1ab70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
1ab80 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
1ab90 77 68 65 6e 20 74 68 65 20 78 55 70 64 61 74 65  when the xUpdate
1aba0 20 6d 65 74 68 6f 64 20 69 73 20 69 6e 76 6f 6b   method is invok
1abb0 65 64 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20  ed. The..       
1abc0 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
1abd0 69 6f 6e 20 6f 66 20 78 55 70 64 61 74 65 20 6d  ion of xUpdate m
1abe0 75 73 74 20 62 65 20 70 72 65 70 61 72 65 64 20  ust be prepared 
1abf0 66 6f 72 20 61 74 74 65 6d 70 74 73 20 74 6f 20  for attempts to 
1ac00 64 65 6c 65 74 65 0d 0a 20 20 20 20 20 20 20 20  delete..        
1ac10 2f 2f 2f 20 6f 72 20 6d 6f 64 69 66 79 20 72 6f  /// or modify ro
1ac20 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ws of the table 
1ac30 6f 75 74 20 66 72 6f 6d 20 6f 74 68 65 72 20 65  out from other e
1ac40 78 69 73 74 69 6e 67 20 63 75 72 73 6f 72 73 2e  xisting cursors.
1ac50 20 49 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   If the..       
1ac60 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62   /// virtual tab
1ac70 6c 65 20 63 61 6e 6e 6f 74 20 61 63 63 6f 6d 6d  le cannot accomm
1ac80 6f 64 61 74 65 20 73 75 63 68 20 63 68 61 6e 67  odate such chang
1ac90 65 73 2c 20 74 68 65 20 78 55 70 64 61 74 65 20  es, the xUpdate 
1aca0 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20 20  method..        
1acb0 2f 2f 2f 20 6d 75 73 74 20 72 65 74 75 72 6e 20  /// must return 
1acc0 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 0d 0a  an error code...
1acd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1ace0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1acf0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1ad00 20 2f 2f 2f 20 54 68 65 20 78 55 70 64 61 74 65   /// The xUpdate
1ad10 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f   method is optio
1ad20 6e 61 6c 2e 20 49 66 20 74 68 65 20 78 55 70 64  nal. If the xUpd
1ad30 61 74 65 20 70 6f 69 6e 74 65 72 20 69 6e 20 74  ate pointer in t
1ad40 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1ad50 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 66  sqlite3_module f
1ad60 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  or a virtual tab
1ad70 6c 65 20 69 73 20 61 20 4e 55 4c 4c 20 70 6f 69  le is a NULL poi
1ad80 6e 74 65 72 2c 20 74 68 65 6e 20 74 68 65 0d 0a  nter, then the..
1ad90 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74          /// virt
1ada0 75 61 6c 20 74 61 62 6c 65 20 69 73 20 72 65 61  ual table is rea
1adb0 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20  d-only...       
1adc0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
1add0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1ade0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1adf0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
1ae00 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
1ae10 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
1ae20 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
1ae30 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
1ae40 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
1ae50 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1ae60 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1ae70 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
1ae80 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gc">..        //
1ae90 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
1aea0 6e 65 77 20 6f 72 20 6d 6f 64 69 66 69 65 64 20  new or modified 
1aeb0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 63 6f  column values co
1aec0 6e 74 61 69 6e 65 64 20 69 6e 0d 0a 20 20 20 20  ntained in..    
1aed0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 72 65      /// <paramre
1aee0 66 20 6e 61 6d 65 3d 22 61 72 67 76 22 20 2f 3e  f name="argv" />
1aef0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1af00 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1af10 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1af20 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20  ="argv">..      
1af30 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
1af40 6f 66 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  of native pointe
1af50 72 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 61  rs to sqlite3_va
1af60 6c 75 65 20 73 74 72 75 63 74 75 72 65 73 20 63  lue structures c
1af70 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20  ontaining..     
1af80 20 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77 20 6f     /// the new o
1af90 72 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c 75 6d  r modified colum
1afa0 6e 20 76 61 6c 75 65 73 2c 20 69 66 20 61 6e 79  n values, if any
1afb0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1afc0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1afd0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1afe0 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20  ="rowId">..     
1aff0 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
1b000 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
1b010 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
1b020 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
1b030 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20 20 20  the unique..    
1b040 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20      /// integer 
1b050 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72 20 66  row identifier f
1b060 6f 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  or the row that 
1b070 77 61 73 20 69 6e 73 65 72 74 65 64 2c 20 69 66  was inserted, if
1b080 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f   any...        /
1b090 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1b0a0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1b0b0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
1b0c0 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
1b0d0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
1b0e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
1b0f0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1b100 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1b110 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20  xUpdate(..      
1b120 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
1b130 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
1b140 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20   int argc,..    
1b150 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61          IntPtr a
1b160 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgv,..          
1b170 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64    ref long rowId
1b180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1b190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1b1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1b1f0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1b200 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
1b210 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1b220 69 73 20 6d 65 74 68 6f 64 20 62 65 67 69 6e 73  is method begins
1b230 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
1b240 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  n a virtual tabl
1b250 65 2e 20 54 68 69 73 20 69 73 20 6d 65 74 68 6f  e. This is metho
1b260 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  d..        /// i
1b270 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68 65 20  s optional. The 
1b280 78 42 65 67 69 6e 20 70 6f 69 6e 74 65 72 20 6f  xBegin pointer o
1b290 66 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  f sqlite3_module
1b2a0 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0d 0a 20   may be NULL... 
1b2b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1b2c0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1b2d0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1b2e0 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1b2f0 69 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  is always follow
1b300 65 64 20 62 79 20 6f 6e 65 20 63 61 6c 6c 20 74  ed by one call t
1b310 6f 20 65 69 74 68 65 72 20 74 68 65 20 78 43 6f  o either the xCo
1b320 6d 6d 69 74 20 6f 72 0d 0a 20 20 20 20 20 20 20  mmit or..       
1b330 20 2f 2f 2f 20 78 52 6f 6c 6c 62 61 63 6b 20 6d   /// xRollback m
1b340 65 74 68 6f 64 2e 20 56 69 72 74 75 61 6c 20 74  ethod. Virtual t
1b350 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  able transaction
1b360 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2c 20 73  s do not nest, s
1b370 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
1b380 2f 2f 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64  // xBegin method
1b390 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 69 6e 76   will not be inv
1b3a0 6f 6b 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 6f  oked more than o
1b3b0 6e 63 65 20 6f 6e 20 61 20 73 69 6e 67 6c 65 0d  nce on a single.
1b3c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72  .        /// vir
1b3d0 74 75 61 6c 20 74 61 62 6c 65 20 77 69 74 68 6f  tual table witho
1b3e0 75 74 20 61 6e 20 69 6e 74 65 72 76 65 6e 69 6e  ut an intervenin
1b3f0 67 20 63 61 6c 6c 20 74 6f 20 65 69 74 68 65 72  g call to either
1b400 20 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20 20 20   xCommit or..   
1b410 20 20 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c 62 61       /// xRollba
1b420 63 6b 2e 20 4d 75 6c 74 69 70 6c 65 20 63 61 6c  ck. Multiple cal
1b430 6c 73 20 74 6f 20 6f 74 68 65 72 20 6d 65 74 68  ls to other meth
1b440 6f 64 73 20 63 61 6e 20 61 6e 64 20 6c 69 6b 65  ods can and like
1b450 6c 79 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  ly will..       
1b460 20 2f 2f 2f 20 6f 63 63 75 72 20 69 6e 20 62 65   /// occur in be
1b470 74 77 65 65 6e 20 74 68 65 20 78 42 65 67 69 6e  tween the xBegin
1b480 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65 73 70   and the corresp
1b490 6f 6e 64 69 6e 67 20 78 43 6f 6d 6d 69 74 20 6f  onding xCommit o
1b4a0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  r..        /// x
1b4b0 52 6f 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20 20 20  Rollback...     
1b4c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1b4d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1b4e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1b4f0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1b500 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
1b510 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
1b520 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1b530 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
1b540 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
1b550 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1b560 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1b570 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1b580 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
1b590 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
1b5a0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
1b5b0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1b5c0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1b5d0 45 72 72 6f 72 43 6f 64 65 20 78 42 65 67 69 6e  ErrorCode xBegin
1b5e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
1b5f0 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
1b600 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1b610 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1b660 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1b670 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1b680 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1b690 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1b6a0 74 68 6f 64 20 73 69 67 6e 61 6c 73 20 74 68 65  thod signals the
1b6b0 20 73 74 61 72 74 20 6f 66 20 61 20 74 77 6f 2d   start of a two-
1b6c0 70 68 61 73 65 20 63 6f 6d 6d 69 74 20 6f 6e 20  phase commit on 
1b6d0 61 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20  a virtual..     
1b6e0 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e 20 54 68     /// table. Th
1b6f0 69 73 20 69 73 20 6d 65 74 68 6f 64 20 69 73 20  is is method is 
1b700 6f 70 74 69 6f 6e 61 6c 2e 20 54 68 65 20 78 53  optional. The xS
1b710 79 6e 63 20 70 6f 69 6e 74 65 72 20 6f 66 0d 0a  ync pointer of..
1b720 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
1b730 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20 62  te3_module may b
1b740 65 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20  e NULL...       
1b750 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
1b760 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
1b770 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1b780 69 73 20 6d 65 74 68 6f 64 20 69 73 20 6f 6e 6c  is method is onl
1b790 79 20 69 6e 76 6f 6b 65 64 20 61 66 74 65 72 20  y invoked after 
1b7a0 63 61 6c 6c 20 74 6f 20 74 68 65 20 78 42 65 67  call to the xBeg
1b7b0 69 6e 20 6d 65 74 68 6f 64 20 61 6e 64 0d 0a 20  in method and.. 
1b7c0 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 69 6f 72         /// prior
1b7d0 20 74 6f 20 61 6e 20 78 43 6f 6d 6d 69 74 20 6f   to an xCommit o
1b7e0 72 20 78 52 6f 6c 6c 62 61 63 6b 2e 20 49 6e 20  r xRollback. In 
1b7f0 6f 72 64 65 72 20 74 6f 20 69 6d 70 6c 65 6d 65  order to impleme
1b800 6e 74 20 74 77 6f 2d 70 68 61 73 65 0d 0a 20 20  nt two-phase..  
1b810 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 6d 69 74        /// commit
1b820 2c 20 74 68 65 20 78 53 79 6e 63 20 6d 65 74 68  , the xSync meth
1b830 6f 64 20 6f 6e 20 61 6c 6c 20 76 69 72 74 75 61  od on all virtua
1b840 6c 20 74 61 62 6c 65 73 20 69 73 20 69 6e 76 6f  l tables is invo
1b850 6b 65 64 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20  ked prior to..  
1b860 20 20 20 20 20 20 2f 2f 2f 20 69 6e 76 6f 6b 69        /// invoki
1b870 6e 67 20 74 68 65 20 78 43 6f 6d 6d 69 74 20 6d  ng the xCommit m
1b880 65 74 68 6f 64 20 6f 6e 20 61 6e 79 20 76 69 72  ethod on any vir
1b890 74 75 61 6c 20 74 61 62 6c 65 2e 20 49 66 20 61  tual table. If a
1b8a0 6e 79 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  ny of the..     
1b8b0 20 20 20 2f 2f 2f 20 78 53 79 6e 63 20 6d 65 74     /// xSync met
1b8c0 68 6f 64 73 20 66 61 69 6c 2c 20 74 68 65 20 65  hods fail, the e
1b8d0 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f  ntire transactio
1b8e0 6e 20 69 73 20 72 6f 6c 6c 65 64 20 62 61 63 6b  n is rolled back
1b8f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1b900 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1b910 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1b920 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1b930 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
1b940 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1b950 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
1b960 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
1b970 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
1b980 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
1b990 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1b9a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1b9b0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1b9c0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1b9d0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1b9e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b9f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1ba00 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1ba10 65 20 78 53 79 6e 63 28 0d 0a 20 20 20 20 20 20  e xSync(..      
1ba20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
1ba30 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
1ba40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1ba50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1baa0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1bab0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1bac0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1bad0 54 68 69 73 20 6d 65 74 68 6f 64 20 63 61 75 73  This method caus
1bae0 65 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  es a virtual tab
1baf0 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  le transaction t
1bb00 6f 20 63 6f 6d 6d 69 74 2e 20 54 68 69 73 20 69  o commit. This i
1bb10 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  s..        /// m
1bb20 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f 6e 61  ethod is optiona
1bb30 6c 2e 20 54 68 65 20 78 43 6f 6d 6d 69 74 20 70  l. The xCommit p
1bb40 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ointer of sqlite
1bb50 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20 62 65 0d  3_module may be.
1bb60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 55 4c  .        /// NUL
1bb70 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  L...        /// 
1bb80 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1bb90 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1bba0 20 20 20 20 20 2f 2f 2f 20 41 20 63 61 6c 6c 20       /// A call 
1bbb0 74 6f 20 74 68 69 73 20 6d 65 74 68 6f 64 20 61  to this method a
1bbc0 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 20  lways follows a 
1bbd0 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 78 42  prior call to xB
1bbe0 65 67 69 6e 20 61 6e 64 0d 0a 20 20 20 20 20 20  egin and..      
1bbf0 20 20 2f 2f 2f 20 78 53 79 6e 63 2e 0d 0a 20 20    /// xSync...  
1bc00 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1bc10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1bc20 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1bc30 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1bc40 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
1bc50 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
1bc60 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
1bc70 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
1bc80 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
1bc90 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1bca0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1bcb0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1bcc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1bcd0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1bce0 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1bcf0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1bd00 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1bd10 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f  iteErrorCode xCo
1bd20 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  mmit(..         
1bd30 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
1bd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1bd50 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1bd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bda0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1bdb0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1bdc0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1bdd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
1bde0 73 20 6d 65 74 68 6f 64 20 63 61 75 73 65 73 20  s method causes 
1bdf0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
1be00 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 72  transaction to r
1be10 6f 6c 6c 62 61 63 6b 2e 20 54 68 69 73 20 69 73  ollback. This is
1be20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
1be30 74 68 6f 64 20 69 73 20 6f 70 74 69 6f 6e 61 6c  thod is optional
1be40 2e 20 54 68 65 20 78 52 6f 6c 6c 62 61 63 6b 20  . The xRollback 
1be50 70 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c 69 74  pointer of sqlit
1be60 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20 62 65  e3_module may be
1be70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 55  ..        /// NU
1be80 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  LL...        ///
1be90 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1bea0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1beb0 20 20 20 20 20 20 2f 2f 2f 20 41 20 63 61 6c 6c        /// A call
1bec0 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f 64 20   to this method 
1bed0 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61  always follows a
1bee0 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 78   prior call to x
1bef0 42 65 67 69 6e 2e 0d 0a 20 20 20 20 20 20 20 20  Begin...        
1bf00 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
1bf10 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
1bf20 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1bf30 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
1bf40 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tab">..        /
1bf50 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
1bf60 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
1bf70 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
1bf80 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
1bf90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1bfa0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1bfb0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1bfc0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1bfd0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1bfe0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1bff0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1c000 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1c010 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b  orCode xRollback
1c020 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
1c030 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
1c040 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1c050 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1c060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1c0a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1c0b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1c0c0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1c0d0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1c0e0 74 68 6f 64 20 70 72 6f 76 69 64 65 73 20 6e 6f  thod provides no
1c0f0 74 69 66 69 63 61 74 69 6f 6e 20 74 68 61 74 20  tification that 
1c100 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1c110 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
1c120 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68  mplementation th
1c130 61 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  at the virtual t
1c140 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 67 69 76  able will be giv
1c150 65 6e 20 61 20 6e 65 77 20 6e 61 6d 65 2e 20 49  en a new name. I
1c160 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  f..        /// t
1c170 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72  his method retur
1c180 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 20 74 68 65  ns SQLITE_OK the
1c190 6e 20 53 51 4c 69 74 65 20 72 65 6e 61 6d 65 73  n SQLite renames
1c1a0 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 0d 0a   the table. If..
1c1b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73          /// this
1c1c0 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e 73 20   method returns 
1c1d0 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 74 68  an error code th
1c1e0 65 6e 20 74 68 65 20 72 65 6e 61 6d 69 6e 67 20  en the renaming 
1c1f0 69 73 20 70 72 65 76 65 6e 74 65 64 2e 0d 0a 20  is prevented... 
1c200 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1c210 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1c220 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1c230 2f 2f 2f 20 54 68 65 20 78 52 65 6e 61 6d 65 20  /// The xRename 
1c240 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72  method is requir
1c250 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72  ed for every vir
1c260 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
1c270 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e      /// implemen
1c280 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  tation...       
1c290 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
1c2a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1c2b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1c2c0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
1c2d0 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
1c2e0 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
1c2f0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
1c300 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
1c310 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
1c320 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1c330 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1c340 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 41   <param name="nA
1c350 72 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rg">..        //
1c360 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
1c370 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
1c380 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
1c390 73 6f 75 67 68 74 2e 0d 0a 20 20 20 20 20 20 20  sought...       
1c3a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1c3b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1c3c0 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d 65 22 3e 0d  m name="zName">.
1c3d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1c3e0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
1c3f0 63 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f 75 67  ction being soug
1c400 68 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ht...        ///
1c410 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1c420 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1c430 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22 3e 0d 0a  me="callback">..
1c440 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
1c450 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70   success, this p
1c460 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65  arameter must be
1c470 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e   modified to con
1c480 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  tain the..      
1c490 20 20 2f 2f 2f 20 64 65 6c 65 67 61 74 65 20 72    /// delegate r
1c4a0 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 69  esponsible for i
1c4b0 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20  mplementing the 
1c4c0 73 70 65 63 69 66 69 65 64 20 66 75 6e 63 74 69  specified functi
1c4d0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
1c4e0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1c4f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1c500 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74 61 22  me="pClientData"
1c510 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
1c520 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
1c530 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
1c540 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
1c550 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20  contain the..   
1c560 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20       /// native 
1c570 75 73 65 72 2d 64 61 74 61 20 70 6f 69 6e 74 65  user-data pointe
1c580 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
1c590 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  h..        /// <
1c5a0 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 63  paramref name="c
1c5b0 61 6c 6c 62 61 63 6b 22 20 2f 3e 2e 0d 0a 20 20  allback" />...  
1c5c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1c5d0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1c5e0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1c5f0 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
1c600 69 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  if the specified
1c610 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 66 6f   function was fo
1c620 75 6e 64 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77  und; zero otherw
1c630 69 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ise...        //
1c640 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
1c650 20 20 20 20 20 20 69 6e 74 20 78 46 69 6e 64 46        int xFindF
1c660 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
1c670 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
1c680 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
1c690 20 69 6e 74 20 6e 41 72 67 2c 0d 0a 20 20 20 20   int nArg,..    
1c6a0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a          IntPtr z
1c6b0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1c6c0 20 20 20 72 65 66 20 53 51 4c 69 74 65 43 61 6c     ref SQLiteCal
1c6d0 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
1c6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1c6f0 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44   IntPtr pClientD
1c700 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
1c710 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
1c720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c760 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1c770 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1c780 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1c790 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1c7a0 20 54 68 69 73 20 6d 65 74 68 6f 64 20 70 72 6f   This method pro
1c7b0 76 69 64 65 73 20 6e 6f 74 69 66 69 63 61 74 69  vides notificati
1c7c0 6f 6e 20 74 68 61 74 20 74 68 65 20 76 69 72 74  on that the virt
1c7d0 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ual table..     
1c7e0 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74     /// implement
1c7f0 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 76  ation that the v
1c800 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 69 6c  irtual table wil
1c810 6c 20 62 65 20 67 69 76 65 6e 20 61 20 6e 65 77  l be given a new
1c820 20 6e 61 6d 65 2e 20 49 66 0d 0a 20 20 20 20 20   name. If..     
1c830 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74 68     /// this meth
1c840 6f 64 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  od returns SQLIT
1c850 45 5f 4f 4b 20 74 68 65 6e 20 53 51 4c 69 74 65  E_OK then SQLite
1c860 20 72 65 6e 61 6d 65 73 20 74 68 65 20 74 61 62   renames the tab
1c870 6c 65 2e 20 49 66 0d 0a 20 20 20 20 20 20 20 20  le. If..        
1c880 2f 2f 2f 20 74 68 69 73 20 6d 65 74 68 6f 64 20  /// this method 
1c890 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
1c8a0 20 63 6f 64 65 20 74 68 65 6e 20 74 68 65 20 72   code then the r
1c8b0 65 6e 61 6d 69 6e 67 20 69 73 20 70 72 65 76 65  enaming is preve
1c8c0 6e 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  nted...        /
1c8d0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1c8e0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1c8f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1c900 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 20 69  xRename method i
1c910 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
1c920 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62  very virtual tab
1c930 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
1c940 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
1c950 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1c960 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1c970 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1c980 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1c990 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
1c9a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1c9b0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1c9c0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
1c9d0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
1c9e0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
1c9f0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1ca00 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1ca10 6e 61 6d 65 3d 22 7a 4e 65 77 22 3e 0d 0a 20 20  name="zNew">..  
1ca20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
1ca30 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
1ca40 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  the UTF-8 encode
1ca50 64 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  d string contain
1ca60 69 6e 67 20 74 68 65 20 6e 65 77 0d 0a 20 20 20  ing the new..   
1ca70 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 66 6f       /// name fo
1ca80 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  r the virtual ta
1ca90 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
1caa0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1cab0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1cac0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1cad0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1cae0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1caf0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1cb00 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1cb10 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
1cb20 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  Rename(..       
1cb30 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
1cb40 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
1cb50 49 6e 74 50 74 72 20 7a 4e 65 77 0d 0a 20 20 20  IntPtr zNew..   
1cb60 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1cb70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1cb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1cbc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1cbd0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1cbe0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1cbf0 20 20 20 20 20 2f 2f 2f 20 54 68 65 73 65 20 6d       /// These m
1cc00 65 74 68 6f 64 73 20 70 72 6f 76 69 64 65 20 74  ethods provide t
1cc10 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
1cc20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1cc30 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  an..        /// 
1cc40 6f 70 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 69  opportunity to i
1cc50 6d 70 6c 65 6d 65 6e 74 20 6e 65 73 74 65 64 20  mplement nested 
1cc60 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 54 68  transactions. Th
1cc70 65 79 20 61 72 65 20 61 6c 77 61 79 73 0d 0a 20  ey are always.. 
1cc80 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f         /// optio
1cc90 6e 61 6c 20 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c  nal and will onl
1cca0 79 20 62 65 20 63 61 6c 6c 65 64 20 69 6e 20 53  y be called in S
1ccb0 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1ccc0 37 2e 37 20 61 6e 64 20 6c 61 74 65 72 2e 0d 0a  7.7 and later...
1ccd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1cce0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1ccf0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1cd00 20 2f 2f 2f 20 57 68 65 6e 20 78 53 61 76 65 70   /// When xSavep
1cd10 6f 69 6e 74 28 58 2c 4e 29 20 69 73 20 69 6e 76  oint(X,N) is inv
1cd20 6f 6b 65 64 2c 20 74 68 61 74 20 69 73 20 61 20  oked, that is a 
1cd30 73 69 67 6e 61 6c 20 74 6f 20 74 68 65 20 76 69  signal to the vi
1cd40 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f  rtual..        /
1cd50 2f 2f 20 74 61 62 6c 65 20 58 20 74 68 61 74 20  // table X that 
1cd60 69 74 20 73 68 6f 75 6c 64 20 73 61 76 65 20 69  it should save i
1cd70 74 73 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  ts current state
1cd80 20 61 73 20 73 61 76 65 70 6f 69 6e 74 20 4e 2e   as savepoint N.
1cd90 20 41 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   A..        /// 
1cda0 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20  subsequent call 
1cdb0 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58  to xRollbackTo(X
1cdc0 2c 52 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ,R) means that t
1cdd0 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 0d  he state of the.
1cde0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72  .        /// vir
1cdf0 74 75 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c  tual table shoul
1ce00 64 20 72 65 74 75 72 6e 20 74 6f 20 77 68 61 74  d return to what
1ce10 20 69 74 20 77 61 73 20 77 68 65 6e 20 78 53 61   it was when xSa
1ce20 76 65 70 6f 69 6e 74 28 58 2c 52 29 20 77 61 73  vepoint(X,R) was
1ce30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61  ..        /// la
1ce40 73 74 20 63 61 6c 6c 65 64 2e 20 54 68 65 20 63  st called. The c
1ce50 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  all to xRollback
1ce60 54 6f 28 58 2c 52 29 20 77 69 6c 6c 20 69 6e 76  To(X,R) will inv
1ce70 61 6c 69 64 61 74 65 20 61 6c 6c 0d 0a 20 20 20  alidate all..   
1ce80 20 20 20 20 20 2f 2f 2f 20 73 61 76 65 70 6f 69       /// savepoi
1ce90 6e 74 73 20 77 69 74 68 20 4e 3e 52 3b 20 6e 6f  nts with N>R; no
1cea0 6e 65 20 6f 66 20 74 68 65 20 69 6e 76 61 6c 69  ne of the invali
1ceb0 64 65 64 20 73 61 76 65 70 6f 69 6e 74 73 20 77  ded savepoints w
1cec0 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
1ced0 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20  /// rolled back 
1cee0 6f 72 20 72 65 6c 65 61 73 65 64 20 77 69 74 68  or released with
1cef0 6f 75 74 20 66 69 72 73 74 20 62 65 69 6e 67 20  out first being 
1cf00 72 65 69 6e 69 74 69 61 6c 69 7a 65 64 20 62 79  reinitialized by
1cf10 20 61 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20   a call..       
1cf20 20 2f 2f 2f 20 74 6f 20 78 53 61 76 65 70 6f 69   /// to xSavepoi
1cf30 6e 74 28 29 2e 20 41 20 63 61 6c 6c 20 74 6f 20  nt(). A call to 
1cf40 78 52 65 6c 65 61 73 65 28 58 2c 4d 29 20 69 6e  xRelease(X,M) in
1cf50 76 61 6c 69 64 61 74 65 73 20 61 6c 6c 20 73 61  validates all sa
1cf60 76 65 70 6f 69 6e 74 73 0d 0a 20 20 20 20 20 20  vepoints..      
1cf70 20 20 2f 2f 2f 20 77 68 65 72 65 20 4e 3e 3d 4d    /// where N>=M
1cf80 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1cf90 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1cfa0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
1cfb0 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20      /// None of 
1cfc0 74 68 65 20 78 53 61 76 65 70 6f 69 6e 74 28 29  the xSavepoint()
1cfd0 2c 20 78 52 65 6c 65 61 73 65 28 29 2c 20 6f 72  , xRelease(), or
1cfe0 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 29 20 6d   xRollbackTo() m
1cff0 65 74 68 6f 64 73 20 77 69 6c 6c 0d 0a 20 20 20  ethods will..   
1d000 20 20 20 20 20 2f 2f 2f 20 65 76 65 72 20 62 65       /// ever be
1d010 20 63 61 6c 6c 65 64 20 65 78 63 65 70 74 20 69   called except i
1d020 6e 20 62 65 74 77 65 65 6e 20 63 61 6c 6c 73 20  n between calls 
1d030 74 6f 20 78 42 65 67 69 6e 28 29 20 61 6e 64 20  to xBegin() and 
1d040 65 69 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20  either..        
1d050 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28 29 20 6f 72  /// xCommit() or
1d060 20 78 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20   xRollback()... 
1d070 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1d080 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1d090 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1d0a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1d0b0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
1d0c0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
1d0d0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
1d0e0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
1d0f0 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
1d100 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
1d110 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1d120 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1d130 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e  me="iSavepoint">
1d140 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1d150 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  is is an integer
1d160 20 69 64 65 6e 74 69 66 69 65 72 20 75 6e 64 65   identifier unde
1d170 72 20 77 68 69 63 68 20 74 68 65 20 74 68 65 20  r which the the 
1d180 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66  current state of
1d190 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
1d1a0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
1d1b0 73 68 6f 75 6c 64 20 62 65 20 73 61 76 65 64 2e  should be saved.
1d1c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d1d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1d1e0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1d1f0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1d200 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1d210 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1d220 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1d230 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1d240 65 45 72 72 6f 72 43 6f 64 65 20 78 53 61 76 65  eErrorCode xSave
1d250 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  point(..        
1d260 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
1d270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
1d280 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20  nt iSavepoint.. 
1d290 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1d2a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1d2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1d300 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1d310 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1d320 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 73 65         /// These
1d330 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69 64 65   methods provide
1d340 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
1d350 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
1d360 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n an..        //
1d370 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79 20 74 6f  / opportunity to
1d380 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65 73 74 65   implement neste
1d390 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  d transactions. 
1d3a0 54 68 65 79 20 61 72 65 20 61 6c 77 61 79 73 0d  They are always.
1d3b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 74  .        /// opt
1d3c0 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c 6c 20 6f  ional and will o
1d3d0 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20 69 6e  nly be called in
1d3e0 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
1d3f0 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74 65 72 2e  3.7.7 and later.
1d400 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d410 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1d420 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1d430 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78 53 61 76     /// When xSav
1d440 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69 73 20 69  epoint(X,N) is i
1d450 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20 69 73 20  nvoked, that is 
1d460 61 20 73 69 67 6e 61 6c 20 74 6f 20 74 68 65 20  a signal to the 
1d470 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20  virtual..       
1d480 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20 74 68 61   /// table X tha
1d490 74 20 69 74 20 73 68 6f 75 6c 64 20 73 61 76 65  t it should save
1d4a0 20 69 74 73 20 63 75 72 72 65 6e 74 20 73 74 61   its current sta
1d4b0 74 65 20 61 73 20 73 61 76 65 70 6f 69 6e 74 20  te as savepoint 
1d4c0 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20 20 2f 2f  N. A..        //
1d4d0 2f 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  / subsequent cal
1d4e0 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  l to xRollbackTo
1d4f0 28 58 2c 52 29 20 6d 65 61 6e 73 20 74 68 61 74  (X,R) means that
1d500 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
1d510 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
1d520 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 68 6f  irtual table sho
1d530 75 6c 64 20 72 65 74 75 72 6e 20 74 6f 20 77 68  uld return to wh
1d540 61 74 20 69 74 20 77 61 73 20 77 68 65 6e 20 78  at it was when x
1d550 53 61 76 65 70 6f 69 6e 74 28 58 2c 52 29 20 77  Savepoint(X,R) w
1d560 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  as..        /// 
1d570 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20 54 68 65  last called. The
1d580 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61   call to xRollba
1d590 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c 6c 20 69  ckTo(X,R) will i
1d5a0 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 0d 0a 20  nvalidate all.. 
1d5b0 20 20 20 20 20 20 20 2f 2f 2f 20 73 61 76 65 70         /// savep
1d5c0 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e 52 3b 20  oints with N>R; 
1d5d0 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 76 61  none of the inva
1d5e0 6c 69 64 65 64 20 73 61 76 65 70 6f 69 6e 74 73  lided savepoints
1d5f0 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..      
1d600 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62 61 63    /// rolled bac
1d610 6b 20 6f 72 20 72 65 6c 65 61 73 65 64 20 77 69  k or released wi
1d620 74 68 6f 75 74 20 66 69 72 73 74 20 62 65 69 6e  thout first bein
1d630 67 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 64 20  g reinitialized 
1d640 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20 20 20 20  by a call..     
1d650 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61 76 65 70     /// to xSavep
1d660 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c 6c 20 74  oint(). A call t
1d670 6f 20 78 52 65 6c 65 61 73 65 28 58 2c 4d 29 20  o xRelease(X,M) 
1d680 69 6e 76 61 6c 69 64 61 74 65 73 20 61 6c 6c 20  invalidates all 
1d690 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20 20 20 20  savepoints..    
1d6a0 20 20 20 20 2f 2f 2f 20 77 68 65 72 65 20 4e 3e      /// where N>
1d6b0 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  =M...        ///
1d6c0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1d6d0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1d6e0 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f        /// None o
1d6f0 66 20 74 68 65 20 78 53 61 76 65 70 6f 69 6e 74  f the xSavepoint
1d700 28 29 2c 20 78 52 65 6c 65 61 73 65 28 29 2c 20  (), xRelease(), 
1d710 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 29  or xRollbackTo()
1d720 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 0d 0a 20   methods will.. 
1d730 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65 72 20         /// ever 
1d740 62 65 20 63 61 6c 6c 65 64 20 65 78 63 65 70 74  be called except
1d750 20 69 6e 20 62 65 74 77 65 65 6e 20 63 61 6c 6c   in between call
1d760 73 20 74 6f 20 78 42 65 67 69 6e 28 29 20 61 6e  s to xBegin() an
1d770 64 20 65 69 74 68 65 72 0d 0a 20 20 20 20 20 20  d either..      
1d780 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28 29 20    /// xCommit() 
1d790 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d  or xRollback()..
1d7a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1d7b0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1d7c0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1d7d0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1d7e0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
1d7f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1d800 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1d810 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
1d820 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
1d830 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
1d840 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1d850 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1d860 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74  name="iSavepoint
1d870 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1d880 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67  This is an integ
1d890 65 72 20 75 73 65 64 20 74 6f 20 69 6e 64 69 63  er used to indic
1d8a0 61 74 65 20 74 68 61 74 20 61 6e 79 20 73 61 76  ate that any sav
1d8b0 65 64 20 73 74 61 74 65 73 20 77 69 74 68 20 61  ed states with a
1d8c0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  n..        /// i
1d8d0 64 65 6e 74 69 66 69 65 72 20 67 72 65 61 74 65  dentifier greate
1d8e0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1d8f0 74 6f 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  to this should b
1d900 65 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65  e deleted by the
1d910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
1d920 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
1d930 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1d940 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1d950 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1d960 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1d970 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1d980 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1d990 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1d9a0 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1d9b0 6f 72 43 6f 64 65 20 78 52 65 6c 65 61 73 65 28  orCode xRelease(
1d9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
1d9d0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
1d9e0 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61           int iSa
1d9f0 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  vepoint..       
1da00 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
1da10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1da20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1da60 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1da70 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1da80 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1da90 20 2f 2f 2f 20 54 68 65 73 65 20 6d 65 74 68 6f   /// These metho
1daa0 64 73 20 70 72 6f 76 69 64 65 20 74 68 65 20 76  ds provide the v
1dab0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
1dac0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 0d 0a  lementation an..
1dad0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 70 6f          /// oppo
1dae0 72 74 75 6e 69 74 79 20 74 6f 20 69 6d 70 6c 65  rtunity to imple
1daf0 6d 65 6e 74 20 6e 65 73 74 65 64 20 74 72 61 6e  ment nested tran
1db00 73 61 63 74 69 6f 6e 73 2e 20 54 68 65 79 20 61  sactions. They a
1db10 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20  re always..     
1db20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 61 6c 20     /// optional 
1db30 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65  and will only be
1db40 20 63 61 6c 6c 65 64 20 69 6e 20 53 51 4c 69 74   called in SQLit
1db50 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 37 20  e version 3.7.7 
1db60 61 6e 64 20 6c 61 74 65 72 2e 0d 0a 20 20 20 20  and later...    
1db70 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1db80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1db90 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1dba0 20 57 68 65 6e 20 78 53 61 76 65 70 6f 69 6e 74   When xSavepoint
1dbb0 28 58 2c 4e 29 20 69 73 20 69 6e 76 6f 6b 65 64  (X,N) is invoked
1dbc0 2c 20 74 68 61 74 20 69 73 20 61 20 73 69 67 6e  , that is a sign
1dbd0 61 6c 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  al to the virtua
1dbe0 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  l..        /// t
1dbf0 61 62 6c 65 20 58 20 74 68 61 74 20 69 74 20 73  able X that it s
1dc00 68 6f 75 6c 64 20 73 61 76 65 20 69 74 73 20 63  hould save its c
1dc10 75 72 72 65 6e 74 20 73 74 61 74 65 20 61 73 20  urrent state as 
1dc20 73 61 76 65 70 6f 69 6e 74 20 4e 2e 20 41 0d 0a  savepoint N. A..
1dc30 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 62 73          /// subs
1dc40 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f 20 78  equent call to x
1dc50 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20  RollbackTo(X,R) 
1dc60 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 73  means that the s
1dc70 74 61 74 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  tate of the..   
1dc80 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c       /// virtual
1dc90 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20 72 65   table should re
1dca0 74 75 72 6e 20 74 6f 20 77 68 61 74 20 69 74 20  turn to what it 
1dcb0 77 61 73 20 77 68 65 6e 20 78 53 61 76 65 70 6f  was when xSavepo
1dcc0 69 6e 74 28 58 2c 52 29 20 77 61 73 0d 0a 20 20  int(X,R) was..  
1dcd0 20 20 20 20 20 20 2f 2f 2f 20 6c 61 73 74 20 63        /// last c
1dce0 61 6c 6c 65 64 2e 20 54 68 65 20 63 61 6c 6c 20  alled. The call 
1dcf0 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58  to xRollbackTo(X
1dd00 2c 52 29 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64  ,R) will invalid
1dd10 61 74 65 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20  ate all..       
1dd20 20 2f 2f 2f 20 73 61 76 65 70 6f 69 6e 74 73 20   /// savepoints 
1dd30 77 69 74 68 20 4e 3e 52 3b 20 6e 6f 6e 65 20 6f  with N>R; none o
1dd40 66 20 74 68 65 20 69 6e 76 61 6c 69 64 65 64 20  f the invalided 
1dd50 73 61 76 65 70 6f 69 6e 74 73 20 77 69 6c 6c 20  savepoints will 
1dd60 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1dd70 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6f 72 20 72  rolled back or r
1dd80 65 6c 65 61 73 65 64 20 77 69 74 68 6f 75 74 20  eleased without 
1dd90 66 69 72 73 74 20 62 65 69 6e 67 20 72 65 69 6e  first being rein
1dda0 69 74 69 61 6c 69 7a 65 64 20 62 79 20 61 20 63  itialized by a c
1ddb0 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  all..        ///
1ddc0 20 74 6f 20 78 53 61 76 65 70 6f 69 6e 74 28 29   to xSavepoint()
1ddd0 2e 20 41 20 63 61 6c 6c 20 74 6f 20 78 52 65 6c  . A call to xRel
1dde0 65 61 73 65 28 58 2c 4d 29 20 69 6e 76 61 6c 69  ease(X,M) invali
1ddf0 64 61 74 65 73 20 61 6c 6c 20 73 61 76 65 70 6f  dates all savepo
1de00 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ints..        //
1de10 2f 20 77 68 65 72 65 20 4e 3e 3d 4d 2e 0d 0a 20  / where N>=M... 
1de20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1de30 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1de40 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1de50 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20  /// None of the 
1de60 78 53 61 76 65 70 6f 69 6e 74 28 29 2c 20 78 52  xSavepoint(), xR
1de70 65 6c 65 61 73 65 28 29 2c 20 6f 72 20 78 52 6f  elease(), or xRo
1de80 6c 6c 62 61 63 6b 54 6f 28 29 20 6d 65 74 68 6f  llbackTo() metho
1de90 64 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  ds will..       
1dea0 20 2f 2f 2f 20 65 76 65 72 20 62 65 20 63 61 6c   /// ever be cal
1deb0 6c 65 64 20 65 78 63 65 70 74 20 69 6e 20 62 65  led except in be
1dec0 74 77 65 65 6e 20 63 61 6c 6c 73 20 74 6f 20 78  tween calls to x
1ded0 42 65 67 69 6e 28 29 20 61 6e 64 20 65 69 74 68  Begin() and eith
1dee0 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  er..        /// 
1def0 78 43 6f 6d 6d 69 74 28 29 20 6f 72 20 78 52 6f  xCommit() or xRo
1df00 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20 20 20 20 20  llback()...     
1df10 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1df20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1df30 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1df40 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1df50 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
1df60 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
1df70 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1df80 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
1df90 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
1dfa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1dfb0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1dfc0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1dfd0 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20  iSavepoint">..  
1dfe0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
1dff0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 69 64 65  s an integer ide
1e000 6e 74 69 66 69 65 72 20 75 73 65 64 20 74 6f 20  ntifier used to 
1e010 73 70 65 63 69 66 79 20 61 20 73 70 65 63 69 66  specify a specif
1e020 69 63 20 73 61 76 65 64 0d 0a 20 20 20 20 20 20  ic saved..      
1e030 20 20 2f 2f 2f 20 73 74 61 74 65 20 66 6f 72 20    /// state for 
1e040 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1e050 65 20 66 6f 72 20 69 74 20 74 6f 20 72 65 73 74  e for it to rest
1e060 6f 72 65 20 69 74 73 65 6c 66 20 62 61 63 6b 20  ore itself back 
1e070 74 6f 2c 20 77 68 69 63 68 0d 0a 20 20 20 20 20  to, which..     
1e080 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 61 6c     /// should al
1e090 73 6f 20 68 61 76 65 20 74 68 65 20 65 66 66 65  so have the effe
1e0a0 63 74 20 6f 66 20 64 65 6c 65 74 69 6e 67 20 61  ct of deleting a
1e0b0 6c 6c 20 73 61 76 65 64 20 73 74 61 74 65 73 20  ll saved states 
1e0c0 77 69 74 68 20 61 6e 0d 0a 20 20 20 20 20 20 20  with an..       
1e0d0 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 69 64 65   /// integer ide
1e0e0 6e 74 69 66 69 65 72 20 67 72 65 61 74 65 72 20  ntifier greater 
1e0f0 74 68 61 6e 20 74 68 69 73 20 6f 6e 65 2e 0d 0a  than this one...
1e100 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1e110 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1e120 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1e130 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1e140 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1e150 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1e160 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1e170 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1e180 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61  rrorCode xRollba
1e190 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20  ckTo(..         
1e1a0 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c     IntPtr pVtab,
1e1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
1e1c0 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20  t iSavepoint..  
1e1d0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 20 20            );..  
1e1e0 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
1e1f0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
1e200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e240 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1e250 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4d 61 6e  egion ISQLiteMan
1e260 61 67 65 64 4d 6f 64 75 6c 65 20 49 6e 74 65 72  agedModule Inter
1e270 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  face..    /// <s
1e280 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1e290 20 54 68 69 73 20 69 6e 74 65 72 66 61 63 65 20   This interface 
1e2a0 72 65 70 72 65 73 65 6e 74 73 20 61 20 76 69 72  represents a vir
1e2b0 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
1e2c0 6d 65 6e 74 61 74 69 6f 6e 20 77 72 69 74 74 65  mentation writte
1e2d0 6e 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 61  n in..    /// ma
1e2e0 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20  naged code...   
1e2f0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1e300 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65  .    public inte
1e310 72 66 61 63 65 20 49 53 51 4c 69 74 65 4d 61 6e  rface ISQLiteMan
1e320 61 67 65 64 4d 6f 64 75 6c 65 0d 0a 20 20 20 20  agedModule..    
1e330 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  {..        /// <
1e340 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1e350 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f    /// Returns no
1e360 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 73 63  n-zero if the sc
1e370 68 65 6d 61 20 66 6f 72 20 74 68 65 20 76 69 72  hema for the vir
1e380 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 62  tual table has b
1e390 65 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  een..        ///
1e3a0 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
1e3b0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1e3c0 79 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  y>..        bool
1e3d0 20 44 65 63 6c 61 72 65 64 20 7b 20 67 65 74 3b   Declared { get;
1e3e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e430 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e440 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1e450 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75          /// Retu
1e460 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  rns the name of 
1e470 74 68 65 20 6d 6f 64 75 6c 65 20 61 73 20 69 74  the module as it
1e480 20 77 61 73 20 72 65 67 69 73 74 65 72 65 64 20   was registered 
1e490 77 69 74 68 20 74 68 65 20 53 51 4c 69 74 65 0d  with the SQLite.
1e4a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72  .        /// cor
1e4b0 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...    
1e4c0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1e4d0 79 3e 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  y>..        stri
1e4e0 6e 67 20 4e 61 6d 65 20 7b 20 67 65 74 3b 20 7d  ng Name { get; }
1e4f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1e500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e540 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1e550 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1e560 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1e570 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
1e580 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
1e590 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1e5a0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
1e5b0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
1e5c0 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Create" /> metho
1e5d0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1e5e0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1e5f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1e600 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e 22  ame="connection"
1e610 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1e620 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
1e630 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20  LiteConnection" 
1e640 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1e650 63 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ce associated wi
1e660 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  th..        /// 
1e670 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1e680 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1e690 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1e6a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1e6b0 65 3d 22 70 43 6c 69 65 6e 74 44 61 74 61 22 3e  e="pClientData">
1e6c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1e6d0 65 20 6e 61 74 69 76 65 20 75 73 65 72 2d 64 61  e native user-da
1e6e0 74 61 20 70 6f 69 6e 74 65 72 20 61 73 73 6f 63  ta pointer assoc
1e6f0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
1e700 6d 6f 64 75 6c 65 2c 20 61 73 20 69 74 20 77 61  module, as it wa
1e710 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  s..        /// p
1e720 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 20 53  rovided to the S
1e730 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
1e740 72 79 20 77 68 65 6e 20 74 68 65 20 6e 61 74 69  ry when the nati
1e750 76 65 20 6d 6f 64 75 6c 65 20 69 6e 73 74 61 6e  ve module instan
1e760 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
1e770 77 61 73 20 63 72 65 61 74 65 64 2e 0d 0a 20 20  was created...  
1e780 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1e790 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1e7a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
1e7b0 75 6d 65 6e 74 73 22 3e 0d 0a 20 20 20 20 20 20  uments">..      
1e7c0 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65    /// The module
1e7d0 20 6e 61 6d 65 2c 20 64 61 74 61 62 61 73 65 20   name, database 
1e7e0 6e 61 6d 65 2c 20 76 69 72 74 75 61 6c 20 74 61  name, virtual ta
1e7f0 62 6c 65 20 6e 61 6d 65 2c 20 61 6e 64 20 61 6c  ble name, and al
1e800 6c 20 6f 74 68 65 72 0d 0a 20 20 20 20 20 20 20  l other..       
1e810 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74 73 20 70   /// arguments p
1e820 61 73 73 65 64 20 74 6f 20 74 68 65 20 43 52 45  assed to the CRE
1e830 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
1e840 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  E statement...  
1e850 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1e860 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1e870 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
1e880 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
1e890 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
1e8a0 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
1e8b0 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
1e8c0 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a  to contain the..
1e8d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
1e8e0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
1e8f0 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
1e900 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
1e910 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20  sociated with.. 
1e920 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76         /// the v
1e930 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
1e940 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1e950 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1e960 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72   <param name="er
1e970 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ror">..        /
1e980 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c  // Upon failure,
1e990 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
1e9a0 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
1e9b0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65   to contain an e
1e9c0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rror..        //
1e9d0 2f 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20  / message...    
1e9e0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1e9f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1ea00 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1ea10 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1ea20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1ea30 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1ea40 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1ea50 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1ea60 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a 20 20  Code Create(..  
1ea70 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1ea80 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
1ea90 63 74 69 6f 6e 2c 20 20 2f 2a 20 69 6e 20 2a 2f  ction,  /* in */
1eaa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
1eab0 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61  tPtr pClientData
1eac0 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ,           /* i
1ead0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1eae0 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d    string[] argum
1eaf0 65 6e 74 73 2c 20 20 20 20 20 20 20 20 20 20 20  ents,           
1eb00 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1eb10 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65        ref SQLite
1eb20 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
1eb30 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20  le, /* out */.. 
1eb40 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1eb50 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20  tring error     
1eb60 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20           /* out 
1eb70 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1eb80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1eb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ebe0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1ebf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1ec00 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1ec10 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1ec20 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1ec30 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1ec40 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1ec50 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  .xConnect" /> me
1ec60 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
1ec70 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1ec80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1ec90 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69  m name="connecti
1eca0 6f 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on">..        //
1ecb0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1ecc0 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  "SQLiteConnectio
1ecd0 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  n" /> object ins
1ece0 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
1ecf0 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f   with..        /
1ed00 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  // the virtual t
1ed10 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
1ed20 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1ed30 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1ed40 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74  name="pClientDat
1ed50 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  a">..        ///
1ed60 20 54 68 65 20 6e 61 74 69 76 65 20 75 73 65 72   The native user
1ed70 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73  -data pointer as
1ed80 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1ed90 69 73 20 6d 6f 64 75 6c 65 2c 20 61 73 20 69 74  is module, as it
1eda0 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f   was..        //
1edb0 2f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68  / provided to th
1edc0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
1edd0 62 72 61 72 79 20 77 68 65 6e 20 74 68 65 20 6e  brary when the n
1ede0 61 74 69 76 65 20 6d 6f 64 75 6c 65 20 69 6e 73  ative module ins
1edf0 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  tance..        /
1ee00 2f 2f 20 77 61 73 20 63 72 65 61 74 65 64 2e 0d  // was created..
1ee10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1ee20 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1ee30 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1ee40 61 72 67 75 6d 65 6e 74 73 22 3e 0d 0a 20 20 20  arguments">..   
1ee50 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64       /// The mod
1ee60 75 6c 65 20 6e 61 6d 65 2c 20 64 61 74 61 62 61  ule name, databa
1ee70 73 65 20 6e 61 6d 65 2c 20 76 69 72 74 75 61 6c  se name, virtual
1ee80 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 61 6e 64   table name, and
1ee90 20 61 6c 6c 20 6f 74 68 65 72 0d 0a 20 20 20 20   all other..    
1eea0 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74      /// argument
1eeb0 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
1eec0 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
1eed0 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d  ABLE statement..
1eee0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1eef0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1ef00 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1ef10 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  table">..       
1ef20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
1ef30 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  s, this paramete
1ef40 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
1ef50 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
1ef60 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1ef70 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1ef80 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e  VirtualTable" />
1ef90 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1efa0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1efb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
1efc0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
1efd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1efe0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1eff0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1f000 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20  "error">..      
1f010 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75    /// Upon failu
1f020 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  re, this paramet
1f030 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
1f040 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  ied to contain a
1f050 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  n error..       
1f060 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2e 0d 0a 20   /// message... 
1f070 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1f080 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1f090 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1f0a0 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
1f0b0 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
1f0c0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
1f0d0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1f0e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1f0f0 72 6f 72 43 6f 64 65 20 43 6f 6e 6e 65 63 74 28  rorCode Connect(
1f100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1f110 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
1f120 6f 6e 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a 20 69  onnection,  /* i
1f130 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1f140 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74    IntPtr pClient
1f150 44 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20  Data,           
1f160 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1f170 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
1f180 72 67 75 6d 65 6e 74 73 2c 20 20 20 20 20 20 20  rguments,       
1f190 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
1f1a0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51            ref SQ
1f1b0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1f1c0 20 74 61 62 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a   table, /* out *
1f1d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
1f1e0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20  ef string error 
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f200 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
1f210 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1f220 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f260 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f270 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1f280 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1f290 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1f2a0 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1f2b0 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1f2c0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1f2d0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1f2e0 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 22  dule.xBestIndex"
1f2f0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
1f300 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
1f310 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1f320 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61   <param name="ta
1f330 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
1f340 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1f350 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
1f360 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
1f370 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
1f380 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
1f390 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75   with this virtu
1f3a0 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
1f3b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1f3c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1f3d0 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
1f3e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1f3f0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
1f400 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f 62  LiteIndex" /> ob
1f410 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f  ject instance co
1f420 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74 68 65  ntaining all the
1f430 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 61  ..        /// da
1f440 74 61 20 66 6f 72 20 74 68 65 20 69 6e 70 75 74  ta for the input
1f450 73 20 61 6e 64 20 6f 75 74 70 75 74 73 20 72 65  s and outputs re
1f460 6c 61 74 69 6e 67 20 74 6f 20 69 6e 64 65 78 20  lating to index 
1f470 73 65 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  selection...    
1f480 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1f490 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1f4a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1f4b0 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1f4c0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1f4d0 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1f4e0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1f4f0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1f500 43 6f 64 65 20 42 65 73 74 49 6e 64 65 78 28 0d  Code BestIndex(.
1f510 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1f520 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
1f530 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d  table, /* in */.
1f540 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1f550 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 20 20  iteIndex index  
1f560 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c 20 6f 75         /* in, ou
1f570 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  t */..          
1f580 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1f590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f5e0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1f5f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1f600 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
1f610 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
1f620 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1f630 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
1f640 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
1f650 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20  le.xDisconnect" 
1f660 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
1f670 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1f680 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1f690 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
1f6a0 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
1f6b0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1f6c0 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
1f6d0 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
1f6e0 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
1f6f0 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
1f700 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61  with this virtua
1f710 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
1f720 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1f730 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1f740 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1f750 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1f760 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1f770 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1f780 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1f790 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1f7a0 64 65 20 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a  de Disconnect(..
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1f7c0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
1f7d0 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  able /* in */.. 
1f7e0 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1f7f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1f800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1f850 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1f860 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1f870 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20  od is called in 
1f880 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d  response to the.
1f890 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
1f8a0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
1f8b0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73  ativeModule.xDes
1f8c0 74 72 6f 79 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  troy" /> method.
1f8d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1f8e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1f8f0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1f900 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
1f910 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
1f920 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
1f930 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
1f940 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
1f950 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
1f960 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
1f970 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1f980 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1f990 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1f9a0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1f9b0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1f9c0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1f9d0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1f9e0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1f9f0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1fa00 72 72 6f 72 43 6f 64 65 20 44 65 73 74 72 6f 79  rrorCode Destroy
1fa10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
1fa20 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1fa30 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f  e table /* in */
1fa40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1fa50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faa0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1fab0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1fac0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1fad0 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
1fae0 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
1faf0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1fb00 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
1fb10 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
1fb20 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Open" /> method.
1fb30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1fb40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1fb50 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1fb60 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
1fb70 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
1fb80 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
1fb90 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
1fba0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
1fbb0 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
1fbc0 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
1fbd0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1fbe0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1fbf0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1fc00 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
1fc10 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
1fc20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
1fc30 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  s, this paramete
1fc40 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
1fc50 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
1fc60 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1fc70 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1fc80 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1fc90 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  or" /> object in
1fca0 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
1fcb0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
1fcc0 69 74 68 20 74 68 65 20 6e 65 77 6c 79 20 6f 70  ith the newly op
1fcd0 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61 62  ened virtual tab
1fce0 6c 65 20 63 75 72 73 6f 72 2e 0d 0a 20 20 20 20  le cursor...    
1fcf0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1fd00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1fd10 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1fd20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1fd30 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1fd40 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1fd50 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1fd60 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1fd70 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20 20 20 20  Code Open(..    
1fd80 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
1fd90 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
1fda0 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ,           /* i
1fdb0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1fdc0 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74    ref SQLiteVirt
1fdd0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
1fde0 75 72 73 6f 72 20 2f 2a 20 6f 75 74 20 2a 2f 0d  ursor /* out */.
1fdf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1fe00 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1fe60 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1fe70 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1fe80 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
1fe90 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
1fea0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1feb0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
1fec0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
1fed0 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lose" /> method.
1fee0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1fef0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1ff00 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1ff10 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20  e="cursor">..   
1ff20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1ff30 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
1ff40 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1ff50 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1ff60 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
1ff70 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
1ff80 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  h the previously
1ff90 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20   opened virtual 
1ffa0 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20  table cursor to 
1ffb0 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1ffc0 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
1ffd0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1ffe0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1fff0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
20000 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
20010 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
20020 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
20030 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
20040 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
20050 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20  Close(..        
20060 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
20070 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
20080 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  sor /* in */..  
20090 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
200a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
200b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
200f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20100 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
20110 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
20120 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
20130 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
20140 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
20150 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
20160 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74  tiveModule.xFilt
20170 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  er" /> method...
20180 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
20190 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
201a0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
201b0 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
201c0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
201d0 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
201e0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
201f0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
20200 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
20210 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
20220 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  the previously o
20230 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61  pened virtual ta
20240 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65  ble cursor to be
20250 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73  ..        /// us
20260 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
20270 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
20280 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
20290 6d 65 3d 22 69 6e 64 65 78 4e 75 6d 62 65 72 22  me="indexNumber"
202a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
202b0 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 68 65  umber used to he
202c0 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20  lp identify the 
202d0 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d  selected index..
202e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
202f0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
20300 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
20310 69 6e 64 65 78 53 74 72 69 6e 67 22 3e 0d 0a 20  indexString">.. 
20320 20 20 20 20 20 20 20 2f 2f 2f 20 53 74 72 69 6e         /// Strin
20330 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  g used to help i
20340 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
20350 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20  cted index...   
20360 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
20370 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
20380 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
20390 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  es">..        //
203a0 2f 20 54 68 65 20 76 61 6c 75 65 73 20 63 6f 72  / The values cor
203b0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 65 61  responding to ea
203c0 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
203d0 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e   selected index.
203e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
203f0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
20400 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
20410 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
20420 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
20430 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
20440 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
20450 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
20460 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 74 65  eErrorCode Filte
20470 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
20480 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
20490 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c  leCursor cursor,
204a0 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
204b0 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
204c0 4e 75 6d 62 65 72 2c 20 20 20 20 20 20 20 20 20  Number,         
204d0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
204e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
204f0 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67  ring indexString
20500 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
20510 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
20520 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65       SQLiteValue
20530 5b 5d 20 76 61 6c 75 65 73 20 20 20 20 20 20 20  [] values       
20540 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
20550 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
20560 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
20570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
205c0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
205d0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
205e0 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
205f0 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
20600 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
20610 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
20620 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65  NativeModule.xNe
20630 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  xt" /> method...
20640 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
20650 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
20660 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
20670 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
20680 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
20690 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
206a0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
206b0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
206c0 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
206d0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
206e0 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  the previously o
206f0 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61  pened virtual ta
20700 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65  ble cursor to be
20710 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73  ..        /// us
20720 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
20730 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
20740 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
20750 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
20760 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
20770 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
20780 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
20790 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
207a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4e 65  LiteErrorCode Ne
207b0 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt(..           
207c0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
207d0 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
207e0 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
207f0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
20800 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20850 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
20860 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
20870 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
20880 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
20890 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
208a0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
208b0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
208c0 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22 20 2f 3e  eModule.xEof" />
208d0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
208e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
208f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
20900 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f  aram name="curso
20910 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
20920 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
20930 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
20940 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a  leCursor" /> obj
20950 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20  ect instance..  
20960 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69        /// associ
20970 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 72  ated with the pr
20980 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
20990 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
209a0 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20 20  rsor to be..    
209b0 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20      /// used... 
209c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
209d0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
209e0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
209f0 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
20a00 20 69 66 20 6e 6f 20 6d 6f 72 65 20 72 6f 77 73   if no more rows
20a10 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 3b 20   are available; 
20a20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e 0d  zero otherwise..
20a30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
20a40 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
20a50 20 62 6f 6f 6c 20 45 6f 66 28 0d 0a 20 20 20 20   bool Eof(..    
20a60 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
20a70 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
20a80 20 63 75 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f   cursor /* in */
20a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
20aa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
20ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20af0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
20b00 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20b10 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
20b20 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
20b30 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
20b40 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
20b50 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
20b60 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
20b70 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f  Column" /> metho
20b80 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
20b90 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
20ba0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
20bb0 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20  ame="cursor">.. 
20bc0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
20bd0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
20be0 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
20bf0 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  or" /> object in
20c00 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
20c10 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
20c20 69 74 68 20 74 68 65 20 70 72 65 76 69 6f 75 73  ith the previous
20c30 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61  ly opened virtua
20c40 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74  l table cursor t
20c50 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o be..        //
20c60 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  / used...       
20c70 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
20c80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
20c90 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 22  m name="context"
20ca0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
20cb0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
20cc0 4c 69 74 65 43 6f 6e 74 65 78 74 22 20 2f 3e 20  LiteContext" /> 
20cd0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
20ce0 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 0d 0a  to be used for..
20cf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 74 75          /// retu
20d00 72 6e 69 6e 67 20 74 68 65 20 73 70 65 63 69 66  rning the specif
20d10 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  ied column value
20d20 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63   to the SQLite c
20d30 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...  
20d40 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
20d50 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
20d60 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64  <param name="ind
20d70 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ex">..        //
20d80 2f 20 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  / The zero-based
20d90 20 69 6e 64 65 78 20 63 6f 72 72 65 73 70 6f 6e   index correspon
20da0 64 69 6e 67 20 74 6f 20 74 68 65 20 63 6f 6c 75  ding to the colu
20db0 6d 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  mn containing th
20dc0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
20dd0 61 6c 75 65 20 74 6f 20 62 65 20 72 65 74 75 72  alue to be retur
20de0 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ned...        //
20df0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
20e00 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
20e10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
20e20 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
20e30 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
20e40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
20e50 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
20e60 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43  QLiteErrorCode C
20e70 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20  olumn(..        
20e80 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
20e90 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
20ea0 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  sor, /* in */.. 
20eb0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
20ec0 65 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74  eContext context
20ed0 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ,           /* i
20ee0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
20ef0 20 20 69 6e 74 20 69 6e 64 65 78 20 20 20 20 20    int index     
20f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f10 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
20f20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
20f30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20f80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
20f90 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
20fa0 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
20fb0 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
20fc0 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
20fd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
20fe0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
20ff0 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64  iveModule.xRowId
21000 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
21010 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
21020 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
21030 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
21040 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
21050 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
21060 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
21070 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e  lTableCursor" />
21080 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
21090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73  ..        /// as
210a0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
210b0 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  e previously ope
210c0 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ned virtual tabl
210d0 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a  e cursor to be..
210e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64          /// used
210f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
21100 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
21110 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
21120 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20  ="rowId">..     
21130 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
21140 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
21150 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
21160 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
21170 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20 20 20  the unique..    
21180 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20      /// integer 
21190 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72 20 66  row identifier f
211a0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  or the current r
211b0 6f 77 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  ow for the speci
211c0 66 69 65 64 20 63 75 72 73 6f 72 2e 0d 0a 20 20  fied cursor...  
211d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
211e0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
211f0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
21200 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
21210 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
21220 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
21230 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
21240 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
21250 6f 72 43 6f 64 65 20 52 6f 77 49 64 28 0d 0a 20  orCode RowId(.. 
21260 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
21270 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
21280 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a 20 69  sor cursor, /* i
21290 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
212a0 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64    ref long rowId
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212c0 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
212d0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
212e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
212f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21330 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
21340 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
21350 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
21360 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
21370 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
21380 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
21390 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
213a0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
213b0 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
213c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
213d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
213e0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
213f0 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20  "table">..      
21400 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
21410 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
21420 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
21430 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
21440 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
21450 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69  /// with this vi
21460 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
21470 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
21480 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
21490 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
214a0 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ues">..        /
214b0 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20  // The array of 
214c0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
214d0 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62 6a 65 63  eValue" /> objec
214e0 74 20 69 6e 73 74 61 6e 63 65 73 20 63 6f 6e 74  t instances cont
214f0 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  aining..        
21500 2f 2f 2f 20 74 68 65 20 6e 65 77 20 6f 72 20 6d  /// the new or m
21510 6f 64 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76  odified column v
21520 61 6c 75 65 73 2c 20 69 66 20 61 6e 79 2e 0d 0a  alues, if any...
21530 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
21540 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
21550 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
21560 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20  owId">..        
21570 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
21580 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
21590 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
215a0 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65  d to contain the
215b0 20 75 6e 69 71 75 65 0d 0a 20 20 20 20 20 20 20   unique..       
215c0 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 72 6f 77   /// integer row
215d0 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20   identifier for 
215e0 74 68 65 20 72 6f 77 20 74 68 61 74 20 77 61 73  the row that was
215f0 20 69 6e 73 65 72 74 65 64 2c 20 69 66 20 61 6e   inserted, if an
21600 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
21610 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
21620 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
21630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
21640 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
21650 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
21660 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
21670 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
21680 69 74 65 45 72 72 6f 72 43 6f 64 65 20 55 70 64  iteErrorCode Upd
21690 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
216a0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
216b0 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69  able table, /* i
216c0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
216d0 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20    SQLiteValue[] 
216e0 76 61 6c 75 65 73 2c 20 20 20 20 20 2f 2a 20 69  values,     /* i
216f0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
21700 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64    ref long rowId
21710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
21720 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
21730 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
21740 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21780 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21790 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
217a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
217b0 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
217c0 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65  lled in response
217d0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
217e0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
217f0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
21800 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d  ule.xBegin" /> m
21810 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
21820 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
21830 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
21840 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
21850 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21860 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
21870 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
21880 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
21890 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
218a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
218b0 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
218c0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
218d0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
218e0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
218f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
21900 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
21910 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
21920 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
21930 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
21940 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 42  QLiteErrorCode B
21950 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  egin(..         
21960 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
21970 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69  Table table /* i
21980 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
21990 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
219a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
219f0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
21a00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21a10 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
21a20 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
21a30 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
21a40 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
21a50 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
21a60 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20 6d 65 74  le.xSync" /> met
21a70 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
21a80 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
21a90 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
21aa0 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a   name="table">..
21ab0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
21ac0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
21ad0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
21ae0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
21af0 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
21b00 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
21b10 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c  his virtual tabl
21b20 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
21b30 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
21b40 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
21b50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
21b60 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
21b70 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
21b80 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
21b90 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
21ba0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 79 6e  iteErrorCode Syn
21bb0 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c(..            
21bc0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
21bd0 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a  le table /* in *
21be0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
21bf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21c50 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
21c60 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
21c70 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
21c80 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
21c90 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
21ca0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
21cb0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
21cc0 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65 74 68  xCommit" /> meth
21cd0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
21ce0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
21cf0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
21d00 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20  name="table">.. 
21d10 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
21d20 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
21d30 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e  VirtualTable" />
21d40 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
21d50 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
21d60 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68       /// with th
21d70 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  is virtual table
21d80 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
21d90 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
21da0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
21db0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
21dc0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
21dd0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
21de0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
21df0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
21e00 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6d 6d  teErrorCode Comm
21e10 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it(..           
21e20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
21e30 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20  ble table /* in 
21e40 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
21e50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
21e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ea0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21eb0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
21ec0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
21ed0 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
21ee0 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
21ef0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
21f00 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
21f10 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
21f20 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f 3e 20 6d  .xRollback" /> m
21f30 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
21f40 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
21f50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
21f60 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
21f70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21f80 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
21f90 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
21fa0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
21fb0 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
21fc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
21fd0 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
21fe0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
21ff0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
22000 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
22010 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
22020 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
22030 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
22040 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
22050 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
22060 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52  QLiteErrorCode R
22070 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  ollback(..      
22080 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
22090 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f  ualTable table /
220a0 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
220b0 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
220c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
220d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22110 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
22120 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
22130 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
22140 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
22150 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
22160 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
22170 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
22180 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74  odule.xFindFunct
22190 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ion" /> method..
221a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
221b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
221c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
221d0 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  ="table">..     
221e0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
221f0 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
22200 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a  ualTable" /> obj
22210 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
22220 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
22230 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76   /// with this v
22240 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
22250 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
22260 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
22270 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
22280 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20  gumentCount">.. 
22290 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
222a0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
222b0 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  ts to the functi
222c0 6f 6e 20 62 65 69 6e 67 20 73 6f 75 67 68 74 2e  on being sought.
222d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
222e0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
222f0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
22300 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20  "name">..       
22310 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
22320 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
22330 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20 20 20  ing sought...   
22340 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
22350 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
22360 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
22370 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20  tion">..        
22380 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
22390 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
223a0 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
223b0 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65  d to contain the
223c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
223d0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
223e0 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65  unction" /> obje
223f0 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65 73 70  ct instance resp
22400 6f 6e 73 69 62 6c 65 20 66 6f 72 0d 0a 20 20 20  onsible for..   
22410 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
22420 6e 74 69 6e 67 20 74 68 65 20 73 70 65 63 69 66  nting the specif
22430 69 65 64 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20  ied function... 
22440 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
22450 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
22460 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
22470 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20  lientData">..   
22480 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
22490 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
224a0 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
224b0 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
224c0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
224d0 2f 2f 20 6e 61 74 69 76 65 20 75 73 65 72 2d 64  // native user-d
224e0 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73 73 6f  ata pointer asso
224f0 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20  ciated with..   
22500 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 72       /// <paramr
22510 65 66 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  ef name="functio
22520 6e 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20  n" />...        
22530 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
22540 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
22550 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
22560 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   Non-zero if the
22570 20 73 70 65 63 69 66 69 65 64 20 66 75 6e 63 74   specified funct
22580 69 6f 6e 20 77 61 73 20 66 6f 75 6e 64 3b 20 7a  ion was found; z
22590 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a  ero otherwise...
225a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
225b0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
225c0 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63 74 69 6f  bool FindFunctio
225d0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
225e0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
225f0 6c 65 20 74 61 62 6c 65 2c 20 20 20 20 2f 2a 20  le table,    /* 
22600 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
22610 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43     int argumentC
22620 6f 75 6e 74 2c 20 20 20 20 20 20 20 20 20 20 20  ount,           
22630 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
22640 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
22650 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e,              
22660 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
22670 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
22680 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63  iteFunction func
22690 74 69 6f 6e 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d  tion, /* out */.
226a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
226b0 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44   IntPtr pClientD
226c0 61 74 61 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  ata       /* out
226d0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
226e0 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
226f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22730 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22740 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
22750 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
22760 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
22770 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
22780 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
22790 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
227a0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
227b0 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65  e.xRename" /> me
227c0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
227d0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
227e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
227f0 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d  m name="table">.
22800 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
22810 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
22820 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
22830 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
22840 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  ce associated.. 
22850 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20         /// with 
22860 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62  this virtual tab
22870 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
22880 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
22890 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
228a0 6d 65 3d 22 6e 65 77 4e 61 6d 65 22 3e 0d 0a 20  me="newName">.. 
228b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
228c0 65 77 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ew name for the 
228d0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
228e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
228f0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
22900 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
22910 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
22920 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
22930 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
22940 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
22950 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
22960 72 72 6f 72 43 6f 64 65 20 52 65 6e 61 6d 65 28  rrorCode Rename(
22970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
22980 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
22990 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f   table, /* in */
229a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
229b0 72 69 6e 67 20 6e 65 77 4e 61 6d 65 20 20 20 20  ring newName    
229c0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
229d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
229e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
229f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
22a40 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
22a50 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
22a60 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
22a70 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
22a80 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
22a90 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
22aa0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
22ab0 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65  Savepoint" /> me
22ac0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
22ad0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
22ae0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
22af0 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d  m name="table">.
22b00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
22b10 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
22b20 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
22b30 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
22b40 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  ce associated.. 
22b50 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20         /// with 
22b60 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62  this virtual tab
22b70 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
22b80 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
22b90 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
22ba0 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74 22 3e 0d  me="savepoint">.
22bb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
22bc0 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  s is an integer 
22bd0 69 64 65 6e 74 69 66 69 65 72 20 75 6e 64 65 72  identifier under
22be0 20 77 68 69 63 68 20 74 68 65 20 74 68 65 20 63   which the the c
22bf0 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 0d  urrent state of.
22c00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
22c10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
22c20 68 6f 75 6c 64 20 62 65 20 73 61 76 65 64 2e 0d  hould be saved..
22c30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
22c40 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
22c50 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
22c60 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
22c70 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
22c80 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
22c90 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
22ca0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
22cb0 45 72 72 6f 72 43 6f 64 65 20 53 61 76 65 70 6f  ErrorCode Savepo
22cc0 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  int(..          
22cd0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
22ce0 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69  able table, /* i
22cf0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
22d00 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e 74 20    int savepoint 
22d10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
22d20 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
22d30 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
22d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d80 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22d90 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
22da0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
22db0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
22dc0 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
22dd0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
22de0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
22df0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
22e00 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f 3e 20  le.xRelease" /> 
22e10 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
22e20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
22e30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
22e40 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
22e50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
22e60 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
22e70 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
22e80 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
22e90 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
22ea0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
22eb0 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
22ec0 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
22ed0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
22ee0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
22ef0 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74 22  name="savepoint"
22f00 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
22f10 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65  his is an intege
22f20 72 20 75 73 65 64 20 74 6f 20 69 6e 64 69 63 61  r used to indica
22f30 74 65 20 74 68 61 74 20 61 6e 79 20 73 61 76 65  te that any save
22f40 64 20 73 74 61 74 65 73 20 77 69 74 68 20 61 6e  d states with an
22f50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 64  ..        /// id
22f60 65 6e 74 69 66 69 65 72 20 67 72 65 61 74 65 72  entifier greater
22f70 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
22f80 6f 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65  o this should be
22f90 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 0d   deleted by the.
22fa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72  .        /// vir
22fb0 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
22fc0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
22fd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
22fe0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
22ff0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
23000 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
23010 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
23020 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
23030 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
23040 72 43 6f 64 65 20 52 65 6c 65 61 73 65 28 0d 0a  rCode Release(..
23050 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
23060 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
23070 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  able, /* in */..
23080 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
23090 73 61 76 65 70 6f 69 6e 74 20 20 20 20 20 20 20  savepoint       
230a0 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
230b0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
230c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
230d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23110 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
23120 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
23130 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
23140 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
23150 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
23160 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
23170 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
23180 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  NativeModule.xRo
23190 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74  llbackTo" /> met
231a0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
231b0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
231c0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
231d0 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a   name="table">..
231e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
231f0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
23200 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
23210 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
23220 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
23230 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
23240 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c  his virtual tabl
23250 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
23260 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
23270 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
23280 65 3d 22 73 61 76 65 70 6f 69 6e 74 22 3e 0d 0a  e="savepoint">..
23290 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
232a0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 69   is an integer i
232b0 64 65 6e 74 69 66 69 65 72 20 75 73 65 64 20 74  dentifier used t
232c0 6f 20 73 70 65 63 69 66 79 20 61 20 73 70 65 63  o specify a spec
232d0 69 66 69 63 20 73 61 76 65 64 0d 0a 20 20 20 20  ific saved..    
232e0 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 20 66 6f      /// state fo
232f0 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  r the virtual ta
23300 62 6c 65 20 66 6f 72 20 69 74 20 74 6f 20 72 65  ble for it to re
23310 73 74 6f 72 65 20 69 74 73 65 6c 66 20 62 61 63  store itself bac
23320 6b 20 74 6f 2c 20 77 68 69 63 68 0d 0a 20 20 20  k to, which..   
23330 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20       /// should 
23340 61 6c 73 6f 20 68 61 76 65 20 74 68 65 20 65 66  also have the ef
23350 66 65 63 74 20 6f 66 20 64 65 6c 65 74 69 6e 67  fect of deleting
23360 20 61 6c 6c 20 73 61 76 65 64 20 73 74 61 74 65   all saved state
23370 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20 20 20  s with an..     
23380 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 69     /// integer i
23390 64 65 6e 74 69 66 69 65 72 20 67 72 65 61 74 65  dentifier greate
233a0 72 20 74 68 61 6e 20 74 68 69 73 20 6f 6e 65 2e  r than this one.
233b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
233c0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
233d0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
233e0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
233f0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
23400 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
23410 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
23420 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
23430 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c 6c 62  eErrorCode Rollb
23440 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20  ackTo(..        
23450 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
23460 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
23470 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
23480 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e      int savepoin
23490 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t             /*
234a0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
234b0 20 20 20 20 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20      );..    }.. 
234c0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
234d0 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
234e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
23530 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 53 74 61  SQLiteMemory Sta
23540 74 69 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f  tic Class..    /
23550 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
23560 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
23570 20 63 6f 6e 74 61 69 6e 73 20 73 74 61 74 69 63   contains static
23580 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 61 72   methods that ar
23590 65 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61  e used to alloca
235a0 74 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 6d 61 6e  te,..    /// man
235b0 69 70 75 6c 61 74 65 2c 20 61 6e 64 20 66 72 65  ipulate, and fre
235c0 65 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20  e native memory 
235d0 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20  provided by the 
235e0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
235f0 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ary...    /// </
23600 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
23610 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c  ternal static cl
23620 61 73 73 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79  ass SQLiteMemory
23630 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
23640 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
23650 20 44 61 74 61 0d 0a 23 69 66 20 54 52 41 43 4b   Data..#if TRACK
23660 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20  _MEMORY_BYTES.. 
23670 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
23680 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
23690 2f 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  / This object in
236a0 73 74 61 6e 63 65 20 69 73 20 75 73 65 64 20 74  stance is used t
236b0 6f 20 73 79 6e 63 68 72 6f 6e 69 7a 65 20 61 63  o synchronize ac
236c0 63 65 73 73 20 74 6f 20 74 68 65 20 6f 74 68 65  cess to the othe
236d0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  r..        /// s
236e0 74 61 74 69 63 20 66 69 65 6c 64 73 20 6f 66 20  tatic fields of 
236f0 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
23700 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
23710 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
23720 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65  vate static obje
23730 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65  ct syncRoot = ne
23740 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a 20  w object();.... 
23750 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
237a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
237b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
237c0 20 2f 2f 2f 20 54 68 65 20 74 6f 74 61 6c 20 6e   /// The total n
237d0 75 6d 62 65 72 20 6f 66 20 6f 75 74 73 74 61 6e  umber of outstan
237e0 64 69 6e 67 20 6d 65 6d 6f 72 79 20 62 79 74 65  ding memory byte
237f0 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74  s allocated by t
23800 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
23810 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65   class using the
23820 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
23830 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
23840 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
23850 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
23860 74 61 74 69 63 20 69 6e 74 20 62 79 74 65 73 41  tatic int bytesA
23870 6c 6c 6f 63 61 74 65 64 3b 0d 0a 0d 0a 20 20 20  llocated;....   
23880 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
238d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
238e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
238f0 2f 2f 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 6e  // The maximum n
23900 75 6d 62 65 72 20 6f 66 20 6f 75 74 73 74 61 6e  umber of outstan
23910 64 69 6e 67 20 6d 65 6d 6f 72 79 20 62 79 74 65  ding memory byte
23920 73 20 65 76 65 72 20 61 6c 6c 6f 63 61 74 65 64  s ever allocated
23930 20 62 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   by..        ///
23940 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e   this class usin
23950 67 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  g the SQLite cor
23960 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...    
23970 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
23980 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
23990 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6d  ate static int m
239a0 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63  aximumBytesAlloc
239b0 61 74 65 64 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ated;..#endif.. 
239c0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
239d0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
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 2f 2f 2f 2f  ////////////////
23a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23a30 23 72 65 67 69 6f 6e 20 4d 65 6d 6f 72 79 20 41  #region Memory A
23a40 6c 6c 6f 63 61 74 69 6f 6e 20 48 65 6c 70 65 72  llocation Helper
23a50 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
23a60 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
23a70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6c 6c  .        /// All
23a80 6f 63 61 74 65 73 20 61 74 20 6c 65 61 73 74 20  ocates at least 
23a90 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 75  the specified nu
23aa0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
23ab0 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 0d 0a   native memory..
23ac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 61 20          /// via 
23ad0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
23ae0 6c 69 62 72 61 72 79 20 73 71 6c 69 74 65 33 5f  library sqlite3_
23af0 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f  malloc() functio
23b00 6e 20 61 6e 64 20 72 65 74 75 72 6e 73 0d 0a 20  n and returns.. 
23b10 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 72         /// the r
23b20 65 73 75 6c 74 69 6e 67 20 6e 61 74 69 76 65 20  esulting native 
23b30 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20 20 20 20  pointer...      
23b40 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
23b60 61 72 61 6d 20 6e 61 6d 65 3d 22 73 69 7a 65 22  aram name="size"
23b70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
23b80 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
23b90 65 73 20 74 6f 20 61 6c 6c 6f 63 61 74 65 2e 0d  es to allocate..
23ba0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
23bb0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
23bc0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
23bd0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
23be0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 68 61  tive pointer tha
23bf0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c  t points to a bl
23c00 6f 63 6b 20 6f 66 20 6d 65 6d 6f 72 79 20 6f 66  ock of memory of
23c10 20 61 74 20 6c 65 61 73 74 20 74 68 65 0d 0a 20   at least the.. 
23c20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63 69         /// speci
23c30 66 69 65 64 20 73 69 7a 65 20 2d 4f 52 2d 20 3c  fied size -OR- <
23c40 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72  see cref="IntPtr
23c50 2e 5a 65 72 6f 22 20 2f 3e 20 69 66 20 74 68 65  .Zero" /> if the
23c60 20 6d 65 6d 6f 72 79 20 63 6f 75 6c 64 0d 0a 20   memory could.. 
23c70 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f 74 20 62         /// not b
23c80 65 20 61 6c 6c 6f 63 61 74 65 64 2e 0d 0a 20 20  e allocated...  
23c90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
23ca0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
23cb0 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50  blic static IntP
23cc0 74 72 20 41 6c 6c 6f 63 61 74 65 28 69 6e 74 20  tr Allocate(int 
23cd0 73 69 7a 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  size)..        {
23ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
23cf0 74 50 74 72 20 70 4d 65 6d 6f 72 79 20 3d 20 55  tPtr pMemory = U
23d00 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
23d10 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  ds.sqlite3_mallo
23d20 63 28 73 69 7a 65 29 3b 0d 0a 0d 0a 23 69 66 20  c(size);....#if 
23d30 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54  TRACK_MEMORY_BYT
23d40 45 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ES..            
23d50 69 66 20 28 70 4d 65 6d 6f 72 79 20 21 3d 20 49  if (pMemory != I
23d60 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
23d70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23d80 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
23d90 62 6c 6f 63 6b 53 69 7a 65 20 3d 20 53 69 7a 65  blockSize = Size
23da0 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d 0a 20 20  (pMemory);....  
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23dc0 20 28 62 6c 6f 63 6b 53 69 7a 65 20 3e 20 30 29   (blockSize > 0)
23dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23de0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23df0 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73           lock (s
23e00 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
23e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23e30 20 20 20 20 20 20 20 20 20 62 79 74 65 73 41 6c           bytesAl
23e40 6c 6f 63 61 74 65 64 20 2b 3d 20 62 6c 6f 63 6b  located += block
23e50 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Size;....       
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 69 66 20 28 62 79 74 65 73 41 6c 6c 6f 63 61   if (bytesAlloca
23e80 74 65 64 20 3e 20 6d 61 78 69 6d 75 6d 42 79 74  ted > maximumByt
23e90 65 73 41 6c 6c 6f 63 61 74 65 64 29 0d 0a 20 20  esAllocated)..  
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23eb0 20 20 20 20 20 20 20 20 20 20 6d 61 78 69 6d 75            maximu
23ec0 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20  mBytesAllocated 
23ed0 3d 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64  = bytesAllocated
23ee0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
23ef0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23f00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
23f10 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
23f20 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
23f30 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 6f 72 79    return pMemory
23f40 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
23f50 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23fa0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
23fb0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
23fc0 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64 20 72    /// Gets and r
23fd0 65 74 75 72 6e 73 20 74 68 65 20 61 63 74 75 61  eturns the actua
23fe0 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 73 70  l size of the sp
23ff0 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 20 62  ecified memory b
24000 6c 6f 63 6b 20 74 68 61 74 0d 0a 20 20 20 20 20  lock that..     
24010 20 20 20 2f 2f 2f 20 77 61 73 20 70 72 65 76 69     /// was previ
24020 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66  ously obtained f
24030 72 6f 6d 20 74 68 65 20 3c 73 65 65 20 63 72 65  rom the <see cre
24040 66 3d 22 41 6c 6c 6f 63 61 74 65 22 20 2f 3e 20  f="Allocate" /> 
24050 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
24060 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
24070 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
24080 72 61 6d 20 6e 61 6d 65 3d 22 70 4d 65 6d 6f 72  ram name="pMemor
24090 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  y">..        ///
240a0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
240b0 74 65 72 20 74 6f 20 74 68 65 20 6d 65 6d 6f 72  ter to the memor
240c0 79 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f 75 73  y block previous
240d0 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ly obtained from
240e0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
240f0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 41 6c 6c  / <see cref="All
24100 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  ocate" /> method
24110 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
24120 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
24130 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
24140 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
24150 61 63 74 75 61 6c 20 73 69 7a 65 2c 20 69 6e 20  actual size, in 
24160 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20 6d 65  bytes, of the me
24170 6d 6f 72 79 20 62 6c 6f 63 6b 20 73 70 65 63 69  mory block speci
24180 66 69 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20  fied via the..  
24190 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65        /// native
241a0 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20 20 20   pointer...     
241b0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
241c0 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
241d0 63 20 73 74 61 74 69 63 20 69 6e 74 20 53 69 7a  c static int Siz
241e0 65 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79  e(IntPtr pMemory
241f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  )..        {..#i
24200 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
24210 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
24220 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
24230 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
24240 65 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a 65 5f 69  e3_malloc_size_i
24250 6e 74 65 72 6f 70 28 70 4d 65 6d 6f 72 79 29 3b  nterop(pMemory);
24260 0d 0a 23 65 6c 69 66 20 54 52 41 43 4b 5f 4d 45  ..#elif TRACK_ME
24270 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20 20 20  MORY_BYTES..    
24280 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
24290 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
242a0 20 4f 6b 2c 20 77 65 20 63 61 6e 6e 6f 74 20 64   Ok, we cannot d
242b0 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73 69 7a  etermine the siz
242c0 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  e of the memory 
242d0 62 6c 6f 63 6b 3b 0d 0a 20 20 20 20 20 20 20 20  block;..        
242e0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
242f0 72 65 66 6f 72 65 2c 20 6a 75 73 74 20 74 72 61  refore, just tra
24300 63 6b 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  ck number of all
24310 6f 63 61 74 69 6f 6e 73 20 69 6e 73 74 65 61 64  ocations instead
24320 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
24330 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
24340 65 74 75 72 6e 20 28 70 4d 65 6d 6f 72 79 20 21  eturn (pMemory !
24350 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 3f  = IntPtr.Zero) ?
24360 20 31 20 3a 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a   1 : 0;..#else..
24370 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24380 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  rn 0;..#endif.. 
24390 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
243a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
243b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
243f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
24400 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
24410 2f 20 46 72 65 65 73 20 61 20 6d 65 6d 6f 72 79  / Frees a memory
24420 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f 75 73 6c   block previousl
24430 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
24440 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
24450 20 3c 73 65 65 20 63 72 65 66 3d 22 41 6c 6c 6f   <see cref="Allo
24460 63 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  cate" /> method.
24470 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
24480 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
24490 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
244a0 65 3d 22 70 4d 65 6d 6f 72 79 22 3e 0d 0a 20 20  e="pMemory">..  
244b0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
244c0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
244d0 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b  the memory block
244e0 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 62 74 61   previously obta
244f0 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20  ined from the.. 
24500 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
24510 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65 22 20  cref="Allocate" 
24520 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
24530 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
24540 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
24550 20 73 74 61 74 69 63 20 76 6f 69 64 20 46 72 65   static void Fre
24560 65 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79  e(IntPtr pMemory
24570 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  )..        {..#i
24580 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42  f TRACK_MEMORY_B
24590 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20 20 20  YTES..          
245a0 20 20 69 66 20 28 70 4d 65 6d 6f 72 79 20 21 3d    if (pMemory !=
245b0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
245c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
245d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
245e0 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20 53 69  t blockSize = Si
245f0 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d 0a  ze(pMemory);....
24600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24610 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20 3e 20  if (blockSize > 
24620 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
24630 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24640 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
24650 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20  (syncRoot)..    
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24670 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24680 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 73             bytes
24690 41 6c 6c 6f 63 61 74 65 64 20 2d 3d 20 62 6c 6f  Allocated -= blo
246a0 63 6b 53 69 7a 65 3b 0d 0a 20 20 20 20 20 20 20  ckSize;..       
246b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
246c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
246e0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
246f0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
24700 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
24710 74 65 33 5f 66 72 65 65 28 70 4d 65 6d 6f 72 79  te3_free(pMemory
24720 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
24730 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
24740 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
24750 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
24760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
247b0 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
247c0 65 53 74 72 69 6e 67 20 53 74 61 74 69 63 20 43  eString Static C
247d0 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
247e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
247f0 20 54 68 69 73 20 63 6c 61 73 73 20 63 6f 6e 74   This class cont
24800 61 69 6e 73 20 73 74 61 74 69 63 20 6d 65 74 68  ains static meth
24810 6f 64 73 20 74 68 61 74 20 61 72 65 20 75 73 65  ods that are use
24820 64 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 6e  d to deal with n
24830 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 55  ative..    /// U
24840 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e  TF-8 string poin
24850 74 65 72 73 20 74 6f 20 62 65 20 75 73 65 64 20  ters to be used 
24860 77 69 74 68 20 74 68 65 20 53 51 4c 69 74 65 20  with the SQLite 
24870 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
24880 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
24890 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
248a0 73 74 61 74 69 63 20 63 6c 61 73 73 20 53 51 4c  static class SQL
248b0 69 74 65 53 74 72 69 6e 67 0d 0a 20 20 20 20 7b  iteString..    {
248c0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
248d0 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
248e0 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nts..        ///
248f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
24900 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20      /// This is 
24910 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 6f 73 73  the maximum poss
24920 69 62 6c 65 20 6c 65 6e 67 74 68 20 66 6f 72 20  ible length for 
24930 74 68 65 20 6e 61 74 69 76 65 20 55 54 46 2d 38  the native UTF-8
24940 20 65 6e 63 6f 64 65 64 0d 0a 20 20 20 20 20 20   encoded..      
24950 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20 75 73    /// strings us
24960 65 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69  ed with the SQLi
24970 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
24980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
24990 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
249a0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
249b0 20 69 6e 74 20 54 68 69 72 74 79 42 69 74 73 20   int ThirtyBits 
249c0 3d 20 30 78 33 66 66 66 66 66 66 66 3b 0d 0a 0d  = 0x3fffffff;...
249d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
249e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
24a30 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
24a40 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74     /// This is t
24a50 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 45 6e  he <see cref="En
24a60 63 6f 64 69 6e 67 22 20 2f 3e 20 6f 62 6a 65 63  coding" /> objec
24a70 74 20 69 6e 73 74 61 6e 63 65 20 75 73 65 64 20  t instance used 
24a80 74 6f 20 68 61 6e 64 6c 65 0d 0a 20 20 20 20 20  to handle..     
24a90 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 73 69 6f     /// conversio
24aa0 6e 73 20 66 72 6f 6d 2f 74 6f 20 55 54 46 2d 38  ns from/to UTF-8
24ab0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
24ac0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
24ad0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
24ae0 63 20 72 65 61 64 6f 6e 6c 79 20 45 6e 63 6f 64  c readonly Encod
24af0 69 6e 67 20 55 74 66 38 45 6e 63 6f 64 69 6e 67  ing Utf8Encoding
24b00 20 3d 20 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38   = Encoding.UTF8
24b10 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
24b20 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
24b30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24b80 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54 46 2d      #region UTF-
24b90 38 20 45 6e 63 6f 64 69 6e 67 20 48 65 6c 70 65  8 Encoding Helpe
24ba0 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
24bb0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
24bc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
24bd0 6e 76 65 72 74 73 20 74 68 65 20 73 70 65 63 69  nverts the speci
24be0 66 69 65 64 20 6d 61 6e 61 67 65 64 20 73 74 72  fied managed str
24bf0 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 55 54 46  ing into the UTF
24c00 2d 38 20 65 6e 63 6f 64 69 6e 67 20 61 6e 64 0d  -8 encoding and.
24c10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 74  .        /// ret
24c20 75 72 6e 73 20 74 68 65 20 61 72 72 61 79 20 6f  urns the array o
24c30 66 20 62 79 74 65 73 20 63 6f 6e 74 61 69 6e 69  f bytes containi
24c40 6e 67 20 69 74 73 20 72 65 70 72 65 73 65 6e 74  ng its represent
24c50 61 74 69 6f 6e 20 69 6e 20 74 68 61 74 0d 0a 20  ation in that.. 
24c60 20 20 20 20 20 20 20 2f 2f 2f 20 65 6e 63 6f 64         /// encod
24c70 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ing...        //
24c80 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
24c90 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
24ca0 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a   name="value">..
24cb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
24cc0 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20 74  managed string t
24cd0 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20  o convert...    
24ce0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
24cf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
24d00 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
24d10 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f   /// The array o
24d20 66 20 62 79 74 65 73 20 63 6f 6e 74 61 69 6e 69  f bytes containi
24d30 6e 67 20 74 68 65 20 72 65 70 72 65 73 65 6e 74  ng the represent
24d40 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 61 6e  ation of the man
24d50 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  aged..        //
24d60 2f 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  / string in the 
24d70 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 6f  UTF-8 encoding o
24d80 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c  r null upon fail
24d90 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
24da0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
24db0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
24dc0 74 69 63 20 62 79 74 65 5b 5d 20 47 65 74 55 74  tic byte[] GetUt
24dd0 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72 69 6e  f8BytesFromStrin
24de0 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
24df0 73 74 72 69 6e 67 20 76 61 6c 75 65 0d 0a 20 20  string value..  
24e00 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
24e10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24e20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
24e30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24e40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
24e50 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
24e60 20 20 20 20 72 65 74 75 72 6e 20 55 74 66 38 45      return Utf8E
24e70 6e 63 6f 64 69 6e 67 2e 47 65 74 42 79 74 65 73  ncoding.GetBytes
24e80 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20  (value);..      
24e90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ee0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24ef0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
24f00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
24f10 76 65 72 74 73 20 74 68 65 20 73 70 65 63 69 66  verts the specif
24f20 69 65 64 20 61 72 72 61 79 20 6f 66 20 62 79 74  ied array of byt
24f30 65 73 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  es representing 
24f40 61 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65 0d  a string in the.
24f50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54 46  .        /// UTF
24f60 2d 38 20 65 6e 63 6f 64 69 6e 67 20 61 6e 64 20  -8 encoding and 
24f70 72 65 74 75 72 6e 73 20 61 20 6d 61 6e 61 67 65  returns a manage
24f80 64 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20  d string...     
24f90 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
24fa0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
24fb0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 79 74 65  param name="byte
24fc0 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  s">..        ///
24fd0 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 62 79   The array of by
24fe0 74 65 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d  tes to convert..
24ff0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
25000 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
25010 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
25020 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61        /// The ma
25030 6e 61 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20  naged string or 
25040 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72  null upon failur
25050 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
25060 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
25070 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
25080 63 20 73 74 72 69 6e 67 20 47 65 74 53 74 72 69  c string GetStri
25090 6e 67 46 72 6f 6d 55 74 66 38 42 79 74 65 73 28  ngFromUtf8Bytes(
250a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
250b0 74 65 5b 5d 20 62 79 74 65 73 0d 0a 20 20 20 20  te[] bytes..    
250c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
250d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
250e0 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d 20 6e    if (bytes == n
250f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
25100 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
25110 6c 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  l;....#if !PLATF
25120 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
25130 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
25140 20 20 72 65 74 75 72 6e 20 55 74 66 38 45 6e 63    return Utf8Enc
25150 6f 64 69 6e 67 2e 47 65 74 53 74 72 69 6e 67 28  oding.GetString(
25160 62 79 74 65 73 29 3b 0d 0a 23 65 6c 73 65 0d 0a  bytes);..#else..
25170 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
25180 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e 67 2e  rn Utf8Encoding.
25190 47 65 74 53 74 72 69 6e 67 28 62 79 74 65 73 2c  GetString(bytes,
251a0 20 30 2c 20 62 79 74 65 73 2e 4c 65 6e 67 74 68   0, bytes.Length
251b0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
251c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
251d0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
251e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
251f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25230 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
25240 55 54 46 2d 38 20 53 74 72 69 6e 67 20 48 65 6c  UTF-8 String Hel
25250 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
25260 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
25270 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
25280 50 72 6f 62 65 73 20 61 20 6e 61 74 69 76 65 20  Probes a native 
25290 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 73 74 72  pointer to a str
252a0 69 6e 67 20 69 6e 20 74 68 65 20 55 54 46 2d 38  ing in the UTF-8
252b0 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 69 74   encoding for it
252c0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  s..        /// t
252d0 65 72 6d 69 6e 61 74 69 6e 67 20 4e 55 4c 20 63  erminating NUL c
252e0 68 61 72 61 63 74 65 72 2c 20 77 69 74 68 69 6e  haracter, within
252f0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c   the specified l
25300 65 6e 67 74 68 20 6c 69 6d 69 74 2e 0d 0a 20 20  ength limit...  
25310 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
25320 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
25330 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
25340 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  Value">..       
25350 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
25360 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 73  NUL-terminated s
25370 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a  tring pointer...
25380 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
25390 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
253a0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
253b0 69 6d 69 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  imit">..        
253c0 2f 2f 2f 20 54 68 65 20 6d 61 78 69 6d 75 6d 20  /// The maximum 
253d0 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 6e 61  length of the na
253e0 74 69 76 65 20 73 74 72 69 6e 67 2c 20 69 6e 20  tive string, in 
253f0 62 79 74 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  bytes...        
25400 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
25410 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
25420 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
25430 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
25440 68 65 20 6e 61 74 69 76 65 20 73 74 72 69 6e 67  he native string
25450 2c 20 69 6e 20 62 79 74 65 73 20 2d 4f 52 2d 20  , in bytes -OR- 
25460 7a 65 72 6f 20 69 66 20 74 68 65 20 6c 65 6e 67  zero if the leng
25470 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  th..        /// 
25480 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 64 65 74  could not be det
25490 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20 20 20  ermined...      
254a0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
254b0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
254c0 20 73 74 61 74 69 63 20 69 6e 74 20 50 72 6f 62   static int Prob
254d0 65 46 6f 72 55 74 66 38 42 79 74 65 4c 65 6e 67  eForUtf8ByteLeng
254e0 74 68 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  th(..           
254f0 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65 2c 0d   IntPtr pValue,.
25500 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
25510 20 6c 69 6d 69 74 0d 0a 20 20 20 20 20 20 20 20   limit..        
25520 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
25530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
25540 74 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0d 0a 0d  t length = 0;...
25550 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
25560 28 28 70 56 61 6c 75 65 20 21 3d 20 49 6e 74 50  ((pValue != IntP
25570 74 72 2e 5a 65 72 6f 29 20 26 26 20 28 6c 69 6d  tr.Zero) && (lim
25580 69 74 20 3e 20 30 29 29 0d 0a 20 20 20 20 20 20  it > 0))..      
25590 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
255a0 20 20 20 20 20 20 20 20 20 64 6f 0d 0a 20 20 20           do..   
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
255c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255d0 20 20 20 20 69 66 20 28 4d 61 72 73 68 61 6c 2e      if (Marshal.
255e0 52 65 61 64 42 79 74 65 28 70 56 61 6c 75 65 2c  ReadByte(pValue,
255f0 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 0d 0a   length) == 0)..
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25610 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
25620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25630 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68        if (length
25640 20 3e 3d 20 6c 69 6d 69 74 29 0d 0a 20 20 20 20   >= limit)..    
25650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25660 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a 20 20      break;....  
25670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25680 20 20 6c 65 6e 67 74 68 2b 2b 3b 0d 0a 20 20 20    length++;..   
25690 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 77               } w
256a0 68 69 6c 65 20 28 74 72 75 65 29 3b 0d 0a 20 20  hile (true);..  
256b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
256c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
256d0 6e 20 6c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20  n length;..     
256e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
256f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25740 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
25750 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
25760 6e 76 65 72 74 73 20 74 68 65 20 73 70 65 63 69  nverts the speci
25770 66 69 65 64 20 6e 61 74 69 76 65 20 4e 55 4c 2d  fied native NUL-
25780 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
25790 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 0d   string pointer.
257a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74  .        /// int
257b0 6f 20 61 20 6d 61 6e 61 67 65 64 20 73 74 72 69  o a managed stri
257c0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ng...        ///
257d0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
257e0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
257f0 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a  name="pValue">..
25800 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
25810 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69  native NUL-termi
25820 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
25830 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20  ng pointer...   
25840 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
25850 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
25860 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
25870 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65    /// The manage
25880 64 20 73 74 72 69 6e 67 20 6f 72 20 6e 75 6c 6c  d string or null
25890 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a   upon failure...
258a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
258b0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
258c0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
258d0 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f 6d 55  ring StringFromU
258e0 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  tf8IntPtr(..    
258f0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
25900 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  Value..         
25910 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
25920 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
25930 75 72 6e 20 53 74 72 69 6e 67 46 72 6f 6d 55 74  urn StringFromUt
25940 66 38 49 6e 74 50 74 72 28 70 56 61 6c 75 65 2c  f8IntPtr(pValue,
25950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25960 20 20 50 72 6f 62 65 46 6f 72 55 74 66 38 42 79    ProbeForUtf8By
25970 74 65 4c 65 6e 67 74 68 28 70 56 61 6c 75 65 2c  teLength(pValue,
25980 20 54 68 69 72 74 79 42 69 74 73 29 29 3b 0d 0a   ThirtyBits));..
25990 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
259a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
259b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
259f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
25a00 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
25a10 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74 68 65 20  // Converts the 
25a20 73 70 65 63 69 66 69 65 64 20 6e 61 74 69 76 65  specified native
25a30 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f   UTF-8 string po
25a40 69 6e 74 65 72 20 6f 66 20 74 68 65 20 73 70 65  inter of the spe
25a50 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20 20  cified..        
25a60 2f 2f 2f 20 6c 65 6e 67 74 68 20 69 6e 74 6f 20  /// length into 
25a70 61 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67  a managed string
25a80 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
25a90 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
25aa0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
25ab0 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20  me="pValue">..  
25ac0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
25ad0 74 69 76 65 20 55 54 46 2d 38 20 73 74 72 69 6e  tive UTF-8 strin
25ae0 67 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20 20  g pointer...    
25af0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
25b00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
25b10 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74  aram name="lengt
25b20 68 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  h">..        ///
25b30 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
25b40 68 65 20 6e 61 74 69 76 65 20 73 74 72 69 6e 67  he native string
25b50 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20  , in bytes...   
25b60 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
25b70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
25b80 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
25b90 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65    /// The manage
25ba0 64 20 73 74 72 69 6e 67 20 6f 72 20 6e 75 6c 6c  d string or null
25bb0 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a   upon failure...
25bc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
25bd0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
25be0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
25bf0 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f 6d 55  ring StringFromU
25c00 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  tf8IntPtr(..    
25c10 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
25c20 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  Value,..        
25c30 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 0d 0a      int length..
25c40 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
25c50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25c60 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65        if (pValue
25c70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
25c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c90 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
25ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
25cb0 20 28 6c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20   (length > 0).. 
25cc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
25ce0 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e 65 77  te[] bytes = new
25cf0 20 62 79 74 65 5b 6c 65 6e 67 74 68 5d 3b 0d 0a   byte[length];..
25d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25d10 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 70    Marshal.Copy(p
25d20 56 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 30 2c  Value, bytes, 0,
25d30 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20   length);....   
25d40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25d50 75 72 6e 20 47 65 74 53 74 72 69 6e 67 46 72 6f  urn GetStringFro
25d60 6d 55 74 66 38 42 79 74 65 73 28 62 79 74 65 73  mUtf8Bytes(bytes
25d70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
25d80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25d90 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45   return String.E
25da0 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 7d  mpty;..        }
25db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
25dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e00 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
25e10 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
25e20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72        /// Conver
25e30 74 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ts the specified
25e40 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20   managed string 
25e50 69 6e 74 6f 20 61 20 6e 61 74 69 76 65 20 4e 55  into a native NU
25e60 4c 2d 74 65 72 6d 69 6e 61 74 65 64 0d 0a 20 20  L-terminated..  
25e70 20 20 20 20 20 20 2f 2f 2f 20 55 54 46 2d 38 20        /// UTF-8 
25e80 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 20 75  string pointer u
25e90 73 69 6e 67 20 6d 65 6d 6f 72 79 20 6f 62 74 61  sing memory obta
25ea0 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 53 51  ined from the SQ
25eb0 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20  Lite core..     
25ec0 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 2e 0d     /// library..
25ed0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
25ee0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
25ef0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
25f00 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20  ="value">..     
25f10 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67     /// The manag
25f20 65 64 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6e  ed string to con
25f30 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  vert...        /
25f40 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
25f50 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
25f60 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
25f70 54 68 65 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74  The native NUL-t
25f80 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
25f90 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 20 6f  string pointer o
25fa0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  r..        /// <
25fb0 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72  see cref="IntPtr
25fc0 2e 5a 65 72 6f 22 20 2f 3e 20 75 70 6f 6e 20 66  .Zero" /> upon f
25fd0 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ailure...       
25fe0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
25ff0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
26000 73 74 61 74 69 63 20 49 6e 74 50 74 72 20 55 74  static IntPtr Ut
26010 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
26020 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng(..           
26030 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0d 0a 20   string value.. 
26040 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
26050 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26060 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
26070 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
26080 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26090 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
260a0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
260b0 74 72 20 72 65 73 75 6c 74 20 3d 20 49 6e 74 50  tr result = IntP
260c0 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
260d0 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74        byte[] byt
260e0 65 73 20 3d 20 47 65 74 55 74 66 38 42 79 74 65  es = GetUtf8Byte
260f0 73 46 72 6f 6d 53 74 72 69 6e 67 28 76 61 6c 75  sFromString(valu
26100 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
26110 20 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d 20     if (bytes == 
26120 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
26130 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
26140 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
26150 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65            int le
26160 6e 67 74 68 20 3d 20 62 79 74 65 73 2e 4c 65 6e  ngth = bytes.Len
26170 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
26180 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 51 4c      result = SQL
26190 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61  iteMemory.Alloca
261a0 74 65 28 6c 65 6e 67 74 68 20 2b 20 31 29 3b 0d  te(length + 1);.
261b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
261c0 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 49 6e 74  f (result == Int
261d0 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
261e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
261f0 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  n IntPtr.Zero;..
26200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
26210 72 73 68 61 6c 2e 43 6f 70 79 28 62 79 74 65 73  rshal.Copy(bytes
26220 2c 20 30 2c 20 72 65 73 75 6c 74 2c 20 6c 65 6e  , 0, result, len
26230 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  gth);..         
26240 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65     Marshal.Write
26250 42 79 74 65 28 72 65 73 75 6c 74 2c 20 6c 65 6e  Byte(result, len
26260 67 74 68 2c 20 30 29 3b 0d 0a 0d 0a 20 20 20 20  gth, 0);....    
26270 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
26280 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
26290 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
262a0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
262b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
262c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26300 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54 46 2d      #region UTF-
26310 38 20 53 74 72 69 6e 67 20 41 72 72 61 79 20 48  8 String Array H
26320 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
26330 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
26340 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
26350 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6c 6f 67  / Converts a log
26360 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20 6e 61  ical array of na
26370 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61  tive NUL-termina
26380 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
26390 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 6f  ..        /// po
263a0 69 6e 74 65 72 73 20 69 6e 74 6f 20 61 6e 20 61  inters into an a
263b0 72 72 61 79 20 6f 66 20 6d 61 6e 61 67 65 64 20  rray of managed 
263c0 73 74 72 69 6e 67 73 2e 0d 0a 20 20 20 20 20 20  strings...      
263d0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
263e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
263f0 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22  aram name="argc"
26400 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
26410 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65  he number of ele
26420 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 6c 6f 67  ments in the log
26430 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20 6e 61  ical array of na
26440 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tive..        //
26450 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64  / NUL-terminated
26460 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f   UTF-8 string po
26470 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  inters...       
26480 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
26490 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
264a0 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a  m name="argv">..
264b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
264c0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
264d0 6f 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 61 72  o the logical ar
264e0 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20 4e 55  ray of native NU
264f0 4c 2d 74 65 72 6d 69 6e 61 74 65 64 0d 0a 20 20  L-terminated..  
26500 20 20 20 20 20 20 2f 2f 2f 20 55 54 46 2d 38 20        /// UTF-8 
26510 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 73 20  string pointers 
26520 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
26530 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
26540 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
26550 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
26560 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
26570 6f 66 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e  of managed strin
26580 67 73 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20  gs or null upon 
26590 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20  failure...      
265a0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
265b0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
265c0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d   static string[]
265d0 20 53 74 72 69 6e 67 41 72 72 61 79 46 72 6f 6d   StringArrayFrom
265e0 55 74 66 38 53 69 7a 65 41 6e 64 49 6e 74 50 74  Utf8SizeAndIntPt
265f0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
26600 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20  int argc,..     
26610 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61 72         IntPtr ar
26620 67 76 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  gv..            
26630 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
26640 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
26650 67 63 20 3c 20 30 29 0d 0a 20 20 20 20 20 20 20  gc < 0)..       
26660 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26670 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
26680 20 20 20 20 20 69 66 20 28 61 72 67 76 20 3d 3d       if (argv ==
26690 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
266a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
266b0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
266c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
266d0 67 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  g[] result = new
266e0 20 73 74 72 69 6e 67 5b 61 72 67 63 5d 3b 0d 0a   string[argc];..
266f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
26700 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
26710 2c 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 20  , offset = 0;.. 
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26730 20 20 20 69 6e 64 65 78 20 3c 20 72 65 73 75 6c     index < resul
26740 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20  t.Length;..     
26750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26760 6e 64 65 78 2b 2b 2c 20 6f 66 66 73 65 74 20 2b  ndex++, offset +
26770 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 0d 0a  = IntPtr.Size)..
26780 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
267a0 6e 74 50 74 72 20 70 41 72 67 20 3d 20 53 51 4c  ntPtr pArg = SQL
267b0 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  iteMarshal.ReadI
267c0 6e 74 50 74 72 28 61 72 67 76 2c 20 6f 66 66 73  ntPtr(argv, offs
267d0 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
267e0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 5b 69          result[i
267f0 6e 64 65 78 5d 20 3d 20 28 70 41 72 67 20 21 3d  ndex] = (pArg !=
26800 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 3f 0d   IntPtr.Zero) ?.
26810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26820 20 20 20 20 20 53 74 72 69 6e 67 46 72 6f 6d 55       StringFromU
26830 74 66 38 49 6e 74 50 74 72 28 70 41 72 67 29 20  tf8IntPtr(pArg) 
26840 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  : null;..       
26850 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26860 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
26870 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
26880 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
26890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
268e0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
268f0 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74       /// Convert
26900 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 6d 61  s an array of ma
26910 6e 61 67 65 64 20 73 74 72 69 6e 67 73 20 69 6e  naged strings in
26920 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 6e  to an array of n
26930 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f  ative..        /
26940 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65  // NUL-terminate
26950 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70  d UTF-8 string p
26960 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20 20 20  ointers...      
26970 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
26980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
26990 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
269a0 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  s">..        ///
269b0 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 6d 61   The array of ma
269c0 6e 61 67 65 64 20 73 74 72 69 6e 67 73 20 74 6f  naged strings to
269d0 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20   convert...     
269e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
269f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
26a00 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
26a10 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66  /// The array of
26a20 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d   native NUL-term
26a30 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
26a40 69 6e 67 20 70 6f 69 6e 74 65 72 73 20 6f 72 20  ing pointers or 
26a50 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  null..        //
26a60 2f 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d  / upon failure..
26a70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
26a80 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
26a90 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49   public static I
26aa0 6e 74 50 74 72 5b 5d 20 55 74 66 38 49 6e 74 50  ntPtr[] Utf8IntP
26ab0 74 72 41 72 72 61 79 46 72 6f 6d 53 74 72 69 6e  trArrayFromStrin
26ac0 67 41 72 72 61 79 28 0d 0a 20 20 20 20 20 20 20  gArray(..       
26ad0 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 76 61       string[] va
26ae0 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lues..          
26af0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
26b00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26b10 76 61 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  values == null).
26b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26b30 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
26b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
26b50 50 74 72 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e  Ptr[] result = n
26b60 65 77 20 49 6e 74 50 74 72 5b 76 61 6c 75 65 73  ew IntPtr[values
26b70 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20  .Length];....   
26b80 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
26b90 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
26ba0 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67  ex < result.Leng
26bb0 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  th; index++)..  
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26bd0 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20 55 74  sult[index] = Ut
26be0 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
26bf0 6e 67 28 76 61 6c 75 65 73 5b 69 6e 64 65 78 5d  ng(values[index]
26c00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26c10 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
26c20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
26c30 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
26c40 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
26c50 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
26c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
26cb0 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 42   #region SQLiteB
26cc0 79 74 65 73 20 53 74 61 74 69 63 20 43 6c 61 73  ytes Static Clas
26cd0 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  s..    /// <summ
26ce0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
26cf0 69 73 20 63 6c 61 73 73 20 63 6f 6e 74 61 69 6e  is class contain
26d00 73 20 73 74 61 74 69 63 20 6d 65 74 68 6f 64 73  s static methods
26d10 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 74   that are used t
26d20 6f 20 64 65 61 6c 20 77 69 74 68 20 6e 61 74 69  o deal with nati
26d30 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 70 6f 69 6e  ve..    /// poin
26d40 74 65 72 73 20 74 6f 20 6d 65 6d 6f 72 79 20 62  ters to memory b
26d50 6c 6f 63 6b 73 20 74 68 61 74 20 6c 6f 67 69 63  locks that logic
26d60 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 61 72 72  ally contain arr
26d70 61 79 73 20 6f 66 20 62 79 74 65 73 20 74 6f 20  ays of bytes to 
26d80 62 65 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 65 64  be..    /// used
26d90 20 77 69 74 68 20 74 68 65 20 53 51 4c 69 74 65   with the SQLite
26da0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
26db0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
26dc0 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
26dd0 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53 51   static class SQ
26de0 4c 69 74 65 42 79 74 65 73 0d 0a 20 20 20 20 7b  LiteBytes..    {
26df0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
26e00 6e 20 42 79 74 65 20 41 72 72 61 79 20 48 65 6c  n Byte Array Hel
26e10 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
26e20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
26e30 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
26e40 43 6f 6e 76 65 72 74 73 20 61 20 6e 61 74 69 76  Converts a nativ
26e50 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 6c  e pointer to a l
26e60 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20  ogical array of 
26e70 62 79 74 65 73 20 6f 66 20 74 68 65 0d 0a 20 20  bytes of the..  
26e80 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63 69 66        /// specif
26e90 69 65 64 20 6c 65 6e 67 74 68 20 69 6e 74 6f 20  ied length into 
26ea0 61 20 6d 61 6e 61 67 65 64 20 62 79 74 65 20 61  a managed byte a
26eb0 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rray...        /
26ec0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
26ed0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
26ee0 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e  m name="pValue">
26ef0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
26f00 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
26f10 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61 6c 20   to the logical 
26f20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 20 74  array of bytes t
26f30 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20  o convert...    
26f40 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
26f50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
26f60 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74  aram name="lengt
26f70 68 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  h">..        ///
26f80 20 54 68 65 20 6c 65 6e 67 74 68 2c 20 69 6e 20   The length, in 
26f90 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20 6c 6f  bytes, of the lo
26fa0 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20 62  gical array of b
26fb0 79 74 65 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e  ytes to convert.
26fc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
26fd0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
26fe0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
26ff0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d         /// The m
27000 61 6e 61 67 65 64 20 62 79 74 65 20 61 72 72 61  anaged byte arra
27010 79 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66  y or null upon f
27020 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ailure...       
27030 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
27040 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
27050 73 74 61 74 69 63 20 62 79 74 65 5b 5d 20 46 72  static byte[] Fr
27060 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  omIntPtr(..     
27070 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
27080 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alue,..         
27090 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 0d 0a 20     int length.. 
270a0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
270b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
270c0 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65 20       if (pValue 
270d0 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
270e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
270f0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
27100 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
27110 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20  (length == 0).. 
27120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27130 65 74 75 72 6e 20 6e 65 77 20 62 79 74 65 5b 30  eturn new byte[0
27140 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
27150 20 20 62 79 74 65 5b 5d 20 72 65 73 75 6c 74 20    byte[] result 
27160 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65 6e 67 74  = new byte[lengt
27170 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  h];....         
27180 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
27190 70 56 61 6c 75 65 2c 20 72 65 73 75 6c 74 2c 20  pValue, result, 
271a0 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  0, length);.... 
271b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
271c0 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
271d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
271e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27220 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27230 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
27240 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
27250 6e 76 65 72 74 73 20 61 20 6d 61 6e 61 67 65 64  nverts a managed
27260 20 62 79 74 65 20 61 72 72 61 79 20 69 6e 74 6f   byte array into
27270 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65   a native pointe
27280 72 20 74 6f 20 61 20 6c 6f 67 69 63 61 6c 0d 0a  r to a logical..
27290 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 72 61          /// arra
272a0 79 20 6f 66 20 62 79 74 65 73 2e 0d 0a 20 20 20  y of bytes...   
272b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
272c0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
272d0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
272e0 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  lue">..        /
272f0 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65 64 20 62  // The managed b
27300 79 74 65 20 61 72 72 61 79 20 74 6f 20 63 6f 6e  yte array to con
27310 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  vert...        /
27320 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
27330 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
27340 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
27350 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
27360 65 72 20 74 6f 20 61 20 6c 6f 67 69 63 61 6c 20  er to a logical 
27370 62 79 74 65 20 61 72 72 61 79 20 6f 72 20 6e 75  byte array or nu
27380 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e  ll upon failure.
27390 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
273a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
273b0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
273c0 49 6e 74 50 74 72 20 54 6f 49 6e 74 50 74 72 28  IntPtr ToIntPtr(
273d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
273e0 74 65 5b 5d 20 76 61 6c 75 65 0d 0a 20 20 20 20  te[] value..    
273f0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
27400 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27410 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
27420 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
27430 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
27440 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
27450 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e           int len
27460 67 74 68 20 3d 20 76 61 6c 75 65 2e 4c 65 6e 67  gth = value.Leng
27470 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  th;....         
27480 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d     if (length ==
27490 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
274a0 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50       return IntP
274b0 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
274c0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 72          IntPtr r
274d0 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 4d 65  esult = SQLiteMe
274e0 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28 6c 65  mory.Allocate(le
274f0 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ngth);....      
27500 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
27510 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
27520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27530 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e    return IntPtr.
27540 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
27550 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
27560 79 28 76 61 6c 75 65 2c 20 30 2c 20 72 65 73 75  y(value, 0, resu
27570 6c 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a  lt, length);....
27580 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27590 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
275a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
275b0 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
275c0 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
275d0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
275e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
275f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27620 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
27630 6f 6e 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c  on SQLiteMarshal
27640 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20   Static Class.. 
27650 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
27660 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63  ..    /// This c
27670 6c 61 73 73 20 63 6f 6e 74 61 69 6e 73 20 73 74  lass contains st
27680 61 74 69 63 20 6d 65 74 68 6f 64 73 20 74 68 61  atic methods tha
27690 74 20 61 72 65 20 75 73 65 64 20 74 6f 20 70 65  t are used to pe
276a0 72 66 6f 72 6d 20 73 65 76 65 72 61 6c 0d 0a 20  rform several.. 
276b0 20 20 20 2f 2f 2f 20 6c 6f 77 2d 6c 65 76 65 6c     /// low-level
276c0 20 64 61 74 61 20 6d 61 72 73 68 61 6c 6c 69 6e   data marshallin
276d0 67 20 74 61 73 6b 73 20 62 65 74 77 65 65 6e 20  g tasks between 
276e0 6e 61 74 69 76 65 20 61 6e 64 20 6d 61 6e 61 67  native and manag
276f0 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  ed code...    //
27700 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
27710 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
27720 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 61  c class SQLiteMa
27730 72 73 68 61 6c 0d 0a 20 20 20 20 7b 0d 0a 20 20  rshal..    {..  
27740 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e        #region In
27750 74 50 74 72 20 48 65 6c 70 65 72 20 4d 65 74 68  tPtr Helper Meth
27760 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
27770 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
27780 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
27790 61 20 6e 65 77 20 3c 73 65 65 20 63 72 65 66 3d  a new <see cref=
277a0 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65  "IntPtr" /> obje
277b0 63 74 20 69 6e 73 74 61 6e 63 65 20 62 61 73 65  ct instance base
277c0 64 20 6f 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d on the..      
277d0 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 65 64 20    /// specified 
277e0 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74  <see cref="IntPt
277f0 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  r" /> object ins
27800 74 61 6e 63 65 20 61 6e 64 20 61 6e 20 69 6e 74  tance and an int
27810 65 67 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  eger..        //
27820 2f 20 6f 66 66 73 65 74 2e 0d 0a 20 20 20 20 20  / offset...     
27830 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
27840 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
27850 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e  param name="poin
27860 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ter">..        /
27870 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
27880 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a  ="IntPtr" /> obj
27890 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70  ect instance rep
278a0 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61  resenting the ba
278b0 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  se..        /// 
278c0 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e  memory location.
278d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
278e0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
278f0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
27900 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20  "offset">..     
27910 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67     /// The integ
27920 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  er offset from t
27930 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c  he base memory l
27940 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65  ocation that the
27950 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 2f 2f   new..        //
27960 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  / <see cref="Int
27970 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  Ptr" /> object i
27980 6e 73 74 61 6e 63 65 20 73 68 6f 75 6c 64 20 70  nstance should p
27990 6f 69 6e 74 20 74 6f 2e 0d 0a 20 20 20 20 20 20  oint to...      
279a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
279b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
279c0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
279d0 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73 65 65 20  // The new <see 
279e0 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
279f0 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
27a00 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
27a10 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
27a20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
27a30 20 49 6e 74 50 74 72 20 49 6e 74 50 74 72 46 6f   IntPtr IntPtrFo
27a40 72 4f 66 66 73 65 74 28 0d 0a 20 20 20 20 20 20  rOffset(..      
27a50 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69        IntPtr poi
27a60 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  nter,..         
27a70 20 20 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20     int offset.. 
27a80 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
27a90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27aa0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
27ab0 49 6e 74 50 74 72 28 70 6f 69 6e 74 65 72 2e 54  IntPtr(pointer.T
27ac0 6f 49 6e 74 36 34 28 29 20 2b 20 6f 66 66 73 65  oInt64() + offse
27ad0 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  t);..        }..
27ae0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
27af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
27b40 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
27b50 20 20 20 20 2f 2f 2f 20 52 6f 75 6e 64 73 20 75      /// Rounds u
27b60 70 20 61 6e 20 69 6e 74 65 67 65 72 20 73 69 7a  p an integer siz
27b70 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6d 75  e to the next mu
27b80 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 20 61 6c  ltiple of the al
27b90 69 67 6e 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20  ignment...      
27ba0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
27bb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
27bc0 61 72 61 6d 20 6e 61 6d 65 3d 22 73 69 7a 65 22  aram name="size"
27bd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
27be0 68 65 20 73 69 7a 65 2c 20 69 6e 20 62 79 74 65  he size, in byte
27bf0 73 2c 20 74 6f 20 62 65 20 72 6f 75 6e 64 65 64  s, to be rounded
27c00 20 75 70 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f   up...        //
27c10 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
27c20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
27c30 61 6d 65 3d 22 61 6c 69 67 6e 6d 65 6e 74 22 3e  ame="alignment">
27c40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
27c50 65 20 72 65 71 75 69 72 65 64 20 61 6c 69 67 6e  e required align
27c60 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 72 65 74  ment for the ret
27c70 75 72 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  urn value...    
27c80 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
27c90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
27ca0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
27cb0 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65 2c 20 69   /// The size, i
27cc0 6e 20 62 79 74 65 73 2c 20 72 6f 75 6e 64 65 64  n bytes, rounded
27cd0 20 75 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20   up to the next 
27ce0 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 0d  multiple of the.
27cf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 69  .        /// ali
27d00 67 6e 6d 65 6e 74 2e 20 20 54 68 69 73 20 76 61  gnment.  This va
27d10 6c 75 65 20 6d 61 79 20 65 6e 64 20 75 70 20 62  lue may end up b
27d20 65 69 6e 67 20 74 68 65 20 73 61 6d 65 20 61 73  eing the same as
27d30 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0d 0a 20   the original.. 
27d40 20 20 20 20 20 20 20 2f 2f 2f 20 73 69 7a 65 2e         /// size.
27d50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
27d60 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
27d70 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
27d80 69 6e 74 20 52 6f 75 6e 64 55 70 28 0d 0a 20 20  int RoundUp(..  
27d90 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 69            int si
27da0 7a 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ze,..           
27db0 20 69 6e 74 20 61 6c 69 67 6e 6d 65 6e 74 0d 0a   int alignment..
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
27dd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27de0 20 20 20 20 20 20 69 6e 74 20 61 6c 69 67 6e 6d        int alignm
27df0 65 6e 74 4d 69 6e 75 73 4f 6e 65 20 3d 20 61 6c  entMinusOne = al
27e00 69 67 6e 6d 65 6e 74 20 2d 20 31 3b 0d 0a 20 20  ignment - 1;..  
27e10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27e20 20 28 28 73 69 7a 65 20 2b 20 61 6c 69 67 6e 6d   ((size + alignm
27e30 65 6e 74 4d 69 6e 75 73 4f 6e 65 29 20 26 20 7e  entMinusOne) & ~
27e40 61 6c 69 67 6e 6d 65 6e 74 4d 69 6e 75 73 4f 6e  alignmentMinusOn
27e50 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
27e60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
27e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27eb0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
27ec0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
27ed0 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
27ee0 65 73 20 74 68 65 20 6f 66 66 73 65 74 2c 20 69  es the offset, i
27ef0 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20  n bytes, of the 
27f00 6e 65 78 74 20 73 74 72 75 63 74 75 72 65 20 6d  next structure m
27f10 65 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  ember...        
27f20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
27f30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
27f40 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22  am name="offset"
27f50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
27f60 68 65 20 6f 66 66 73 65 74 2c 20 69 6e 20 62 79  he offset, in by
27f70 74 65 73 2c 20 6f 66 20 74 68 65 20 63 75 72 72  tes, of the curr
27f80 65 6e 74 20 73 74 72 75 63 74 75 72 65 20 6d 65  ent structure me
27f90 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  mber...        /
27fa0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
27fb0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
27fc0 6e 61 6d 65 3d 22 73 69 7a 65 22 3e 0d 0a 20 20  name="size">..  
27fd0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 69        /// The si
27fe0 7a 65 2c 20 69 6e 20 62 79 74 65 73 2c 20 6f 66  ze, in bytes, of
27ff0 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 72   the current str
28000 75 63 74 75 72 65 20 6d 65 6d 62 65 72 2e 0d 0a  ucture member...
28010 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
28020 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
28030 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
28040 6c 69 67 6e 6d 65 6e 74 22 3e 0d 0a 20 20 20 20  lignment">..    
28050 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 6c 69 67      /// The alig
28060 6e 6d 65 6e 74 2c 20 69 6e 20 62 79 74 65 73 2c  nment, in bytes,
28070 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74 72   of the next str
28080 75 63 74 75 72 65 20 6d 65 6d 62 65 72 2e 0d 0a  ucture member...
28090 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
280a0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
280b0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
280c0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 66 66       /// The off
280d0 73 65 74 2c 20 69 6e 20 62 79 74 65 73 2c 20 6f  set, in bytes, o
280e0 66 20 74 68 65 20 6e 65 78 74 20 73 74 72 75 63  f the next struc
280f0 74 75 72 65 20 6d 65 6d 62 65 72 2e 0d 0a 20 20  ture member...  
28100 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
28110 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
28120 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
28130 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 0d 0a 20  NextOffsetOf(.. 
28140 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f             int o
28150 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
28160 20 20 20 20 69 6e 74 20 73 69 7a 65 2c 0d 0a 20      int size,.. 
28170 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61             int a
28180 6c 69 67 6e 6d 65 6e 74 0d 0a 20 20 20 20 20 20  lignment..      
28190 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
281a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
281b0 72 65 74 75 72 6e 20 52 6f 75 6e 64 55 70 28 6f  return RoundUp(o
281c0 66 66 73 65 74 20 2b 20 73 69 7a 65 2c 20 61 6c  ffset + size, al
281d0 69 67 6e 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20  ignment);..     
281e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
281f0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
28200 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28250 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d         #region M
28260 61 72 73 68 61 6c 20 52 65 61 64 20 48 65 6c 70  arshal Read Help
28270 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
28280 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
28290 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52  >..        /// R
282a0 65 61 64 73 20 61 20 3c 73 65 65 20 63 72 65 66  eads a <see cref
282b0 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75  ="Int32" /> valu
282c0 65 20 66 72 6f 6d 20 74 68 65 20 73 70 65 63 69  e from the speci
282d0 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20  fied memory..   
282e0 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f       /// locatio
282f0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
28300 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
28310 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
28320 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a  ame="pointer">..
28330 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
28340 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74  <see cref="IntPt
28350 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  r" /> object ins
28360 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e 74 69  tance representi
28370 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20 20 20  ng the base..   
28380 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20       /// memory 
28390 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  location...     
283a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
283b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
283c0 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74  ram name="offset
283d0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
283e0 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73  The integer offs
283f0 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61 73 65  et from the base
28400 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
28410 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20 20 20   where the..    
28420 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
28430 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c  f="Int32" /> val
28440 75 65 20 74 6f 20 62 65 20 72 65 61 64 20 69 73  ue to be read is
28450 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20   located...     
28460 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
28470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
28480 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
28490 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
284a0 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c  f="Int32" /> val
284b0 75 65 20 61 74 20 74 68 65 20 73 70 65 63 69 66  ue at the specif
284c0 69 65 64 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  ied memory locat
284d0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
284e0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
284f0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
28500 74 69 63 20 69 6e 74 20 52 65 61 64 49 6e 74 33  tic int ReadInt3
28510 32 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2(..            
28520 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d  IntPtr pointer,.
28530 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
28540 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20 20 20   offset..       
28550 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
28560 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
28570 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
28580 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  K..            r
28590 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65  eturn Marshal.Re
285a0 61 64 49 6e 74 33 32 28 70 6f 69 6e 74 65 72 2c  adInt32(pointer,
285b0 20 6f 66 66 73 65 74 29 3b 0d 0a 23 65 6c 73 65   offset);..#else
285c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
285d0 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61  turn Marshal.Rea
285e0 64 49 6e 74 33 32 28 49 6e 74 50 74 72 46 6f 72  dInt32(IntPtrFor
285f0 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20  Offset(pointer, 
28600 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65 6e 64 69  offset));..#endi
28610 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
28620 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28670 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
28680 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
28690 20 20 2f 2f 2f 20 52 65 61 64 73 20 61 20 3c 73    /// Reads a <s
286a0 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22  ee cref="Double"
286b0 20 2f 3e 20 76 61 6c 75 65 20 66 72 6f 6d 20 74   /> value from t
286c0 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d  he specified mem
286d0 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ory..        ///
286e0 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20   location...    
286f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
28700 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
28710 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69  <param name="poi
28720 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  nter">..        
28730 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
28740 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62  f="IntPtr" /> ob
28750 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65  ject instance re
28760 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62  presenting the b
28770 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ase..        ///
28780 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
28790 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
287a0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
287b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
287c0 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20  ="offset">..    
287d0 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65      /// The inte
287e0 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  ger offset from 
287f0 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20  the base memory 
28800 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74  location where t
28810 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
28820 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c  <see cref="Doubl
28830 65 22 20 2f 3e 20 74 6f 20 62 65 20 72 65 61 64  e" /> to be read
28840 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20   is located...  
28850 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
28860 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
28870 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
28880 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
28890 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e  cref="Double" />
288a0 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 73 70   value at the sp
288b0 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 20 6c  ecified memory l
288c0 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ocation...      
288d0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
288e0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
288f0 20 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20 52   static double R
28900 65 61 64 44 6f 75 62 6c 65 28 0d 0a 20 20 20 20  eadDouble(..    
28910 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
28920 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20  ointer,..       
28930 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 0d       int offset.
28940 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
28950 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
28960 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
28970 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
28980 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 42 69         return Bi
28990 74 43 6f 6e 76 65 72 74 65 72 2e 49 6e 74 36 34  tConverter.Int64
289a0 42 69 74 73 54 6f 44 6f 75 62 6c 65 28 4d 61 72  BitsToDouble(Mar
289b0 73 68 61 6c 2e 52 65 61 64 49 6e 74 36 34 28 0d  shal.ReadInt64(.
289c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
289d0 20 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74   pointer, offset
289e0 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ));..#else..    
289f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 42          return B
28a00 69 74 43 6f 6e 76 65 72 74 65 72 2e 54 6f 44 6f  itConverter.ToDo
28a10 75 62 6c 65 28 42 69 74 43 6f 6e 76 65 72 74 65  uble(BitConverte
28a20 72 2e 47 65 74 42 79 74 65 73 28 0d 0a 20 20 20  r.GetBytes(..   
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72               Mar
28a40 73 68 61 6c 2e 52 65 61 64 49 6e 74 36 34 28 49  shal.ReadInt64(I
28a50 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
28a60 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29  ointer, offset))
28a70 29 2c 20 30 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ), 0);..#endif..
28a80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28a90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28ae0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
28af0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
28b00 2f 2f 20 52 65 61 64 73 20 61 6e 20 3c 73 65 65  // Reads an <see
28b10 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f   cref="IntPtr" /
28b20 3e 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  > value from the
28b30 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72   specified memor
28b40 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  y..        /// l
28b50 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ocation...      
28b60 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
28b70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
28b80 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74  aram name="point
28b90 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  er">..        //
28ba0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
28bb0 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65  "IntPtr" /> obje
28bc0 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72  ct instance repr
28bd0 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73  esenting the bas
28be0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  e..        /// m
28bf0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d  emory location..
28c00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
28c10 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
28c20 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28c30 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20  offset">..      
28c40 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65    /// The intege
28c50 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  r offset from th
28c60 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f  e base memory lo
28c70 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65  cation where the
28c80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
28c90 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22  ee cref="IntPtr"
28ca0 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62 65 20   /> value to be 
28cb0 72 65 61 64 20 69 73 20 6c 6f 63 61 74 65 64 2e  read is located.
28cc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
28cd0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
28ce0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
28cf0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
28d00 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72  see cref="IntPtr
28d10 22 20 2f 3e 20 76 61 6c 75 65 20 61 74 20 74 68  " /> value at th
28d20 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f  e specified memo
28d30 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  ry location...  
28d40 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
28d50 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
28d60 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50  blic static IntP
28d70 74 72 20 52 65 61 64 49 6e 74 50 74 72 28 0d 0a  tr ReadIntPtr(..
28d80 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
28d90 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20  tr pointer,..   
28da0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
28db0 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  set..           
28dc0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23   )..        {..#
28dd0 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
28de0 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
28df0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28e00 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  n Marshal.ReadIn
28e10 74 50 74 72 28 70 6f 69 6e 74 65 72 2c 20 6f 66  tPtr(pointer, of
28e20 66 73 65 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  fset);..#else.. 
28e30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28e40 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  n Marshal.ReadIn
28e50 74 50 74 72 28 49 6e 74 50 74 72 46 6f 72 4f 66  tPtr(IntPtrForOf
28e60 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66  fset(pointer, of
28e70 66 73 65 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  fset));..#endif.
28e80 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
28e90 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
28ea0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
28eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
28f00 67 69 6f 6e 20 4d 61 72 73 68 61 6c 20 57 72 69  gion Marshal Wri
28f10 74 65 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  te Helper Method
28f20 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
28f30 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
28f40 20 20 2f 2f 2f 20 57 72 69 74 65 73 20 61 6e 20    /// Writes an 
28f50 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32  <see cref="Int32
28f60 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 74 68  " /> value to th
28f70 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f  e specified memo
28f80 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ry..        /// 
28f90 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  location...     
28fa0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
28fb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
28fc0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e  param name="poin
28fd0 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ter">..        /
28fe0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
28ff0 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a  ="IntPtr" /> obj
29000 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70  ect instance rep
29010 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61  resenting the ba
29020 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  se..        /// 
29030 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e  memory location.
29040 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
29050 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
29060 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
29070 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20  "offset">..     
29080 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67     /// The integ
29090 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  er offset from t
290a0 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c  he base memory l
290b0 6f 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68  ocation where th
290c0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
290d0 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22  see cref="Int32"
290e0 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62 65 20   /> value to be 
290f0 77 72 69 74 74 65 6e 20 69 73 20 6c 6f 63 61 74  written is locat
29100 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
29110 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
29120 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
29130 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20  me="value">..   
29140 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
29150 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f  e cref="Int32" /
29160 3e 20 76 61 6c 75 65 20 74 6f 20 77 72 69 74 65  > value to write
29170 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
29180 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
29190 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
291a0 6f 69 64 20 57 72 69 74 65 49 6e 74 33 32 28 0d  oid WriteInt32(.
291b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
291c0 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20  Ptr pointer,..  
291d0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66            int of
291e0 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  fset,..         
291f0 20 20 20 69 6e 74 20 76 61 6c 75 65 0d 0a 20 20     int value..  
29200 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
29210 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
29220 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
29230 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
29240 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74      Marshal.Writ
29250 65 49 6e 74 33 32 28 70 6f 69 6e 74 65 72 2c 20  eInt32(pointer, 
29260 6f 66 66 73 65 74 2c 20 76 61 6c 75 65 29 3b 0d  offset, value);.
29270 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
29280 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74      Marshal.Writ
29290 65 49 6e 74 33 32 28 49 6e 74 50 74 72 46 6f 72  eInt32(IntPtrFor
292a0 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20  Offset(pointer, 
292b0 6f 66 66 73 65 74 29 2c 20 76 61 6c 75 65 29 3b  offset), value);
292c0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
292d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
292e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29320 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
29330 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
29340 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 57 72 69  .        /// Wri
29350 74 65 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66  tes an <see cref
29360 3d 22 49 6e 74 36 34 22 20 2f 3e 20 76 61 6c 75  ="Int64" /> valu
29370 65 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  e to the specifi
29380 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20  ed memory..     
29390 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e     /// location.
293a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
293b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
293c0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
293d0 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20  e="pointer">..  
293e0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
293f0 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22  ee cref="IntPtr"
29400 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
29410 6e 63 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  nce representing
29420 20 74 68 65 20 62 61 73 65 0d 0a 20 20 20 20 20   the base..     
29430 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f     /// memory lo
29440 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
29450 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
29460 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
29470 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e  m name="offset">
29480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
29490 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74  e integer offset
294a0 20 66 72 6f 6d 20 74 68 65 20 62 61 73 65 20 6d   from the base m
294b0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77  emory location w
294c0 68 65 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20  here the..      
294d0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
294e0 22 49 6e 74 36 34 22 20 2f 3e 20 76 61 6c 75 65  "Int64" /> value
294f0 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 69   to be written i
29500 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20  s located...    
29510 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
29520 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
29530 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
29540 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
29550 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
29560 6e 74 36 34 22 20 2f 3e 20 76 61 6c 75 65 20 74  nt64" /> value t
29570 6f 20 77 72 69 74 65 2e 0d 0a 20 20 20 20 20 20  o write...      
29580 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
29590 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
295a0 74 61 74 69 63 20 76 6f 69 64 20 57 72 69 74 65  tatic void Write
295b0 49 6e 74 36 34 28 0d 0a 20 20 20 20 20 20 20 20  Int64(..        
295c0 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74      IntPtr point
295d0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
295e0 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20   int offset,..  
295f0 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
29600 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
29610 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
29620 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
29630 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
29640 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
29650 68 61 6c 2e 57 72 69 74 65 49 6e 74 36 34 28 70  hal.WriteInt64(p
29660 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 2c 20  ointer, offset, 
29670 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
29680 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
29690 68 61 6c 2e 57 72 69 74 65 49 6e 74 36 34 28 49  hal.WriteInt64(I
296a0 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
296b0 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c  ointer, offset),
296c0 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
296d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
296e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
296f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29730 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
29740 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
29750 20 2f 2f 2f 20 57 72 69 74 65 73 20 61 20 3c 73   /// Writes a <s
29760 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22  ee cref="Double"
29770 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 74 68 65   /> value to the
29780 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72   specified memor
29790 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  y..        /// l
297a0 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ocation...      
297b0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
297c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
297d0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74  aram name="point
297e0 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  er">..        //
297f0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
29800 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65  "IntPtr" /> obje
29810 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72  ct instance repr
29820 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73  esenting the bas
29830 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  e..        /// m
29840 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d  emory location..
29850 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
29860 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
29870 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
29880 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20  offset">..      
29890 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65    /// The intege
298a0 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  r offset from th
298b0 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f  e base memory lo
298c0 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65  cation where the
298d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
298e0 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22  ee cref="Double"
298f0 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62 65 20   /> value to be 
29900 77 72 69 74 74 65 6e 20 69 73 20 6c 6f 63 61 74  written is locat
29910 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
29920 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
29930 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
29940 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20  me="value">..   
29950 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
29960 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20  e cref="Double" 
29970 2f 3e 20 76 61 6c 75 65 20 74 6f 20 77 72 69 74  /> value to writ
29980 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
29990 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
299a0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
299b0 76 6f 69 64 20 57 72 69 74 65 44 6f 75 62 6c 65  void WriteDouble
299c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
299d0 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a  ntPtr pointer,..
299e0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
299f0 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20  offset,..       
29a00 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
29a10 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
29a20 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
29a30 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
29a40 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
29a50 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
29a60 2e 57 72 69 74 65 49 6e 74 36 34 28 70 6f 69 6e  .WriteInt64(poin
29a70 74 65 72 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20  ter, offset,..  
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 69                Bi
29a90 74 43 6f 6e 76 65 72 74 65 72 2e 44 6f 75 62 6c  tConverter.Doubl
29aa0 65 54 6f 49 6e 74 36 34 42 69 74 73 28 76 61 6c  eToInt64Bits(val
29ab0 75 65 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ue));..#else..  
29ac0 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
29ad0 6c 2e 57 72 69 74 65 49 6e 74 36 34 28 49 6e 74  l.WriteInt64(Int
29ae0 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69  PtrForOffset(poi
29af0 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c 0d 0a  nter, offset),..
29b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b10 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 54 6f 49  BitConverter.ToI
29b20 6e 74 36 34 28 42 69 74 43 6f 6e 76 65 72 74 65  nt64(BitConverte
29b30 72 2e 47 65 74 42 79 74 65 73 28 76 61 6c 75 65  r.GetBytes(value
29b40 29 2c 20 30 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), 0));..#endif.
29b50 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
29b60 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
29b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
29bb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
29bc0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
29bd0 2f 2f 2f 20 57 72 69 74 65 73 20 61 20 3c 73 65  /// Writes a <se
29be0 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
29bf0 2f 3e 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20  /> value to the 
29c00 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79  specified memory
29c10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f  ..        /// lo
29c20 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
29c30 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
29c40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
29c50 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65  ram name="pointe
29c60 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
29c70 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
29c80 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63  IntPtr" /> objec
29c90 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65  t instance repre
29ca0 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65  senting the base
29cb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
29cc0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  mory location...
29cd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
29ce0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
29cf0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f  / <param name="o
29d00 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20  ffset">..       
29d10 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
29d20 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
29d30 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63   base memory loc
29d40 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d  ation where the.
29d50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
29d60 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
29d70 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 77  /> value to be w
29d80 72 69 74 74 65 6e 20 69 73 20 6c 6f 63 61 74 65  ritten is locate
29d90 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
29da0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
29db0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
29dc0 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20  e="value">..    
29dd0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
29de0 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f   cref="IntPtr" /
29df0 3e 20 76 61 6c 75 65 20 74 6f 20 77 72 69 74 65  > value to write
29e00 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
29e10 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
29e20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
29e30 6f 69 64 20 57 72 69 74 65 49 6e 74 50 74 72 28  oid WriteIntPtr(
29e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
29e50 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20  tPtr pointer,.. 
29e60 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f             int o
29e70 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
29e80 20 20 20 20 49 6e 74 50 74 72 20 76 61 6c 75 65      IntPtr value
29e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
29ea0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
29eb0 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
29ec0 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
29ed0 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
29ee0 57 72 69 74 65 49 6e 74 50 74 72 28 70 6f 69 6e  WriteIntPtr(poin
29ef0 74 65 72 2c 20 6f 66 66 73 65 74 2c 20 76 61 6c  ter, offset, val
29f00 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
29f10 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
29f20 2e 57 72 69 74 65 49 6e 74 50 74 72 28 49 6e 74  .WriteIntPtr(Int
29f30 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69  PtrForOffset(poi
29f40 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c 20 76  nter, offset), v
29f50 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
29f60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29f70 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
29f80 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
29f90 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
29fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29fe0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
29ff0 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 6f 64  region SQLiteMod
2a000 75 6c 65 20 42 61 73 65 20 43 6c 61 73 73 0d 0a  ule Base Class..
2a010 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2a020 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
2a030 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
2a040 20 61 20 6d 61 6e 61 67 65 64 20 76 69 72 74 75   a managed virtu
2a050 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20  al table module 
2a060 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
2a070 0a 20 20 20 20 2f 2f 2f 20 49 74 20 69 73 20 6e  .    /// It is n
2a080 6f 74 20 73 65 61 6c 65 64 20 61 6e 64 20 6d 75  ot sealed and mu
2a090 73 74 20 62 65 20 75 73 65 64 20 61 73 20 74 68  st be used as th
2a0a0 65 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f 72  e base class for
2a0b0 20 61 6e 79 0d 0a 20 20 20 20 2f 2f 2f 20 75 73   any..    /// us
2a0c0 65 72 2d 64 65 66 69 6e 65 64 20 76 69 72 74 75  er-defined virtu
2a0d0 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20  al table module 
2a0e0 63 6c 61 73 73 65 73 20 69 6d 70 6c 65 6d 65 6e  classes implemen
2a0f0 74 65 64 20 69 6e 20 6d 61 6e 61 67 65 64 20 63  ted in managed c
2a100 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
2a110 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
2a120 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 63 6c  blic abstract cl
2a130 61 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ass SQLiteModule
2a140 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
2a150 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
2a160 64 75 6c 65 2c 20 2f 2a 49 53 51 4c 69 74 65 4e  dule, /*ISQLiteN
2a170 61 74 69 76 65 4d 6f 64 75 6c 65 2c 2a 2f 0d 0a  ativeModule,*/..
2a180 20 20 20 20 20 20 20 20 20 20 20 20 49 44 69 73              IDis
2a190 70 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53  posable /* NOT S
2a1a0 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d  EALED */..    {.
2a1b0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2a1c0 20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64   SQLiteNativeMod
2a1d0 75 6c 65 20 50 72 69 76 61 74 65 20 43 6c 61 73  ule Private Clas
2a1e0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
2a1f0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2a200 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
2a210 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
2a220 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2a230 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
2a240 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
2a250 69 6e 74 65 72 66 61 63 65 20 62 79 20 66 6f 72  interface by for
2a260 77 61 72 64 69 6e 67 20 74 68 6f 73 65 20 6d 65  warding those me
2a270 74 68 6f 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  thod calls to th
2a280 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
2a290 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
2a2a0 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  Module" /> objec
2a2b0 74 20 69 6e 73 74 61 6e 63 65 20 69 74 20 63 6f  t instance it co
2a2c0 6e 74 61 69 6e 73 2e 20 20 49 66 20 74 68 65 0d  ntains.  If the.
2a2d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e  .        /// con
2a2e0 74 61 69 6e 65 64 20 3c 73 65 65 20 63 72 65 66  tained <see cref
2a2f0 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20  ="SQLiteModule" 
2a300 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
2a310 63 65 20 69 73 20 6e 75 6c 6c 2c 20 61 6c 6c 0d  ce is null, all.
2a320 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
2a330 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2a340 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22  iteNativeModule"
2a350 20 2f 3e 20 6d 65 74 68 6f 64 73 20 73 69 6d 70   /> methods simp
2a360 6c 79 20 67 65 6e 65 72 61 74 65 20 61 6e 0d 0a  ly generate an..
2a370 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 72 72 6f          /// erro
2a380 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
2a390 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2a3a0 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
2a3b0 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4e  ed class SQLiteN
2a3c0 61 74 69 76 65 4d 6f 64 75 6c 65 20 3a 0d 0a 20  ativeModule :.. 
2a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2a3e0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2a3f0 6c 65 2c 20 49 44 69 73 70 6f 73 61 62 6c 65 0d  le, IDisposable.
2a400 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2a410 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2a420 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74  Private Constant
2a430 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
2a440 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2a450 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68            /// Th
2a460 69 73 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  is is the value 
2a470 74 68 61 74 20 69 73 20 61 6c 77 61 79 73 20 75  that is always u
2a480 73 65 64 20 66 6f 72 20 74 68 65 20 22 6c 6f 67  sed for the "log
2a490 45 72 72 6f 72 73 22 0d 0a 20 20 20 20 20 20 20  Errors"..       
2a4a0 20 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65 74       /// paramet
2a4b0 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75  er to the variou
2a4c0 73 20 73 74 61 74 69 63 20 65 72 72 6f 72 20 68  s static error h
2a4d0 61 6e 64 6c 69 6e 67 20 6d 65 74 68 6f 64 73 20  andling methods 
2a4e0 70 72 6f 76 69 64 65 64 0d 0a 20 20 20 20 20 20  provided..      
2a4f0 20 20 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 65        /// by the
2a500 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
2a510 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 63 6c 61  teModule" /> cla
2a520 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss...           
2a530 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2a540 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
2a550 76 61 74 65 20 63 6f 6e 73 74 20 62 6f 6f 6c 20  vate const bool 
2a560 44 65 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72 73  DefaultLogErrors
2a570 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
2a580 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2a590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2a5d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2a5e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2a5f0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
2a600 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  s the error mess
2a610 61 67 65 20 74 65 78 74 20 75 73 65 64 20 77 68  age text used wh
2a620 65 6e 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64  en the contained
2a630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a640 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
2a650 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62  iteModule" /> ob
2a660 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 69 73  ject instance is
2a670 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a   not available..
2a680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a690 66 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e 2e 0d  for any reason..
2a6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a6b0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2a6c0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2a6d0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4d 6f   const string Mo
2a6e0 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2a6f0 45 72 72 6f 72 4d 65 73 73 61 67 65 20 3d 0d 0a  ErrorMessage =..
2a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a710 22 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 20 69  "native module i
2a720 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6e 6f  mplementation no
2a730 74 20 61 76 61 69 6c 61 62 6c 65 22 3b 0d 0a 20  t available";.. 
2a740 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2a750 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2a760 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2a770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2a7b0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2a7c0 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20  Private Data..  
2a7d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2a7e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2a7f0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
2a800 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
2a810 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  dule" /> object 
2a820 69 6e 73 74 61 6e 63 65 20 75 73 65 64 20 74 6f  instance used to
2a830 20 70 72 6f 76 69 64 65 0d 0a 20 20 20 20 20 20   provide..      
2a840 20 20 20 20 20 20 2f 2f 2f 20 61 6e 20 69 6d 70        /// an imp
2a850 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
2a860 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2a870 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2a880 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 20  e" />..         
2a890 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65     /// interface
2a8a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a8b0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2a8c0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2a8d0 74 65 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20  te SQLiteModule 
2a8e0 6d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20  module;..       
2a8f0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2a900 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a950 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2a960 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
2a970 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
2a980 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2a990 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2a9a0 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72        /// Constr
2a9b0 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ucts an instance
2a9c0 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d   of this class..
2a9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a9e0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2a9f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2aa00 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
2aa10 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2aa20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
2aa30 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22  f="SQLiteModule"
2aa40 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
2aa50 6e 63 65 20 75 73 65 64 20 74 6f 20 70 72 6f 76  nce used to prov
2aa60 69 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ide..           
2aa70 20 2f 2f 2f 20 61 6e 20 69 6d 70 6c 65 6d 65 6e   /// an implemen
2aa80 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c 73  tation of the <s
2aa90 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2aaa0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e  NativeModule" />
2aab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2aac0 2f 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20  / interface...  
2aad0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2aae0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2aaf0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2ab00 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 0d 0a  eNativeModule(..
2ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
2ab30 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ule..           
2ab40 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2ab50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ab60 20 20 20 20 20 20 20 74 68 69 73 2e 6d 6f 64 75         this.modu
2ab70 6c 65 20 3d 20 6d 6f 64 75 6c 65 3b 0d 0a 20 20  le = module;..  
2ab80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2ab90 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2aba0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
2abb0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2abc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abf0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2ac00 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
2ac10 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65 74  ivate Static Met
2ac20 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
2ac30 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2ac40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ac50 20 53 65 74 73 20 74 68 65 20 74 61 62 6c 65 20   Sets the table 
2ac60 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f  error message to
2ac70 20 6f 6e 65 20 74 68 61 74 20 69 6e 64 69 63 61   one that indica
2ac80 74 65 73 20 74 68 65 20 6e 61 74 69 76 65 0d 0a  tes the native..
2ac90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2aca0 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
2acb0 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 76 61  ation is not ava
2acc0 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20  ilable...       
2acd0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2ace0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2acf0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2ad00 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2ad10 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
2ad20 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
2ad30 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
2ad40 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
2ad50 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ure...          
2ad60 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2ad70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ad80 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
2ad90 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76         /// The v
2ada0 61 6c 75 65 20 6f 66 20 3c 73 65 65 20 63 72 65  alue of <see cre
2adb0 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  f="SQLiteErrorCo
2adc0 64 65 2e 45 72 72 6f 72 22 20 2f 3e 2e 0d 0a 20  de.Error" />... 
2add0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ade0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2adf0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2ae00 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f  tatic SQLiteErro
2ae10 72 43 6f 64 65 20 4d 6f 64 75 6c 65 4e 6f 74 41  rCode ModuleNotA
2ae20 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2ae30 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or(..           
2ae40 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
2ae50 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b..             
2ae60 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2ae70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ae80 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72       SetTableErr
2ae90 6f 72 28 6e 75 6c 6c 2c 20 70 56 74 61 62 2c 20  or(null, pVtab, 
2aea0 44 65 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72 73  DefaultLogErrors
2aeb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2aec0 20 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74         ModuleNot
2aed0 41 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65  AvailableErrorMe
2aee0 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  ssage);....     
2aef0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2af00 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
2af10 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
2af20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2af30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
2af80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2af90 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2afa0 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
2afb0 65 20 74 61 62 6c 65 20 65 72 72 6f 72 20 6d 65  e table error me
2afc0 73 73 61 67 65 20 74 6f 20 6f 6e 65 20 74 68 61  ssage to one tha
2afd0 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  t indicates the 
2afe0 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
2aff0 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 69      /// module i
2b000 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
2b010 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2e 0d   not available..
2b020 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b030 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2b040 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2b050 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
2b060 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r">..           
2b070 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
2b080 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
2b090 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2b0a0 6f 72 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20  or derived..    
2b0b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75          /// stru
2b0c0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
2b0d0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2b0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b0f0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2b100 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65           /// The
2b110 20 76 61 6c 75 65 20 6f 66 20 3c 73 65 65 20 63   value of <see c
2b120 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72  ref="SQLiteError
2b130 43 6f 64 65 2e 45 72 72 6f 72 22 20 2f 3e 2e 0d  Code.Error" />..
2b140 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b150 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2b160 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2b170 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 45 72   static SQLiteEr
2b180 72 6f 72 43 6f 64 65 20 4d 6f 64 75 6c 65 4e 6f  rorCode ModuleNo
2b190 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72  tAvailableCursor
2b1a0 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20  Error(..        
2b1b0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2b1c0 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  Cursor..        
2b1d0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2b1e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b1f0 20 20 20 20 20 20 20 20 20 20 53 65 74 43 75 72            SetCur
2b200 73 6f 72 45 72 72 6f 72 28 6e 75 6c 6c 2c 20 70  sorError(null, p
2b210 43 75 72 73 6f 72 2c 20 44 65 66 61 75 6c 74 4c  Cursor, DefaultL
2b220 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20  ogErrors,..     
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
2b240 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2b250 65 45 72 72 6f 72 4d 65 73 73 61 67 65 29 3b 0d  eErrorMessage);.
2b260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b270 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
2b280 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
2b290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2b2b0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2b2c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b310 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2b320 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  n ISQLiteNativeM
2b330 6f 64 75 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20  odule Members.. 
2b340 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2b350 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2b360 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2b370 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2b380 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2b390 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74  .xCreate" /> met
2b3a0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2b3b0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2b3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b3d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2b3e0 44 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  Db">..          
2b3f0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2b400 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2b410 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
2b420 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  eate" /> method.
2b430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b440 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2b450 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2b460 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22 3e 0d  am name="pAux">.
2b470 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b480 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2b490 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2b4a0 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22  eModule.xCreate"
2b4b0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2b4c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2b4d0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2b4e0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2b4f0 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20  me="argc">..    
2b500 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2b510 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2b520 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2b530 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d  le.xCreate" /> m
2b540 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2b550 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2b560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b570 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
2b580 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  rgv">..         
2b590 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2b5a0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2b5b0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
2b5c0 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
2b5d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b5e0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2b5f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2b600 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
2b610 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2b620 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2b630 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2b640 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
2b650 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
2b660 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2b670 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2b680 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2b690 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a  name="pError">..
2b6a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b6b0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b6c0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b6d0 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20  Module.xCreate" 
2b6e0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2b6f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2b700 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2b710 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2b720 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b730 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2b740 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2b750 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22  eModule.xCreate"
2b760 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2b770 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2b780 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2b790 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2b7a0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 72 65  teErrorCode xCre
2b7b0 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
2b7c0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62        IntPtr pDb
2b7d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b7e0 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c 0d     IntPtr pAux,.
2b7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b800 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20   int argc,..    
2b810 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2b820 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  tr argv,..      
2b830 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
2b840 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
2b850 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2b860 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a   IntPtr pError..
2b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b880 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2b890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b8a0 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
2b8b0 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2b8c0 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2b8d0 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2b8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b900 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51       pError = SQ
2b910 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
2b920 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
2b930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b940 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65            Module
2b950 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72 6f  NotAvailableErro
2b960 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20  rMessage);....  
2b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b980 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
2b990 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
2b9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b9b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b9c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
2b9d0 75 6c 65 2e 78 43 72 65 61 74 65 28 0d 0a 20 20  ule.xCreate(..  
2b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9f0 20 20 70 44 62 2c 20 70 41 75 78 2c 20 61 72 67    pDb, pAux, arg
2ba00 63 2c 20 61 72 67 76 2c 20 72 65 66 20 70 56 74  c, argv, ref pVt
2ba10 61 62 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b  ab, ref pError);
2ba20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ba30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ba40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba80 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2ba90 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2baa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bab0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2bac0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2bad0 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
2bae0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2baf0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2bb00 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2bb10 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2bb20 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20   name="pDb">..  
2bb30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2bb40 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2bb50 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2bb60 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
2bb70 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2bb80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2bb90 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2bba0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2bbb0 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20  ="pAux">..      
2bbc0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2bbd0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2bbe0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2bbf0 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  .xConnect" /> me
2bc00 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2bc10 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2bc20 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bc30 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
2bc40 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  gc">..          
2bc50 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2bc60 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2bc70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
2bc80 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
2bc90 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2bca0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2bcb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2bcc0 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e  ram name="argv">
2bcd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2bce0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2bcf0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2bd00 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
2bd10 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2bd20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2bd30 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2bd40 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2bd50 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
2bd60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2bd70 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2bd80 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2bd90 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20  odule.xConnect" 
2bda0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2bdb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2bdc0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2bdd0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2bde0 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20  e="pError">..   
2bdf0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2be00 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2be10 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2be20 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
2be30 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2be40 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2be50 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2be60 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2be70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2be80 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2be90 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2bea0 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20  odule.xConnect" 
2beb0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2bec0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
2bed0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2bee0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2bef0 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e 6e  eErrorCode xConn
2bf00 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
2bf10 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62        IntPtr pDb
2bf20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bf30 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c 0d     IntPtr pAux,.
2bf40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bf50 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20   int argc,..    
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2bf70 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  tr argv,..      
2bf80 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
2bf90 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
2bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2bfb0 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a   IntPtr pError..
2bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2bfe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bff0 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
2c000 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2c010 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2c020 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2c040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c050 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51       pError = SQ
2c060 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
2c070 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
2c080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c090 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65            Module
2c0a0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72 6f  NotAvailableErro
2c0b0 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20  rMessage);....  
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0d0 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
2c0e0 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
2c0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c100 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2c110 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
2c120 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a 20  ule.xConnect(.. 
2c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c140 20 20 20 70 44 62 2c 20 70 41 75 78 2c 20 61 72     pDb, pAux, ar
2c150 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20 70 56  gc, argv, ref pV
2c160 74 61 62 2c 20 72 65 66 20 70 45 72 72 6f 72 29  tab, ref pError)
2c170 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2c180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c1d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2c1e0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2c1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c200 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2c210 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2c220 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e  veModule.xBestIn
2c230 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  dex" /> method..
2c240 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c250 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2c260 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2c270 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
2c280 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c290 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2c2a0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2c2b0 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
2c2c0 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ndex" /> method.
2c2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c2e0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2c2f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2c300 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65 78 22  am name="pIndex"
2c310 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c320 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2c330 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2c340 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
2c350 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ndex" /> method.
2c360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c370 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2c380 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2c390 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2c3a0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2c3b0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2c3c0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42  eNativeModule.xB
2c3d0 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74  estIndex" /> met
2c3e0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2c3f0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2c400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2c410 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
2c420 43 6f 64 65 20 78 42 65 73 74 49 6e 64 65 78 28  Code xBestIndex(
2c430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c440 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
2c450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c460 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a   IntPtr pIndex..
2c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c480 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c4a0 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
2c4b0 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2c4c0 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2c4d0 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4f0 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
2c500 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
2c510 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d  Error(pVtab);...
2c520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c530 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
2c540 42 65 73 74 49 6e 64 65 78 28 70 56 74 61 62 2c  BestIndex(pVtab,
2c550 20 70 49 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20   pIndex);..     
2c560 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2c570 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2c580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2c5c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c5d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2c5e0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2c5f0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2c600 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2c610 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e  .xDisconnect" />
2c620 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2c630 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2c640 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2c650 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2c660 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
2c670 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2c680 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2c690 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2c6a0 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20  le.xDisconnect" 
2c6b0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2c6c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2c6d0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2c6e0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2c6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c700 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2c710 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2c720 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e  eModule.xDisconn
2c730 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ect" /> method..
2c740 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c750 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2c760 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2c770 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2c780 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20  xDisconnect(..  
2c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2c7a0 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
2c7b0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2c7c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2c7e0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2c7f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c800 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2c810 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c830 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2c840 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f  ailableTableErro
2c850 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  r(pVtab);....   
2c860 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c870 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 44 69 73 63  urn module.xDisc
2c880 6f 6e 6e 65 63 74 28 70 56 74 61 62 29 3b 0d 0a  onnect(pVtab);..
2c890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c900 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2c910 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2c920 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2c930 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2c940 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22 20  odule.xDestroy" 
2c950 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2c960 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2c970 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2c980 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2c990 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
2c9a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2c9b0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2c9c0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2c9d0 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22 20 2f  dule.xDestroy" /
2c9e0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2c9f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2ca00 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2ca10 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ca30 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2ca40 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2ca50 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22  Module.xDestroy"
2ca60 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2ca70 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2ca80 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2ca90 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2caa0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44 65 73  teErrorCode xDes
2cab0 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20  troy(..         
2cac0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
2cad0 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tab..           
2cae0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2caf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2cb00 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2cb10 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
2cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2cb30 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
2cb40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2cb50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
2cb60 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2cb70 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
2cb80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2cb90 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
2cba0 75 6c 65 2e 78 44 65 73 74 72 6f 79 28 70 56 74  ule.xDestroy(pVt
2cbb0 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ab);..          
2cbc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2cbd0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2cbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc10 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2cc20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2cc30 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2cc40 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2cc50 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2cc60 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65  ativeModule.xOpe
2cc70 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
2cc80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2cc90 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2cca0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2ccb0 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
2ccc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ccd0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2cce0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2ccf0 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f  eModule.xOpen" /
2cd00 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2cd10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2cd20 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2cd30 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2cd40 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
2cd50 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2cd60 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2cd70 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2cd80 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65  ule.xOpen" /> me
2cd90 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2cda0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2cdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2cdc0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2cdd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2cde0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2cdf0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2ce00 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74  le.xOpen" /> met
2ce10 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2ce20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2ce30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2ce40 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
2ce50 43 6f 64 65 20 78 4f 70 65 6e 28 0d 0a 20 20 20  Code xOpen(..   
2ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2ce70 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
2ce80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2ce90 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ceb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2cec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ced0 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
2cee0 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2cef0 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2cf00 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
2cf30 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
2cf40 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d  Error(pVtab);...
2cf50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf60 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
2cf70 4f 70 65 6e 28 70 56 74 61 62 2c 20 72 65 66 20  Open(pVtab, ref 
2cf80 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20  pCursor);..     
2cf90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2cfa0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2cff0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d000 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2d010 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2d020 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2d030 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2d040 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68  .xClose" /> meth
2d050 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d060 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2d070 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d080 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
2d090 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
2d0a0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2d0b0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2d0c0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2d0d0 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68 6f  xClose" /> metho
2d0e0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2d0f0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2d100 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2d110 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2d120 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2d130 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2d140 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2d150 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68 6f  xClose" /> metho
2d160 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2d170 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2d180 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2d190 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2d1a0 64 65 20 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20  de xClose(..    
2d1b0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2d1c0 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2d1e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2d200 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2d210 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d220 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2d230 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d250 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2d260 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72  ailableCursorErr
2d270 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  or(pCursor);....
2d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d290 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43  return module.xC
2d2a0 6c 6f 73 65 28 70 43 75 72 73 6f 72 29 3b 0d 0a  lose(pCursor);..
2d2b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d320 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2d330 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2d340 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2d350 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2d360 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
2d370 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2d380 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2d390 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2d3a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2d3b0 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
2d3c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2d3d0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2d3e0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2d3f0 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
2d400 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2d410 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2d420 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2d430 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2d440 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20 20 20 20  ="idxNum">..    
2d450 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2d460 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2d470 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2d480 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d  le.xFilter" /> m
2d490 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2d4a0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2d4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d4c0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
2d4d0 64 78 53 74 72 22 3e 0d 0a 20 20 20 20 20 20 20  dxStr">..       
2d4e0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2d4f0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2d500 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2d510 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68  xFilter" /> meth
2d520 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d530 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2d540 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d550 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
2d560 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2d570 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d580 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d590 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74  tiveModule.xFilt
2d5a0 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  er" /> method...
2d5b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d5c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2d5d0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2d5e0 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20   name="argv">.. 
2d5f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2d600 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2d610 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2d620 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
2d630 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2d640 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2d650 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2d660 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2d670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d680 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2d690 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2d6a0 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2d6b0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2d6c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
2d6d0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2d6e0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2d6f0 65 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c 74  eErrorCode xFilt
2d700 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
2d710 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2d720 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
2d730 20 20 20 20 20 20 69 6e 74 20 69 64 78 4e 75 6d        int idxNum
2d740 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d750 20 20 20 49 6e 74 50 74 72 20 69 64 78 53 74 72     IntPtr idxStr
2d760 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d770 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
2d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2d790 74 50 74 72 20 61 72 67 76 0d 0a 20 20 20 20 20  tPtr argv..     
2d7a0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2d7b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2d7d0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2d7e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d7f0 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2d800 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2d810 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2d820 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2d830 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f  ilableCursorErro
2d840 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  r(pCursor);.... 
2d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d860 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 46 69  eturn module.xFi
2d870 6c 74 65 72 28 70 43 75 72 73 6f 72 2c 20 69 64  lter(pCursor, id
2d880 78 4e 75 6d 2c 20 69 64 78 53 74 72 2c 20 61 72  xNum, idxStr, ar
2d890 67 63 2c 20 61 72 67 76 29 3b 0d 0a 20 20 20 20  gc, argv);..    
2d8a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2d8b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2d8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a  ////////////....
2d900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d910 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2d920 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2d930 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2d940 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2d950 65 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68  e.xNext" /> meth
2d960 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d970 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2d980 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d990 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
2d9a0 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
2d9b0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2d9c0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2d9d0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2d9e0 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64  xNext" /> method
2d9f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2da00 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2da10 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
2da20 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2da30 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2da40 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2da50 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2da60 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Next" /> method.
2da70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2da80 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2da90 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2daa0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2dab0 20 78 4e 65 78 74 28 0d 0a 20 20 20 20 20 20 20   xNext(..       
2dac0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2dad0 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
2dae0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2daf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2db00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
2db10 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
2db20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2db30 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
2db40 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2db50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2db60 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
2db70 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28  ableCursorError(
2db80 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20  pCursor);....   
2db90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2dba0 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 4e 65 78 74  urn module.xNext
2dbb0 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20  (pCursor);..    
2dbc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2dbd0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2dbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2dc20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2dc30 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2dc40 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2dc50 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2dc60 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2dc70 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f  e.xEof" /> metho
2dc80 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2dc90 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2dca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2dcb0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75  <param name="pCu
2dcc0 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rsor">..        
2dcd0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2dce0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2dcf0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2dd00 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  Eof" /> method..
2dd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2dd20 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2dd30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
2dd40 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2dd50 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2dd60 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2dd70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f  NativeModule.xEo
2dd80 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  f" /> method... 
2dd90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2dda0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2ddb0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e         public in
2ddc0 74 20 78 45 6f 66 28 0d 0a 20 20 20 20 20 20 20  t xEof(..       
2ddd0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2dde0 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
2ddf0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2de00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2de10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
2de20 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
2de30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de40 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
2de50 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2de60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
2de80 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2de90 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75 72  CursorError(pCur
2dea0 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  sor);..         
2deb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2dec0 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n 1;..          
2ded0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2dee0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2def0 6e 20 6d 6f 64 75 6c 65 2e 78 45 6f 66 28 70 43  n module.xEof(pC
2df00 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  ursor);..       
2df10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2df20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2df30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df60 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2df70 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
2df80 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2df90 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2dfa0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2dfb0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2dfc0 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f  Column" /> metho
2dfd0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2dfe0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e000 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75  <param name="pCu
2e010 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rsor">..        
2e020 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2e030 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2e040 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2e050 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f  Column" /> metho
2e060 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2e070 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2e080 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2e090 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6f 6e 74  aram name="pCont
2e0a0 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  ext">..         
2e0b0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2e0c0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2e0d0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
2e0e0 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  olumn" /> method
2e0f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e100 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2e110 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2e120 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
2e130 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2e140 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2e150 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2e160 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  iveModule.xColum
2e170 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
2e180 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e190 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2e1a0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2e1b0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2e1c0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2e1d0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2e1e0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
2e1f0 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  mn" /> method...
2e200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e210 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2e220 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2e230 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
2e240 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20  Column(..       
2e250 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2e260 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20  pCursor,..      
2e270 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2e280 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20   pContext,..    
2e290 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
2e2a0 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20  index..         
2e2b0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2e2c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e2d0 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
2e2e0 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e300 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
2e310 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2e320 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e330 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2e340 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43  leCursorError(pC
2e350 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ursor);....     
2e360 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e370 6e 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e  n module.xColumn
2e380 28 70 43 75 72 73 6f 72 2c 20 70 43 6f 6e 74 65  (pCursor, pConte
2e390 78 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  xt, index);..   
2e3a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2e3b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2e3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2e400 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e410 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2e420 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2e430 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2e440 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2e450 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d 65  le.xRowId" /> me
2e460 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2e470 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2e480 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2e490 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2e4a0 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
2e4b0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2e4c0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2e4d0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2e4e0 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74  e.xRowId" /> met
2e4f0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2e500 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2e510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e520 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77  <param name="row
2e530 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  Id">..          
2e540 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2e550 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2e560 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  NativeModule.xRo
2e570 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  wId" /> method..
2e580 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e590 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2e5a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
2e5b0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2e5c0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2e5d0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2e5e0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  NativeModule.xRo
2e5f0 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  wId" /> method..
2e600 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e610 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2e620 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2e630 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2e640 78 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20  xRowId(..       
2e650 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2e660 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20  pCursor,..      
2e670 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f            ref lo
2e680 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20  ng rowId..      
2e690 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e6a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e6b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2e6c0 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2e6d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e6e0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2e6f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e700 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e710 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
2e720 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72  lableCursorError
2e730 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20  (pCursor);....  
2e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2e750 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f 77  turn module.xRow
2e760 49 64 28 70 43 75 72 73 6f 72 2c 20 72 65 66 20  Id(pCursor, ref 
2e770 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20  rowId);..       
2e780 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e790 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2e7e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
2e7f0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2e800 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2e810 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2e820 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2e830 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Update" /> metho
2e840 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2e850 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2e860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e870 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
2e880 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ab">..          
2e890 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2e8a0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2e8b0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70  NativeModule.xUp
2e8c0 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  date" /> method.
2e8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e8e0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2e8f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2e900 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d  am name="argc">.
2e910 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e920 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2e930 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2e940 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 22  eModule.xUpdate"
2e950 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2e960 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2e970 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2e980 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2e990 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
2e9a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2e9b0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2e9c0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2e9d0 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d  le.xUpdate" /> m
2e9e0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2e9f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2ea00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ea10 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
2ea20 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20  owId">..        
2ea30 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2ea40 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2ea50 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2ea60 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Update" /> metho
2ea70 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2ea80 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2ea90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2eaa0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2eab0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2eac0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2ead0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2eae0 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68  xUpdate" /> meth
2eaf0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2eb00 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2eb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2eb20 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
2eb30 6f 64 65 20 78 55 70 64 61 74 65 28 0d 0a 20 20  ode xUpdate(..  
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2eb50 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
2eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2eb70 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
2eb80 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61          IntPtr a
2eb90 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgv,..          
2eba0 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72        ref long r
2ebb0 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  owId..          
2ebc0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2ebd0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ebe0 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2ebf0 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ec10 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2ec20 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ec30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2ec40 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2ec50 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2ec60 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
2ec70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2ec80 64 75 6c 65 2e 78 55 70 64 61 74 65 28 70 56 74  dule.xUpdate(pVt
2ec90 61 62 2c 20 61 72 67 63 2c 20 61 72 67 76 2c 20  ab, argc, argv, 
2eca0 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20  ref rowId);..   
2ecb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2ecc0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2ecd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ece0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ecf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2ed10 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ed20 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2ed30 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2ed40 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2ed50 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2ed60 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65  le.xBegin" /> me
2ed70 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2ed80 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2ed90 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2eda0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2edb0 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
2edc0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2edd0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2ede0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2edf0 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68 6f  xBegin" /> metho
2ee00 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2ee10 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2ee20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2ee30 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2ee40 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2ee50 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2ee60 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2ee70 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68 6f  xBegin" /> metho
2ee80 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2ee90 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2eea0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2eeb0 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2eec0 64 65 20 78 42 65 67 69 6e 28 0d 0a 20 20 20 20  de xBegin(..    
2eed0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2eee0 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
2eef0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2ef00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ef10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2ef20 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2ef30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ef40 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2ef50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ef60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ef70 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
2ef80 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
2ef90 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
2efa0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2efb0 6e 20 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 28  n module.xBegin(
2efc0 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20  pVtab);..       
2efd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2efe0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2eff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f020 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2f030 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
2f040 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2f050 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2f060 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2f070 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2f080 53 79 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Sync" /> method.
2f090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f0a0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2f0b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2f0c0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
2f0d0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2f0e0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2f0f0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2f100 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63  tiveModule.xSync
2f110 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2f120 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2f130 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2f140 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2f150 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2f160 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2f170 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2f180 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 22  iveModule.xSync"
2f190 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2f1a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2f1b0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2f1c0 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2f1d0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 79 6e  teErrorCode xSyn
2f1e0 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c(..            
2f1f0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
2f200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f210 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2f220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f230 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70      // CheckDisp
2f240 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
2f250 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2f260 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f280 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c      return Modul
2f290 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62  eNotAvailableTab
2f2a0 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d  leError(pVtab);.
2f2b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f2c0 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
2f2d0 2e 78 53 79 6e 63 28 70 56 74 61 62 29 3b 0d 0a  .xSync(pVtab);..
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2f300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f350 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2f360 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2f370 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2f380 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2f390 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f  odule.xCommit" /
2f3a0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2f3b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2f3c0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2f3d0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2f3e0 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
2f3f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2f400 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2f410 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2f420 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20  ule.xCommit" /> 
2f430 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2f440 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2f450 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2f460 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
2f470 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2f480 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2f490 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2f4a0 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e  dule.xCommit" />
2f4b0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2f4c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
2f4d0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2f4e0 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45    public SQLiteE
2f4f0 72 72 6f 72 43 6f 64 65 20 78 43 6f 6d 6d 69 74  rrorCode xCommit
2f500 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f510 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
2f520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f530 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2f540 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f550 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2f560 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2f570 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2f580 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5a0 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2f5b0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2f5c0 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2f5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f5e0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2f5f0 78 43 6f 6d 6d 69 74 28 70 56 74 61 62 29 3b 0d  xCommit(pVtab);.
2f600 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2f610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f660 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2f670 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2f680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f690 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2f6a0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2f6b0 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
2f6c0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2f6d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2f6e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2f6f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2f700 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2f710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f720 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2f730 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2f740 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
2f750 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2f760 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2f770 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2f780 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2f790 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2f7a0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2f7b0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2f7c0 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  iveModule.xRollb
2f7d0 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ack" /> method..
2f7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2f7f0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2f800 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2f810 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2f820 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  xRollback(..    
2f830 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2f840 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
2f850 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2f860 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2f880 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2f890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f8a0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2f8b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f8d0 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
2f8e0 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
2f8f0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
2f900 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2f910 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61  n module.xRollba
2f920 63 6b 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20  ck(pVtab);..    
2f930 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f940 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2f950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f990 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f9a0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2f9b0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2f9c0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2f9d0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2f9e0 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22  e.xFindFunction"
2f9f0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2fa00 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
2fa10 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2fa20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2fa30 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
2fa40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2fa50 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2fa60 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2fa70 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74  odule.xFindFunct
2fa80 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ion" /> method..
2fa90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2faa0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2fab0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2fac0 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 22 3e 0d 0a  m name="nArg">..
2fad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2fae0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2faf0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2fb00 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
2fb10 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  tion" /> method.
2fb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2fb30 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2fb40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2fb50 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d 65 22 3e  am name="zName">
2fb60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2fb70 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2fb80 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2fb90 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  veModule.xFindFu
2fba0 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  nction" /> metho
2fbb0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2fbc0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2fbd0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2fbe0 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c 62  aram name="callb
2fbf0 61 63 6b 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  ack">..         
2fc00 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2fc10 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2fc20 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
2fc30 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  indFunction" /> 
2fc40 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2fc50 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2fc60 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2fc70 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2fc80 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20  pClientData">.. 
2fc90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2fca0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2fcb0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2fcc0 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74  odule.xFindFunct
2fcd0 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ion" /> method..
2fce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2fcf0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2fd00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
2fd10 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2fd20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2fd30 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2fd40 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
2fd50 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d  ndFunction" /> m
2fd60 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2fd70 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2fd80 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2fd90 70 75 62 6c 69 63 20 69 6e 74 20 78 46 69 6e 64  public int xFind
2fda0 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
2fdb0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2fdc0 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
2fdd0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 41            int nA
2fde0 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rg,..           
2fdf0 20 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 61 6d       IntPtr zNam
2fe00 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2fe10 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 43 61      ref SQLiteCa
2fe20 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c  llback callback,
2fe30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fe40 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c    ref IntPtr pCl
2fe50 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20 20  ientData..      
2fe60 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2fe70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2fe80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2fe90 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2fea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2feb0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2fec0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2fed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
2fef0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2ff00 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2ff10 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b);..           
2ff20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ff30 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
2ff40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2ff50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ff60 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  module.xFindFunc
2ff70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
2ff80 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61 62             pVtab
2ff90 2c 20 6e 41 72 67 2c 20 7a 4e 61 6d 65 2c 20 72  , nArg, zName, r
2ffa0 65 66 20 63 61 6c 6c 62 61 63 6b 2c 20 72 65 66  ef callback, ref
2ffb0 20 70 43 6c 69 65 6e 74 44 61 74 61 29 3b 0d 0a   pClientData);..
2ffc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ffd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ffe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30030 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
30040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
30050 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
30060 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
30070 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f  odule.xRename" /
30080 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
30090 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
300a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
300b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
300c0 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
300d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
300e0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
300f0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
30100 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20  ule.xRename" /> 
30110 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
30120 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
30130 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
30140 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
30150 7a 4e 65 77 22 3e 0d 0a 20 20 20 20 20 20 20 20  zNew">..        
30160 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
30170 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
30180 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
30190 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f  Rename" /> metho
301a0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
301b0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
301c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
301d0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
301e0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
301f0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
30200 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
30210 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68  xRename" /> meth
30220 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
30230 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
30240 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
30250 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
30260 6f 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20  ode xRename(..  
30270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
30280 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
30290 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
302a0 50 74 72 20 7a 4e 65 77 0d 0a 20 20 20 20 20 20  Ptr zNew..      
302b0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
302c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
302d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
302e0 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
302f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30300 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
30310 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30320 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30330 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
30340 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
30350 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
30360 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30370 6e 20 6d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65  n module.xRename
30380 28 70 56 74 61 62 2c 20 7a 4e 65 77 29 3b 0d 0a  (pVtab, zNew);..
30390 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
303a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
303b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30400 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
30410 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
30420 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
30430 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
30440 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74  odule.xSavepoint
30450 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
30460 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
30470 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
30480 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
30490 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
304a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
304b0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
304c0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
304d0 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  Module.xSavepoin
304e0 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
304f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
30500 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
30510 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
30520 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74  name="iSavepoint
30530 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
30540 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
30550 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
30560 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65  tiveModule.xSave
30570 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64  point" /> method
30580 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
30590 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
305a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
305b0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
305c0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
305d0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
305e0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
305f0 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65  Savepoint" /> me
30600 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
30610 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
30620 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
30630 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
30640 72 43 6f 64 65 20 78 53 61 76 65 70 6f 69 6e 74  rCode xSavepoint
30650 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30660 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c     IntPtr pVtab,
30670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30680 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
30690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
306a0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
306b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
306c0 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70      // CheckDisp
306d0 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
306e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
306f0 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
30700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30710 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c      return Modul
30720 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62  eNotAvailableTab
30730 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d  leError(pVtab);.
30740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30750 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
30760 2e 78 53 61 76 65 70 6f 69 6e 74 28 70 56 74 61  .xSavepoint(pVta
30770 62 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d  b, iSavepoint);.
30780 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
30790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
307a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
307f0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
30800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
30810 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
30820 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
30830 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22  Module.xRelease"
30840 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
30850 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
30860 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
30870 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
30880 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
30890 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
308a0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
308b0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
308c0 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20  odule.xRelease" 
308d0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
308e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
308f0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
30900 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
30910 65 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d  e="iSavepoint">.
30920 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
30930 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
30940 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
30950 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65  eModule.xRelease
30960 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
30970 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
30980 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
30990 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
309a0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
309b0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
309c0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
309d0 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61  iveModule.xRelea
309e0 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  se" /> method...
309f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
30a00 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
30a10 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
30a20 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
30a30 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20  Release(..      
30a40 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
30a50 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
30a60 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61           int iSa
30a70 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  vepoint..       
30a80 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
30a90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30aa0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
30ab0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
30ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30ad0 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
30ae0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
30af0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30b00 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
30b10 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70  ableTableError(p
30b20 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
30b30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30b40 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65   module.xRelease
30b50 28 70 56 74 61 62 2c 20 69 53 61 76 65 70 6f 69  (pVtab, iSavepoi
30b60 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
30b70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
30b80 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
30b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bc0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
30bd0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
30be0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
30bf0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
30c00 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
30c10 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c  ativeModule.xRol
30c20 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68  lbackTo" /> meth
30c30 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
30c40 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
30c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
30c60 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
30c70 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  tab">..         
30c80 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
30c90 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
30ca0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
30cb0 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d 65  ollbackTo" /> me
30cc0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
30cd0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
30ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
30cf0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 53   <param name="iS
30d00 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20  avepoint">..    
30d10 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
30d20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
30d30 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
30d40 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20  le.xRollbackTo" 
30d50 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
30d60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
30d70 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
30d80 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
30d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
30da0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
30db0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
30dc0 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
30dd0 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  kTo" /> method..
30de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
30df0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
30e00 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
30e10 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
30e20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20  xRollbackTo(..  
30e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
30e40 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
30e50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
30e60 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20   iSavepoint..   
30e70 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
30e80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30ea0 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
30eb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30ec0 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
30ed0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30ef0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
30f00 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
30f10 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
30f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30f30 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c  turn module.xRol
30f40 6c 62 61 63 6b 54 6f 28 70 56 74 61 62 2c 20 69  lbackTo(pVtab, i
30f50 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20 20 20  Savepoint);..   
30f60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
30f70 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
30f80 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
30f90 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
30fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fd0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
30fe0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
30ff0 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
31000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
31010 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
31020 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73           /// Dis
31030 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62  poses of this ob
31040 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
31050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
31060 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
31070 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
31080 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20  oid Dispose().. 
31090 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
310b0 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
310c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 43                GC
310d0 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a  .SuppressFinaliz
310e0 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20  e(this);..      
310f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
31100 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
31110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
31120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31160 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
31170 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
31180 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
31190 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
311a0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
311b0 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
311c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
311d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
311e0 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61      /// Throws a
311f0 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62 6a  n <see cref="Obj
31200 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
31210 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74 68 69 73  tion" /> if this
31220 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20   object..       
31230 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63       /// instanc
31240 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f  e has been dispo
31250 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  sed...          
31260 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
31270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
31280 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
31290 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
312a0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
312b0 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57      {..#if THROW
312c0 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20  _ON_DISPOSED..  
312d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
312e0 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20   (disposed)..   
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
31300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31310 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
31320 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
31330 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
31340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31350 74 79 70 65 6f 66 28 53 51 4c 69 74 65 4e 61 74  typeof(SQLiteNat
31360 69 76 65 4d 6f 64 75 6c 65 29 2e 4e 61 6d 65 29  iveModule).Name)
31370 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
31380 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20     }..#endif..  
31390 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
313a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
313b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
313c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
313d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
313e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
313f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
31400 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
31410 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73           /// Dis
31420 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62  poses of this ob
31430 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
31440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
31450 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
31460 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
31470 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69  am name="disposi
31480 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ng">..          
31490 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
314a0 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73  f this method is
314b0 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
314c0 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  om the..        
314d0 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
314e0 66 3d 22 44 69 73 70 6f 73 65 28 29 22 20 2f 3e  f="Dispose()" />
314f0 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20 69   method.  Zero i
31500 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73  f this method is
31510 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20   being..        
31520 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 20 66      /// called f
31530 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  rom the finalize
31540 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
31550 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
31560 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
31570 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20 76  e /* protected v
31580 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44  irtual */ void D
31590 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70  ispose(bool disp
315a0 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
315b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
315c0 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
315d0 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
315e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
315f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31600 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a  if (disposing)..
31610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31620 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
31640 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
31650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31660 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
31670 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
31680 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
31690 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
316a0 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
316b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
316c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
316d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
316e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d               //}
31700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31710 20 20 20 20 20 20 20 20 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 2f 0d 0a  //////////////..
31740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31750 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75      // release u
31760 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63  nmanaged resourc
31770 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
31780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
317c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
317d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
317e0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
317f0 68 65 20 6d 6f 64 75 6c 65 20 69 73 20 6e 6f 74  he module is not
31800 20 6f 77 6e 65 64 20 62 79 20 75 73 3b 20 74 68   owned by us; th
31810 65 72 65 66 6f 72 65 2c 20 64 6f 20 6e 6f 74 0d  erefore, do not.
31820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31830 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
31840 73 70 6f 73 65 20 69 74 2e 0d 0a 20 20 20 20 20  spose it...     
31850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31860 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
31870 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
31880 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318a0 20 20 20 20 6d 6f 64 75 6c 65 20 3d 20 6e 75 6c      module = nul
318b0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
318c0 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
318d0 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
318e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
318f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
31900 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
31910 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
31920 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
31930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31960 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
31970 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
31980 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
31990 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
319a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
319b0 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73 20    /// Finalizes 
319c0 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
319d0 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ance...         
319e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
319f0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e  >..            ~
31a00 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
31a10 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  le()..          
31a20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31a30 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c       Dispose(fal
31a40 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
31a50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
31a60 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
31a70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
31a80 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
31a90 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
31ae0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
31af0 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
31b00 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ts..        /// 
31b10 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
31b20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75     /// The defau
31b30 6c 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  lt version of th
31b40 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  e native sqlite3
31b50 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72  _module structur
31b60 65 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20 20  e in use...     
31b70 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
31b80 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
31b90 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
31ba0 6c 79 20 69 6e 74 20 44 65 66 61 75 6c 74 4d 6f  ly int DefaultMo
31bb0 64 75 6c 65 56 65 72 73 69 6f 6e 20 3d 20 32 3b  duleVersion = 2;
31bc0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
31bd0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
31be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
31c30 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
31c40 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  te Data..       
31c50 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
31c60 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
31c70 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 74   field is used t
31c80 6f 20 73 74 6f 72 65 20 74 68 65 20 6e 61 74 69  o store the nati
31c90 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ve sqlite3_modul
31ca0 65 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20 20  e structure..   
31cb0 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61       /// associa
31cc0 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62  ted with this ob
31cd0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
31ce0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
31cf0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
31d00 70 72 69 76 61 74 65 20 55 6e 73 61 66 65 4e 61  private UnsafeNa
31d10 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
31d20 74 65 33 5f 6d 6f 64 75 6c 65 20 6e 61 74 69 76  te3_module nativ
31d30 65 4d 6f 64 75 6c 65 3b 0d 0a 0d 0a 20 20 20 20  eModule;....    
31d40 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
31d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
31d90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
31da0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
31db0 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20  / This field is 
31dc0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
31dd0 65 20 64 65 73 74 72 75 63 74 6f 72 20 64 65 6c  e destructor del
31de0 65 67 61 74 65 20 74 6f 20 62 65 20 70 61 73 73  egate to be pass
31df0 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  ed to..        /
31e00 2f 2f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  // the SQLite co
31e10 72 65 20 6c 69 62 72 61 72 79 20 76 69 61 20 74  re library via t
31e20 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  he sqlite3_creat
31e30 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64  e_disposable_mod
31e40 75 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  ule()..        /
31e50 2f 2f 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20  // function...  
31e60 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
31e70 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
31e80 69 76 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69  ivate UnsafeNati
31e90 76 65 4d 65 74 68 6f 64 73 2e 78 44 65 73 74 72  veMethods.xDestr
31ea0 6f 79 4d 6f 64 75 6c 65 20 64 65 73 74 72 6f 79  oyModule destroy
31eb0 4d 6f 64 75 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  Module;....     
31ec0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
31ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
31f10 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
31f20 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
31f30 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75   This field is u
31f40 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 70  sed to store a p
31f50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
31f60 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64  tive sqlite3_mod
31f70 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ule..        ///
31f80 20 73 74 72 75 63 74 75 72 65 20 72 65 74 75 72   structure retur
31f90 6e 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ned by the sqlit
31fa0 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73  e3_create_dispos
31fb0 61 62 6c 65 5f 6d 6f 64 75 6c 65 0d 0a 20 20 20  able_module..   
31fc0 20 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f       /// functio
31fd0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
31fe0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
31ff0 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 74 50      private IntP
32000 74 72 20 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64  tr disposableMod
32010 75 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ule;....        
32020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32060 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 50  ///////....#if P
32070 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
32080 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
32090 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
320a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
320b0 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  s field is used 
320c0 74 6f 20 68 6f 6c 64 20 74 68 65 20 62 6c 6f 63  to hold the bloc
320d0 6b 20 6f 66 20 6e 61 74 69 76 65 20 6d 65 6d 6f  k of native memo
320e0 72 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ry that contains
320f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
32100 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  e native sqlite3
32110 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72  _module structur
32120 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
32130 68 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20  h this object.. 
32140 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61         /// insta
32150 6e 63 65 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67  nce when running
32160 20 6f 6e 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d   on the .NET Com
32170 70 61 63 74 20 46 72 61 6d 65 77 6f 72 6b 2e 0d  pact Framework..
32180 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
32190 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
321a0 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20   private IntPtr 
321b0 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a  pNativeModule;..
321c0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
321d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
321e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32210 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
32220 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
32230 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
32240 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73  This field is us
32250 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
32260 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
32270 73 74 61 6e 63 65 73 20 61 73 73 6f 63 69 61 74  stances associat
32280 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
32290 77 69 74 68 20 74 68 69 73 20 6d 6f 64 75 6c 65  with this module
322a0 2e 20 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  .  The native po
322b0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
322c0 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
322d0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  d..        /// s
322e0 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
322f0 20 74 6f 20 6b 65 79 20 69 6e 74 6f 20 74 68 69   to key into thi
32300 73 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20  s collection... 
32310 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
32320 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
32330 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72  rivate Dictionar
32340 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65  y<IntPtr, SQLite
32350 56 69 72 74 75 61 6c 54 61 62 6c 65 3e 20 74 61  VirtualTable> ta
32360 62 6c 65 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  bles;....       
32370 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
32380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
323c0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
323d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
323e0 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73 65  his field is use
323f0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 76  d to store the v
32400 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
32410 73 6f 72 20 69 6e 73 74 61 6e 63 65 73 0d 0a 20  sor instances.. 
32420 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63         /// assoc
32430 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
32440 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 6e 61 74  module.  The nat
32450 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
32460 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
32470 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
32480 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72 75  sor derived stru
32490 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
324a0 20 6b 65 79 20 69 6e 74 6f 20 74 68 69 73 0d 0a   key into this..
324b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6c 6c          /// coll
324c0 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  ection...       
324d0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
324e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
324f0 20 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50   Dictionary<IntP
32500 74 72 2c 20 53 51 4c 69 74 65 56 69 72 74 75 61  tr, SQLiteVirtua
32510 6c 54 61 62 6c 65 43 75 72 73 6f 72 3e 20 63 75  lTableCursor> cu
32520 72 73 6f 72 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsors;....      
32530 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
32540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32570 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
32580 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
32590 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
325a0 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73  This field is us
325b0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
325c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 75  virtual table fu
325d0 6e 63 74 69 6f 6e 20 69 6e 73 74 61 6e 63 65 73  nction instances
325e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73  ..        /// as
325f0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
32600 69 73 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  is module.  The 
32610 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65  case-insensitive
32620 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 0d 0a   function name..
32630 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20          /// and 
32640 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
32650 67 75 6d 65 6e 74 73 20 28 77 69 74 68 20 2d 31  guments (with -1
32660 20 6d 65 61 6e 69 6e 67 20 22 61 6e 79 22 29 20   meaning "any") 
32670 61 72 65 20 75 73 65 64 20 74 6f 0d 0a 20 20 20  are used to..   
32680 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 75       /// constru
32690 63 74 20 74 68 65 20 73 74 72 69 6e 67 20 74 68  ct the string th
326a0 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65  at is used to ke
326b0 79 20 69 6e 74 6f 20 74 68 69 73 20 63 6f 6c 6c  y into this coll
326c0 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  ection...       
326d0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
326e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
326f0 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
32700 6e 67 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69  ng, SQLiteFuncti
32710 6f 6e 3e 20 66 75 6e 63 74 69 6f 6e 73 3b 0d 0a  on> functions;..
32720 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
32730 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
32740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32780 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
32790 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
327a0 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
327b0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
327c0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
327d0 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
327e0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
327f0 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
32800 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
32810 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
32820 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d  am name="name">.
32830 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
32840 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64   name of the mod
32850 75 6c 65 2e 20 20 54 68 69 73 20 70 61 72 61 6d  ule.  This param
32860 65 74 65 72 20 63 61 6e 6e 6f 74 20 62 65 20 6e  eter cannot be n
32870 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ull...        //
32880 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
32890 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
328a0 65 4d 6f 64 75 6c 65 28 73 74 72 69 6e 67 20 6e  eModule(string n
328b0 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ame)..        {.
328c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
328d0 28 6e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (name == null)..
328e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328f0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
32900 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
32910 22 6e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  "name");....    
32920 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 61 6d          this.nam
32930 65 20 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20  e = name;..     
32940 20 20 20 20 20 20 20 74 68 69 73 2e 74 61 62 6c         this.tabl
32950 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e  es = new Diction
32960 61 72 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69  ary<IntPtr, SQLi
32970 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 3e 28  teVirtualTable>(
32980 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
32990 74 68 69 73 2e 63 75 72 73 6f 72 73 20 3d 20 6e  this.cursors = n
329a0 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e  ew Dictionary<In
329b0 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69 72 74  tPtr, SQLiteVirt
329c0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 3e 28  ualTableCursor>(
329d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
329e0 74 68 69 73 2e 66 75 6e 63 74 69 6f 6e 73 20 3d  this.functions =
329f0 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
32a00 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 46 75  string, SQLiteFu
32a10 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 20 20 20 20  nction>();..    
32a20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
32a30 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
32a40 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
32a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32a90 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
32aa0 49 6e 74 65 72 6e 61 6c 20 4d 65 74 68 6f 64 73  Internal Methods
32ab0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
32ac0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
32ad0 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
32ae0 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
32af0 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
32b00 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  er to create a n
32b10 65 77 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ew..        /// 
32b20 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c  disposable modul
32b30 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
32b40 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
32b50 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
32b60 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
32b70 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
32b80 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
32b90 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20  name="pDb">..   
32ba0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
32bb0 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
32bc0 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  nection pointer 
32bd0 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20  to use...       
32be0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
32bf0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
32c00 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
32c10 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20  / Non-zero upon 
32c20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  success...      
32c30 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
32c40 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
32c50 61 6c 20 62 6f 6f 6c 20 43 72 65 61 74 65 44 69  al bool CreateDi
32c60 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 28 0d  sposableModule(.
32c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
32c80 50 74 72 20 70 44 62 0d 0a 20 20 20 20 20 20 20  Ptr pDb..       
32c90 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
32ca0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
32cb0 66 20 28 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64  f (disposableMod
32cc0 75 6c 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ule != IntPtr.Ze
32cd0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
32ce0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
32cf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32d00 20 49 6e 74 50 74 72 20 70 4e 61 6d 65 20 3d 20   IntPtr pName = 
32d10 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
32d20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
32d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d50 70 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74  pName = SQLiteSt
32d60 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
32d70 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b  romString(name);
32d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32d90 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
32da0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
32db0 6d 6f 64 75 6c 65 20 6e 61 74 69 76 65 4d 6f 64  module nativeMod
32dc0 75 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ule =..         
32dd0 20 20 20 20 20 20 20 20 20 20 20 41 6c 6c 6f 63             Alloc
32de0 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28  ateNativeModule(
32df0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32e00 20 20 20 20 20 20 64 65 73 74 72 6f 79 4d 6f 64        destroyMod
32e10 75 6c 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ule = new Unsafe
32e20 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44  NativeMethods.xD
32e30 65 73 74 72 6f 79 4d 6f 64 75 6c 65 28 0d 0a 20  estroyModule(.. 
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e50 20 20 20 78 44 65 73 74 72 6f 79 4d 6f 64 75 6c     xDestroyModul
32e60 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  e);....#if !PLAT
32e70 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
32e80 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
32e90 20 20 20 20 20 20 20 64 69 73 70 6f 73 61 62 6c         disposabl
32ea0 65 4d 6f 64 75 6c 65 20 3d 0d 0a 20 20 20 20 20  eModule =..     
32eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
32ec0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32ed0 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
32ee0 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64  e_disposable_mod
32ef0 75 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ule(..          
32f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
32f10 62 2c 20 70 4e 61 6d 65 2c 20 72 65 66 20 6e 61  b, pName, ref na
32f20 74 69 76 65 4d 6f 64 75 6c 65 2c 20 49 6e 74 50  tiveModule, IntP
32f30 74 72 2e 5a 65 72 6f 2c 20 64 65 73 74 72 6f 79  tr.Zero, destroy
32f40 4d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20  Module);....    
32f50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32f60 72 6e 20 28 64 69 73 70 6f 73 61 62 6c 65 4d 6f  rn (disposableMo
32f70 64 75 6c 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  dule != IntPtr.Z
32f80 65 72 6f 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  ero);..#elif !SQ
32f90 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
32fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
32fb0 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 20  isposableModule 
32fc0 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
32fd0 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
32fe0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
32ff0 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73  e3_create_dispos
33000 61 62 6c 65 5f 6d 6f 64 75 6c 65 5f 69 6e 74 65  able_module_inte
33010 72 6f 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rop(..          
33020 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62               pDb
33030 2c 20 70 4e 61 6d 65 2c 20 41 6c 6c 6f 63 61 74  , pName, Allocat
33040 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6e 74  eNativeModuleInt
33050 65 72 6f 70 28 29 2c 0d 0a 20 20 20 20 20 20 20  erop(),..       
33060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33070 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 69 56 65  nativeModule.iVe
33080 72 73 69 6f 6e 2c 20 6e 61 74 69 76 65 4d 6f 64  rsion, nativeMod
33090 75 6c 65 2e 78 43 72 65 61 74 65 2c 0d 0a 20 20  ule.xCreate,..  
330a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330b0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
330c0 65 2e 78 43 6f 6e 6e 65 63 74 2c 20 6e 61 74 69  e.xConnect, nati
330d0 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e  veModule.xBestIn
330e0 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  dex,..          
330f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
33100 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f  iveModule.xDisco
33110 6e 6e 65 63 74 2c 20 6e 61 74 69 76 65 4d 6f 64  nnect, nativeMod
33120 75 6c 65 2e 78 44 65 73 74 72 6f 79 2c 0d 0a 20  ule.xDestroy,.. 
33130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33140 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
33150 6c 65 2e 78 4f 70 65 6e 2c 20 6e 61 74 69 76 65  le.xOpen, native
33160 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 2c 0d 0a  Module.xClose,..
33170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33180 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
33190 75 6c 65 2e 78 46 69 6c 74 65 72 2c 20 6e 61 74  ule.xFilter, nat
331a0 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 2c  iveModule.xNext,
331b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
331c0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
331d0 6f 64 75 6c 65 2e 78 45 6f 66 2c 20 6e 61 74 69  odule.xEof, nati
331e0 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e  veModule.xColumn
331f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33200 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
33210 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 2c 20 6e  Module.xRowId, n
33220 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64  ativeModule.xUpd
33230 61 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ate,..          
33240 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
33250 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e  iveModule.xBegin
33260 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  , nativeModule.x
33270 53 79 6e 63 2c 0d 0a 20 20 20 20 20 20 20 20 20  Sync,..         
33280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
33290 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d  tiveModule.xComm
332a0 69 74 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65  it, nativeModule
332b0 2e 78 52 6f 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  .xRollback,..   
332c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332d0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
332e0 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 2c 20  .xFindFunction, 
332f0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  nativeModule.xRe
33300 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
33310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
33320 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65  tiveModule.xSave
33330 70 6f 69 6e 74 2c 20 6e 61 74 69 76 65 4d 6f 64  point, nativeMod
33340 75 6c 65 2e 78 52 65 6c 65 61 73 65 2c 0d 0a 20  ule.xRelease,.. 
33350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33360 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
33370 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 2c 20  le.xRollbackTo, 
33380 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 64 65 73  IntPtr.Zero, des
33390 74 72 6f 79 4d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a  troyModule);....
333a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333b0 72 65 74 75 72 6e 20 28 64 69 73 70 6f 73 61 62  return (disposab
333c0 6c 65 4d 6f 64 75 6c 65 20 21 3d 20 49 6e 74 50  leModule != IntP
333d0 74 72 2e 5a 65 72 6f 29 3b 0d 0a 23 65 6c 73 65  tr.Zero);..#else
333e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
333f0 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
33400 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
33410 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
33420 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
33430 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
33440 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
33450 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33460 20 20 20 69 66 20 28 70 4e 61 6d 65 20 21 3d 20     if (pName != 
33470 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
33480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
334a0 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72       SQLiteMemor
334b0 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a  y.Free(pName);..
334c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334d0 20 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50      pName = IntP
334e0 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
334f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
33500 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
33510 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
33520 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
33530 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
33540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
33580 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
33590 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d  Private Methods.
335a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
335b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
335c0 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
335d0 69 73 20 63 61 6c 6c 65 64 20 62 79 20 74 68 65  is called by the
335e0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
335f0 72 61 72 79 20 77 68 65 6e 20 74 68 65 20 6e 61  rary when the na
33600 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tive..        //
33610 2f 20 6d 6f 64 75 6c 65 20 61 73 73 6f 63 69 61  / module associa
33620 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62  ted with this ob
33630 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 69 73  ject instance is
33640 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
33650 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   due..        //
33660 2f 20 74 6f 20 69 74 73 20 70 61 72 65 6e 74 20  / to its parent 
33670 63 6f 6e 6e 65 63 74 69 6f 6e 20 62 65 69 6e 67  connection being
33680 20 63 6c 6f 73 65 64 2e 20 20 49 74 20 6d 61 79   closed.  It may
33690 20 61 6c 73 6f 20 62 65 20 63 61 6c 6c 65 64 20   also be called 
336a0 62 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  by..        /// 
336b0 74 68 65 20 22 76 74 73 68 69 6d 22 20 6d 6f 64  the "vtshim" mod
336c0 75 6c 65 20 69 66 2f 77 68 65 6e 20 74 68 65 20  ule if/when the 
336d0 73 71 6c 69 74 65 33 5f 64 69 73 70 6f 73 65 5f  sqlite3_dispose_
336e0 6d 6f 64 75 6c 65 28 29 20 66 75 6e 63 74 69 6f  module() functio
336f0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  n..        /// i
33700 73 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  s called...     
33710 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
33720 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
33730 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69  param name="pCli
33740 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20  entData">..     
33750 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
33760 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f 69 6e  e user-data poin
33770 74 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ter associated w
33780 69 74 68 20 74 68 69 73 20 6d 6f 64 75 6c 65 2c  ith this module,
33790 20 61 73 20 69 74 20 77 61 73 0d 0a 20 20 20 20   as it was..    
337a0 20 20 20 20 2f 2f 2f 20 70 72 6f 76 69 64 65 64      /// provided
337b0 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63   to the SQLite c
337c0 6f 72 65 20 6c 69 62 72 61 72 79 20 77 68 65 6e  ore library when
337d0 20 74 68 65 20 6e 61 74 69 76 65 20 6d 6f 64 75   the native modu
337e0 6c 65 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20  le instance..   
337f0 20 20 20 20 20 2f 2f 2f 20 77 61 73 20 63 72 65       /// was cre
33800 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ated...        /
33810 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
33820 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
33830 64 20 78 44 65 73 74 72 6f 79 4d 6f 64 75 6c 65  d xDestroyModule
33840 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
33850 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74  ntPtr pClientDat
33860 61 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f  a /* NOT USED */
33870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
33880 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
33890 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
338a0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
338b0 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point, 
338c0 6a 75 73 74 20 6d 61 6b 65 20 73 75 72 65 20 74  just make sure t
338d0 68 61 74 20 74 68 69 73 20 6e 61 74 69 76 65 20  hat this native 
338e0 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20  module..        
338f0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61 6e      //       han
33900 64 6c 65 20 69 73 20 6e 6f 74 20 72 65 75 73 65  dle is not reuse
33910 64 2c 20 6e 6f 72 20 70 61 73 73 65 64 20 69 6e  d, nor passed in
33920 74 6f 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20  to the native.. 
33930 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33940 20 20 20 20 73 71 6c 69 74 65 33 5f 64 69 73 70      sqlite3_disp
33950 6f 73 65 5f 6d 6f 64 75 6c 65 28 29 20 66 75 6e  ose_module() fun
33960 63 74 69 6f 6e 20 6c 61 74 65 72 20 28 69 2e 65  ction later (i.e
33970 2e 20 69 66 2f 77 68 65 6e 0d 0a 20 20 20 20 20  . if/when..     
33980 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
33990 74 68 65 20 44 69 73 70 6f 73 65 28 29 20 6d 65  the Dispose() me
339a0 74 68 6f 64 20 6f 66 20 74 68 69 73 20 6f 62 6a  thod of this obj
339b0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 69 73 20  ect instance is 
339c0 63 61 6c 6c 65 64 29 2e 0d 0a 20 20 20 20 20 20  called)...      
339d0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
339e0 20 20 20 20 20 20 64 69 73 70 6f 73 61 62 6c 65        disposable
339f0 4d 6f 64 75 6c 65 20 3d 20 49 6e 74 50 74 72 2e  Module = IntPtr.
33a00 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 7d  Zero;..        }
33a10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
33a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
33a70 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
33a80 20 20 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65        /// Create
33a90 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
33aa0 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f  e native sqlite_
33ab0 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65  module structure
33ac0 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20   using the..    
33ad0 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72      /// configur
33ae0 65 64 20 28 6f 72 20 64 65 66 61 75 6c 74 29 20  ed (or default) 
33af0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
33b00 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
33b10 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
33b20 69 6e 74 65 72 66 61 63 65 20 69 6d 70 6c 65 6d  interface implem
33b30 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
33b40 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
33b50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
33b60 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
33b70 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
33b80 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73   sqlite_module s
33b90 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 74  tructure using t
33ba0 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 28 6f  he configured (o
33bb0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  r..        /// d
33bc0 65 66 61 75 6c 74 29 20 3c 73 65 65 20 63 72 65  efault) <see cre
33bd0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
33be0 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72  Module" /> inter
33bf0 66 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  face..        //
33c00 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
33c10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
33c20 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
33c30 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61 66     private Unsaf
33c40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
33c50 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 41 6c  qlite3_module Al
33c60 6c 6f 63 61 74 65 4e 61 74 69 76 65 4d 6f 64 75  locateNativeModu
33c70 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  le()..        {.
33c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
33c90 75 72 6e 20 41 6c 6c 6f 63 61 74 65 4e 61 74 69  urn AllocateNati
33ca0 76 65 4d 6f 64 75 6c 65 28 47 65 74 4e 61 74 69  veModule(GetNati
33cb0 76 65 4d 6f 64 75 6c 65 49 6d 70 6c 28 29 29 3b  veModuleImpl());
33cc0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
33cd0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
33ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
33d20 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43  ..#if PLATFORM_C
33d30 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
33d40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
33d50 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
33d60 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 64 20  /// Creates and 
33d70 72 65 74 75 72 6e 73 20 61 20 6d 65 6d 6f 72 79  returns a memory
33d80 20 62 6c 6f 63 6b 20 6f 62 74 61 69 6e 65 64 20   block obtained 
33d90 66 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20  from the SQLite 
33da0 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  core..        //
33db0 2f 20 6c 69 62 72 61 72 79 20 75 73 65 64 20 74  / library used t
33dc0 6f 20 73 74 6f 72 65 20 74 68 65 20 6e 61 74 69  o store the nati
33dd0 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ve sqlite3_modul
33de0 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
33df0 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  this..        //
33e00 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  / object instanc
33e10 65 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f  e when running o
33e20 6e 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d 70 61  n the .NET Compa
33e30 63 74 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20  ct Framework... 
33e40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
33e50 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
33e60 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
33e70 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
33e80 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
33e90 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74  the native sqlit
33ea0 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74  e3_module struct
33eb0 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
33ec0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
33ed0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e        private In
33ee0 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 4e 61 74  tPtr AllocateNat
33ef0 69 76 65 4d 6f 64 75 6c 65 49 6e 74 65 72 6f 70  iveModuleInterop
33f00 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
33f10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
33f20 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 3d 20  NativeModule == 
33f30 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
33f40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
33f50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
33f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33f70 20 2f 2f 20 48 41 43 4b 3a 20 4e 6f 20 65 61 73   // HACK: No eas
33f80 79 20 77 61 79 20 74 6f 20 64 65 74 65 72 6d 69  y way to determi
33f90 6e 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ne the size of t
33fa0 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  he native..     
33fb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33fc0 20 20 20 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c      sqlite_modul
33fd0 65 20 73 74 72 75 63 74 75 72 65 20 77 68 65 6e  e structure when
33fe0 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74 68 65 20   running on the 
33ff0 2e 4e 45 54 0d 0a 20 20 20 20 20 20 20 20 20 20  .NET..          
34000 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 43        //       C
34010 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f 72 6b  ompact Framework
34020 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73  ; therefore, jus
34030 74 20 62 61 73 65 20 74 68 65 20 73 69 7a 65 0d  t base the size.
34040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34050 20 2f 2f 20 20 20 20 20 20 20 6f 6e 20 77 68 61   //       on wha
34060 74 20 77 65 20 6b 6e 6f 77 3a 0d 0a 20 20 20 20  t we know:..    
34070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
34080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34090 2f 2f 20 20 20 20 20 20 20 54 68 65 72 65 20 69  //       There i
340a0 73 20 6f 6e 65 20 69 6e 74 65 67 65 72 20 6d 65  s one integer me
340b0 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  mber...         
340c0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
340d0 54 68 65 72 65 20 61 72 65 20 32 32 20 66 75 6e  There are 22 fun
340e0 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 6d 65  ction pointer me
340f0 6d 62 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  mbers...        
34100 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
34110 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 74              pNat
34120 69 76 65 4d 6f 64 75 6c 65 20 3d 20 53 51 4c 69  iveModule = SQLi
34130 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74  teMemory.Allocat
34140 65 28 32 33 20 2a 20 49 6e 74 50 74 72 2e 53 69  e(23 * IntPtr.Si
34150 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ze);....        
34160 20 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 74          if (pNat
34170 69 76 65 4d 6f 64 75 6c 65 20 3d 3d 20 49 6e 74  iveModule == Int
34180 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
34190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
341a0 68 72 6f 77 20 6e 65 77 20 4f 75 74 4f 66 4d 65  hrow new OutOfMe
341b0 6d 6f 72 79 45 78 63 65 70 74 69 6f 6e 28 22 73  moryException("s
341c0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22 29 3b  qlite3_module");
341d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
341e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
341f0 65 74 75 72 6e 20 70 4e 61 74 69 76 65 4d 6f 64  eturn pNativeMod
34200 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ule;..        }.
34210 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
34220 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
34230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
34270 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
34280 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
34290 20 43 72 65 61 74 65 73 20 61 6e 64 20 72 65 74   Creates and ret
342a0 75 72 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20  urns the native 
342b0 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74  sqlite_module st
342c0 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 74 68  ructure using th
342d0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
342e0 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63 72  pecified <see cr
342f0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
34300 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65  eModule" /> inte
34310 72 66 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  rface..        /
34320 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
34330 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
34340 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
34350 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
34360 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
34370 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
34380 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
34390 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f  eNativeModule" /
343a0 3e 20 69 6e 74 65 72 66 61 63 65 20 69 6d 70 6c  > interface impl
343b0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0d 0a 20  ementation to.. 
343c0 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 2e 0d         /// use..
343d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
343e0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
343f0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
34400 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
34410 74 69 76 65 20 73 71 6c 69 74 65 5f 6d 6f 64 75  tive sqlite_modu
34420 6c 65 20 73 74 72 75 63 74 75 72 65 20 75 73 69  le structure usi
34430 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ng the specified
34440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
34450 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
34460 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e  NativeModule" />
34470 20 69 6e 74 65 72 66 61 63 65 20 69 6d 70 6c 65   interface imple
34480 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
34490 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
344a0 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  s>..        priv
344b0 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69 76 65  ate UnsafeNative
344c0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
344d0 6d 6f 64 75 6c 65 20 41 6c 6c 6f 63 61 74 65 4e  module AllocateN
344e0 61 74 69 76 65 4d 6f 64 75 6c 65 28 0d 0a 20 20  ativeModule(..  
344f0 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74            ISQLit
34500 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 6d 6f  eNativeModule mo
34510 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  dule..          
34520 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
34530 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
34540 76 65 4d 6f 64 75 6c 65 20 3d 20 6e 65 77 20 55  veModule = new U
34550 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
34560 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ds.sqlite3_modul
34570 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
34580 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 69    nativeModule.i
34590 56 65 72 73 69 6f 6e 20 3d 20 44 65 66 61 75 6c  Version = Defaul
345a0 74 4d 6f 64 75 6c 65 56 65 72 73 69 6f 6e 3b 0d  tModuleVersion;.
345b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
345c0 66 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c  f (module != nul
345d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
345e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
345f0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
34600 78 43 72 65 61 74 65 20 3d 20 6e 65 77 20 55 6e  xCreate = new Un
34610 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
34620 73 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20  s.xCreate(..    
34630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
34640 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 29 3b 0d  odule.xCreate);.
34650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34660 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
34670 78 43 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55  xConnect = new U
34680 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
34690 64 73 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20  ds.xConnect(..  
346a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346b0 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63    module.xConnec
346c0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
346d0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
346e0 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 20 3d  ule.xBestIndex =
346f0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
34700 65 4d 65 74 68 6f 64 73 2e 78 42 65 73 74 49 6e  eMethods.xBestIn
34710 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20  dex(..          
34720 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
34730 2e 78 42 65 73 74 49 6e 64 65 78 29 3b 0d 0a 0d  .xBestIndex);...
34740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34750 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44   nativeModule.xD
34760 69 73 63 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20  isconnect = new 
34770 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
34780 6f 64 73 2e 78 44 69 73 63 6f 6e 6e 65 63 74 28  ods.xDisconnect(
34790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
347a0 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 44 69        module.xDi
347b0 73 63 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20  sconnect);....  
347c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
347d0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74  tiveModule.xDest
347e0 72 6f 79 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  roy = new Unsafe
347f0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44  NativeMethods.xD
34800 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20  estroy(..       
34810 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
34820 75 6c 65 2e 78 44 65 73 74 72 6f 79 29 3b 0d 0a  ule.xDestroy);..
34830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34840 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
34850 4f 70 65 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66  Open = new Unsaf
34860 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
34870 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  Open(..         
34880 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
34890 65 2e 78 4f 70 65 6e 29 3b 0d 0a 0d 0a 20 20 20  e.xOpen);....   
348a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
348b0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  iveModule.xClose
348c0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
348d0 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6c 6f 73  iveMethods.xClos
348e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
348f0 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
34900 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  Close);....     
34910 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
34920 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20  eModule.xFilter 
34930 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
34940 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c 74 65  veMethods.xFilte
34950 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
34960 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
34970 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a 20 20 20 20  Filter);....    
34980 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
34990 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 3d  veModule.xNext =
349a0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
349b0 65 4d 65 74 68 6f 64 73 2e 78 4e 65 78 74 28 0d  eMethods.xNext(.
349c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
349d0 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 4e 65 78       module.xNex
349e0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
349f0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
34a00 75 6c 65 2e 78 45 6f 66 20 3d 20 6e 65 77 20 55  ule.xEof = new U
34a10 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
34a20 64 73 2e 78 45 6f 66 28 6d 6f 64 75 6c 65 2e 78  ds.xEof(module.x
34a30 45 6f 66 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Eof);....       
34a40 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
34a50 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20  odule.xColumn = 
34a60 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
34a70 4d 65 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28  Methods.xColumn(
34a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34a90 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f        module.xCo
34aa0 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lumn);....      
34ab0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
34ac0 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20 3d 20  Module.xRowId = 
34ad0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
34ae0 4d 65 74 68 6f 64 73 2e 78 52 6f 77 49 64 28 0d  Methods.xRowId(.
34af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34b00 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 6f 77       module.xRow
34b10 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Id);....        
34b20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
34b30 64 75 6c 65 2e 78 55 70 64 61 74 65 20 3d 20 6e  dule.xUpdate = n
34b40 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
34b50 65 74 68 6f 64 73 2e 78 55 70 64 61 74 65 28 0d  ethods.xUpdate(.
34b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34b70 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 55 70 64       module.xUpd
34b80 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ate);....       
34b90 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
34ba0 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20 3d 20 6e  odule.xBegin = n
34bb0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
34bc0 65 74 68 6f 64 73 2e 78 42 65 67 69 6e 28 0d 0a  ethods.xBegin(..
34bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34be0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 42 65 67 69      module.xBegi
34bf0 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
34c00 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
34c10 75 6c 65 2e 78 53 79 6e 63 20 3d 20 6e 65 77 20  ule.xSync = new 
34c20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
34c30 6f 64 73 2e 78 53 79 6e 63 28 0d 0a 20 20 20 20  ods.xSync(..    
34c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c50 6d 6f 64 75 6c 65 2e 78 53 79 6e 63 29 3b 0d 0a  module.xSync);..
34c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34c70 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
34c80 43 6f 6d 6d 69 74 20 3d 20 6e 65 77 20 55 6e 73  Commit = new Uns
34c90 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
34ca0 2e 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20  .xCommit(..     
34cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
34cc0 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 29 3b 0d  odule.xCommit);.
34cd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34ce0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
34cf0 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20  xRollback = new 
34d00 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
34d10 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a  ods.xRollback(..
34d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d30 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c      module.xRoll
34d40 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  back);....      
34d50 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
34d60 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
34d70 74 69 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66  tion = new Unsaf
34d80 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
34d90 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  FindFunction(.. 
34da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34db0 20 20 20 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46     module.xFindF
34dc0 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  unction);....   
34dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
34de0 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d  iveModule.xRenam
34df0 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
34e00 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6e  tiveMethods.xRen
34e10 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
34e20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
34e30 2e 78 52 65 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  .xRename);....  
34e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
34e50 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65  tiveModule.xSave
34e60 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e 73 61  point = new Unsa
34e70 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
34e80 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20  xSavepoint(..   
34e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ea0 20 6d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69   module.xSavepoi
34eb0 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
34ec0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
34ed0 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 20 3d 20  dule.xRelease = 
34ee0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
34ef0 4d 65 74 68 6f 64 73 2e 78 52 65 6c 65 61 73 65  Methods.xRelease
34f00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34f10 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52         module.xR
34f20 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  elease);....    
34f30 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
34f40 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61  veModule.xRollba
34f50 63 6b 54 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66  ckTo = new Unsaf
34f60 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
34f70 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20  RollbackTo(..   
34f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f90 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63   module.xRollbac
34fa0 6b 54 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  kTo);..         
34fb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
34fc0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
34fd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34fe0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
34ff0 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20 6e 65  ule.xCreate = ne
35000 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
35010 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28 0d 0a  thods.xCreate(..
35020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35030 20 20 20 20 78 43 72 65 61 74 65 29 3b 0d 0a 0d      xCreate);...
35040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35050 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43   nativeModule.xC
35060 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73  onnect = new Uns
35070 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
35080 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20  .xConnect(..    
35090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350a0 78 43 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20  xConnect);....  
350b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
350c0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74  tiveModule.xBest
350d0 49 6e 64 65 78 20 3d 20 6e 65 77 20 55 6e 73 61  Index = new Unsa
350e0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
350f0 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20  xBestIndex(..   
35100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35110 20 78 42 65 73 74 49 6e 64 65 78 29 3b 0d 0a 0d   xBestIndex);...
35120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35130 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44   nativeModule.xD
35140 69 73 63 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20  isconnect = new 
35150 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
35160 6f 64 73 2e 78 44 69 73 63 6f 6e 6e 65 63 74 28  ods.xDisconnect(
35170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35180 20 20 20 20 20 20 78 44 69 73 63 6f 6e 6e 65 63        xDisconnec
35190 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
351a0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
351b0 75 6c 65 2e 78 44 65 73 74 72 6f 79 20 3d 20 6e  ule.xDestroy = n
351c0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
351d0 65 74 68 6f 64 73 2e 78 44 65 73 74 72 6f 79 28  ethods.xDestroy(
351e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
351f0 20 20 20 20 20 20 78 44 65 73 74 72 6f 79 29 3b        xDestroy);
35200 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35210 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
35220 2e 78 4f 70 65 6e 20 3d 20 6e 65 77 20 55 6e 73  .xOpen = new Uns
35230 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
35240 2e 78 4f 70 65 6e 28 78 4f 70 65 6e 29 3b 0d 0a  .xOpen(xOpen);..
35250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35260 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c  nativeModule.xCl
35270 6f 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ose = new Unsafe
35280 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
35290 6c 6f 73 65 28 78 43 6c 6f 73 65 29 3b 0d 0a 0d  lose(xClose);...
352a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
352b0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46   nativeModule.xF
352c0 69 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61  ilter = new Unsa
352d0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
352e0 78 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20  xFilter(..      
352f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 46                xF
35300 69 6c 74 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ilter);....     
35310 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
35320 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 3d 20  eModule.xNext = 
35330 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
35340 4d 65 74 68 6f 64 73 2e 78 4e 65 78 74 28 78 4e  Methods.xNext(xN
35350 65 78 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ext);..         
35360 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
35370 75 6c 65 2e 78 45 6f 66 20 3d 20 6e 65 77 20 55  ule.xEof = new U
35380 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
35390 64 73 2e 78 45 6f 66 28 78 45 6f 66 29 3b 0d 0a  ds.xEof(xEof);..
353a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
353b0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
353c0 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20 55 6e 73  Column = new Uns
353d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
353e0 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20  .xColumn(..     
353f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
35400 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20  Column);....    
35410 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
35420 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20  veModule.xRowId 
35430 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
35440 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 77 49 64  veMethods.xRowId
35450 28 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20  (xRowId);....   
35460 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
35470 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74  iveModule.xUpdat
35480 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
35490 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 55 70 64  tiveMethods.xUpd
354a0 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
354b0 20 20 20 20 20 20 20 20 20 20 78 55 70 64 61 74            xUpdat
354c0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
354d0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
354e0 75 6c 65 2e 78 42 65 67 69 6e 20 3d 20 6e 65 77  ule.xBegin = new
354f0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
35500 68 6f 64 73 2e 78 42 65 67 69 6e 28 78 42 65 67  hods.xBegin(xBeg
35510 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
35520 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
35530 6c 65 2e 78 53 79 6e 63 20 3d 20 6e 65 77 20 55  le.xSync = new U
35540 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
35550 64 73 2e 78 53 79 6e 63 28 78 53 79 6e 63 29 3b  ds.xSync(xSync);
35560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35570 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
35580 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e 65 77 20 55  .xCommit = new U
35590 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
355a0 64 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20  ds.xCommit(..   
355b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355c0 20 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20   xCommit);....  
355d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
355e0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
355f0 62 61 63 6b 20 3d 20 6e 65 77 20 55 6e 73 61 66  back = new Unsaf
35600 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
35610 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  Rollback(..     
35620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
35630 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20  Rollback);....  
35640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
35650 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64  tiveModule.xFind
35660 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20 55  Function = new U
35670 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
35680 64 73 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ds.xFindFunction
35690 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
356a0 20 20 20 20 20 20 20 78 46 69 6e 64 46 75 6e 63         xFindFunc
356b0 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tion);....      
356c0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
356d0 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3d  Module.xRename =
356e0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
356f0 65 4d 65 74 68 6f 64 73 2e 78 52 65 6e 61 6d 65  eMethods.xRename
35700 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35710 20 20 20 20 20 20 20 78 52 65 6e 61 6d 65 29 3b         xRename);
35720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35730 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
35740 2e 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 6e 65  .xSavepoint = ne
35750 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
35760 74 68 6f 64 73 2e 78 53 61 76 65 70 6f 69 6e 74  thods.xSavepoint
35770 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35780 20 20 20 20 20 20 20 78 53 61 76 65 70 6f 69 6e         xSavepoin
35790 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
357a0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
357b0 75 6c 65 2e 78 52 65 6c 65 61 73 65 20 3d 20 6e  ule.xRelease = n
357c0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
357d0 65 74 68 6f 64 73 2e 78 52 65 6c 65 61 73 65 28  ethods.xRelease(
357e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
357f0 20 20 20 20 20 20 78 52 65 6c 65 61 73 65 29 3b        xRelease);
35800 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35810 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
35820 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e  .xRollbackTo = n
35830 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
35840 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b  ethods.xRollback
35850 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  To(..           
35860 20 20 20 20 20 20 20 20 20 78 52 6f 6c 6c 62 61           xRollba
35870 63 6b 54 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20  ckTo);..        
35880 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35890 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61 74 69       return nati
358a0 76 65 4d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20  veModule;..     
358b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
358c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35900 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
35910 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
35920 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 72  ..        /// Cr
35930 65 61 74 65 73 20 61 20 63 6f 70 79 20 6f 66 20  eates a copy of 
35940 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20  the specified.. 
35950 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
35960 63 72 65 66 3d 22 55 6e 73 61 66 65 4e 61 74 69  cref="UnsafeNati
35970 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
35980 33 5f 6d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a  3_module" /> obj
35990 65 63 74 20 69 6e 73 74 61 6e 63 65 2c 0d 0a 20  ect instance,.. 
359a0 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67         /// using
359b0 20 64 65 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65   default impleme
359c0 6e 74 61 74 69 6f 6e 73 20 66 6f 72 20 74 68 65  ntations for the
359d0 20 63 6f 6e 74 61 69 6e 65 64 20 64 65 6c 65 67   contained deleg
359e0 61 74 65 73 20 77 68 65 6e 0d 0a 20 20 20 20 20  ates when..     
359f0 20 20 20 2f 2f 2f 20 6e 65 63 65 73 73 61 72 79     /// necessary
35a00 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
35a10 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
35a20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
35a30 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
35a40 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
35a50 65 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65 4e  ee cref="UnsafeN
35a60 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
35a70 69 74 65 33 5f 6d 6f 64 75 6c 65 22 20 2f 3e 20  ite3_module" /> 
35a80 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
35a90 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 74 6f 20  /// instance to 
35aa0 63 6f 70 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  copy...        /
35ab0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
35ac0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
35ad0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
35ae0 54 68 65 20 6e 65 77 20 3c 73 65 65 20 63 72 65  The new <see cre
35af0 66 3d 22 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  f="UnsafeNativeM
35b00 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
35b10 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  odule" /> object
35b20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
35b30 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
35b40 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
35b50 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
35b60 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
35b70 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64  hods.sqlite3_mod
35b80 75 6c 65 20 43 6f 70 79 4e 61 74 69 76 65 4d 6f  ule CopyNativeMo
35b90 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  dule(..         
35ba0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
35bb0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
35bc0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20 20  odule module..  
35bd0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
35be0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35bf0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
35c00 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
35c10 6d 6f 64 75 6c 65 20 6e 65 77 4d 6f 64 75 6c 65  module newModule
35c20 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
35c30 20 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61      new UnsafeNa
35c40 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
35c50 74 65 33 5f 6d 6f 64 75 6c 65 28 29 3b 0d 0a 0d  te3_module();...
35c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
35c70 4d 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f 6e 20  Module.iVersion 
35c80 3d 20 6d 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f  = module.iVersio
35c90 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
35ca0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 72 65    newModule.xCre
35cb0 61 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ate = new Unsafe
35cc0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
35cd0 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  reate(..        
35ce0 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e          (module.
35cf0 78 43 72 65 61 74 65 20 21 3d 20 6e 75 6c 6c 29  xCreate != null)
35d00 20 3f 20 6d 6f 64 75 6c 65 2e 78 43 72 65 61 74   ? module.xCreat
35d10 65 20 3a 20 78 43 72 65 61 74 65 29 3b 0d 0a 0d  e : xCreate);...
35d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
35d30 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20  Module.xConnect 
35d40 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
35d50 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65  veMethods.xConne
35d60 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
35d70 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43 6f       (module.xCo
35d80 6e 6e 65 63 74 20 21 3d 20 6e 75 6c 6c 29 20 3f  nnect != null) ?
35d90 20 6d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74   module.xConnect
35da0 20 3a 20 78 43 6f 6e 6e 65 63 74 29 3b 0d 0a 0d   : xConnect);...
35db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
35dc0 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  Module.xBestInde
35dd0 78 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  x = new UnsafeNa
35de0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 73  tiveMethods.xBes
35df0 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20  tIndex(..       
35e00 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
35e10 2e 78 42 65 73 74 49 6e 64 65 78 20 21 3d 20 6e  .xBestIndex != n
35e20 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 42  ull) ? module.xB
35e30 65 73 74 49 6e 64 65 78 20 3a 20 78 42 65 73 74  estIndex : xBest
35e40 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  Index);....     
35e50 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
35e60 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d 20 6e  .xDisconnect = n
35e70 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
35e80 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e 6e 65  ethods.xDisconne
35e90 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
35ea0 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 44 69       (module.xDi
35eb0 73 63 6f 6e 6e 65 63 74 20 21 3d 20 6e 75 6c 6c  sconnect != null
35ec0 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 44 69 73 63  ) ? module.xDisc
35ed0 6f 6e 6e 65 63 74 20 3a 0d 0a 20 20 20 20 20 20  onnect :..      
35ee0 20 20 20 20 20 20 20 20 20 20 78 44 69 73 63 6f            xDisco
35ef0 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  nnect);....     
35f00 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
35f10 2e 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20  .xDestroy = new 
35f20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
35f30 6f 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20  ods.xDestroy(.. 
35f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
35f50 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20  module.xDestroy 
35f60 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
35f70 65 2e 78 44 65 73 74 72 6f 79 20 3a 20 78 44 65  e.xDestroy : xDe
35f80 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  stroy);....     
35f90 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
35fa0 2e 78 4f 70 65 6e 20 3d 20 6e 65 77 20 55 6e 73  .xOpen = new Uns
35fb0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
35fc0 2e 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20  .xOpen(..       
35fd0 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
35fe0 2e 78 4f 70 65 6e 20 21 3d 20 6e 75 6c 6c 29 20  .xOpen != null) 
35ff0 3f 20 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3a  ? module.xOpen :
36000 20 78 4f 70 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20   xOpen);....    
36010 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
36020 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55  e.xClose = new U
36030 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
36040 64 73 2e 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20  ds.xClose(..    
36050 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64              (mod
36060 75 6c 65 2e 78 43 6c 6f 73 65 20 21 3d 20 6e 75  ule.xClose != nu
36070 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43 6c  ll) ? module.xCl
36080 6f 73 65 20 3a 20 78 43 6c 6f 73 65 29 3b 0d 0a  ose : xClose);..
36090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
360a0 77 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20  wModule.xFilter 
360b0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
360c0 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c 74 65  veMethods.xFilte
360d0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
360e0 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 46 69 6c      (module.xFil
360f0 74 65 72 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  ter != null) ? m
36100 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20 3a 20  odule.xFilter : 
36110 78 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a 20 20 20  xFilter);....   
36120 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
36130 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20 55  le.xNext = new U
36140 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
36150 64 73 2e 78 4e 65 78 74 28 0d 0a 20 20 20 20 20  ds.xNext(..     
36160 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
36170 6c 65 2e 78 4e 65 78 74 20 21 3d 20 6e 75 6c 6c  le.xNext != null
36180 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 4e 65 78 74  ) ? module.xNext
36190 20 3a 20 78 4e 65 78 74 29 3b 0d 0a 0d 0a 20 20   : xNext);....  
361a0 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64            newMod
361b0 75 6c 65 2e 78 45 6f 66 20 3d 20 6e 65 77 20 55  ule.xEof = new U
361c0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
361d0 64 73 2e 78 45 6f 66 28 0d 0a 20 20 20 20 20 20  ds.xEof(..      
361e0 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
361f0 65 2e 78 45 6f 66 20 21 3d 20 6e 75 6c 6c 29 20  e.xEof != null) 
36200 3f 20 6d 6f 64 75 6c 65 2e 78 45 6f 66 20 3a 20  ? module.xEof : 
36210 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  xEof);....      
36220 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e        newModule.
36230 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20 55 6e  xColumn = new Un
36240 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
36250 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20  s.xColumn(..    
36260 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64              (mod
36270 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 21 3d 20 6e  ule.xColumn != n
36280 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43  ull) ? module.xC
36290 6f 6c 75 6d 6e 20 3a 20 78 43 6f 6c 75 6d 6e 29  olumn : xColumn)
362a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
362b0 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52 6f 77 49   newModule.xRowI
362c0 64 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  d = new UnsafeNa
362d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 77  tiveMethods.xRow
362e0 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id(..           
362f0 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52 6f       (module.xRo
36300 77 49 64 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  wId != null) ? m
36310 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20 3a 20 78  odule.xRowId : x
36320 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20  RowId);....     
36330 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
36340 2e 78 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55  .xUpdate = new U
36350 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
36360 64 73 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20  ds.xUpdate(..   
36370 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f               (mo
36380 64 75 6c 65 2e 78 55 70 64 61 74 65 20 21 3d 20  dule.xUpdate != 
36390 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
363a0 55 70 64 61 74 65 20 3a 20 78 55 70 64 61 74 65  Update : xUpdate
363b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
363c0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 42 65 67    newModule.xBeg
363d0 69 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  in = new UnsafeN
363e0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65  ativeMethods.xBe
363f0 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  gin(..          
36400 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 42        (module.xB
36410 65 67 69 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  egin != null) ? 
36420 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20 3a 20  module.xBegin : 
36430 78 42 65 67 69 6e 29 3b 0d 0a 0d 0a 20 20 20 20  xBegin);....    
36440 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
36450 65 2e 78 53 79 6e 63 20 3d 20 6e 65 77 20 55 6e  e.xSync = new Un
36460 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
36470 73 2e 78 53 79 6e 63 28 0d 0a 20 20 20 20 20 20  s.xSync(..      
36480 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
36490 65 2e 78 53 79 6e 63 20 21 3d 20 6e 75 6c 6c 29  e.xSync != null)
364a0 20 3f 20 6d 6f 64 75 6c 65 2e 78 53 79 6e 63 20   ? module.xSync 
364b0 3a 20 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20  : xSync);....   
364c0 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
364d0 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e 65 77  le.xCommit = new
364e0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
364f0 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a 20  hods.xCommit(.. 
36500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
36510 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 21  module.xCommit !
36520 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65  = null) ? module
36530 2e 78 43 6f 6d 6d 69 74 20 3a 20 78 43 6f 6d 6d  .xCommit : xComm
36540 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  it);....        
36550 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52      newModule.xR
36560 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20 55 6e  ollback = new Un
36570 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
36580 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20  s.xRollback(..  
36590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
365a0 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20  odule.xRollback 
365b0 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
365c0 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3a 20 78 52  e.xRollback : xR
365d0 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20  ollback);....   
365e0 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
365f0 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
36600 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
36610 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64  iveMethods.xFind
36620 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
36630 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
36640 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
36650 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
36660 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
36670 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
36680 20 20 20 20 78 46 69 6e 64 46 75 6e 63 74 69 6f      xFindFunctio
36690 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
366a0 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52 65     newModule.xRe
366b0 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61 66  name = new Unsaf
366c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
366d0 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  Rename(..       
366e0 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
366f0 2e 78 52 65 6e 61 6d 65 20 21 3d 20 6e 75 6c 6c  .xRename != null
36700 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 65 6e 61  ) ? module.xRena
36710 6d 65 20 3a 20 78 52 65 6e 61 6d 65 29 3b 0d 0a  me : xRename);..
36720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
36730 77 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69  wModule.xSavepoi
36740 6e 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  nt = new UnsafeN
36750 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61  ativeMethods.xSa
36760 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20  vepoint(..      
36770 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
36780 65 2e 78 53 61 76 65 70 6f 69 6e 74 20 21 3d 20  e.xSavepoint != 
36790 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
367a0 53 61 76 65 70 6f 69 6e 74 20 3a 20 78 53 61 76  Savepoint : xSav
367b0 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  epoint);....    
367c0 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
367d0 65 2e 78 52 65 6c 65 61 73 65 20 3d 20 6e 65 77  e.xRelease = new
367e0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
367f0 68 6f 64 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a  hods.xRelease(..
36800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36810 28 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65  (module.xRelease
36820 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
36830 6c 65 2e 78 52 65 6c 65 61 73 65 20 3a 20 78 52  le.xRelease : xR
36840 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  elease);....    
36850 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
36860 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20  e.xRollbackTo = 
36870 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
36880 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63  Methods.xRollbac
36890 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20  kTo(..          
368a0 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52        (module.xR
368b0 6f 6c 6c 62 61 63 6b 54 6f 20 21 3d 20 6e 75 6c  ollbackTo != nul
368c0 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c  l) ? module.xRol
368d0 6c 62 61 63 6b 54 6f 20 3a 0d 0a 20 20 20 20 20  lbackTo :..     
368e0 20 20 20 20 20 20 20 20 20 20 20 78 52 6f 6c 6c             xRoll
368f0 62 61 63 6b 54 6f 29 3b 0d 0a 0d 0a 20 20 20 20  backTo);....    
36900 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
36910 65 77 4d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20  ewModule;..     
36920 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36970 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36980 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
36990 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 61  ..        /// Ca
369a0 6c 6c 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 76  lls one of the v
369b0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 69  irtual table ini
369c0 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6d 65 74 68  tialization meth
369d0 6f 64 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ods...        //
369e0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
369f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
36a00 20 6e 61 6d 65 3d 22 63 72 65 61 74 65 22 3e 0d   name="create">.
36a10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
36a20 2d 7a 65 72 6f 20 74 6f 20 63 61 6c 6c 20 74 68  -zero to call th
36a30 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
36a40 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
36a50 65 2e 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20  e.Create" />..  
36a60 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
36a70 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 65  ; otherwise, the
36a80 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
36a90 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
36aa0 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 0d 0a 20 20  .Connect" />..  
36ab0 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
36ac0 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 2e   will be called.
36ad0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
36ae0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
36af0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
36b00 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  "pDb">..        
36b10 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 64  /// The native d
36b20 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
36b30 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  on handle...    
36b40 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
36b50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
36b60 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22  aram name="pAux"
36b70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
36b80 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e 61 74 69  he original nati
36b90 76 65 20 70 6f 69 6e 74 65 72 20 76 61 6c 75 65  ve pointer value
36ba0 20 74 68 61 74 20 77 61 73 20 70 72 6f 76 69 64   that was provid
36bb0 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ed to the..     
36bc0 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63     /// sqlite3_c
36bd0 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 2c 20  reate_module(), 
36be0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
36bf0 6f 64 75 6c 65 5f 76 32 28 29 20 6f 72 0d 0a 20  odule_v2() or.. 
36c00 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
36c10 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73  e3_create_dispos
36c20 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 29 20 66 75  able_module() fu
36c30 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20  nctions...      
36c40 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
36c50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
36c60 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d  am name="argc">.
36c70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
36c80 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
36c90 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52  ents from the CR
36ca0 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
36cb0 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  LE statement... 
36cc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
36cd0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
36ce0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
36cf0 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gv">..        //
36d00 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 73  / The array of s
36d10 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  tring arguments 
36d20 66 72 6f 6d 20 74 68 65 20 43 52 45 41 54 45 20  from the CREATE 
36d30 56 49 52 54 55 41 4c 20 54 41 42 4c 45 0d 0a 20  VIRTUAL TABLE.. 
36d40 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65         /// state
36d50 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ment...        /
36d60 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
36d70 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
36d80 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
36d90 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
36da0 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
36db0 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
36dc0 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e  modified to poin
36dd0 74 20 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a  t to the newly..
36de0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61          /// crea
36df0 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74  ted native sqlit
36e00 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
36e10 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
36e20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
36e30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
36e40 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45 72 72 6f  aram name="pErro
36e50 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
36e60 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20 74   Upon failure, t
36e70 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
36e80 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
36e90 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 65  o point to the e
36ea0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rror..        //
36eb0 2f 20 6d 65 73 73 61 67 65 2c 20 77 69 74 68 20  / message, with 
36ec0 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  the underlying m
36ed0 65 6d 6f 72 79 20 68 61 76 69 6e 67 20 62 65 65  emory having bee
36ee0 6e 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  n obtained from 
36ef0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
36f00 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
36f10 29 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20  ) function...   
36f20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
36f30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
36f40 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
36f50 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
36f60 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
36f70 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
36f80 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
36f90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
36fa0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72  LiteErrorCode Cr
36fb0 65 61 74 65 4f 72 43 6f 6e 6e 65 63 74 28 0d 0a  eateOrConnect(..
36fc0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
36fd0 20 63 72 65 61 74 65 2c 0d 0a 20 20 20 20 20 20   create,..      
36fe0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62        IntPtr pDb
36ff0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
37000 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
37010 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
37020 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
37030 49 6e 74 50 74 72 20 61 72 67 76 2c 0d 0a 20 20  IntPtr argv,..  
37040 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
37050 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
37060 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
37070 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20  Ptr pError..    
37080 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
37090 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
370a0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
370b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
370c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
370d0 65 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74  eName = SQLiteSt
370e0 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55  ring.StringFromU
370f0 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  tf8IntPtr(..    
37100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37110 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
37120 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 66  ods.sqlite3_db_f
37130 69 6c 65 6e 61 6d 65 28 70 44 62 2c 20 49 6e 74  ilename(pDb, Int
37140 50 74 72 2e 5a 65 72 6f 29 29 3b 0d 0a 0d 0a 20  Ptr.Zero));.... 
37150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
37160 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
37170 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
37180 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  n = new SQLiteCo
37190 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
371a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371b0 20 20 20 70 44 62 2c 20 66 69 6c 65 4e 61 6d 65     pDb, fileName
371c0 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20  , false))..     
371d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
371e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371f0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
37200 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 6e 75 6c  able table = nul
37210 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
37220 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65          string e
37230 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rror = null;....
37240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37250 20 20 20 20 69 66 20 28 28 63 72 65 61 74 65 20      if ((create 
37260 26 26 20 43 72 65 61 74 65 28 63 6f 6e 6e 65 63  && Create(connec
37270 74 69 6f 6e 2c 20 70 41 75 78 2c 0d 0a 20 20 20  tion, pAux,..   
37280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37290 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53           SQLiteS
372a0 74 72 69 6e 67 2e 53 74 72 69 6e 67 41 72 72 61  tring.StringArra
372b0 79 46 72 6f 6d 55 74 66 38 53 69 7a 65 41 6e 64  yFromUtf8SizeAnd
372c0 49 6e 74 50 74 72 28 61 72 67 63 2c 0d 0a 20 20  IntPtr(argc,..  
372d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372e0 20 20 20 20 20 20 20 20 20 20 61 72 67 76 29 2c            argv),
372f0 20 72 65 66 20 74 61 62 6c 65 2c 20 72 65 66 20   ref table, ref 
37300 65 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65  error) == SQLite
37310 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c  ErrorCode.Ok) ||
37320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37330 20 20 20 20 20 20 20 20 20 20 28 21 63 72 65 61            (!crea
37340 74 65 20 26 26 20 43 6f 6e 6e 65 63 74 28 63 6f  te && Connect(co
37350 6e 6e 65 63 74 69 6f 6e 2c 20 70 41 75 78 2c 0d  nnection, pAux,.
37360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37370 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
37380 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67  iteString.String
37390 41 72 72 61 79 46 72 6f 6d 55 74 66 38 53 69 7a  ArrayFromUtf8Siz
373a0 65 41 6e 64 49 6e 74 50 74 72 28 61 72 67 63 2c  eAndIntPtr(argc,
373b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
373c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
373d0 67 76 29 2c 20 72 65 66 20 74 61 62 6c 65 2c 20  gv), ref table, 
373e0 72 65 66 20 65 72 72 6f 72 29 20 3d 3d 20 53 51  ref error) == SQ
373f0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
37400 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
37410 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37430 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20     if (table != 
37440 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
37450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
37460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56                pV
37480 74 61 62 20 3d 20 54 61 62 6c 65 54 6f 49 6e 74  tab = TableToInt
37490 50 74 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20  Ptr(table);..   
374a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
374c0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
374d0 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok;..           
374e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37500 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
37510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37520 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37540 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51       pError = SQ
37550 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
37560 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
37570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37590 20 20 22 6e 6f 20 74 61 62 6c 65 20 77 61 73 20    "no table was 
375a0 63 72 65 61 74 65 64 22 29 3b 0d 0a 20 20 20 20  created");..    
375b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
375d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
375e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375f0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
37600 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37620 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
37630 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
37640 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
37650 67 28 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  g(error);..     
37660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
37670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37680 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
37690 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
376a0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
376b0 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73   e) /* NOTE: Mus
376c0 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d  t catch ALL. */.
376d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
376e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376f0 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53  pError = SQLiteS
37700 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
37710 46 72 6f 6d 53 74 72 69 6e 67 28 65 2e 54 6f 53  FromString(e.ToS
37720 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
37730 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
37740 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
37750 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
37760 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
37770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
37780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
377d0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
377e0 20 20 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20        /// Calls 
377f0 6f 6e 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  one of the virtu
37800 61 6c 20 74 61 62 6c 65 20 66 69 6e 61 6c 69 7a  al table finaliz
37810 61 74 69 6f 6e 20 6d 65 74 68 6f 64 73 2e 0d 0a  ation methods...
37820 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
37830 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
37840 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
37850 22 64 65 73 74 72 6f 79 22 3e 0d 0a 20 20 20 20  "destroy">..    
37860 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
37870 20 74 6f 20 63 61 6c 6c 20 74 68 65 20 3c 73 65   to call the <se
37880 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
37890 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 44 65 73  anagedModule.Des
378a0 74 72 6f 79 22 20 2f 3e 0d 0a 20 20 20 20 20 20  troy" />..      
378b0 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 3b 20 6f 74    /// method; ot
378c0 68 65 72 77 69 73 65 2c 20 74 68 65 0d 0a 20 20  herwise, the..  
378d0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
378e0 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
378f0 67 65 64 4d 6f 64 75 6c 65 2e 44 69 73 63 6f 6e  gedModule.Discon
37900 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 20  nect" /> method 
37910 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20  will be..       
37920 20 2f 2f 2f 20 63 61 6c 6c 65 64 2e 0d 0a 20 20   /// called...  
37930 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
37940 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
37950 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
37960 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
37970 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
37980 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
37990 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
379a0 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
379b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
379c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
379d0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
379e0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
379f0 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
37a00 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
37a10 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
37a20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
37a30 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65  LiteErrorCode De
37a40 73 74 72 6f 79 4f 72 44 69 73 63 6f 6e 6e 65 63  stroyOrDisconnec
37a50 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
37a60 62 6f 6f 6c 20 64 65 73 74 72 6f 79 2c 0d 0a 20  bool destroy,.. 
37a70 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
37a80 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
37a90 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
37aa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
37ab0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
37ac0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
37ad0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
37ae0 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61  Table table = Ta
37af0 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56  bleFromIntPtr(pV
37b00 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
37b10 20 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62           if (tab
37b20 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le != null)..   
37b30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
37b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b50 20 20 20 20 69 66 20 28 28 64 65 73 74 72 6f 79      if ((destroy
37b60 20 26 26 20 28 44 65 73 74 72 6f 79 28 74 61 62   && (Destroy(tab
37b70 6c 65 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  le) == SQLiteErr
37b80 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 7c 7c 0d 0a  orCode.Ok)) ||..
37b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ba0 20 20 20 20 20 20 20 20 28 21 64 65 73 74 72 6f          (!destro
37bb0 79 20 26 26 20 28 44 69 73 63 6f 6e 6e 65 63 74  y && (Disconnect
37bc0 28 74 61 62 6c 65 29 20 3d 3d 20 53 51 4c 69 74  (table) == SQLit
37bd0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 29  eErrorCode.Ok)))
37be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37bf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c10 20 69 66 20 28 74 61 62 6c 65 73 20 21 3d 20 6e   if (tables != n
37c20 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
37c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c40 20 20 74 61 62 6c 65 73 2e 52 65 6d 6f 76 65 28    tables.Remove(
37c50 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
37c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c70 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
37c80 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
37c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ca0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
37cb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
37cc0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
37cd0 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
37ce0 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a  tion e) /* NOTE:
37cf0 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e   Must catch ALL.
37d00 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
37d10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37d20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
37d30 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
37d40 20