System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c507441aee6be4f18cd51eab7a6b0274c72f0153:


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 69 6e 74 65 72 6e 61  .        interna
2990: 6c 20 53 51 4c 69 74 65 56 61 6c 75 65 28 49 6e  l SQLiteValue(In
29a0: 74 50 74 72 20 70 56 61 6c 75 65 29 0d 0a 20 20  tPtr pValue)..  
29b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29c0: 20 20 20 20 20 74 68 69 73 2e 70 56 61 6c 75 65       this.pValue
29d0: 20 3d 20 70 56 61 6c 75 65 3b 0d 0a 20 20 20 20   = pValue;..    
29e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
29f0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2a00: 20 20 20 20 20 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 2f 0d 0a 0d 0a  ////////////....
2a50: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2a60: 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d  Private Methods.
2a70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
2a80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2a90: 2f 2f 2f 20 49 6e 76 61 6c 69 64 61 74 65 73 20  /// Invalidates 
2aa0: 74 68 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65  the native value
2ab0: 20 68 61 6e 64 6c 65 2c 20 74 68 65 72 65 62 79   handle, thereby
2ac0: 20 70 72 65 76 65 6e 74 69 6e 67 20 66 75 72 74   preventing furt
2ad0: 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  her..        ///
2ae0: 20 61 63 63 65 73 73 20 74 6f 20 69 74 20 66 72   access to it fr
2af0: 6f 6d 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  om this object i
2b00: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
2b10: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2b20: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2b30: 65 20 76 6f 69 64 20 50 72 65 76 65 6e 74 4e 61  e void PreventNa
2b40: 74 69 76 65 41 63 63 65 73 73 28 29 0d 0a 20 20  tiveAccess()..  
2b50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b60: 20 20 20 20 20 70 56 61 6c 75 65 20 3d 20 49 6e       pValue = In
2b70: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
2b80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2b90: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2ba0: 20 20 20 20 20 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 2f 0d 0a 0d 0a  ////////////....
2bf0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2c00: 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e  ISQLiteNativeHan
2c10: 64 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  dle Members..   
2c20: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2c30: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2c40: 52 65 74 75 72 6e 73 20 74 68 65 20 75 6e 64 65  Returns the unde
2c50: 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 20 6e 61  rlying SQLite na
2c60: 74 69 76 65 20 68 61 6e 64 6c 65 20 61 73 73 6f  tive handle asso
2c70: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
2c80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62  ..        /// ob
2c90: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
2ca0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2cb0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2cc0: 70 75 62 6c 69 63 20 49 6e 74 50 74 72 20 4e 61  public IntPtr Na
2cd0: 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20  tiveHandle..    
2ce0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2cf0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
2d00: 70 56 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20  pValue; }..     
2d10: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2d20: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2d30: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2d80: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2d90: 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
2da0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2db0: 65 20 62 6f 6f 6c 20 70 65 72 73 69 73 74 65 64  e bool persisted
2dc0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
2dd0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2de0: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f    /// Returns no
2df0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61  n-zero if the na
2e00: 74 69 76 65 20 53 51 4c 69 74 65 20 76 61 6c 75  tive SQLite valu
2e10: 65 20 68 61 73 20 62 65 65 6e 20 73 75 63 63 65  e has been succe
2e20: 73 73 66 75 6c 6c 79 0d 0a 20 20 20 20 20 20 20  ssfully..       
2e30: 20 2f 2f 2f 20 70 65 72 73 69 73 74 65 64 20 61   /// persisted a
2e40: 73 20 61 20 6d 61 6e 61 67 65 64 20 76 61 6c 75  s a managed valu
2e50: 65 20 77 69 74 68 69 6e 20 74 68 69 73 20 6f 62  e within this ob
2e60: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 28 69  ject instance (i
2e70: 2e 65 2e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  .e. the..       
2e80: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
2e90: 56 61 6c 75 65 22 20 2f 3e 20 70 72 6f 70 65 72  Value" /> proper
2ea0: 74 79 20 6d 61 79 20 74 68 65 6e 20 62 65 20 72  ty may then be r
2eb0: 65 61 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79  ead successfully
2ec0: 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  )...        /// 
2ed0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2ee0: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
2ef0: 50 65 72 73 69 73 74 65 64 0d 0a 20 20 20 20 20  Persisted..     
2f00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f10: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
2f20: 65 72 73 69 73 74 65 64 3b 20 7d 0d 0a 20 20 20  ersisted; }..   
2f30: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f40: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2f90: 20 20 20 20 20 70 72 69 76 61 74 65 20 6f 62 6a       private obj
2fa0: 65 63 74 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ect value;..    
2fb0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2fc0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  >..        /// I
2fd0: 66 20 74 68 65 20 6d 61 6e 61 67 65 64 20 76 61  f the managed va
2fe0: 6c 75 65 20 66 6f 72 20 74 68 69 73 20 6f 62 6a  lue for this obj
2ff0: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 69 73 20  ect instance is 
3000: 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 20  available (i.e. 
3010: 69 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  it..        /// 
3020: 68 61 73 20 62 65 65 6e 20 70 72 65 76 69 6f 75  has been previou
3030: 73 6c 79 20 70 65 72 73 69 73 74 65 64 20 76 69  sly persisted vi
3040: 61 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  a the <see cref=
3050: 22 50 65 72 73 69 73 74 22 20 2f 3e 29 20 6d 65  "Persist" />) me
3060: 74 68 6f 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f  thod,..        /
3070: 2f 2f 20 74 68 61 74 20 76 61 6c 75 65 20 69 73  // that value is
3080: 20 72 65 74 75 72 6e 65 64 3b 20 6f 74 68 65 72   returned; other
3090: 77 69 73 65 2c 20 61 6e 20 65 78 63 65 70 74 69  wise, an excepti
30a0: 6f 6e 20 69 73 20 74 68 72 6f 77 6e 2e 20 20 54  on is thrown.  T
30b0: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
30c0: 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 6d  returned value m
30d0: 61 79 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20  ay be null...   
30e0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
30f0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
3100: 6c 69 63 20 6f 62 6a 65 63 74 20 56 61 6c 75 65  lic object Value
3110: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3120: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
3130: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3140: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3150: 28 21 70 65 72 73 69 73 74 65 64 29 0d 0a 20 20  (!persisted)..  
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3180: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
3190: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
31a0: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c0: 20 20 20 22 76 61 6c 75 65 20 77 61 73 20 6e 6f     "value was no
31d0: 74 20 70 65 72 73 69 73 74 65 64 22 29 3b 0d 0a  t persisted");..
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3200: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
3210: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
3220: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
3230: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
3240: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
3250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3290: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
32a0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65  region Public Me
32b0: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
32c0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
32d0: 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61        /// Gets a
32e0: 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 74  nd returns the t
32f0: 79 70 65 20 61 66 66 69 6e 69 74 79 20 61 73 73  ype affinity ass
3300: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
3310: 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  s value...      
3320: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3330: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
3340: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
3350: 20 2f 2f 2f 20 54 68 65 20 74 79 70 65 20 61 66   /// The type af
3360: 66 69 6e 69 74 79 20 61 73 73 6f 63 69 61 74 65  finity associate
3370: 64 20 77 69 74 68 20 74 68 69 73 20 76 61 6c 75  d with this valu
3380: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
3390: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
33a0: 20 20 20 20 70 75 62 6c 69 63 20 54 79 70 65 41      public TypeA
33b0: 66 66 69 6e 69 74 79 20 47 65 74 54 79 70 65 41  ffinity GetTypeA
33c0: 66 66 69 6e 69 74 79 28 29 0d 0a 20 20 20 20 20  ffinity()..     
33d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33e0: 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20    if (pValue == 
33f0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
3400: 75 72 6e 20 54 79 70 65 41 66 66 69 6e 69 74 79  urn TypeAffinity
3410: 2e 4e 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20  .None;..        
3420: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
3430: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3440: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
3450: 65 28 70 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  e(pValue);..    
3460: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3470: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
34d0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47  >..        /// G
34e0: 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ets and returns 
34f0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
3500: 74 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  tes associated w
3510: 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2c 20  ith this value, 
3520: 69 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  if..        /// 
3530: 69 74 20 72 65 66 65 72 73 20 74 6f 20 61 20 55  it refers to a U
3540: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72  TF-8 encoded str
3550: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ing...        //
3560: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3570: 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
3580: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
3590: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
35a0: 79 74 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ytes associated 
35b0: 77 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e  with this value.
35c0: 20 20 54 68 65 20 72 65 74 75 72 6e 65 64 20 76    The returned v
35d0: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  alue..        //
35e0: 2f 20 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a  / may be zero...
35f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
3600: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
3610: 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74 42 79  public int GetBy
3620: 74 65 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  tes()..        {
3630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3640: 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50   (pValue == IntP
3650: 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20  tr.Zero) return 
3660: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
3670: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
3680: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
3690: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
36a0: 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  Value);..       
36b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
36c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3700: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3710: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3720: 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73          /// Gets
3730: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
3740: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33   <see cref="Int3
3750: 32 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64  2" /> associated
3760: 20 77 69 74 68 20 74 68 69 73 0d 0a 20 20 20 20   with this..    
3770: 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a      /// value...
3780: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
3790: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
37a0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
37b0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
37c0: 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22  see cref="Int32"
37d0: 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77   /> associated w
37e0: 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e 0d  ith this value..
37f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
3800: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
3810: 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74 49   public int GetI
3820: 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  nt()..        {.
3830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3840: 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74  (pValue == IntPt
3850: 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 64  r.Zero) return d
3860: 65 66 61 75 6c 74 28 69 6e 74 29 3b 0d 0a 20 20  efault(int);..  
3870: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3880: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3890: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
38a0: 75 65 5f 69 6e 74 28 70 56 61 6c 75 65 29 3b 0d  ue_int(pValue);.
38b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
38c0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3910: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
3920: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3930: 2f 2f 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74  /// Gets and ret
3940: 75 72 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72  urns the <see cr
3950: 65 66 3d 22 49 6e 74 36 34 22 20 2f 3e 20 61 73  ef="Int64" /> as
3960: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20  sociated with.. 
3970: 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20         /// this 
3980: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...        
3990: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
39a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
39b0: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
39c0: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
39d0: 3d 22 49 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f  ="Int64" /> asso
39e0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
39f0: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
3a00: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
3a10: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
3a20: 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 29 0d  long GetInt64().
3a30: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
3a40: 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
3a50: 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
3a60: 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  o) return defaul
3a70: 74 28 6c 6f 6e 67 29 3b 0d 0a 0d 0a 23 69 66 20  t(long);....#if 
3a80: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
3a90: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
3aa0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
3ab0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3ac0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
3ad0: 5f 69 6e 74 36 34 28 70 56 61 6c 75 65 29 3b 0d  _int64(pValue);.
3ae0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
3af0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
3b00: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b       long value;
3b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
3b20: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3b30: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
3b40: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 56  int64_interop(pV
3b50: 61 6c 75 65 2c 20 6f 75 74 20 76 61 6c 75 65 29  alue, out value)
3b60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
3b70: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
3b80: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3b90: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
3ba0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
3bb0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
3bc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3bd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3c20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
3c30: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
3c40: 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72  / Gets and retur
3c50: 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ns the <see cref
3c60: 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20 61 73 73  ="Double" /> ass
3c70: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
3c80: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  s..        /// v
3c90: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
3ca0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3cb0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
3cc0: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
3cd0: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
3ce0: 22 44 6f 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f  "Double" /> asso
3cf0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
3d00: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
3d10: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
3d20: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
3d30: 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65  double GetDouble
3d40: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
3d50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
3d60: 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e  Value == IntPtr.
3d70: 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 64 65 66  Zero) return def
3d80: 61 75 6c 74 28 64 6f 75 62 6c 65 29 3b 0d 0a 0d  ault(double);...
3d90: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
3da0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
3db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3dc0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
3dd0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3de0: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 70 56 61  value_double(pVa
3df0: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
3e00: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
3e10: 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
3e20: 65 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  e value;..      
3e30: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
3e40: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3e50: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
3e60: 6e 74 65 72 6f 70 28 70 56 61 6c 75 65 2c 20 6f  nterop(pValue, o
3e70: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ut value);..    
3e80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
3e90: 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
3ea0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
3eb0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
3ec0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
3ed0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
3ee0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
3ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f00: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3f40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
3f50: 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20         /// Gets 
3f60: 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
3f70: 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e  <see cref="Strin
3f80: 67 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64  g" /> associated
3f90: 20 77 69 74 68 20 74 68 69 73 0d 0a 20 20 20 20   with this..    
3fa0: 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a      /// value...
3fb0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
3fc0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3fd0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
3fe0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
3ff0: 73 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67  see cref="String
4000: 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20  " /> associated 
4010: 77 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e  with this value.
4020: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0d 0a    The value is..
4030: 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76          /// conv
4040: 65 72 74 65 64 20 66 72 6f 6d 20 74 68 65 20 55  erted from the U
4050: 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 70 72  TF-8 encoding pr
4060: 69 6f 72 20 74 6f 20 62 65 69 6e 67 20 72 65 74  ior to being ret
4070: 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  urned...        
4080: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
4090: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
40a0: 74 72 69 6e 67 20 47 65 74 53 74 72 69 6e 67 28  tring GetString(
40b0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
40c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56            if (pV
40d0: 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  alue == IntPtr.Z
40e0: 65 72 6f 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c  ero) return null
40f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
4100: 65 74 75 72 6e 20 53 51 4c 69 74 65 53 74 72 69  eturn SQLiteStri
4110: 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55 74 66  ng.StringFromUtf
4120: 38 49 6e 74 50 74 72 28 70 56 61 6c 75 65 2c 20  8IntPtr(pValue, 
4130: 47 65 74 42 79 74 65 73 28 29 29 3b 0d 0a 20 20  GetBytes());..  
4140: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4150: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
4160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
41a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
41b0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
41c0: 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e   Gets and return
41d0: 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  s the <see cref=
41e0: 22 42 79 74 65 22 20 2f 3e 20 61 72 72 61 79 20  "Byte" /> array 
41f0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
4200: 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  this..        //
4210: 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  / value...      
4220: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4230: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
4240: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
4250: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
4260: 65 66 3d 22 42 79 74 65 22 20 2f 3e 20 61 72 72  ef="Byte" /> arr
4270: 61 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ay associated wi
4280: 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a  th this value...
4290: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
42a0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
42b0: 70 75 62 6c 69 63 20 62 79 74 65 5b 5d 20 47 65  public byte[] Ge
42c0: 74 42 6c 6f 62 28 29 0d 0a 20 20 20 20 20 20 20  tBlob()..       
42d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
42e0: 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e  if (pValue == In
42f0: 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72  tPtr.Zero) retur
4300: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
4310: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
4320: 74 65 42 79 74 65 73 2e 46 72 6f 6d 49 6e 74 50  teBytes.FromIntP
4330: 74 72 28 70 56 61 6c 75 65 2c 20 47 65 74 42 79  tr(pValue, GetBy
4340: 74 65 73 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  tes());..       
4350: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
43b0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
43c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 73 65 73          /// Uses
43d0: 20 74 68 65 20 6e 61 74 69 76 65 20 76 61 6c 75   the native valu
43e0: 65 20 68 61 6e 64 6c 65 20 74 6f 20 6f 62 74 61  e handle to obta
43f0: 69 6e 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  in and store the
4400: 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 0d 0a   managed value..
4410: 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20          /// for 
4420: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
4430: 61 6e 63 65 2c 20 74 68 75 73 20 73 61 76 69 6e  ance, thus savin
4440: 67 20 69 74 20 66 6f 72 20 6c 61 74 65 72 20 75  g it for later u
4450: 73 65 2e 20 20 54 68 65 20 74 79 70 65 0d 0a 20  se.  The type.. 
4460: 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68         /// of th
4470: 65 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 20  e managed value 
4480: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
4490: 20 74 68 65 20 74 79 70 65 20 61 66 66 69 6e 69   the type affini
44a0: 74 79 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  ty of the..     
44b0: 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 76 61     /// native va
44c0: 6c 75 65 2e 20 20 49 66 20 74 68 65 20 74 79 70  lue.  If the typ
44d0: 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 6e 6f  e affinity is no
44e0: 74 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20  t recognized by 
44f0: 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  this..        //
4500: 2f 20 6d 65 74 68 6f 64 2c 20 6e 6f 20 77 6f 72  / method, no wor
4510: 6b 20 69 73 20 64 6f 6e 65 20 61 6e 64 20 66 61  k is done and fa
4520: 6c 73 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e  lse is returned.
4530: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
4540: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
4550: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
4560: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
4570: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61 74  -zero if the nat
4580: 69 76 65 20 76 61 6c 75 65 20 77 61 73 20 70 65  ive value was pe
4590: 72 73 69 73 74 65 64 20 73 75 63 63 65 73 73 66  rsisted successf
45a0: 75 6c 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ully...        /
45b0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
45c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
45d0: 6f 6c 20 50 65 72 73 69 73 74 28 29 0d 0a 20 20  ol Persist()..  
45e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
45f0: 20 20 20 20 20 73 77 69 74 63 68 20 28 47 65 74       switch (Get
4600: 54 79 70 65 41 66 66 69 6e 69 74 79 28 29 29 0d  TypeAffinity()).
4610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4630: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
4640: 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3a  y.Uninitialized:
4650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4660: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 76 61 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0d 0a   value = null;..
4690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46a0: 20 20 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e          PreventN
46b0: 61 74 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a  ativeAccess();..
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
46e0: 70 65 72 73 69 73 74 65 64 20 3d 20 74 72 75 65  persisted = true
46f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4700: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4710: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
4720: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
4730: 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64:..           
4740: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4760: 20 20 20 20 76 61 6c 75 65 20 3d 20 47 65 74 49      value = GetI
4770: 6e 74 36 34 28 29 3b 0d 0a 20 20 20 20 20 20 20  nt64();..       
4780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4790: 20 50 72 65 76 65 6e 74 4e 61 74 69 76 65 41 63   PreventNativeAc
47a0: 63 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  cess();..       
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47c0: 20 72 65 74 75 72 6e 20 28 70 65 72 73 69 73 74   return (persist
47d0: 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20  ed = true);..   
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4800: 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
4810: 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20  inity.Double:.. 
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4830: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
4850: 6c 75 65 20 3d 20 47 65 74 44 6f 75 62 6c 65 28  lue = GetDouble(
4860: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4870: 20 20 20 20 20 20 20 20 20 20 20 20 50 72 65 76              Prev
4880: 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73 28  entNativeAccess(
4890: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
48b0: 72 6e 20 28 70 65 72 73 69 73 74 65 64 20 3d 20  rn (persisted = 
48c0: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
48f0: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
4900: 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20  .Text:..        
4910: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4930: 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 47         value = G
4940: 65 74 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  etString();..   
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4960: 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69       PreventNati
4970: 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20  veAccess();..   
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4990: 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72       return (per
49a0: 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d  sisted = true);.
49b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
49c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
49d0: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
49e0: 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d  eAffinity.Blob:.
49f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4a00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a20: 76 61 6c 75 65 20 3d 20 47 65 74 42 79 74 65 73  value = GetBytes
4a30: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 65               Pre
4a50: 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73  ventNativeAccess
4a60: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4a80: 75 72 6e 20 28 70 65 72 73 69 73 74 65 64 20 3d  urn (persisted =
4a90: 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20   true);..       
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ac0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
4ad0: 79 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20  y.Null:..       
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
4af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b00: 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20          value = 
4b10: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20  DBNull.Value;.. 
4b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b30: 20 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61         PreventNa
4b40: 74 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20  tiveAccess();.. 
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 70         return (p
4b70: 65 72 73 69 73 74 65 64 20 3d 20 74 72 75 65 29  ersisted = true)
4b80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4b90: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4ba0: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
4bb0: 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t:..            
4bc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4be0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
4bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4c10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4c20: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
4c30: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
4c40: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
4c50: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4ca0: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
4cb0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
4cc0: 61 69 6e 74 4f 70 20 45 6e 75 6d 65 72 61 74 69  aintOp Enumerati
4cd0: 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  on..    /// <sum
4ce0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
4cf0: 68 65 73 65 20 61 72 65 20 74 68 65 20 61 6c 6c  hese are the all
4d00: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
4d10: 74 68 65 20 6f 70 65 72 61 74 6f 72 73 20 74 68  the operators th
4d20: 61 74 20 61 72 65 20 70 61 72 74 20 6f 66 20 61  at are part of a
4d30: 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72  ..    /// constr
4d40: 61 69 6e 74 20 74 65 72 6d 20 69 6e 20 74 68 65  aint term in the
4d50: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
4d60: 20 61 20 71 75 65 72 79 20 74 68 61 74 20 75 73   a query that us
4d70: 65 73 20 61 20 76 69 72 74 75 61 6c 0d 0a 20 20  es a virtual..  
4d80: 20 20 2f 2f 2f 20 74 61 62 6c 65 2e 0d 0a 20 20    /// table...  
4d90: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4da0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75  ..    public enu
4db0: 6d 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  m SQLiteIndexCon
4dc0: 73 74 72 61 69 6e 74 4f 70 20 3a 20 62 79 74 65  straintOp : byte
4dd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4de0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
4df0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
4e00: 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74   value represent
4e10: 73 20 74 68 65 20 65 71 75 61 6c 69 74 79 20 6f  s the equality o
4e20: 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20  perator...      
4e30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4e40: 0d 0a 20 20 20 20 20 20 20 20 45 71 75 61 6c 54  ..        EqualT
4e50: 6f 20 3d 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20  o = 2,....      
4e60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4e70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
4e80: 73 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e  s value represen
4e90: 74 73 20 74 68 65 20 67 72 65 61 74 65 72 20 74  ts the greater t
4ea0: 68 61 6e 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20  han operator... 
4eb0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
4ec0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 47  mary>..        G
4ed0: 72 65 61 74 65 72 54 68 61 6e 20 3d 20 34 2c 0d  reaterThan = 4,.
4ee0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
4ef0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
4f00: 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65    /// This value
4f10: 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
4f20: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
4f30: 61 6c 20 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d  al to operator..
4f40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
4f50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
4f60: 20 4c 65 73 73 54 68 61 6e 4f 72 45 71 75 61 6c   LessThanOrEqual
4f70: 54 6f 20 3d 20 38 2c 0d 0a 0d 0a 20 20 20 20 20  To = 8,....     
4f80: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
4f90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
4fa0: 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73 65  is value represe
4fb0: 6e 74 73 20 74 68 65 20 6c 65 73 73 20 74 68 61  nts the less tha
4fc0: 6e 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20  n operator...   
4fd0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
4fe0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 4c 65 73  ry>..        Les
4ff0: 73 54 68 61 6e 20 3d 20 31 36 2c 0d 0a 0d 0a 20  sThan = 16,.... 
5000: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
5010: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
5020: 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72 65 70  / This value rep
5030: 72 65 73 65 6e 74 73 20 74 68 65 20 67 72 65 61  resents the grea
5040: 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
5050: 6c 20 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a  l to operator...
5060: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
5070: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
5080: 47 72 65 61 74 65 72 54 68 61 6e 4f 72 45 71 75  GreaterThanOrEqu
5090: 61 6c 54 6f 20 3d 20 33 32 2c 0d 0a 0d 0a 20 20  alTo = 32,....  
50a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
50b0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
50c0: 20 54 68 69 73 20 76 61 6c 75 65 20 72 65 70 72   This value repr
50d0: 65 73 65 6e 74 73 20 74 68 65 20 4d 41 54 43 48  esents the MATCH
50e0: 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20   operator...    
50f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5100: 79 3e 0d 0a 20 20 20 20 20 20 20 20 4d 61 74 63  y>..        Matc
5110: 68 20 3d 20 36 34 0d 0a 20 20 20 20 7d 0d 0a 20  h = 64..    }.. 
5120: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
5130: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
5140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5180: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
5190: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
51a0: 72 61 69 6e 74 20 48 65 6c 70 65 72 20 43 6c 61  raint Helper Cla
51b0: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
51c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
51d0: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
51e0: 65 6e 74 73 20 74 68 65 20 6e 61 74 69 76 65 20  ents the native 
51f0: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
5200: 6e 73 74 72 61 69 6e 74 20 73 74 72 75 63 74 75  nstraint structu
5210: 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d  re..    /// from
5220: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
5230: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
5240: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5250: 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64     public sealed
5260: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64   class SQLiteInd
5270: 65 78 43 6f 6e 73 74 72 61 69 6e 74 0d 0a 20 20  exConstraint..  
5280: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
5290: 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f  gion Internal Co
52a0: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
52b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
52c0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
52d0: 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73  onstructs an ins
52e0: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c  tance of this cl
52f0: 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70  ass using the sp
5300: 65 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d 0a  ecified native..
5310: 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
5320: 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
5330: 61 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 0d  aint structure..
5340: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
5350: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
5360: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5370: 3d 22 63 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a  ="constraint">..
5380: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
5390: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
53a0: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20  ndex_constraint 
53b0: 73 74 72 75 63 74 75 72 65 20 74 6f 20 75 73 65  structure to use
53c0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
53d0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
53e0: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
53f0: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28  IndexConstraint(
5400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
5410: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5420: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
5430: 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73 74  constraint const
5440: 72 61 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  raint..         
5450: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
5460: 20 20 3a 20 74 68 69 73 28 63 6f 6e 73 74 72 61    : this(constra
5470: 69 6e 74 2e 69 43 6f 6c 75 6d 6e 2c 20 63 6f 6e  int.iColumn, con
5480: 73 74 72 61 69 6e 74 2e 6f 70 2c 20 63 6f 6e 73  straint.op, cons
5490: 74 72 61 69 6e 74 2e 75 73 61 62 6c 65 2c 0d 0a  traint.usable,..
54a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54b0: 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 69 54     constraint.iT
54c0: 65 72 6d 4f 66 66 73 65 74 29 0d 0a 20 20 20 20  ermOffset)..    
54d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
54e0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
54f0: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
5500: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
5510: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
5520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5560: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
5570: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
5580: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
5590: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
55a0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
55b0: 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73  onstructs an ins
55c0: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c  tance of this cl
55d0: 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70  ass using the sp
55e0: 65 63 69 66 69 65 64 20 66 69 65 6c 64 0d 0a 20  ecified field.. 
55f0: 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65         /// value
5600: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
5610: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5620: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5630: 61 6d 65 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a  ame="iColumn">..
5640: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75          /// Colu
5650: 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20  mn on left-hand 
5660: 73 69 64 65 20 6f 66 20 63 6f 6e 73 74 72 61 69  side of constrai
5670: 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
5680: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
5690: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
56a0: 6d 65 3d 22 6f 70 22 3e 0d 0a 20 20 20 20 20 20  me="op">..      
56b0: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 61 69 6e 74    /// Constraint
56c0: 20 6f 70 65 72 61 74 6f 72 20 28 3c 73 65 65 20   operator (<see 
56d0: 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
56e0: 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 22 20 2f  xConstraintOp" /
56f0: 3e 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  >)...        ///
5700: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
5710: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5720: 6d 65 3d 22 75 73 61 62 6c 65 22 3e 0d 0a 20 20  me="usable">..  
5730: 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69        /// True i
5740: 66 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  f this constrain
5750: 74 20 69 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20  t is usable...  
5760: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
5770: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
5780: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 54 65  <param name="iTe
5790: 72 6d 4f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20  rmOffset">..    
57a0: 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74      /// Used int
57b0: 65 72 6e 61 6c 6c 79 20 2d 20 3c 73 65 65 20 63  ernally - <see c
57c0: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
57d0: 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e  gedModule.BestIn
57e0: 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20  dex" />..       
57f0: 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 69 67 6e 6f   /// should igno
5800: 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
5810: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
5820: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
5830: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
5840: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  (..            i
5850: 6e 74 20 69 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20  nt iColumn,..   
5860: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 49           SQLiteI
5870: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70  ndexConstraintOp
5880: 20 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20   op,..          
5890: 20 20 62 79 74 65 20 75 73 61 62 6c 65 2c 0d 0a    byte usable,..
58a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
58b0: 69 54 65 72 6d 4f 66 66 73 65 74 0d 0a 20 20 20  iTermOffset..   
58c0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
58d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
58e0: 20 20 20 74 68 69 73 2e 69 43 6f 6c 75 6d 6e 20     this.iColumn 
58f0: 3d 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20  = iColumn;..    
5900: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 70 20          this.op 
5910: 3d 20 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20  = op;..         
5920: 20 20 20 74 68 69 73 2e 75 73 61 62 6c 65 20 3d     this.usable =
5930: 20 75 73 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20   usable;..      
5940: 20 20 20 20 20 20 74 68 69 73 2e 69 54 65 72 6d        this.iTerm
5950: 4f 66 66 73 65 74 20 3d 20 69 54 65 72 6d 4f 66  Offset = iTermOf
5960: 66 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  fset;..        }
5970: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
5980: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
5990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
59e0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
59f0: 20 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20   Fields..       
5a00: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5a10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75          /// Colu
5a20: 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20  mn on left-hand 
5a30: 73 69 64 65 20 6f 66 20 63 6f 6e 73 74 72 61 69  side of constrai
5a40: 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
5a50: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5a60: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
5a70: 69 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20  iColumn;....    
5a80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5ad0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
5ae0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
5af0: 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70 65 72   Constraint oper
5b00: 61 74 6f 72 20 28 3c 73 65 65 20 63 72 65 66 3d  ator (<see cref=
5b10: 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73  "SQLiteIndexCons
5b20: 74 72 61 69 6e 74 4f 70 22 20 2f 3e 29 2e 0d 0a  traintOp" />)...
5b30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
5b40: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
5b50: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e 64  public SQLiteInd
5b60: 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20 6f  exConstraintOp o
5b70: 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  p;....        //
5b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bc0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5bd0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5be0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20         /// True 
5bf0: 69 66 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  if this constrai
5c00: 6e 74 20 69 73 20 75 73 61 62 6c 65 2e 0d 0a 20  nt is usable... 
5c10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
5c20: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
5c30: 75 62 6c 69 63 20 62 79 74 65 20 75 73 61 62 6c  ublic byte usabl
5c40: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c90: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5ca0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5cb0: 20 20 20 20 20 20 20 2f 2f 2f 20 55 73 65 64 20         /// Used 
5cc0: 69 6e 74 65 72 6e 61 6c 6c 79 20 2d 20 3c 73 65  internally - <se
5cd0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
5ce0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73  anagedModule.Bes
5cf0: 74 49 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20  tIndex" />..    
5d00: 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 69      /// should i
5d10: 67 6e 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  gnore...        
5d20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5d30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69          public i
5d40: 6e 74 20 69 54 65 72 6d 4f 66 66 73 65 74 3b 0d  nt iTermOffset;.
5d50: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
5d60: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
5d70: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5d80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5dd0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
5de0: 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 20  iteIndexOrderBy 
5df0: 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20  Helper Class..  
5e00: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5e10: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
5e20: 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74  ass represents t
5e30: 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
5e40: 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20  3_index_orderby 
5e50: 73 74 72 75 63 74 75 72 65 20 66 72 6f 6d 0d 0a  structure from..
5e60: 20 20 20 20 2f 2f 2f 20 74 68 65 20 53 51 4c 69      /// the SQLi
5e70: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
5e80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
5e90: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
5ea0: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51   sealed class SQ
5eb0: 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79  LiteIndexOrderBy
5ec0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5ed0: 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61   #region Interna
5ee0: 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  l Constructors..
5ef0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
5f00: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
5f10: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e  // Constructs an
5f20: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
5f30: 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68  s class using th
5f40: 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 74 69  e specified nati
5f50: 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ve..        /// 
5f60: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72  sqlite3_index_or
5f70: 64 65 72 62 79 20 73 74 72 75 63 74 75 72 65 2e  derby structure.
5f80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5f90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
5fa0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5fb0: 65 3d 22 6f 72 64 65 72 42 79 22 3e 0d 0a 20 20  e="orderBy">..  
5fc0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
5fd0: 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64  tive sqlite3_ind
5fe0: 65 78 5f 6f 72 64 65 72 62 79 20 73 74 72 75 63  ex_orderby struc
5ff0: 74 75 72 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20  ture to use...  
6000: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
6010: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  m>..        inte
6020: 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78  rnal SQLiteIndex
6030: 4f 72 64 65 72 42 79 28 0d 0a 20 20 20 20 20 20  OrderBy(..      
6040: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
6050: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6060: 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20  3_index_orderby 
6070: 6f 72 64 65 72 42 79 0d 0a 20 20 20 20 20 20 20  orderBy..       
6080: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
6090: 20 20 20 20 3a 20 74 68 69 73 28 6f 72 64 65 72      : this(order
60a0: 42 79 2e 69 43 6f 6c 75 6d 6e 2c 20 6f 72 64 65  By.iColumn, orde
60b0: 72 42 79 2e 64 65 73 63 29 0d 0a 20 20 20 20 20  rBy.desc)..     
60c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
60d0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
60e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
60f0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
6100: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
6110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6150: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
6160: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
6170: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
6180: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6190: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
61a0: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
61b0: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
61c0: 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65  ss using the spe
61d0: 63 69 66 69 65 64 20 66 69 65 6c 64 0d 0a 20 20  cified field..  
61e0: 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73        /// values
61f0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
6200: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
6210: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6220: 6d 65 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20  me="iColumn">.. 
6230: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d         /// Colum
6240: 6e 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20  n number...     
6250: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6260: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
6270: 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 63 22 3e  ram name="desc">
6280: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 72  ..        /// Tr
6290: 75 65 20 66 6f 72 20 44 45 53 43 2e 20 20 46 61  ue for DESC.  Fa
62a0: 6c 73 65 20 66 6f 72 20 41 53 43 2e 0d 0a 20 20  lse for ASC...  
62b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
62c0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  m>..        priv
62d0: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 4f  ate SQLiteIndexO
62e0: 72 64 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20  rderBy(..       
62f0: 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e       int iColumn
6300: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
6310: 79 74 65 20 64 65 73 63 0d 0a 20 20 20 20 20 20  yte desc..      
6320: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
6330: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6340: 74 68 69 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20 69  this.iColumn = i
6350: 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20 20 20 20  Column;..       
6360: 20 20 20 20 20 74 68 69 73 2e 64 65 73 63 20 3d       this.desc =
6370: 20 64 65 73 63 3b 0d 0a 20 20 20 20 20 20 20 20   desc;..        
6380: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
6390: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
63a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
63b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
63f0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
6400: 63 20 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20  c Fields..      
6410: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6420: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c  .        /// Col
6430: 75 6d 6e 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20  umn number...   
6440: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
6450: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
6460: 6c 69 63 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b  lic int iColumn;
6470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
64d0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
64e0: 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 66 6f       /// True fo
64f0: 72 20 44 45 53 43 2e 20 20 46 61 6c 73 65 20 66  r DESC.  False f
6500: 6f 72 20 41 53 43 2e 0d 0a 20 20 20 20 20 20 20  or ASC...       
6510: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6520: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
6530: 62 79 74 65 20 64 65 73 63 3b 0d 0a 20 20 20 20  byte desc;..    
6540: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
6550: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
6560: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
6570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
65c0: 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e  #region SQLiteIn
65d0: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  dexConstraintUsa
65e0: 67 65 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d  ge Helper Class.
65f0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
6600: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
6610: 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74   class represent
6620: 73 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  s the native sql
6630: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
6640: 72 61 69 6e 74 5f 75 73 61 67 65 0d 0a 20 20 20  raint_usage..   
6650: 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20 66   /// structure f
6660: 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63  rom the SQLite c
6670: 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...  
6680: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6690: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65 61  ..    public sea
66a0: 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
66b0: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
66c0: 73 61 67 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  sage..    {..   
66d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74       #region Int
66e0: 65 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f  ernal Constructo
66f0: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
6700: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
6710: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
6720: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
6730: 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e   this class usin
6740: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
6750: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
6760: 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  /// sqlite3_inde
6770: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61  x_constraint_usa
6780: 67 65 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ge structure... 
6790: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
67a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
67b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
67c0: 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22  constraintUsage"
67d0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
67e0: 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
67f0: 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69  3_index_constrai
6800: 6e 74 5f 75 73 61 67 65 20 73 74 72 75 63 74 75  nt_usage structu
6810: 72 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20  re to use...    
6820: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6830: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
6840: 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  al SQLiteIndexCo
6850: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 0d 0a  nstraintUsage(..
6860: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
6870: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6880: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
6890: 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20 63  nstraint_usage c
68a0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 0d 0a  onstraintUsage..
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
68c0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
68d0: 73 28 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  s(constraintUsag
68e0: 65 2e 61 72 67 76 49 6e 64 65 78 2c 20 63 6f 6e  e.argvIndex, con
68f0: 73 74 72 61 69 6e 74 55 73 61 67 65 2e 6f 6d 69  straintUsage.omi
6900: 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t)..        {.. 
6910: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
6920: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
6930: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
6940: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
6950: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
69a0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
69b0: 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f  ivate Constructo
69c0: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
69d0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
69e0: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
69f0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
6a00: 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e   this class usin
6a10: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
6a20: 66 69 65 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f  field..        /
6a30: 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20  // values...    
6a40: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6a50: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6a60: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
6a70: 76 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20  vIndex">..      
6a80: 20 20 2f 2f 2f 20 49 66 20 67 72 65 61 74 65 72    /// If greater
6a90: 20 74 68 61 6e 20 30 2c 20 63 6f 6e 73 74 72 61   than 0, constra
6aa0: 69 6e 74 20 69 73 20 70 61 72 74 20 6f 66 20 61  int is part of a
6ab0: 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72 2e 0d  rgv to xFilter..
6ac0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
6ad0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
6ae0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
6af0: 6f 6d 69 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  omit">..        
6b00: 2f 2f 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20  /// Do not code 
6b10: 61 20 74 65 73 74 20 66 6f 72 20 74 68 69 73 20  a test for this 
6b20: 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20  constraint...   
6b30: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
6b40: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
6b50: 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  te SQLiteIndexCo
6b60: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 0d 0a  nstraintUsage(..
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
6b80: 61 72 67 76 49 6e 64 65 78 2c 0d 0a 20 20 20 20  argvIndex,..    
6b90: 20 20 20 20 20 20 20 20 62 79 74 65 20 6f 6d 69          byte omi
6ba0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
6bb0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6bc0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 72           this.ar
6bd0: 67 76 49 6e 64 65 78 20 3d 20 61 72 67 76 49 6e  gvIndex = argvIn
6be0: 64 65 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  dex;..          
6bf0: 20 20 74 68 69 73 2e 6f 6d 69 74 20 3d 20 6f 6d    this.omit = om
6c00: 69 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  it;..        }..
6c10: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
6c20: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c70: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6c80: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
6c90: 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20  Fields..        
6ca0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6cb0: 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 67 72         /// If gr
6cc0: 65 61 74 65 72 20 74 68 61 6e 20 30 2c 20 63 6f  eater than 0, co
6cd0: 6e 73 74 72 61 69 6e 74 20 69 73 20 70 61 72 74  nstraint is part
6ce0: 20 6f 66 20 61 72 67 76 20 74 6f 20 78 46 69 6c   of argv to xFil
6cf0: 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ter...        //
6d00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6d10: 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74        public int
6d20: 20 61 72 67 76 49 6e 64 65 78 3b 0d 0a 0d 0a 20   argvIndex;.... 
6d30: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6d80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
6d90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
6da0: 20 2f 2f 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65   /// Do not code
6db0: 20 61 20 74 65 73 74 20 66 6f 72 20 74 68 69 73   a test for this
6dc0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20   constraint...  
6dd0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
6de0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
6df0: 62 6c 69 63 20 62 79 74 65 20 6f 6d 69 74 3b 0d  blic byte omit;.
6e00: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
6e10: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
6e20: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
6e30: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6e80: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
6e90: 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20 48  iteIndexInputs H
6ea0: 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20  elper Class..   
6eb0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6ec0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
6ed0: 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  ss represents th
6ee0: 65 20 76 61 72 69 6f 75 73 20 69 6e 70 75 74 73  e various inputs
6ef0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
6f00: 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20   SQLite core..  
6f10: 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 20 74 6f    /// library to
6f20: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
6f30: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
6f40: 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20  dule.BestIndex" 
6f50: 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
6f60: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6f70: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
6f80: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e  d class SQLiteIn
6f90: 64 65 78 49 6e 70 75 74 73 0d 0a 20 20 20 20 7b  dexInputs..    {
6fa0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
6fb0: 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74  n Internal Const
6fc0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
6fd0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6fe0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
6ff0: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
7000: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
7010: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7020: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7030: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7040: 6d 65 3d 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22  me="nConstraint"
7050: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
7060: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65  he number of <se
7070: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
7080: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f  dexConstraint" /
7090: 3e 20 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a  > instances to..
70a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d          /// pre-
70b0: 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20 66  allocate space f
70c0: 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  or...        ///
70d0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
70e0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
70f0: 6d 65 3d 22 6e 4f 72 64 65 72 42 79 22 3e 0d 0a  me="nOrderBy">..
7100: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
7110: 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20 63  number of <see c
7120: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
7130: 4f 72 64 65 72 42 79 22 20 2f 3e 20 69 6e 73 74  OrderBy" /> inst
7140: 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20 20 20 20  ances to..      
7150: 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61    /// pre-alloca
7160: 74 65 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20  te space for... 
7170: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
7180: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  am>..        int
7190: 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65  ernal SQLiteInde
71a0: 78 49 6e 70 75 74 73 28 69 6e 74 20 6e 43 6f 6e  xInputs(int nCon
71b0: 73 74 72 61 69 6e 74 2c 20 69 6e 74 20 6e 4f 72  straint, int nOr
71c0: 64 65 72 42 79 29 0d 0a 20 20 20 20 20 20 20 20  derBy)..        
71d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
71e0: 6f 6e 73 74 72 61 69 6e 74 73 20 3d 20 6e 65 77  onstraints = new
71f0: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
7200: 74 72 61 69 6e 74 5b 6e 43 6f 6e 73 74 72 61 69  traint[nConstrai
7210: 6e 74 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt];..          
7220: 20 20 6f 72 64 65 72 42 79 73 20 3d 20 6e 65 77    orderBys = new
7230: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65   SQLiteIndexOrde
7240: 72 42 79 5b 6e 4f 72 64 65 72 42 79 5d 3b 0d 0a  rBy[nOrderBy];..
7250: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7260: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
7270: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
72d0: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
72e0: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70  rties..        p
72f0: 72 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64  rivate SQLiteInd
7300: 65 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 63  exConstraint[] c
7310: 6f 6e 73 74 72 61 69 6e 74 73 3b 0d 0a 20 20 20  onstraints;..   
7320: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
7330: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
7340: 41 6e 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65  An array of <see
7350: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
7360: 65 78 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e  exConstraint" />
7370: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
7380: 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s,..        /// 
7390: 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20  each containing 
73a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70  information supp
73b0: 6c 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 69  lied by the SQLi
73c0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
73d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
73e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
73f0: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49    public SQLiteI
7400: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d  ndexConstraint[]
7410: 20 43 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20   Constraints..  
7420: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7430: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
7440: 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 3b 20 7d  n constraints; }
7450: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
7460: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
74b0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
74c0: 65 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  e SQLiteIndexOrd
74d0: 65 72 42 79 5b 5d 20 6f 72 64 65 72 42 79 73 3b  erBy[] orderBys;
74e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
74f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7500: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
7510: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
7520: 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 22 20  teIndexOrderBy" 
7530: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
7540: 63 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ces,..        //
7550: 2f 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e  / each containin
7560: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75  g information su
7570: 70 70 6c 69 65 64 20 62 79 20 74 68 65 20 53 51  pplied by the SQ
7580: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
7590: 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
75a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
75b0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
75c0: 65 49 6e 64 65 78 4f 72 64 65 72 42 79 5b 5d 20  eIndexOrderBy[] 
75d0: 4f 72 64 65 72 42 79 73 0d 0a 20 20 20 20 20 20  OrderBys..      
75e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
75f0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6f 72   get { return or
7600: 64 65 72 42 79 73 3b 20 7d 0d 0a 20 20 20 20 20  derBys; }..     
7610: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
7620: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d  ndregion..    }.
7630: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
7640: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7690: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
76a0: 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74  n SQLiteIndexOut
76b0: 70 75 74 73 20 48 65 6c 70 65 72 20 43 6c 61 73  puts Helper Clas
76c0: 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  s..    /// <summ
76d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
76e0: 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65  is class represe
76f0: 6e 74 73 20 74 68 65 20 76 61 72 69 6f 75 73 20  nts the various 
7700: 6f 75 74 70 75 74 73 20 70 72 6f 76 69 64 65 64  outputs provided
7710: 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63   to the SQLite c
7720: 6f 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62  ore..    /// lib
7730: 72 61 72 79 20 62 79 20 74 68 65 20 3c 73 65 65  rary by the <see
7740: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
7750: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74  nagedModule.Best
7760: 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
7770: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
7780: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
7790: 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  c sealed class S
77a0: 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74  QLiteIndexOutput
77b0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
77c0: 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e    #region Intern
77d0: 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  al Constructors.
77e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
77f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7800: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
7810: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
7820: 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  is class...     
7830: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7840: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
7850: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e  param name="nCon
7860: 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20  straint">..     
7870: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
7880: 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  r of <see cref="
7890: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
78a0: 72 61 69 6e 74 55 73 61 67 65 22 20 2f 3e 20 69  raintUsage" /> i
78b0: 6e 73 74 61 6e 63 65 73 0d 0a 20 20 20 20 20 20  nstances..      
78c0: 20 20 2f 2f 2f 20 74 6f 20 70 72 65 2d 61 6c 6c    /// to pre-all
78d0: 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e  ocate space for.
78e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
78f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
7900: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49  internal SQLiteI
7910: 6e 64 65 78 4f 75 74 70 75 74 73 28 69 6e 74 20  ndexOutputs(int 
7920: 6e 43 6f 6e 73 74 72 61 69 6e 74 29 0d 0a 20 20  nConstraint)..  
7930: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7940: 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 55       constraintU
7950: 73 61 67 65 73 20 3d 20 6e 65 77 20 53 51 4c 69  sages = new SQLi
7960: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
7970: 74 55 73 61 67 65 5b 6e 43 6f 6e 73 74 72 61 69  tUsage[nConstrai
7980: 6e 74 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  nt];..        }.
7990: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
79a0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
79b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
7a00: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
7a10: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
7a20: 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
7a30: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
7a40: 6e 74 55 73 61 67 65 5b 5d 20 63 6f 6e 73 74 72  ntUsage[] constr
7a50: 61 69 6e 74 55 73 61 67 65 73 3b 0d 0a 20 20 20  aintUsages;..   
7a60: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
7a70: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
7a80: 41 6e 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65  An array of <see
7a90: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
7aa0: 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  exConstraintUsag
7ab0: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20  e" /> object..  
7ac0: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
7ad0: 63 65 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69  ces, each contai
7ae0: 6e 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ning information
7af0: 20 74 6f 20 62 65 20 73 75 70 70 6c 69 65 64 20   to be supplied 
7b00: 74 6f 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20  to the SQLite.. 
7b10: 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72 65 20         /// core 
7b20: 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20  library...      
7b30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7b40: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
7b50: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
7b60: 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 20 43 6f  traintUsage[] Co
7b70: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 0d 0a  nstraintUsages..
7b80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7b90: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
7ba0: 75 72 6e 20 63 6f 6e 73 74 72 61 69 6e 74 55 73  urn constraintUs
7bb0: 61 67 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ages; }..       
7bc0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
7bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7c20: 20 70 72 69 76 61 74 65 20 69 6e 74 20 69 6e 64   private int ind
7c30: 65 78 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20  exNumber;..     
7c40: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7c50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75  ..        /// Nu
7c60: 6d 62 65 72 20 75 73 65 64 20 74 6f 20 68 65 6c  mber used to hel
7c70: 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73  p identify the s
7c80: 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 20 20  elected index.  
7c90: 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d  This value will.
7ca0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74  .        /// lat
7cb0: 65 72 20 62 65 20 70 72 6f 76 69 64 65 64 20 74  er be provided t
7cc0: 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
7cd0: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
7ce0: 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e  odule.Filter" />
7cf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
7d00: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
7d10: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7d20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e         public in
7d30: 74 20 49 6e 64 65 78 4e 75 6d 62 65 72 0d 0a 20  t IndexNumber.. 
7d40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7d50: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
7d60: 72 6e 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b 20  rn indexNumber; 
7d70: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  }..            s
7d80: 65 74 20 7b 20 69 6e 64 65 78 4e 75 6d 62 65 72  et { indexNumber
7d90: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
7da0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7db0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
7e00: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
7e10: 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67 3b  ing indexString;
7e20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
7e30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7e40: 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64   /// String used
7e50: 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
7e60: 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
7e70: 6e 64 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75  ndex.  This valu
7e80: 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20  e will..        
7e90: 2f 2f 2f 20 6c 61 74 65 72 20 62 65 20 70 72 6f  /// later be pro
7ea0: 76 69 64 65 64 20 74 6f 20 74 68 65 20 3c 73 65  vided to the <se
7eb0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
7ec0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c  anagedModule.Fil
7ed0: 74 65 72 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20  ter" />..       
7ee0: 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   /// method...  
7ef0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
7f00: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
7f10: 62 6c 69 63 20 73 74 72 69 6e 67 20 49 6e 64 65  blic string Inde
7f20: 78 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20  xString..       
7f30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7f40: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 64  get { return ind
7f50: 65 78 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20  exString; }..   
7f60: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69           set { i
7f70: 6e 64 65 78 53 74 72 69 6e 67 20 3d 20 76 61 6c  ndexString = val
7f80: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  ue; }..        }
7f90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
7fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fe0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
7ff0: 72 69 76 61 74 65 20 69 6e 74 20 6e 65 65 64 54  rivate int needT
8000: 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67  oFreeIndexString
8010: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
8020: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8030: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
8040: 66 20 74 68 65 20 69 6e 64 65 78 20 73 74 72 69  f the index stri
8050: 6e 67 20 6d 75 73 74 20 62 65 20 66 72 65 65 64  ng must be freed
8060: 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63   by the SQLite c
8070: 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ore..        ///
8080: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
8090: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
80a0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
80b0: 63 20 69 6e 74 20 4e 65 65 64 54 6f 46 72 65 65  c int NeedToFree
80c0: 49 6e 64 65 78 53 74 72 69 6e 67 0d 0a 20 20 20  IndexString..   
80d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
80e0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
80f0: 20 6e 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78   needToFreeIndex
8100: 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20  String; }..     
8110: 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 65 65         set { nee
8120: 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69  dToFreeIndexStri
8130: 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ng = value; }.. 
8140: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8150: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
81a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 69         private i
81b0: 6e 74 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d  nt orderByConsum
81c0: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed;..        ///
81d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
81e0: 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20      /// True if 
81f0: 6f 75 74 70 75 74 20 69 73 20 61 6c 72 65 61 64  output is alread
8200: 79 20 6f 72 64 65 72 65 64 2e 0d 0a 20 20 20 20  y ordered...    
8210: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8220: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
8230: 69 63 20 69 6e 74 20 4f 72 64 65 72 42 79 43 6f  ic int OrderByCo
8240: 6e 73 75 6d 65 64 0d 0a 20 20 20 20 20 20 20 20  nsumed..        
8250: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
8260: 65 74 20 7b 20 72 65 74 75 72 6e 20 6f 72 64 65  et { return orde
8270: 72 42 79 43 6f 6e 73 75 6d 65 64 3b 20 7d 0d 0a  rByConsumed; }..
8280: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
8290: 7b 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65  { orderByConsume
82a0: 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  d = value; }..  
82b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
82c0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
82d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8310: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 64 6f        private do
8320: 75 62 6c 65 20 65 73 74 69 6d 61 74 65 64 43 6f  uble estimatedCo
8330: 73 74 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  st;..        ///
8340: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8350: 20 20 20 20 2f 2f 2f 20 45 73 74 69 6d 61 74 65      /// Estimate
8360: 64 20 63 6f 73 74 20 6f 66 20 75 73 69 6e 67 20  d cost of using 
8370: 74 68 69 73 20 69 6e 64 65 78 2e 0d 0a 20 20 20  this index...   
8380: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
8390: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
83a0: 6c 69 63 20 64 6f 75 62 6c 65 20 45 73 74 69 6d  lic double Estim
83b0: 61 74 65 64 43 6f 73 74 0d 0a 20 20 20 20 20 20  atedCost..      
83c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
83d0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 65 73   get { return es
83e0: 74 69 6d 61 74 65 64 43 6f 73 74 3b 20 7d 0d 0a  timatedCost; }..
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
8400: 7b 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74 20  { estimatedCost 
8410: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
8420: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
8430: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
8440: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
8450: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
84b0: 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 20 48  on SQLiteIndex H
84c0: 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20  elper Class..   
84d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
84e0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
84f0: 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  ss represents th
8500: 65 20 76 61 72 69 6f 75 73 20 69 6e 70 75 74 73  e various inputs
8510: 20 61 6e 64 20 6f 75 74 70 75 74 73 20 75 73 65   and outputs use
8520: 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20  d with the..    
8530: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
8540: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
8550: 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f  ule.BestIndex" /
8560: 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f  > method...    /
8570: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8580: 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64     public sealed
8590: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64   class SQLiteInd
85a0: 65 78 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ex..    {..     
85b0: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72     #region Inter
85c0: 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  nal Constructors
85d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
85e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
85f0: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
8600: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
8610: 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
8620: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8630: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
8640: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f  <param name="nCo
8650: 6e 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20  nstraint">..    
8660: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
8670: 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d  er of <see cref=
8680: 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73  "SQLiteIndexCons
8690: 74 72 61 69 6e 74 22 20 2f 3e 20 28 61 6e 64 0d  traint" /> (and.
86a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
86b0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
86c0: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  dexConstraintUsa
86d0: 67 65 22 20 2f 3e 29 20 69 6e 73 74 61 6e 63 65  ge" />) instance
86e0: 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s to..        //
86f0: 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20 73  / pre-allocate s
8700: 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20 20  pace for...     
8710: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
8720: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
8730: 72 61 6d 20 6e 61 6d 65 3d 22 6e 4f 72 64 65 72  ram name="nOrder
8740: 42 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  By">..        //
8750: 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
8760: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
8770: 65 49 6e 64 65 78 4f 72 64 65 72 42 79 22 20 2f  eIndexOrderBy" /
8780: 3e 20 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a  > instances to..
8790: 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d          /// pre-
87a0: 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20 66  allocate space f
87b0: 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  or...        ///
87c0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
87d0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69     internal SQLi
87e0: 74 65 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20  teIndex(..      
87f0: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e 73 74        int nConst
8800: 72 61 69 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  raint,..        
8810: 20 20 20 20 69 6e 74 20 6e 4f 72 64 65 72 42 79      int nOrderBy
8820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
8830: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8840: 20 20 20 20 20 20 20 20 69 6e 70 75 74 73 20 3d          inputs =
8850: 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
8860: 49 6e 70 75 74 73 28 6e 43 6f 6e 73 74 72 61 69  Inputs(nConstrai
8870: 6e 74 2c 20 6e 4f 72 64 65 72 42 79 29 3b 0d 0a  nt, nOrderBy);..
8880: 20 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 70              outp
8890: 75 74 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  uts = new SQLite
88a0: 49 6e 64 65 78 4f 75 74 70 75 74 73 28 6e 43 6f  IndexOutputs(nCo
88b0: 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 20 20 20 20  nstraint);..    
88c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
88d0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
88e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
88f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8930: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
8940: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
8950: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
8960: 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e  te SQLiteIndexIn
8970: 70 75 74 73 20 69 6e 70 75 74 73 3b 0d 0a 20 20  puts inputs;..  
8980: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
8990: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
89a0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
89b0: 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74  SQLiteIndexInput
89c0: 73 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  s" /> object ins
89d0: 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
89e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
89f0: 65 20 69 6e 70 75 74 73 20 74 6f 20 74 68 65 20  e inputs to the 
8a00: 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
8a10: 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e  teManagedModule.
8a20: 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a 20  BestIndex" />.. 
8a30: 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
8a40: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
8a50: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8a60: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
8a70: 65 49 6e 64 65 78 49 6e 70 75 74 73 20 49 6e 70  eIndexInputs Inp
8a80: 75 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  uts..        {..
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
8aa0: 7b 20 72 65 74 75 72 6e 20 69 6e 70 75 74 73 3b  { return inputs;
8ab0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
8ac0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
8ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
8b20: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 4f  ate SQLiteIndexO
8b30: 75 74 70 75 74 73 20 6f 75 74 70 75 74 73 3b 0d  utputs outputs;.
8b40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
8b50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
8b60: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
8b70: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 75  f="SQLiteIndexOu
8b80: 74 70 75 74 73 22 20 2f 3e 20 6f 62 6a 65 63 74  tputs" /> object
8b90: 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69   instance contai
8ba0: 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ning..        //
8bb0: 2f 20 74 68 65 20 6f 75 74 70 75 74 73 20 66 72  / the outputs fr
8bc0: 6f 6d 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  om the <see cref
8bd0: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
8be0: 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78  Module.BestIndex
8bf0: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  " />..        //
8c00: 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  / method...     
8c10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8c20: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
8c30: 63 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74  c SQLiteIndexOut
8c40: 70 75 74 73 20 4f 75 74 70 75 74 73 0d 0a 20 20  puts Outputs..  
8c50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8c60: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
8c70: 6e 20 6f 75 74 70 75 74 73 3b 20 7d 0d 0a 20 20  n outputs; }..  
8c80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8c90: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
8ca0: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
8cb0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d00: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
8d10: 67 69 6f 6e 20 53 51 4c 69 74 65 56 69 72 74 75  gion SQLiteVirtu
8d20: 61 6c 54 61 62 6c 65 20 42 61 73 65 20 43 6c 61  alTable Base Cla
8d30: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
8d40: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
8d50: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
8d60: 65 6e 74 73 20 61 20 6d 61 6e 61 67 65 64 20 76  ents a managed v
8d70: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
8d80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74  lementation.  It
8d90: 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e 6f 74   is..    /// not
8da0: 20 73 65 61 6c 65 64 20 61 6e 64 20 73 68 6f 75   sealed and shou
8db0: 6c 64 20 62 65 20 75 73 65 64 20 61 73 20 74 68  ld be used as th
8dc0: 65 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f 72  e base class for
8dd0: 20 61 6e 79 20 75 73 65 72 2d 64 65 66 69 6e 65   any user-define
8de0: 64 0d 0a 20 20 20 20 2f 2f 2f 20 76 69 72 74 75  d..    /// virtu
8df0: 61 6c 20 74 61 62 6c 65 20 63 6c 61 73 73 65 73  al table classes
8e00: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e 20   implemented in 
8e10: 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20  managed code... 
8e20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8e30: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 63 6c  >..    public cl
8e40: 61 73 73 20 53 51 4c 69 74 65 56 69 72 74 75 61  ass SQLiteVirtua
8e50: 6c 54 61 62 6c 65 20 3a 0d 0a 20 20 20 20 20 20  lTable :..      
8e60: 20 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74        ISQLiteNat
8e70: 69 76 65 48 61 6e 64 6c 65 2c 20 49 44 69 73 70  iveHandle, IDisp
8e80: 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45  osable /* NOT SE
8e90: 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a  ALED */..    {..
8ea0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
8eb0: 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74  Private Constant
8ec0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
8ed0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8ee0: 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20    /// The index 
8ef0: 77 69 74 68 69 6e 20 74 68 65 20 61 72 72 61 79  within the array
8f00: 20 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76   of strings prov
8f10: 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20  ided to the..   
8f20: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
8f30: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
8f40: 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22  edModule.Create"
8f50: 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20   /> and..       
8f60: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
8f70: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
8f80: 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e  dule.Connect" />
8f90: 20 6d 65 74 68 6f 64 73 20 63 6f 6e 74 61 69 6e   methods contain
8fa0: 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
8fb0: 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66 20 74 68 65   /// name of the
8fc0: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
8fd0: 74 69 6e 67 20 74 68 69 73 20 76 69 72 74 75 61  ting this virtua
8fe0: 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
8ff0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9000: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
9010: 65 20 63 6f 6e 73 74 20 69 6e 74 20 4d 6f 64 75  e const int Modu
9020: 6c 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 30 3b  leNameIndex = 0;
9030: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
9040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9080: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
9090: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
90a0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
90b0: 64 65 78 20 77 69 74 68 69 6e 20 74 68 65 20 61  dex within the a
90c0: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
90d0: 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d  provided to the.
90e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
90f0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
9100: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65  anagedModule.Cre
9110: 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20  ate" /> and..   
9120: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
9130: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
9140: 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74  edModule.Connect
9150: 22 20 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f 6e  " /> methods con
9160: 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20  taining the..   
9170: 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66       /// name of
9180: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
9190: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 76 69  ntaining this vi
91a0: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
91b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
91c0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
91d0: 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20  ivate const int 
91e0: 44 61 74 61 62 61 73 65 4e 61 6d 65 49 6e 64 65  DatabaseNameInde
91f0: 78 20 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20  x = 1;....      
9200: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9250: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
9260: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
9270: 54 68 65 20 69 6e 64 65 78 20 77 69 74 68 69 6e  The index within
9280: 20 74 68 65 20 61 72 72 61 79 20 6f 66 20 73 74   the array of st
9290: 72 69 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74  rings provided t
92a0: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
92b0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
92c0: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
92d0: 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e  le.Create" /> an
92e0: 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  d..        /// <
92f0: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
9300: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43  eManagedModule.C
9310: 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
9320: 64 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ds containing th
9330: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
9340: 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  ame of the virtu
9350: 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
9360: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9370: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
9380: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 54 61 62  te const int Tab
9390: 6c 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 32 3b  leNameIndex = 2;
93a0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
93b0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
93c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9410: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
9420: 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
9430: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
9440: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
9450: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e  // Constructs an
9460: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
9470: 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20  s class...      
9480: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9490: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
94a0: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d  aram name="argum
94b0: 65 6e 74 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  ents">..        
94c0: 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c  /// The original
94d0: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
94e0: 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68  s provided to th
94f0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
9500: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
9510: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43  eManagedModule.C
9520: 72 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20  reate" /> and.. 
9530: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
9540: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
9550: 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65  agedModule.Conne
9560: 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73 2e 0d  ct" /> methods..
9570: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
9580: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70  aram>..        p
9590: 75 62 6c 69 63 20 53 51 4c 69 74 65 56 69 72 74  ublic SQLiteVirt
95a0: 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20  ualTable(..     
95b0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
95c0: 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20  arguments..     
95d0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
95e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
95f0: 20 74 68 69 73 2e 61 72 67 75 6d 65 6e 74 73 20   this.arguments 
9600: 3d 20 61 72 67 75 6d 65 6e 74 73 3b 0d 0a 20 20  = arguments;..  
9610: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9620: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
9630: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9680: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
9690: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
96a0: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ies..        pri
96b0: 76 61 74 65 20 73 74 72 69 6e 67 5b 5d 20 61 72  vate string[] ar
96c0: 67 75 6d 65 6e 74 73 3b 0d 0a 20 20 20 20 20 20  guments;..      
96d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
96e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
96f0: 20 6f 72 69 67 69 6e 61 6c 20 61 72 72 61 79 20   original array 
9700: 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69  of strings provi
9710: 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ded to the..    
9720: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
9730: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
9740: 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20  dModule.Create" 
9750: 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  /> and..        
9760: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
9770: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
9780: 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  ule.Connect" /> 
9790: 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20  methods...      
97a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
97b0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
97c0: 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 5b   virtual string[
97d0: 5d 20 41 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20  ] Arguments..   
97e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
97f0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
9800: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
9810: 6e 20 61 72 67 75 6d 65 6e 74 73 3b 20 7d 0d 0a  n arguments; }..
9820: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9830: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9880: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
9890: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
98a0: 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
98b0: 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
98c0: 65 6e 74 69 6e 67 20 74 68 69 73 20 76 69 72 74  enting this virt
98d0: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
98e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
98f0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
9900: 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e  ic virtual strin
9910: 67 20 4d 6f 64 75 6c 65 4e 61 6d 65 0d 0a 20 20  g ModuleName..  
9920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9930: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
9940: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9950: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
9960: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
9970: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9980: 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20  ing[] arguments 
9990: 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a  = Arguments;....
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99b0: 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21  if ((arguments !
99c0: 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74  (arguments.Lengt
99f0: 68 20 3e 20 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e  h > ModuleNameIn
9a00: 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20  dex))..         
9a10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9a30: 74 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 4d  turn arguments[M
9a40: 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 3b  oduleNameIndex];
9a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9a60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9a70: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
9a80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9aa0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ac0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
9ad0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
9ae0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9b30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
9b40: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
9b50: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
9b60: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
9b70: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 76 69  ntaining this vi
9b80: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
9b90: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
9ba0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
9bb0: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72  blic virtual str
9bc0: 69 6e 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65  ing DatabaseName
9bd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
9be0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
9bf0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9c10: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9c30: 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
9c40: 6e 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b  nts = Arguments;
9c50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c60: 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e      if ((argumen
9c70: 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ts != null) &&..
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c90: 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c      (arguments.L
9ca0: 65 6e 67 74 68 20 3e 20 44 61 74 61 62 61 73 65  ength > Database
9cb0: 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20  NameIndex))..   
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ce0: 20 20 20 20 72 65 74 75 72 6e 20 61 72 67 75 6d      return argum
9cf0: 65 6e 74 73 5b 44 61 74 61 62 61 73 65 4e 61 6d  ents[DatabaseNam
9d00: 65 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  eIndex];..      
9d10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
9d30: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
9d40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9d50: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9d60: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
9d70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9d80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9d90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
9da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9de0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9df0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
9e00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
9e10: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72   name of the vir
9e20: 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
9e30: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
9e40: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
9e50: 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69  lic virtual stri
9e60: 6e 67 20 54 61 62 6c 65 4e 61 6d 65 0d 0a 20 20  ng TableName..  
9e70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9e80: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
9e90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9ea0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
9eb0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9ed0: 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20  ing[] arguments 
9ee0: 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a  = Arguments;....
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f00: 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21  if ((arguments !
9f10: 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
9f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f30: 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74  (arguments.Lengt
9f40: 68 20 3e 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64  h > TableNameInd
9f50: 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ex))..          
9f60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9f80: 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 54 61  urn arguments[Ta
9f90: 62 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a  bleNameIndex];..
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fb0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
9fc0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
9fd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ff0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
a010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a020: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a030: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
a040: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
a050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a090: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
a0a0: 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
a0b0: 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
a0c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
a0d0: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
a0e0: 74 6f 20 72 65 63 6f 72 64 20 74 68 65 20 72 65  to record the re
a0f0: 6e 61 6d 69 6e 67 20 6f 66 20 74 68 65 20 76 69  naming of the vi
a100: 72 74 75 61 6c 20 74 61 62 6c 65 20 61 73 73 6f  rtual table asso
a110: 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
a120: 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 6f 62  /// with this ob
a130: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
a140: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
a150: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
a160: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
a170: 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20  "name">..       
a180: 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 6e 61 6d   /// The new nam
a190: 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
a1a0: 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
a1b0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
a1c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
a1d0: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
a1e0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e  // Non-zero upon
a1f0: 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20   success...     
a200: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
a210: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
a220: 63 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 52  c virtual bool R
a230: 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  ename(..        
a240: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d      string name.
a250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
a260: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a270: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
a280: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
a290: 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67 75         if ((argu
a2a0: 6d 65 6e 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26  ments != null) &
a2b0: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
a2c0: 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65     (arguments.Le
a2d0: 6e 67 74 68 20 3e 20 54 61 62 6c 65 4e 61 6d 65  ngth > TableName
a2e0: 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20  Index))..       
a2f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a300: 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
a310: 73 5b 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78  s[TableNameIndex
a320: 5d 20 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20  ] = name;..     
a330: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a340: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
a350: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a360: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
a370: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  se;..        }..
a380: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a390: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a3f0: 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65   #region ISQLite
a400: 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 4d 65 6d  NativeHandle Mem
a410: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72  bers..        pr
a420: 69 76 61 74 65 20 49 6e 74 50 74 72 20 6e 61 74  ivate IntPtr nat
a430: 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20  iveHandle;..    
a440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
a450: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52  >..        /// R
a460: 65 74 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72  eturns the under
a470: 6c 79 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74  lying SQLite nat
a480: 69 76 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63  ive handle assoc
a490: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d  iated with this.
a4a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a  .        /// obj
a4b0: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
a4c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
a4d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
a4e0: 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 49 6e  ublic virtual In
a4f0: 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c  tPtr NativeHandl
a500: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
a510: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
a520: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a530: 20 72 65 74 75 72 6e 20 6e 61 74 69 76 65 48 61   return nativeHa
a540: 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ndle; }..       
a550: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65       internal se
a560: 74 20 7b 20 6e 61 74 69 76 65 48 61 6e 64 6c 65  t { nativeHandle
a570: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
a580: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a590: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a5a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a5f0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
a600: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d   IDisposable Mem
a610: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  bers..        //
a620: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
a630: 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65       /// Dispose
a640: 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  s of this object
a650: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
a660: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
a670: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
a680: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
a690: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
a6a0: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
a6b0: 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
a6c0: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
a6d0: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
a6e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
a6f0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
a700: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
a710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
a760: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
a770: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
a780: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ers..        pri
a790: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
a7a0: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed;..        ///
a7b0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
a7c0: 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61      /// Throws a
a7d0: 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62 6a  n <see cref="Obj
a7e0: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
a7f0: 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74 68 69 73  tion" /> if this
a800: 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20   object..       
a810: 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 68 61   /// instance ha
a820: 73 20 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e  s been disposed.
a830: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
a840: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
a850: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
a860: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
a870: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
a880: 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57      {..#if THROW
a890: 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20  _ON_DISPOSED..  
a8a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
a8b0: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
a8c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a8d0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
a8e0: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
a8f0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
a900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a910: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 56 69 72  typeof(SQLiteVir
a920: 74 75 61 6c 54 61 62 6c 65 29 2e 4e 61 6d 65 29  tualTable).Name)
a930: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a940: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
a950: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a9b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
a9c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73  .        /// Dis
a9d0: 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62  poses of this ob
a9e0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
a9f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
aa00: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
aa10: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
aa20: 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20  "disposing">..  
aa30: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
aa40: 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f  ro if this metho
aa50: 64 20 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65  d is being calle
aa60: 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20  d from the..    
aa70: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
aa80: 66 3d 22 44 69 73 70 6f 73 65 28 29 22 20 2f 3e  f="Dispose()" />
aa90: 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20 69   method.  Zero i
aaa0: 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73  f this method is
aab0: 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 0d 0a 20   being called.. 
aac0: 20 20 20 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20         /// from 
aad0: 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a  the finalizer...
aae0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
aaf0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ram>..        pr
ab00: 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
ab10: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f  void Dispose(boo
ab20: 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20  l disposing)..  
ab30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ab40: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
ab50: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
ab60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ab70: 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73      //if (dispos
ab80: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
ab90: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
aba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
abb0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
abc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abd0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
abe0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
abf0: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
ac00: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
ac10: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ac20: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ac60: 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  /}....          
ac70: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
acb0: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
acc0: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
acd0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
ace0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
acf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ad10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad20: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
ad30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ad40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
ad50: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
ad60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
ad70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ada0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adb0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
adc0: 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d  gion Destructor.
add0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
ade0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
adf0: 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68  /// Finalizes th
ae00: 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
ae10: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
ae20: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
ae30: 20 20 20 20 20 7e 53 51 4c 69 74 65 56 69 72 74       ~SQLiteVirt
ae40: 75 61 6c 54 61 62 6c 65 28 29 0d 0a 20 20 20 20  ualTable()..    
ae50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ae60: 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65     Dispose(false
ae70: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
ae80: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
ae90: 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
aea0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
aeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
af00: 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
af10: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
af20: 73 6f 72 20 42 61 73 65 20 43 6c 61 73 73 0d 0a  sor Base Class..
af30: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
af40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
af50: 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
af60: 20 61 20 6d 61 6e 61 67 65 64 20 76 69 72 74 75   a managed virtu
af70: 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  al table cursor 
af80: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
af90: 0a 20 20 20 20 2f 2f 2f 20 49 74 20 69 73 20 6e  .    /// It is n
afa0: 6f 74 20 73 65 61 6c 65 64 20 61 6e 64 20 73 68  ot sealed and sh
afb0: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 61 73 20  ould be used as 
afc0: 74 68 65 20 62 61 73 65 20 63 6c 61 73 73 20 66  the base class f
afd0: 6f 72 20 61 6e 79 0d 0a 20 20 20 20 2f 2f 2f 20  or any..    /// 
afe0: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 76 69 72  user-defined vir
aff0: 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
b000: 72 20 63 6c 61 73 73 65 73 20 69 6d 70 6c 65 6d  r classes implem
b010: 65 6e 74 65 64 20 69 6e 20 6d 61 6e 61 67 65 64  ented in managed
b020: 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
b030: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
b040: 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c  public class SQL
b050: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
b060: 75 72 73 6f 72 20 3a 0d 0a 20 20 20 20 20 20 20  ursor :..       
b070: 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69       ISQLiteNati
b080: 76 65 48 61 6e 64 6c 65 2c 20 49 44 69 73 70 6f  veHandle, IDispo
b090: 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41  sable /* NOT SEA
b0a0: 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20  LED */..    {.. 
b0b0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
b0c0: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
b0d0: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
b0e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
b0f0: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
b100: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
b110: 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20   this class...  
b120: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
b130: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
b140: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
b150: 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
b160: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
b170: 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
b180: 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
b190: 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
b1a0: 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
b1b0: 2f 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65  / with this obje
b1c0: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
b1d0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
b1e0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  m>..        publ
b1f0: 69 63 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ic SQLiteVirtual
b200: 54 61 62 6c 65 43 75 72 73 6f 72 28 0d 0a 20 20  TableCursor(..  
b210: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
b220: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
b230: 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
b240: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
b250: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74            this.t
b260: 61 62 6c 65 20 3d 20 74 61 62 6c 65 3b 0d 0a 20  able = table;.. 
b270: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b280: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b290: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b2e0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
b2f0: 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
b300: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72  ties..        pr
b310: 69 76 61 74 65 20 53 51 4c 69 74 65 56 69 72 74  ivate SQLiteVirt
b320: 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 3b 0d  ualTable table;.
b330: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
b340: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
b350: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
b360: 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
b370: 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
b380: 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
b390: 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
b3a0: 2f 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65  / with this obje
b3b0: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
b3c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
b3d0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
b3e0: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 53 51 4c  blic virtual SQL
b3f0: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
b400: 54 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b  Table..        {
b410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
b420: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
b430: 64 28 29 3b 20 72 65 74 75 72 6e 20 74 61 62 6c  d(); return tabl
b440: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e; }..        }.
b450: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
b460: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
b4b0: 69 76 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e  ivate int indexN
b4c0: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
b4d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
b4e0: 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65         /// Numbe
b4f0: 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  r used to help i
b500: 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
b510: 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54 68 69  cted index.  Thi
b520: 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20  s value will..  
b530: 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 73 65 74        /// be set
b540: 20 76 69 61 20 74 68 65 20 3c 73 65 65 20 63 72   via the <see cr
b550: 65 66 3d 22 46 69 6c 74 65 72 22 20 2f 3e 20 6d  ef="Filter" /> m
b560: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
b570: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
b580: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
b590: 69 72 74 75 61 6c 20 69 6e 74 20 49 6e 64 65 78  irtual int Index
b5a0: 4e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 20  Number..        
b5b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
b5c0: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
b5d0: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 69 6e 64  ed(); return ind
b5e0: 65 78 4e 75 6d 62 65 72 3b 20 7d 0d 0a 20 20 20  exNumber; }..   
b5f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b600: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b650: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
b660: 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67 3b  ing indexString;
b670: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b680: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
b690: 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64   /// String used
b6a0: 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
b6b0: 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
b6c0: 6e 64 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75  ndex.  This valu
b6d0: 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20  e will..        
b6e0: 2f 2f 2f 20 62 65 20 73 65 74 20 76 69 61 20 74  /// be set via t
b6f0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 46 69  he <see cref="Fi
b700: 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
b710: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
b720: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
b730: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
b740: 20 73 74 72 69 6e 67 20 49 6e 64 65 78 53 74 72   string IndexStr
b750: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ing..        {..
b760: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
b770: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
b780: 29 3b 20 72 65 74 75 72 6e 20 69 6e 64 65 78 53  ); return indexS
b790: 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20  tring; }..      
b7a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b800: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
b810: 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73 3b 0d  Value[] values;.
b820: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
b830: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
b840: 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 73 20 75  /// The values u
b850: 73 65 64 20 74 6f 20 66 69 6c 74 65 72 20 74 68  sed to filter th
b860: 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  e rows returned 
b870: 76 69 61 20 74 68 69 73 20 63 75 72 73 6f 72 20  via this cursor 
b880: 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
b890: 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 20 20 54  /// instance.  T
b8a0: 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  his value will b
b8b0: 65 20 73 65 74 20 76 69 61 20 74 68 65 20 3c 73  e set via the <s
b8c0: 65 65 20 63 72 65 66 3d 22 46 69 6c 74 65 72 22  ee cref="Filter"
b8d0: 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   />..        ///
b8e0: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
b8f0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
b900: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
b910: 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74 65 56   virtual SQLiteV
b920: 61 6c 75 65 5b 5d 20 56 61 6c 75 65 73 0d 0a 20  alue[] Values.. 
b930: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b940: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
b950: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
b960: 75 72 6e 20 76 61 6c 75 65 73 3b 20 7d 0d 0a 20  urn values; }.. 
b970: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b980: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b990: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
b9e0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
b9f0: 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d 65 74  on Protected Met
ba00: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
ba10: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
ba20: 20 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74       /// Attempt
ba30: 73 20 74 6f 20 70 65 72 73 69 73 74 20 74 68 65  s to persist the
ba40: 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20   specified <see 
ba50: 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75  cref="SQLiteValu
ba60: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20  e" /> object..  
ba70: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
ba80: 63 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ces in order to 
ba90: 6d 61 6b 65 20 74 68 65 6d 20 61 76 61 69 6c 61  make them availa
baa0: 62 6c 65 20 61 66 74 65 72 20 74 68 65 0d 0a 20  ble after the.. 
bab0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
bac0: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
bad0: 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65  agedModule.Filte
bae0: 72 22 20 2f 3e 20 6d 65 74 68 6f 64 20 72 65 74  r" /> method ret
baf0: 75 72 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  urns...        /
bb00: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
bb10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
bb20: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e  m name="values">
bb30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
bb40: 65 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20  e array of <see 
bb50: 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75  cref="SQLiteValu
bb60: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
bb70: 74 61 6e 63 65 73 20 74 6f 20 62 65 0d 0a 20 20  tances to be..  
bb80: 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73        /// persis
bb90: 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ted...        //
bba0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
bbb0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
bbc0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
bbd0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65  he number of <se
bbe0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61  e cref="SQLiteVa
bbf0: 6c 75 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  lue" /> object i
bc00: 6e 73 74 61 6e 63 65 73 20 74 68 61 74 20 77 65  nstances that we
bc10: 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  re..        /// 
bc20: 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 65 72  successfully per
bc30: 73 69 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  sisted...       
bc40: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
bc50: 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
bc60: 65 64 20 76 69 72 74 75 61 6c 20 69 6e 74 20 54  ed virtual int T
bc70: 72 79 50 65 72 73 69 73 74 56 61 6c 75 65 73 28  ryPersistValues(
bc80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
bc90: 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75  LiteValue[] valu
bca0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
bcb0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
bcc0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 65            int re
bcd0: 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  sult = 0;....   
bce0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
bcf0: 75 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ues != null)..  
bd00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
bd20: 65 61 63 68 20 28 53 51 4c 69 74 65 56 61 6c 75  each (SQLiteValu
bd30: 65 20 76 61 6c 75 65 20 69 6e 20 76 61 6c 75 65  e value in value
bd40: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
bd50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bd60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
bd70: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd90: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
bda0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bdb0: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
bdc0: 65 2e 50 65 72 73 69 73 74 28 29 29 0d 0a 20 20  e.Persist())..  
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bde0: 20 20 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b 0d        result++;.
bdf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
be00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
be10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
be20: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
be30: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
be40: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
be50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
be60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bea0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
beb0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68  gion Public Meth
bec0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
bed0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
bee0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
bef0: 68 6f 64 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61  hod should norma
bf00: 6c 6c 79 20 62 65 20 75 73 65 64 20 62 79 20 74  lly be used by t
bf10: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
bf20: 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
bf30: 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e  teManagedModule.
bf40: 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f  Filter" /> metho
bf50: 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0d 0a 20  d in order to.. 
bf60: 20 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 66 6f         /// perfo
bf70: 72 6d 20 66 69 6c 74 65 72 69 6e 67 20 6f 66 20  rm filtering of 
bf80: 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 73 20  the result rows 
bf90: 61 6e 64 2f 6f 72 20 74 6f 20 72 65 63 6f 72 64  and/or to record
bfa0: 20 74 68 65 20 66 69 6c 74 65 72 69 6e 67 0d 0a   the filtering..
bfb0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 69 74          /// crit
bfc0: 65 72 69 61 20 70 72 6f 76 69 64 65 64 20 62 79  eria provided by
bfd0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
bfe0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
bff0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
c000: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
c010: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65  param name="inde
c020: 78 4e 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20 20  xNumber">..     
c030: 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75 73     /// Number us
c040: 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74  ed to help ident
c050: 69 66 79 20 74 68 65 20 73 65 6c 65 63 74 65 64  ify the selected
c060: 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20   index...       
c070: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
c080: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
c090: 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 53 74 72  m name="indexStr
c0a0: 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ing">..        /
c0b0: 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20 74  // String used t
c0c0: 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
c0d0: 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
c0e0: 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ex...        ///
c0f0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
c100: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
c110: 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a 20 20  me="values">..  
c120: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61        /// The va
c130: 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69  lues correspondi
c140: 6e 67 20 74 6f 20 65 61 63 68 20 63 6f 6c 75 6d  ng to each colum
c150: 6e 20 69 6e 20 74 68 65 20 73 65 6c 65 63 74 65  n in the selecte
c160: 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20  d index...      
c170: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
c180: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
c190: 69 72 74 75 61 6c 20 76 6f 69 64 20 46 69 6c 74  irtual void Filt
c1a0: 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
c1b0: 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72   int indexNumber
c1c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
c1d0: 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e  tring indexStrin
c1e0: 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
c1f0: 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61  SQLiteValue[] va
c200: 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lues..          
c210: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
c220: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
c230: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
c240: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c250: 28 76 61 6c 75 65 73 20 21 3d 20 6e 75 6c 6c 29  (values != null)
c260: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
c270: 20 20 20 20 20 28 54 72 79 50 65 72 73 69 73 74       (TryPersist
c280: 56 61 6c 75 65 73 28 76 61 6c 75 65 73 29 20 21  Values(values) !
c290: 3d 20 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 29  = values.Length)
c2a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
c2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c2c0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
c2d0: 74 65 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  teException(..  
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2f0: 20 20 22 66 61 69 6c 65 64 20 74 6f 20 70 65 72    "failed to per
c300: 73 69 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  sist one or more
c310: 20 76 61 6c 75 65 73 22 29 3b 0d 0a 20 20 20 20   values");..    
c320: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c330: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e           this.in
c340: 64 65 78 4e 75 6d 62 65 72 20 3d 20 69 6e 64 65  dexNumber = inde
c350: 78 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20  xNumber;..      
c360: 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78        this.index
c370: 53 74 72 69 6e 67 20 3d 20 69 6e 64 65 78 53 74  String = indexSt
c380: 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  ring;..         
c390: 20 20 20 74 68 69 73 2e 76 61 6c 75 65 73 20 3d     this.values =
c3a0: 20 76 61 6c 75 65 73 3b 0d 0a 20 20 20 20 20 20   values;..      
c3b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
c3c0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
c3d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c420: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53        #region IS
c430: 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c  QLiteNativeHandl
c440: 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  e Members..     
c450: 20 20 20 70 72 69 76 61 74 65 20 49 6e 74 50 74     private IntPt
c460: 72 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d  r nativeHandle;.
c470: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
c480: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
c490: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
c4a0: 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74  underlying SQLit
c4b0: 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20  e native handle 
c4c0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c4d0: 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  this..        //
c4e0: 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  / object instanc
c4f0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
c500: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
c510: 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75      public virtu
c520: 61 6c 20 49 6e 74 50 74 72 20 4e 61 74 69 76 65  al IntPtr Native
c530: 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20  Handle..        
c540: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
c550: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
c560: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 6e 61 74  ed(); return nat
c570: 69 76 65 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20  iveHandle; }..  
c580: 20 20 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e            intern
c590: 61 6c 20 73 65 74 20 7b 20 6e 61 74 69 76 65 48  al set { nativeH
c5a0: 61 6e 64 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d  andle = value; }
c5b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
c5c0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
c5d0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
c5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c620: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
c630: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
c640: 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  e Members..     
c650: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
c660: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69  ..        /// Di
c670: 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f  sposes of this o
c680: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
c690: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
c6a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
c6b0: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73   public void Dis
c6c0: 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20  pose()..        
c6d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 44  {..            D
c6e0: 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
c6f0: 20 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75             GC.Su
c700: 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74  ppressFinalize(t
c710: 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  his);..        }
c720: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
c730: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
c740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c780: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c790: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
c7a0: 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22  osable "Pattern"
c7b0: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
c7c0: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64    private bool d
c7d0: 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20  isposed;..      
c7e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
c7f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72  .        /// Thr
c800: 6f 77 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66  ows an <see cref
c810: 3d 22 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  ="ObjectDisposed
c820: 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20 69 66  Exception" /> if
c830: 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20   this object..  
c840: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
c850: 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 70  ce has been disp
c860: 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  osed...        /
c870: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
c880: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
c890: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
c8a0: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
c8b0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
c8c0: 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45  THROW_ON_DISPOSE
c8d0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  D..            i
c8e0: 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20  f (disposed)..  
c8f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
c910: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
c920: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d  posedException(.
c930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c940: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
c950: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
c960: 72 73 6f 72 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  rsor).Name);..  
c970: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
c980: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
c990: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
c9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9c0: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
c9f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ca00: 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73      /// Disposes
ca10: 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
ca20: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
ca30: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
ca40: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
ca50: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70  param name="disp
ca60: 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20  osing">..       
ca70: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
ca80: 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   this method is 
ca90: 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f  being called fro
caa0: 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  m the..        /
cab0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44 69  // <see cref="Di
cac0: 73 70 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74 68  spose()" /> meth
cad0: 6f 64 2e 20 20 5a 65 72 6f 20 69 66 20 74 68 69  od.  Zero if thi
cae0: 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e  s method is bein
caf0: 67 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20  g called..      
cb00: 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68 65 20 66    /// from the f
cb10: 69 6e 61 6c 69 7a 65 72 2e 0d 0a 20 20 20 20 20  inalizer...     
cb20: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
cb30: 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
cb40: 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20  ed virtual void 
cb50: 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
cb60: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
cb70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cb80: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cbb0: 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d  /if (disposing).
cbc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cbd0: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   //{..          
cbe0: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
cbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc20: 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f    //    // dispo
cc30: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
cc40: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
cc60: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
cc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc80: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
cc90: 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d            //}...
cca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ccb0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ccc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccd0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
cce0: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
ccf0: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
cd00: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
cd10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cd20: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
cd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
cd50: 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
cd60: 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
cd70: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
cd80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
cd90: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cda0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cdf0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
ce00: 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
ce10: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
ce20: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46  >..        /// F
ce30: 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62  inalizes this ob
ce40: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
ce50: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
ce60: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
ce70: 7e 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  ~SQLiteVirtualTa
ce80: 62 6c 65 43 75 72 73 6f 72 28 29 0d 0a 20 20 20  bleCursor()..   
ce90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cea0: 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
ceb0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
cec0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
ced0: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
cee0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cef0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
cf00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cf40: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
cf50: 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20  iteNativeHandle 
cf60: 49 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f  Interface..    /
cf70: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
cf80: 20 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72    /// This inter
cf90: 66 61 63 65 20 72 65 70 72 65 73 65 6e 74 73 20  face represents 
cfa0: 61 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20  a native handle 
cfb0: 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20  provided by the 
cfc0: 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..   
cfd0: 20 2f 2f 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20   /// library... 
cfe0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
cff0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  >..    public in
d000: 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 4e  terface ISQLiteN
d010: 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20  ativeHandle..   
d020: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   {..        /// 
d030: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
d040: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
d050: 65 20 68 61 6e 64 6c 65 20 76 61 6c 75 65 2e 0d  e handle value..
d060: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
d070: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
d080: 20 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61   IntPtr NativeHa
d090: 6e 64 6c 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 20  ndle { get; }.. 
d0a0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
d0b0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
d0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d100: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
d110: 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61  region ISQLiteNa
d120: 74 69 76 65 4d 6f 64 75 6c 65 20 49 6e 74 65 72  tiveModule Inter
d130: 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  face..    /// <s
d140: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
d150: 20 54 68 69 73 20 69 6e 74 65 72 66 61 63 65 20   This interface 
d160: 72 65 70 72 65 73 65 6e 74 73 20 61 20 76 69 72  represents a vir
d170: 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
d180: 6d 65 6e 74 61 74 69 6f 6e 20 77 72 69 74 74 65  mentation writte
d190: 6e 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61  n in..    /// na
d1a0: 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20  tive code...    
d1b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
d1c0: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65 72      public inter
d1d0: 66 61 63 65 20 49 53 51 4c 69 74 65 4e 61 74 69  face ISQLiteNati
d1e0: 76 65 4d 6f 64 75 6c 65 0d 0a 20 20 20 20 7b 0d  veModule..    {.
d1f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
d200: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
d210: 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
d220: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
d230: 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  hod is called to
d240: 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 69 6e   create a new in
d250: 73 74 61 6e 63 65 20 6f 66 20 61 20 76 69 72 74  stance of a virt
d260: 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ual table..     
d270: 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e     /// in respon
d280: 73 65 20 74 6f 20 61 20 43 52 45 41 54 45 20 56  se to a CREATE V
d290: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d2a0: 74 65 6d 65 6e 74 2e 20 54 68 65 20 64 62 20 70  tement. The db p
d2b0: 61 72 61 6d 65 74 65 72 0d 0a 20 20 20 20 20 20  arameter..      
d2c0: 20 20 2f 2f 2f 20 69 73 20 61 20 70 6f 69 6e 74    /// is a point
d2d0: 65 72 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65  er to the SQLite
d2e0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
d2f0: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 65 78 65  tion that is exe
d300: 63 75 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  cuting..        
d310: 2f 2f 2f 20 74 68 65 20 43 52 45 41 54 45 20 56  /// the CREATE V
d320: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d330: 74 65 6d 65 6e 74 2e 20 54 68 65 20 70 41 75 78  tement. The pAux
d340: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65   argument is the
d350: 20 63 6f 70 79 0d 0a 20 20 20 20 20 20 20 20 2f   copy..        /
d360: 2f 2f 20 6f 66 20 74 68 65 20 63 6c 69 65 6e 74  // of the client
d370: 20 64 61 74 61 20 70 6f 69 6e 74 65 72 20 74 68   data pointer th
d380: 61 74 20 77 61 73 20 74 68 65 20 66 6f 75 72 74  at was the fourt
d390: 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  h argument to th
d3a0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
d3b0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
d3c0: 64 75 6c 65 28 29 20 6f 72 20 73 71 6c 69 74 65  dule() or sqlite
d3d0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
d3e0: 76 32 28 29 20 63 61 6c 6c 20 74 68 61 74 0d 0a  v2() call that..
d3f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 67 69          /// regi
d400: 73 74 65 72 65 64 20 74 68 65 20 76 69 72 74 75  stered the virtu
d410: 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 2e  al table module.
d420: 20 54 68 65 20 61 72 67 76 20 70 61 72 61 6d 65   The argv parame
d430: 74 65 72 20 69 73 20 61 6e 0d 0a 20 20 20 20 20  ter is an..     
d440: 20 20 20 2f 2f 2f 20 61 72 72 61 79 20 6f 66 20     /// array of 
d450: 61 72 67 63 20 70 6f 69 6e 74 65 72 73 20 74 6f  argc pointers to
d460: 20 6e 75 6c 6c 20 74 65 72 6d 69 6e 61 74 65 64   null terminated
d470: 20 73 74 72 69 6e 67 73 2e 20 54 68 65 20 66 69   strings. The fi
d480: 72 73 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rst..        ///
d490: 20 73 74 72 69 6e 67 2c 20 61 72 67 76 5b 30 5d   string, argv[0]
d4a0: 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  , is the name of
d4b0: 20 74 68 65 20 6d 6f 64 75 6c 65 20 62 65 69 6e   the module bein
d4c0: 67 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 0d 0a  g invoked. The..
d4d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75          /// modu
d4e0: 6c 65 20 6e 61 6d 65 20 69 73 20 74 68 65 20 6e  le name is the n
d4f0: 61 6d 65 20 70 72 6f 76 69 64 65 64 20 61 73 20  ame provided as 
d500: 74 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d  the second argum
d510: 65 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ent to..        
d520: 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61  /// sqlite3_crea
d530: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 61 6e 64 20  te_module() and 
d540: 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
d550: 74 6f 20 74 68 65 20 55 53 49 4e 47 20 63 6c 61  to the USING cla
d560: 75 73 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  use of..        
d570: 2f 2f 2f 20 74 68 65 20 43 52 45 41 54 45 20 56  /// the CREATE V
d580: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d590: 74 65 6d 65 6e 74 20 74 68 61 74 20 69 73 20 72  tement that is r
d5a0: 75 6e 6e 69 6e 67 2e 20 54 68 65 20 73 65 63 6f  unning. The seco
d5b0: 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nd,..        ///
d5c0: 20 61 72 67 76 5b 31 5d 2c 20 69 73 20 74 68 65   argv[1], is the
d5d0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
d5e0: 61 62 61 73 65 20 69 6e 20 77 68 69 63 68 20 74  abase in which t
d5f0: 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 74  he new virtual t
d600: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
d610: 2f 20 69 73 20 62 65 69 6e 67 20 63 72 65 61 74  / is being creat
d620: 65 64 2e 20 54 68 65 20 64 61 74 61 62 61 73 65  ed. The database
d630: 20 6e 61 6d 65 20 69 73 20 22 6d 61 69 6e 22 20   name is "main" 
d640: 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79 0d  for the primary.
d650: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74  .        /// dat
d660: 61 62 61 73 65 2c 20 6f 72 20 22 74 65 6d 70 22  abase, or "temp"
d670: 20 66 6f 72 20 54 45 4d 50 20 64 61 74 61 62 61   for TEMP databa
d680: 73 65 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20  se, or the name 
d690: 67 69 76 65 6e 20 61 74 20 74 68 65 0d 0a 20 20  given at the..  
d6a0: 20 20 20 20 20 20 2f 2f 2f 20 65 6e 64 20 6f 66        /// end of
d6b0: 20 74 68 65 20 41 54 54 41 43 48 20 73 74 61 74   the ATTACH stat
d6c0: 65 6d 65 6e 74 20 66 6f 72 20 61 74 74 61 63 68  ement for attach
d6d0: 65 64 20 64 61 74 61 62 61 73 65 73 2e 20 54 68  ed databases. Th
d6e0: 65 20 74 68 69 72 64 0d 0a 20 20 20 20 20 20 20  e third..       
d6f0: 20 2f 2f 2f 20 65 6c 65 6d 65 6e 74 20 6f 66 20   /// element of 
d700: 74 68 65 20 61 72 72 61 79 2c 20 61 72 67 76 5b  the array, argv[
d710: 32 5d 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20  2], is the name 
d720: 6f 66 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  of the new virtu
d730: 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  al..        /// 
d740: 74 61 62 6c 65 2c 20 61 73 20 73 70 65 63 69 66  table, as specif
d750: 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ied following th
d760: 65 20 54 41 42 4c 45 20 6b 65 79 77 6f 72 64 20  e TABLE keyword 
d770: 69 6e 20 74 68 65 20 43 52 45 41 54 45 0d 0a 20  in the CREATE.. 
d780: 20 20 20 20 20 20 20 2f 2f 2f 20 56 49 52 54 55         /// VIRTU
d790: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
d7a0: 6e 74 2e 20 49 66 20 70 72 65 73 65 6e 74 2c 20  nt. If present, 
d7b0: 74 68 65 20 66 6f 75 72 74 68 20 61 6e 64 20 73  the fourth and s
d7c0: 75 62 73 65 71 75 65 6e 74 0d 0a 20 20 20 20 20  ubsequent..     
d7d0: 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20 69     /// strings i
d7e0: 6e 20 74 68 65 20 61 72 67 76 5b 5d 20 61 72 72  n the argv[] arr
d7f0: 61 79 20 72 65 70 6f 72 74 20 74 68 65 20 61 72  ay report the ar
d800: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
d810: 6f 64 75 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20  odule name..    
d820: 20 20 20 20 2f 2f 2f 20 69 6e 20 74 68 65 20 43      /// in the C
d830: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
d840: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  BLE statement...
d850: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
d860: 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
d870: 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
d880: 20 2f 2f 2f 20 54 68 65 20 6a 6f 62 20 6f 66 20   /// The job of 
d890: 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 74  this method is t
d8a0: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
d8b0: 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c  new virtual tabl
d8c0: 65 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20  e object..      
d8d0: 20 20 2f 2f 2f 20 28 61 6e 20 73 71 6c 69 74 65    /// (an sqlite
d8e0: 33 5f 76 74 61 62 20 6f 62 6a 65 63 74 29 20 61  3_vtab object) a
d8f0: 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e  nd return a poin
d900: 74 65 72 20 74 6f 20 69 74 20 69 6e 20 2a 70 70  ter to it in *pp
d910: 56 54 61 62 2e 0d 0a 20 20 20 20 20 20 20 20 2f  VTab...        /
d920: 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
d930: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
d940: 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 70          /// As p
d950: 61 72 74 20 6f 66 20 74 68 65 20 74 61 73 6b 20  art of the task 
d960: 6f 66 20 63 72 65 61 74 69 6e 67 20 61 20 6e 65  of creating a ne
d970: 77 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  w sqlite3_vtab s
d980: 74 72 75 63 74 75 72 65 2c 20 74 68 69 73 0d 0a  tructure, this..
d990: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68          /// meth
d9a0: 6f 64 20 6d 75 73 74 20 69 6e 76 6f 6b 65 20 73  od must invoke s
d9b0: 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
d9c0: 74 61 62 28 29 20 74 6f 20 74 65 6c 6c 20 74 68  tab() to tell th
d9d0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20  e SQLite core.. 
d9e0: 20 20 20 20 20 20 20 2f 2f 2f 20 61 62 6f 75 74         /// about
d9f0: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 61 6e 64   the columns and
da00: 20 64 61 74 61 74 79 70 65 73 20 69 6e 20 74 68   datatypes in th
da10: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
da20: 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   The..        //
da30: 2f 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  / sqlite3_declar
da40: 65 5f 76 74 61 62 28 29 20 41 50 49 20 68 61 73  e_vtab() API has
da50: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70   the following p
da60: 72 6f 74 6f 74 79 70 65 3a 0d 0a 20 20 20 20 20  rototype:..     
da70: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
da80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
da90: 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
daa0: 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  <code>..        
dab0: 2f 2f 2f 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  /// int sqlite3_
dac0: 64 65 63 6c 61 72 65 5f 76 74 61 62 28 73 71 6c  declare_vtab(sql
dad0: 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20  ite3 *db, const 
dae0: 63 68 61 72 20 2a 7a 43 72 65 61 74 65 54 61 62  char *zCreateTab
daf0: 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le)..        ///
db00: 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20   </code>..      
db10: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
db20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
db30: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
db40: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
db50: 74 20 74 6f 20 73 71 6c 69 74 65 33 5f 64 65 63  t to sqlite3_dec
db60: 6c 61 72 65 5f 76 74 61 62 28 29 20 6d 75 73 74  lare_vtab() must
db70: 20 62 65 20 74 68 65 20 73 61 6d 65 0d 0a 20 20   be the same..  
db80: 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61        /// databa
db90: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  se connection po
dba0: 69 6e 74 65 72 20 61 73 20 74 68 65 20 66 69 72  inter as the fir
dbb0: 73 74 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  st parameter to 
dbc0: 74 68 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  this method...  
dbd0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 65        /// The se
dbe0: 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f  cond argument to
dbf0: 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
dc00: 5f 76 74 61 62 28 29 20 6d 75 73 74 20 61 0d 0a  _vtab() must a..
dc10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 7a 65 72 6f          /// zero
dc20: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
dc30: 38 20 73 74 72 69 6e 67 20 74 68 61 74 20 63 6f  8 string that co
dc40: 6e 74 61 69 6e 73 20 61 20 77 65 6c 6c 2d 66 6f  ntains a well-fo
dc50: 72 6d 65 64 20 43 52 45 41 54 45 0d 0a 20 20 20  rmed CREATE..   
dc60: 20 20 20 20 20 2f 2f 2f 20 54 41 42 4c 45 20 73       /// TABLE s
dc70: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64 65  tatement that de
dc80: 66 69 6e 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  fines the column
dc90: 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s in the virtual
dca0: 20 74 61 62 6c 65 20 61 6e 64 0d 0a 20 20 20 20   table and..    
dcb0: 20 20 20 20 2f 2f 2f 20 74 68 65 69 72 20 64 61      /// their da
dcc0: 74 61 20 74 79 70 65 73 2e 20 54 68 65 20 6e 61  ta types. The na
dcd0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
dce0: 69 6e 20 74 68 69 73 20 43 52 45 41 54 45 20 54  in this CREATE T
dcf0: 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ABLE..        //
dd00: 2f 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  / statement is i
dd10: 67 6e 6f 72 65 64 2c 20 61 73 20 61 72 65 20 61  gnored, as are a
dd20: 6c 6c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  ll constraints. 
dd30: 4f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 20  Only the column 
dd40: 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 2f  names..        /
dd50: 2f 2f 20 61 6e 64 20 64 61 74 61 74 79 70 65 73  // and datatypes
dd60: 20 6d 61 74 74 65 72 2e 20 54 68 65 20 43 52 45   matter. The CRE
dd70: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
dd80: 65 6e 74 20 73 74 72 69 6e 67 20 6e 65 65 64 20  ent string need 
dd90: 6e 6f 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  not to..        
dda0: 2f 2f 2f 20 62 65 20 68 65 6c 64 20 69 6e 20 70  /// be held in p
ddb0: 65 72 73 69 73 74 65 6e 74 20 6d 65 6d 6f 72 79  ersistent memory
ddc0: 2e 20 54 68 65 20 73 74 72 69 6e 67 20 63 61 6e  . The string can
ddd0: 20 62 65 20 64 65 61 6c 6c 6f 63 61 74 65 64 20   be deallocated 
dde0: 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20  and/or..        
ddf0: 2f 2f 2f 20 72 65 75 73 65 64 20 61 73 20 73 6f  /// reused as so
de00: 6f 6e 20 61 73 20 74 68 65 20 73 71 6c 69 74 65  on as the sqlite
de10: 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
de20: 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
de30: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
de40: 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
de50: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
de60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
de70: 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a  am name="pDb">..
de80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
de90: 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65 20  native database 
dea0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
deb0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
dec0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
ded0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
dee0: 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20  e="pAux">..     
def0: 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69     /// The origi
df00: 6e 61 6c 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  nal native point
df10: 65 72 20 76 61 6c 75 65 20 74 68 61 74 20 77 61  er value that wa
df20: 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68  s provided to th
df30: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
df40: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
df50: 64 75 6c 65 28 29 2c 20 73 71 6c 69 74 65 33 5f  dule(), sqlite3_
df60: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32  create_module_v2
df70: 28 29 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  () or..        /
df80: 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  // sqlite3_creat
df90: 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64  e_disposable_mod
dfa0: 75 6c 65 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e  ule() functions.
dfb0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
dfc0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
dfd0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
dfe0: 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20  "argc">..       
dff0: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
e000: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  of arguments fro
e010: 6d 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  m the CREATE VIR
e020: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
e030: 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ment...        /
e040: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
e050: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
e060: 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20  name="argv">..  
e070: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
e080: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 20 61 72  ray of string ar
e090: 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65  guments from the
e0a0: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
e0b0: 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f  TABLE..        /
e0c0: 2f 2f 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  // statement... 
e0d0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
e0e0: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
e0f0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
e100: 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tab">..        /
e110: 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
e120: 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
e130: 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
e140: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
e150: 20 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20   newly..        
e160: 2f 2f 2f 20 63 72 65 61 74 65 64 20 6e 61 74 69  /// created nati
e170: 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  ve sqlite3_vtab 
e180: 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
e190: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
e1a0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
e1b0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
e1c0: 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20  e="pError">..   
e1d0: 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61       /// Upon fa
e1e0: 69 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72 61  ilure, this para
e1f0: 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
e200: 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20  dified to point 
e210: 74 6f 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20  to the error..  
e220: 20 20 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67        /// messag
e230: 65 2c 20 77 69 74 68 20 74 68 65 20 75 6e 64 65  e, with the unde
e240: 72 6c 79 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61  rlying memory ha
e250: 76 69 6e 67 20 62 65 65 6e 20 6f 62 74 61 69 6e  ving been obtain
e260: 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20  ed from the..   
e270: 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
e280: 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69  _malloc() functi
e290: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
e2a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
e2b0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
e2c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
e2d0: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
e2e0: 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
e2f0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
e300: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
e310: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43  LiteErrorCode xC
e320: 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  reate(..        
e330: 20 20 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d      IntPtr pDb,.
e340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
e350: 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20  Ptr pAux,..     
e360: 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c         int argc,
e370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
e380: 74 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20  tPtr argv,..    
e390: 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
e3a0: 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
e3b0: 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
e3c0: 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20  r pError..      
e3d0: 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
e3e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e430: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
e440: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
e450: 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
e460: 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65    /// The xConne
e470: 63 74 20 6d 65 74 68 6f 64 20 69 73 20 76 65 72  ct method is ver
e480: 79 20 73 69 6d 69 6c 61 72 20 74 6f 20 78 43 72  y similar to xCr
e490: 65 61 74 65 2e 20 49 74 20 68 61 73 20 74 68 65  eate. It has the
e4a0: 20 73 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f   same..        /
e4b0: 2f 2f 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e  // parameters an
e4c0: 64 20 63 6f 6e 73 74 72 75 63 74 73 20 61 20 6e  d constructs a n
e4d0: 65 77 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  ew sqlite3_vtab 
e4e0: 73 74 72 75 63 74 75 72 65 20 6a 75 73 74 20 6c  structure just l
e4f0: 69 6b 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ike..        ///
e500: 20 78 43 72 65 61 74 65 2e 20 41 6e 64 20 69 74   xCreate. And it
e510: 20 6d 75 73 74 20 61 6c 73 6f 20 63 61 6c 6c 20   must also call 
e520: 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
e530: 76 74 61 62 28 29 20 6c 69 6b 65 20 78 43 72 65  vtab() like xCre
e540: 61 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ate...        //
e550: 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
e560: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
e570: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64         /// The d
e580: 69 66 66 65 72 65 6e 63 65 20 69 73 20 74 68 61  ifference is tha
e590: 74 20 78 43 6f 6e 6e 65 63 74 20 69 73 20 63 61  t xConnect is ca
e5a0: 6c 6c 65 64 20 74 6f 20 65 73 74 61 62 6c 69 73  lled to establis
e5b0: 68 20 61 20 6e 65 77 0d 0a 20 20 20 20 20 20 20  h a new..       
e5c0: 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   /// connection 
e5d0: 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 76  to an existing v
e5e0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 68 65  irtual table whe
e5f0: 72 65 61 73 20 78 43 72 65 61 74 65 20 69 73 20  reas xCreate is 
e600: 63 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  called..        
e610: 2f 2f 2f 20 74 6f 20 63 72 65 61 74 65 20 61 20  /// to create a 
e620: 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c  new virtual tabl
e630: 65 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0d  e from scratch..
e640: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
e650: 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
e660: 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
e670: 20 20 2f 2f 2f 20 54 68 65 20 78 43 72 65 61 74    /// The xCreat
e680: 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20 6d  e and xConnect m
e690: 65 74 68 6f 64 73 20 61 72 65 20 6f 6e 6c 79 20  ethods are only 
e6a0: 64 69 66 66 65 72 65 6e 74 20 77 68 65 6e 20 74  different when t
e6b0: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
e6c0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61  virtual table ha
e6d0: 73 20 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 62  s some kind of b
e6e0: 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61  acking store tha
e6f0: 74 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20  t must be..     
e700: 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a     /// initializ
e710: 65 64 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  ed the first tim
e720: 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
e730: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
e740: 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  The..        ///
e750: 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20   xCreate method 
e760: 63 72 65 61 74 65 73 20 61 6e 64 20 69 6e 69 74  creates and init
e770: 69 61 6c 69 7a 65 73 20 74 68 65 20 62 61 63 6b  ializes the back
e780: 69 6e 67 20 73 74 6f 72 65 2e 20 54 68 65 0d 0a  ing store. The..
e790: 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6e          /// xCon
e7a0: 6e 65 63 74 20 6d 65 74 68 6f 64 20 6a 75 73 74  nect method just
e7b0: 20 63 6f 6e 6e 65 63 74 73 20 74 6f 20 61 6e 20   connects to an 
e7c0: 65 78 69 73 74 69 6e 67 20 62 61 63 6b 69 6e 67  existing backing
e7d0: 20 73 74 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20   store...       
e7e0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
e7f0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
e800: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 73  ..        /// As
e810: 20 61 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e   an example, con
e820: 73 69 64 65 72 20 61 20 76 69 72 74 75 61 6c 20  sider a virtual 
e830: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
e840: 74 69 6f 6e 20 74 68 61 74 0d 0a 20 20 20 20 20  tion that..     
e850: 20 20 20 2f 2f 2f 20 70 72 6f 76 69 64 65 73 20     /// provides 
e860: 72 65 61 64 2d 6f 6e 6c 79 20 61 63 63 65 73 73  read-only access
e870: 20 74 6f 20 65 78 69 73 74 69 6e 67 20 63 6f 6d   to existing com
e880: 6d 61 2d 73 65 70 61 72 61 74 65 64 2d 76 61 6c  ma-separated-val
e890: 75 65 20 28 43 53 56 29 0d 0a 20 20 20 20 20 20  ue (CSV)..      
e8a0: 20 20 2f 2f 2f 20 66 69 6c 65 73 20 6f 6e 20 64    /// files on d
e8b0: 69 73 6b 2e 20 54 68 65 72 65 20 69 73 20 6e 6f  isk. There is no
e8c0: 20 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 74   backing store t
e8d0: 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
e8e0: 63 72 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20  created..       
e8f0: 20 2f 2f 2f 20 6f 72 20 69 6e 69 74 69 61 6c 69   /// or initiali
e900: 7a 65 64 20 66 6f 72 20 73 75 63 68 20 61 20 76  zed for such a v
e910: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 28 73 69  irtual table (si
e920: 6e 63 65 20 74 68 65 20 43 53 56 20 66 69 6c 65  nce the CSV file
e930: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  s..        /// a
e940: 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 6e 20  lready exist on 
e950: 64 69 73 6b 29 20 73 6f 20 74 68 65 20 78 43 72  disk) so the xCr
e960: 65 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63  eate and xConnec
e970: 74 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 20 62  t methods will b
e980: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
e990: 64 65 6e 74 69 63 61 6c 20 66 6f 72 20 74 68 61  dentical for tha
e9a0: 74 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 20  t module...     
e9b0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
e9c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
e9d0: 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
e9e0: 41 6e 6f 74 68 65 72 20 65 78 61 6d 70 6c 65 20  Another example 
e9f0: 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
ea00: 6c 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  le that implemen
ea10: 74 73 20 61 20 66 75 6c 6c 2d 74 65 78 74 0d 0a  ts a full-text..
ea20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 65          /// inde
ea30: 78 2e 20 54 68 65 20 78 43 72 65 61 74 65 20 6d  x. The xCreate m
ea40: 65 74 68 6f 64 20 6d 75 73 74 20 63 72 65 61 74  ethod must creat
ea50: 65 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  e and initialize
ea60: 20 64 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f   data..        /
ea70: 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  // structures to
ea80: 20 68 6f 6c 64 20 74 68 65 20 64 69 63 74 69 6f   hold the dictio
ea90: 6e 61 72 79 20 61 6e 64 20 70 6f 73 74 69 6e 67  nary and posting
eaa0: 20 6c 69 73 74 73 20 66 6f 72 20 74 68 61 74 20   lists for that 
eab0: 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
eac0: 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74  /// The xConnect
ead0: 20 6d 65 74 68 6f 64 2c 20 6f 6e 20 74 68 65 20   method, on the 
eae0: 6f 74 68 65 72 20 68 61 6e 64 2c 20 6f 6e 6c 79  other hand, only
eaf0: 20 68 61 73 20 74 6f 20 6c 6f 63 61 74 65 20 61   has to locate a
eb00: 6e 64 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20  nd use..        
eb10: 2f 2f 2f 20 61 6e 20 65 78 69 73 74 69 6e 67 20  /// an existing 
eb20: 64 69 63 74 69 6f 6e 61 72 79 20 61 6e 64 20 70  dictionary and p
eb30: 6f 73 74 69 6e 67 20 6c 69 73 74 73 20 74 68 61  osting lists tha
eb40: 74 20 77 65 72 65 20 63 72 65 61 74 65 64 20 62  t were created b
eb50: 79 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  y a..        ///
eb60: 20 70 72 69 6f 72 20 78 43 72 65 61 74 65 20 63   prior xCreate c
eb70: 61 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  all...        //
eb80: 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
eb90: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
eba0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
ebb0: 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 6d  Connect method m
ebc0: 75 73 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ust return SQLIT
ebd0: 45 5f 4f 4b 20 69 66 20 69 74 20 69 73 20 73 75  E_OK if it is su
ebe0: 63 63 65 73 73 66 75 6c 20 69 6e 0d 0a 20 20 20  ccessful in..   
ebf0: 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 69 6e       /// creatin
ec00: 67 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  g the new virtua
ec10: 6c 20 74 61 62 6c 65 2c 20 6f 72 20 53 51 4c 49  l table, or SQLI
ec20: 54 45 5f 45 52 52 4f 52 20 69 66 20 69 74 20 69  TE_ERROR if it i
ec30: 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f  s not..        /
ec40: 2f 2f 20 73 75 63 63 65 73 73 66 75 6c 2e 20 49  // successful. I
ec50: 66 20 6e 6f 74 20 73 75 63 63 65 73 73 66 75 6c  f not successful
ec60: 2c 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  , the sqlite3_vt
ec70: 61 62 20 73 74 72 75 63 74 75 72 65 20 6d 75 73  ab structure mus
ec80: 74 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f  t not..        /
ec90: 2f 2f 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e  // be allocated.
eca0: 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
ecb0: 65 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  e may optionally
ecc0: 20 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20   be returned in 
ecd0: 2a 70 7a 45 72 72 0d 0a 20 20 20 20 20 20 20 20  *pzErr..        
ece0: 2f 2f 2f 20 69 66 20 75 6e 73 75 63 63 65 73 73  /// if unsuccess
ecf0: 66 75 6c 2e 20 53 70 61 63 65 20 74 6f 20 68 6f  ful. Space to ho
ed00: 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  ld the error mes
ed10: 73 61 67 65 20 73 74 72 69 6e 67 20 6d 75 73 74  sage string must
ed20: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   be..        ///
ed30: 20 61 6c 6c 6f 63 61 74 65 64 20 75 73 69 6e 67   allocated using
ed40: 20 61 6e 20 53 51 4c 69 74 65 20 6d 65 6d 6f 72   an SQLite memor
ed50: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 75 6e  y allocation fun
ed60: 63 74 69 6f 6e 20 6c 69 6b 65 0d 0a 20 20 20 20  ction like..    
ed70: 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
ed80: 6d 61 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69  malloc() or sqli
ed90: 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 20 61 73  te3_mprintf() as
eda0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
edb0: 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   will..        /
edc0: 2f 2f 20 61 74 74 65 6d 70 74 20 74 6f 20 66 72  // attempt to fr
edd0: 65 65 20 74 68 65 20 73 70 61 63 65 20 75 73 69  ee the space usi
ede0: 6e 67 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  ng sqlite3_free(
edf0: 29 20 61 66 74 65 72 20 74 68 65 20 65 72 72 6f  ) after the erro
ee00: 72 20 68 61 73 0d 0a 20 20 20 20 20 20 20 20 2f  r has..        /
ee10: 2f 2f 20 62 65 65 6e 20 72 65 70 6f 72 74 65 64  // been reported
ee20: 20 75 70 20 74 6f 20 74 68 65 20 61 70 70 6c 69   up to the appli
ee30: 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
ee40: 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
ee50: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
ee60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
ee70: 65 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f  e xConnect metho
ee80: 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  d is required fo
ee90: 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20  r every virtual 
eea0: 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
eeb0: 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
eec0: 6e 2c 20 74 68 6f 75 67 68 20 74 68 65 20 78 43  n, though the xC
eed0: 72 65 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65  reate and xConne
eee0: 63 74 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 74  ct pointers of t
eef0: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
ef00: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6f  sqlite3_module o
ef10: 62 6a 65 63 74 20 6d 61 79 20 70 6f 69 6e 74 20  bject may point 
ef20: 74 6f 20 74 68 65 20 73 61 6d 65 20 66 75 6e 63  to the same func
ef30: 74 69 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  tion the virtual
ef40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61  ..        /// ta
ef50: 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6e 65 65  ble does not nee
ef60: 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  d to initialize 
ef70: 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 2e 0d 0a  backing store...
ef80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
ef90: 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
efa0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
efb0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
efc0: 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20  name="pDb">..   
efd0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
efe0: 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
eff0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d  nection handle..
f000: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
f010: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
f020: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
f030: 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  pAux">..        
f040: 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c  /// The original
f050: 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
f060: 76 61 6c 75 65 20 74 68 61 74 20 77 61 73 20 70  value that was p
f070: 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a  rovided to the..
f080: 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
f090: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
f0a0: 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 63 72 65  e(), sqlite3_cre
f0b0: 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 20  ate_module_v2() 
f0c0: 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
f0d0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64  sqlite3_create_d
f0e0: 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65  isposable_module
f0f0: 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20  () functions... 
f100: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
f110: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
f120: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
f130: 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gc">..        //
f140: 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
f150: 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74  arguments from t
f160: 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41  he CREATE VIRTUA
f170: 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
f180: 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
f190: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
f1a0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
f1b0: 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20  e="argv">..     
f1c0: 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79     /// The array
f1d0: 20 6f 66 20 73 74 72 69 6e 67 20 61 72 67 75 6d   of string argum
f1e0: 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52  ents from the CR
f1f0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
f200: 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  LE..        /// 
f210: 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
f220: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
f230: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
f240: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
f250: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
f260: 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
f270: 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73  is parameter mus
f280: 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f  t be modified to
f290: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e 65   point to the ne
f2a0: 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  wly..        ///
f2b0: 20 63 72 65 61 74 65 64 20 6e 61 74 69 76 65 20   created native 
f2c0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
f2d0: 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
f2e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
f2f0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
f300: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
f310: 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20  pError">..      
f320: 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75    /// Upon failu
f330: 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  re, this paramet
f340: 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
f350: 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ied to point to 
f360: 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  the error..     
f370: 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c 20     /// message, 
f380: 77 69 74 68 20 74 68 65 20 75 6e 64 65 72 6c 79  with the underly
f390: 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76 69 6e  ing memory havin
f3a0: 67 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20  g been obtained 
f3b0: 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20  from the..      
f3c0: 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61    /// sqlite3_ma
f3d0: 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e  lloc() function.
f3e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
f3f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
f400: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
f410: 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
f420: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
f430: 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
f440: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
f450: 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
f460: 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e 6e  eErrorCode xConn
f470: 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
f480: 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
f490: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
f4a0: 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20  r pAux,..       
f4b0: 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a       int argc,..
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
f4d0: 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  tr argv,..      
f4e0: 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
f4f0: 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
f500: 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
f510: 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20  pError..        
f520: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
f530: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f580: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
f590: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
f5a0: 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
f5b0: 2f 2f 2f 20 53 51 4c 69 74 65 20 75 73 65 73 20  /// SQLite uses 
f5c0: 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d  the xBestIndex m
f5d0: 65 74 68 6f 64 20 6f 66 20 61 20 76 69 72 74 75  ethod of a virtu
f5e0: 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20  al table module 
f5f0: 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
f600: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65  determine the be
f610: 73 74 20 77 61 79 20 74 6f 20 61 63 63 65 73 73  st way to access
f620: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
f630: 6c 65 2e 20 54 68 65 20 78 42 65 73 74 49 6e 64  le. The xBestInd
f640: 65 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ex..        /// 
f650: 6d 65 74 68 6f 64 20 68 61 73 20 61 20 70 72 6f  method has a pro
f660: 74 6f 74 79 70 65 20 6c 69 6b 65 20 74 68 69 73  totype like this
f670: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  :..        /// <
f680: 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
f690: 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
f6a0: 20 20 20 20 2f 2f 2f 20 69 6e 74 20 28 2a 78 42      /// int (*xB
f6b0: 65 73 74 49 6e 64 65 78 29 28 73 71 6c 69 74 65  estIndex)(sqlite
f6c0: 33 5f 76 74 61 62 20 2a 70 56 54 61 62 2c 20 73  3_vtab *pVTab, s
f6d0: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
f6e0: 6f 2a 29 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o*);..        //
f6f0: 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20  / </code>..     
f700: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
f710: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 53         /// The S
f720: 51 4c 69 74 65 20 63 6f 72 65 20 63 6f 6d 6d 75  QLite core commu
f730: 6e 69 63 61 74 65 73 20 77 69 74 68 20 74 68 65  nicates with the
f740: 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68   xBestIndex meth
f750: 6f 64 20 62 79 20 66 69 6c 6c 69 6e 67 0d 0a 20  od by filling.. 
f760: 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 20 63 65         /// in ce
f770: 72 74 61 69 6e 20 66 69 65 6c 64 73 20 6f 66 20  rtain fields of 
f780: 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  the sqlite3_inde
f790: 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  x_info structure
f7a0: 20 61 6e 64 20 70 61 73 73 69 6e 67 20 61 0d 0a   and passing a..
f7b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e          /// poin
f7c0: 74 65 72 20 74 6f 20 74 68 61 74 20 73 74 72 75  ter to that stru
f7d0: 63 74 75 72 65 20 69 6e 74 6f 20 78 42 65 73 74  cture into xBest
f7e0: 49 6e 64 65 78 20 61 73 20 74 68 65 20 73 65 63  Index as the sec
f7f0: 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 2e 0d 0a  ond parameter...
f800: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
f810: 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f  xBestIndex metho
f820: 64 20 66 69 6c 6c 73 20 6f 75 74 20 6f 74 68 65  d fills out othe
f830: 72 20 66 69 65 6c 64 73 20 6f 66 20 74 68 69 73  r fields of this
f840: 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20   structure..    
f850: 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20 66 6f      /// which fo
f860: 72 6d 73 20 74 68 65 20 72 65 70 6c 79 2e 20 54  rms the reply. T
f870: 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  he sqlite3_index
f880: 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  _info structure 
f890: 6c 6f 6f 6b 73 20 6c 69 6b 65 0d 0a 20 20 20 20  looks like..    
f8a0: 20 20 20 20 2f 2f 2f 20 74 68 69 73 3a 0d 0a 20      /// this:.. 
f8b0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
f8c0: 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
f8d0: 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  <code>..        
f8e0: 2f 2f 2f 20 20 73 74 72 75 63 74 20 73 71 6c 69  ///  struct sqli
f8f0: 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 7b  te3_index_info {
f900: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
f910: 20 2f 2a 20 49 6e 70 75 74 73 20 2a 2f 0d 0a 20   /* Inputs */.. 
f920: 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f         ///    co
f930: 6e 73 74 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61  nst int nConstra
f940: 69 6e 74 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72  int;   /* Number
f950: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
f960: 43 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0d 0a 20  Constraint */.. 
f970: 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f         ///    co
f980: 6e 73 74 20 73 74 72 75 63 74 20 73 71 6c 69 74  nst struct sqlit
f990: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
f9a0: 69 6e 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f  int {..        /
f9b0: 2f 2f 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f  //       int iCo
f9c0: 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
f9d0: 2a 20 43 6f 6c 75 6d 6e 20 6f 6e 20 6c 65 66 74  * Column on left
f9e0: 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 0d 0a 20  -hand side of.. 
f9f0: 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
fa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa10: 20 20 20 20 20 20 20 20 2a 20 63 6f 6e 73 74 72          * constr
fa20: 61 69 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20  aint */..       
fa30: 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73 69 67   ///       unsig
fa40: 6e 65 64 20 63 68 61 72 20 6f 70 3b 20 20 20 20  ned char op;    
fa50: 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f   /* Constraint o
fa60: 70 65 72 61 74 6f 72 20 2a 2f 0d 0a 20 20 20 20  perator */..    
fa70: 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e      ///       un
fa80: 73 69 67 6e 65 64 20 63 68 61 72 20 75 73 61 62  signed char usab
fa90: 6c 65 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 74  le; /* True if t
faa0: 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  his constraint i
fab0: 73 20 75 73 61 62 6c 65 20 2a 2f 0d 0a 20 20 20  s usable */..   
fac0: 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 69       ///       i
fad0: 6e 74 20 69 54 65 72 6d 4f 66 66 73 65 74 3b 20  nt iTermOffset; 
fae0: 20 20 20 20 20 2f 2a 20 55 73 65 64 20 69 6e 74       /* Used int
faf0: 65 72 6e 61 6c 6c 79 20 2d 20 78 42 65 73 74 49  ernally - xBestI
fb00: 6e 64 65 78 20 73 68 6f 75 6c 64 0d 0a 20 20 20  ndex should..   
fb10: 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
fb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb30: 20 20 20 20 20 20 2a 20 69 67 6e 6f 72 65 20 2a        * ignore *
fb40: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  /..        ///  
fb50: 20 20 7d 20 2a 63 6f 6e 73 74 20 61 43 6f 6e 73    } *const aCons
fb60: 74 72 61 69 6e 74 3b 20 20 20 20 2f 2a 20 54 61  traint;    /* Ta
fb70: 62 6c 65 20 6f 66 20 57 48 45 52 45 20 63 6c 61  ble of WHERE cla
fb80: 75 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  use constraints 
fb90: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
fba0: 20 20 20 63 6f 6e 73 74 20 69 6e 74 20 6e 4f 72     const int nOr
fbb0: 64 65 72 42 79 3b 20 20 20 20 20 20 2f 2a 20 4e  derBy;      /* N
fbc0: 75 6d 62 65 72 20 6f 66 20 74 65 72 6d 73 20 69  umber of terms i
fbd0: 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 0d 0a  n the ORDER BY..
fbe0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc00: 20 20 20 20 20 20 20 20 20 2a 20 63 6c 61 75 73           * claus
fc10: 65 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e */..        //
fc20: 2f 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63  /    const struc
fc30: 74 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  t sqlite3_index_
fc40: 6f 72 64 65 72 62 79 20 7b 0d 0a 20 20 20 20 20  orderby {..     
fc50: 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74     ///       int
fc60: 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
fc70: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
fc80: 62 65 72 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  ber */..        
fc90: 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e  ///       unsign
fca0: 65 64 20 63 68 61 72 20 64 65 73 63 3b 20 20 20  ed char desc;   
fcb0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43  /* True for DESC
fcc0: 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 41 53 43  .  False for ASC
fcd0: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  . */..        //
fce0: 2f 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 4f  /    } *const aO
fcf0: 72 64 65 72 42 79 3b 20 20 20 20 20 20 20 2f 2a  rderBy;       /*
fd00: 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
fd10: 61 75 73 65 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ause */..       
fd20: 20 2f 2f 2f 20 20 20 20 2f 2a 20 4f 75 74 70 75   ///    /* Outpu
fd30: 74 73 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  ts */..        /
fd40: 2f 2f 20 20 20 20 73 74 72 75 63 74 20 73 71 6c  //    struct sql
fd50: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
fd60: 72 61 69 6e 74 5f 75 73 61 67 65 20 7b 0d 0a 20  raint_usage {.. 
fd70: 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
fd80: 69 6e 74 20 61 72 67 76 49 6e 64 65 78 3b 20 20  int argvIndex;  
fd90: 20 20 20 20 20 20 20 2f 2a 20 69 66 20 67 72 65         /* if gre
fda0: 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
fdb0: 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 0d 0a 20  constraint is.. 
fdc0: 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
fdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fde0: 20 20 20 20 20 20 20 20 2a 20 70 61 72 74 20 6f          * part o
fdf0: 66 20 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65  f argv to xFilte
fe00: 72 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  r */..        //
fe10: 2f 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  /      unsigned 
fe20: 63 68 61 72 20 6f 6d 69 74 3b 20 20 20 20 2f 2a  char omit;    /*
fe30: 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20 74   Do not code a t
fe40: 65 73 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20  est for this..  
fe50: 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe70: 20 20 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61         * constra
fe80: 69 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  int */..        
fe90: 2f 2f 2f 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20  ///    } *const 
fea0: 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  aConstraintUsage
feb0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  ;..        ///  
fec0: 20 20 69 6e 74 20 69 64 78 4e 75 6d 3b 20 20 20    int idxNum;   
fed0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
fee0: 6d 62 65 72 20 75 73 65 64 20 74 6f 20 69 64 65  mber used to ide
fef0: 6e 74 69 66 79 20 74 68 65 20 69 6e 64 65 78 20  ntify the index 
ff00: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
ff10: 20 20 20 63 68 61 72 20 2a 69 64 78 53 74 72 3b     char *idxStr;
ff20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
ff30: 74 72 69 6e 67 2c 20 70 6f 73 73 69 62 6c 79 20  tring, possibly 
ff40: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 0d 0a 20  obtained from.. 
ff50: 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
ff60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff70: 20 20 20 20 20 20 20 20 2a 20 73 71 6c 69 74 65          * sqlite
ff80: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0d 0a 20  3_malloc() */.. 
ff90: 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 69 6e         ///    in
ffa0: 74 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53  t needToFreeIdxS
ffb0: 74 72 3b 20 20 20 20 2f 2a 20 46 72 65 65 20 69  tr;    /* Free i
ffc0: 64 78 53 74 72 20 75 73 69 6e 67 20 73 71 6c 69  dxStr using sqli
ffd0: 74 65 33 5f 66 72 65 65 28 29 20 69 66 0d 0a 20  te3_free() if.. 
ffe0: 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10000 20 20 20 20 20 20 20 20 2a 20 74 72 75 65 20 2a          * true *
10010 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  /..        ///  
10020 20 20 69 6e 74 20 6f 72 64 65 72 42 79 43 6f 6e    int orderByCon
10030 73 75 6d 65 64 3b 20 20 20 20 20 2f 2a 20 54 72  sumed;     /* Tr
10040 75 65 20 69 66 20 6f 75 74 70 75 74 20 69 73 20  ue if output is 
10050 61 6c 72 65 61 64 79 20 6f 72 64 65 72 65 64 20  already ordered 
10060 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
10070 20 20 20 64 6f 75 62 6c 65 20 65 73 74 69 6d 61     double estima
10080 74 65 64 43 6f 73 74 3b 20 20 20 20 2f 2a 20 45  tedCost;    /* E
10090 73 74 69 6d 61 74 65 64 20 63 6f 73 74 20 6f 66  stimated cost of
100a0 20 75 73 69 6e 67 20 74 68 69 73 20 69 6e 64 65   using this inde
100b0 78 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  x */..        //
100c0 2f 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 2f  /  };..        /
100d0 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20  // </code>..    
100e0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
100f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 6e 20 61          /// In a
10100 64 64 69 74 69 6f 6e 2c 20 74 68 65 72 65 20 61  ddition, there a
10110 72 65 20 73 6f 6d 65 20 64 65 66 69 6e 65 64 20  re some defined 
10120 63 6f 6e 73 74 61 6e 74 73 3a 0d 0a 20 20 20 20  constants:..    
10130 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
10140 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f  .        /// <co
10150 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
10160 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
10170 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e  _INDEX_CONSTRAIN
10180 54 5f 45 51 20 20 20 20 32 0d 0a 20 20 20 20 20  T_EQ    2..     
10190 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20     ///  #define 
101a0 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e  SQLITE_INDEX_CON
101b0 53 54 52 41 49 4e 54 5f 47 54 20 20 20 20 34 0d  STRAINT_GT    4.
101c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64  .        ///  #d
101d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44  efine SQLITE_IND
101e0 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 4c 45  EX_CONSTRAINT_LE
101f0 20 20 20 20 38 0d 0a 20 20 20 20 20 20 20 20 2f      8..        /
10200 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  //  #define SQLI
10210 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41  TE_INDEX_CONSTRA
10220 49 4e 54 5f 4c 54 20 20 20 20 31 36 0d 0a 20 20  INT_LT    16..  
10230 20 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69        ///  #defi
10240 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f  ne SQLITE_INDEX_
10250 43 4f 4e 53 54 52 41 49 4e 54 5f 47 45 20 20 20  CONSTRAINT_GE   
10260 20 33 32 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   32..        ///
10270 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
10280 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e  _INDEX_CONSTRAIN
10290 54 5f 4d 41 54 43 48 20 36 34 0d 0a 20 20 20 20  T_MATCH 64..    
102a0 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d      /// </code>.
102b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
102c0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
102d0 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   The SQLite core
102e0 20 63 61 6c 6c 73 20 74 68 65 20 78 42 65 73 74   calls the xBest
102f0 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 77 68 65  Index method whe
10300 6e 20 69 74 20 69 73 20 63 6f 6d 70 69 6c 69 6e  n it is compilin
10310 67 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  g a..        ///
10320 20 71 75 65 72 79 20 74 68 61 74 20 69 6e 76 6f   query that invo
10330 6c 76 65 73 20 61 20 76 69 72 74 75 61 6c 20 74  lves a virtual t
10340 61 62 6c 65 2e 20 49 6e 20 6f 74 68 65 72 20 77  able. In other w
10350 6f 72 64 73 2c 20 53 51 4c 69 74 65 20 63 61 6c  ords, SQLite cal
10360 6c 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ls..        /// 
10370 74 68 69 73 20 6d 65 74 68 6f 64 20 77 68 65 6e  this method when
10380 20 69 74 20 69 73 20 72 75 6e 6e 69 6e 67 20 73   it is running s
10390 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
103a0 20 6f 72 20 74 68 65 20 65 71 75 69 76 61 6c 65   or the equivale
103b0 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
103c0 20 42 79 20 63 61 6c 6c 69 6e 67 20 74 68 69 73   By calling this
103d0 20 6d 65 74 68 6f 64 2c 20 74 68 65 20 53 51 4c   method, the SQL
103e0 69 74 65 20 63 6f 72 65 20 69 73 20 73 61 79 69  ite core is sayi
103f0 6e 67 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  ng to the virtua
10400 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  l..        /// t
10410 61 62 6c 65 20 74 68 61 74 20 69 74 20 6e 65 65  able that it nee
10420 64 73 20 74 6f 20 61 63 63 65 73 73 20 73 6f 6d  ds to access som
10430 65 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20  e subset of the 
10440 72 6f 77 73 20 69 6e 20 74 68 65 0d 0a 20 20 20  rows in the..   
10450 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c       /// virtual
10460 20 74 61 62 6c 65 20 61 6e 64 20 69 74 20 77 61   table and it wa
10470 6e 74 73 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20  nts to know the 
10480 6d 6f 73 74 20 65 66 66 69 63 69 65 6e 74 20 77  most efficient w
10490 61 79 20 74 6f 20 64 6f 0d 0a 20 20 20 20 20 20  ay to do..      
104a0 20 20 2f 2f 2f 20 74 68 61 74 20 61 63 63 65 73    /// that acces
104b0 73 2e 20 54 68 65 20 78 42 65 73 74 49 6e 64 65  s. The xBestInde
104c0 78 20 6d 65 74 68 6f 64 20 72 65 70 6c 69 65 73  x method replies
104d0 20 77 69 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f   with informatio
104e0 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20  n that..        
104f0 2f 2f 2f 20 74 68 65 20 53 51 4c 69 74 65 20 63  /// the SQLite c
10500 6f 72 65 20 63 61 6e 20 74 68 65 6e 20 75 73 65  ore can then use
10510 20 74 6f 20 63 6f 6e 64 75 63 74 20 61 6e 20 65   to conduct an e
10520 66 66 69 63 69 65 6e 74 20 73 65 61 72 63 68 20  fficient search 
10530 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
10540 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c  /// virtual tabl
10550 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
10560 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
10570 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
10580 20 20 20 20 20 2f 2f 2f 20 57 68 69 6c 65 20 63       /// While c
10590 6f 6d 70 69 6c 69 6e 67 20 61 20 73 69 6e 67 6c  ompiling a singl
105a0 65 20 53 51 4c 20 71 75 65 72 79 2c 20 74 68 65  e SQL query, the
105b0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6d 69 67   SQLite core mig
105c0 68 74 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20  ht call..       
105d0 20 2f 2f 2f 20 78 42 65 73 74 49 6e 64 65 78 20   /// xBestIndex 
105e0 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 77  multiple times w
105f0 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 73 65  ith different se
10600 74 74 69 6e 67 73 20 69 6e 0d 0a 20 20 20 20 20  ttings in..     
10610 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69     /// sqlite3_i
10620 6e 64 65 78 5f 69 6e 66 6f 2e 20 54 68 65 20 53  ndex_info. The S
10630 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20  QLite core will 
10640 74 68 65 6e 20 73 65 6c 65 63 74 20 74 68 65 0d  then select the.
10650 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d  .        /// com
10660 62 69 6e 61 74 69 6f 6e 20 74 68 61 74 20 61 70  bination that ap
10670 70 65 61 72 73 20 74 6f 20 67 69 76 65 20 74 68  pears to give th
10680 65 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e  e best performan
10690 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
106a0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
106b0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
106c0 20 20 20 20 20 20 2f 2f 2f 20 42 65 66 6f 72 65        /// Before
106d0 20 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65   calling this me
106e0 74 68 6f 64 2c 20 74 68 65 20 53 51 4c 69 74 65  thod, the SQLite
106f0 20 63 6f 72 65 20 69 6e 69 74 69 61 6c 69 7a 65   core initialize
10700 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0d 0a 20  s an instance.. 
10710 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68         /// of th
10720 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
10730 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 77  info structure w
10740 69 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ith information 
10750 61 62 6f 75 74 20 74 68 65 0d 0a 20 20 20 20 20  about the..     
10760 20 20 20 2f 2f 2f 20 71 75 65 72 79 20 74 68 61     /// query tha
10770 74 20 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c  t it is currentl
10780 79 20 74 72 79 69 6e 67 20 74 6f 20 70 72 6f 63  y trying to proc
10790 65 73 73 2e 20 54 68 69 73 20 69 6e 66 6f 72 6d  ess. This inform
107a0 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f  ation..        /
107b0 2f 2f 20 64 65 72 69 76 65 73 20 6d 61 69 6e 6c  // derives mainl
107c0 79 20 66 72 6f 6d 20 74 68 65 20 57 48 45 52 45  y from the WHERE
107d0 20 63 6c 61 75 73 65 20 61 6e 64 20 4f 52 44 45   clause and ORDE
107e0 52 20 42 59 20 6f 72 20 47 52 4f 55 50 20 42 59  R BY or GROUP BY
107f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6c  ..        /// cl
10800 61 75 73 65 73 20 6f 66 20 74 68 65 20 71 75 65  auses of the que
10810 72 79 2c 20 62 75 74 20 61 6c 73 6f 20 66 72 6f  ry, but also fro
10820 6d 20 61 6e 79 20 4f 4e 20 6f 72 20 55 53 49 4e  m any ON or USIN
10830 47 20 63 6c 61 75 73 65 73 20 69 66 20 74 68 65  G clauses if the
10840 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 71 75  ..        /// qu
10850 65 72 79 20 69 73 20 61 20 6a 6f 69 6e 2e 20 54  ery is a join. T
10860 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  he information t
10870 68 61 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  hat the SQLite c
10880 6f 72 65 20 70 72 6f 76 69 64 65 73 20 74 6f 0d  ore provides to.
10890 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
108a0 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68   xBestIndex meth
108b0 6f 64 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68  od is held in th
108c0 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74  e part of the st
108d0 72 75 63 74 75 72 65 20 74 68 61 74 20 69 73 0d  ructure that is.
108e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 61 72  .        /// mar
108f0 6b 65 64 20 61 73 20 22 49 6e 70 75 74 73 22 2e  ked as "Inputs".
10900 20 54 68 65 20 22 4f 75 74 70 75 74 73 22 20 73   The "Outputs" s
10910 65 63 74 69 6f 6e 20 69 73 20 69 6e 69 74 69 61  ection is initia
10920 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 0d 0a  lized to zero...
10930 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
10940 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
10950 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
10960 20 2f 2f 2f 20 54 68 65 20 69 6e 66 6f 72 6d 61   /// The informa
10970 74 69 6f 6e 20 69 6e 20 74 68 65 20 73 71 6c 69  tion in the sqli
10980 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73  te3_index_info s
10990 74 72 75 63 74 75 72 65 20 69 73 20 65 70 68 65  tructure is ephe
109a0 6d 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f  meral..        /
109b0 2f 2f 20 61 6e 64 20 6d 61 79 20 62 65 20 6f 76  // and may be ov
109c0 65 72 77 72 69 74 74 65 6e 20 6f 72 20 64 65 61  erwritten or dea
109d0 6c 6c 6f 63 61 74 65 64 20 61 73 20 73 6f 6f 6e  llocated as soon
109e0 20 61 73 20 74 68 65 20 78 42 65 73 74 49 6e 64   as the xBestInd
109f0 65 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ex..        /// 
10a00 6d 65 74 68 6f 64 20 72 65 74 75 72 6e 73 2e 20  method returns. 
10a10 49 66 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  If the xBestInde
10a20 78 20 6d 65 74 68 6f 64 20 6e 65 65 64 73 20 74  x method needs t
10a30 6f 20 72 65 6d 65 6d 62 65 72 20 61 6e 79 20 70  o remember any p
10a40 61 72 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  art..        ///
10a50 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
10a60 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63  index_info struc
10a70 74 75 72 65 2c 20 69 74 20 73 68 6f 75 6c 64 20  ture, it should 
10a80 6d 61 6b 65 20 61 20 63 6f 70 79 2e 20 43 61 72  make a copy. Car
10a90 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  e..        /// m
10aa0 75 73 74 20 62 65 20 74 61 6b 65 20 74 6f 20 73  ust be take to s
10ab0 74 6f 72 65 20 74 68 65 20 63 6f 70 79 20 69 6e  tore the copy in
10ac0 20 61 20 70 6c 61 63 65 20 77 68 65 72 65 20 69   a place where i
10ad0 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  t will be..     
10ae0 20 20 20 2f 2f 2f 20 64 65 61 6c 6c 6f 63 61 74     /// deallocat
10af0 65 64 2c 20 73 75 63 68 20 61 73 20 69 6e 20 74  ed, such as in t
10b00 68 65 20 69 64 78 53 74 72 20 66 69 65 6c 64 20  he idxStr field 
10b10 77 69 74 68 20 6e 65 65 64 54 6f 46 72 65 65 49  with needToFreeI
10b20 64 78 53 74 72 20 73 65 74 0d 0a 20 20 20 20 20  dxStr set..     
10b30 20 20 20 2f 2f 2f 20 74 6f 20 31 2e 0d 0a 20 20     /// to 1...  
10b40 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
10b50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
10b60 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
10b70 2f 2f 20 4e 6f 74 65 20 74 68 61 74 20 78 42 65  // Note that xBe
10b80 73 74 49 6e 64 65 78 20 77 69 6c 6c 20 61 6c 77  stIndex will alw
10b90 61 79 73 20 62 65 20 63 61 6c 6c 65 64 20 62 65  ays be called be
10ba0 66 6f 72 65 20 78 46 69 6c 74 65 72 2c 20 73 69  fore xFilter, si
10bb0 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nce..        ///
10bc0 20 74 68 65 20 69 64 78 4e 75 6d 20 61 6e 64 20   the idxNum and 
10bd0 69 64 78 53 74 72 20 6f 75 74 70 75 74 73 20 66  idxStr outputs f
10be0 72 6f 6d 20 78 42 65 73 74 49 6e 64 65 78 20 61  rom xBestIndex a
10bf0 72 65 20 72 65 71 75 69 72 65 64 20 69 6e 70 75  re required inpu
10c00 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ts..        /// 
10c10 74 6f 20 78 46 69 6c 74 65 72 2e 20 48 6f 77 65  to xFilter. Howe
10c20 76 65 72 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  ver, there is no
10c30 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20   guarantee that 
10c40 78 46 69 6c 74 65 72 20 77 69 6c 6c 20 62 65 0d  xFilter will be.
10c50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c  .        /// cal
10c60 6c 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  led following a 
10c70 73 75 63 63 65 73 73 66 75 6c 20 78 42 65 73 74  successful xBest
10c80 49 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  Index...        
10c90 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
10ca0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
10cb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
10cc0 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68   xBestIndex meth
10cd0 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66  od is required f
10ce0 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c  or every virtual
10cf0 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
10d00 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  /// implementati
10d10 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
10d20 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
10d30 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
10d40 20 20 20 20 20 20 2f 2f 2f 20 32 2e 33 2e 31 20        /// 2.3.1 
10d50 49 6e 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20  Inputs..        
10d60 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
10d70 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
10d80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
10d90 20 6d 61 69 6e 20 74 68 69 6e 67 20 74 68 61 74   main thing that
10da0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
10db0 20 69 73 20 74 72 79 69 6e 67 20 74 6f 20 63 6f   is trying to co
10dc0 6d 6d 75 6e 69 63 61 74 65 20 74 6f 20 74 68 65  mmunicate to the
10dd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
10de0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 74  rtual table is t
10df0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  he constraints t
10e00 68 61 74 20 61 72 65 20 61 76 61 69 6c 61 62 6c  hat are availabl
10e10 65 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 0d 0a  e to limit the..
10e20 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62          /// numb
10e30 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20  er of rows that 
10e40 6e 65 65 64 20 74 6f 20 62 65 20 73 65 61 72 63  need to be searc
10e50 68 65 64 2e 20 54 68 65 20 61 43 6f 6e 73 74 72  hed. The aConstr
10e60 61 69 6e 74 5b 5d 20 61 72 72 61 79 0d 0a 20 20  aint[] array..  
10e70 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69        /// contai
10e80 6e 73 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72  ns one entry for
10e90 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74   each constraint
10ea0 2e 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  . There will be 
10eb0 65 78 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 20  exactly..       
10ec0 20 2f 2f 2f 20 6e 43 6f 6e 73 74 72 61 69 6e 74   /// nConstraint
10ed0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 61 74   entries in that
10ee0 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 20   array...       
10ef0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
10f00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
10f10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 61  ..        /// Ea
10f20 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 20 77 69  ch constraint wi
10f30 6c 6c 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  ll correspond to
10f40 20 61 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57   a term in the W
10f50 48 45 52 45 20 63 6c 61 75 73 65 20 6f 72 20 69  HERE clause or i
10f60 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  n..        /// a
10f70 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61   USING or ON cla
10f80 75 73 65 20 74 68 61 74 20 69 73 20 6f 66 20 74  use that is of t
10f90 68 65 20 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20  he form..       
10fa0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
10fb0 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e        /// <code>
10fc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
10fd0 20 20 63 6f 6c 75 6d 6e 20 4f 50 20 45 58 50 52    column OP EXPR
10fe0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
10ff0 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
11000 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
11010 20 20 20 2f 2f 2f 20 57 68 65 72 65 20 22 63 6f     /// Where "co
11020 6c 75 6d 6e 22 20 69 73 20 61 20 63 6f 6c 75 6d  lumn" is a colum
11030 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  n in the virtual
11040 20 74 61 62 6c 65 2c 20 4f 50 20 69 73 20 61 6e   table, OP is an
11050 20 6f 70 65 72 61 74 6f 72 0d 0a 20 20 20 20 20   operator..     
11060 20 20 20 2f 2f 2f 20 6c 69 6b 65 20 22 3d 22 20     /// like "=" 
11070 6f 72 20 22 26 6c 74 3b 22 2c 20 61 6e 64 20 45  or "&lt;", and E
11080 58 50 52 20 69 73 20 61 6e 20 61 72 62 69 74 72  XPR is an arbitr
11090 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ary expression. 
110a0 53 6f 2c 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  So, for..       
110b0 20 2f 2f 2f 20 65 78 61 6d 70 6c 65 2c 20 69 66   /// example, if
110c0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
110d0 65 20 63 6f 6e 74 61 69 6e 65 64 20 61 20 74 65  e contained a te
110e0 72 6d 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20  rm like this:.. 
110f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
11100 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
11110 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  <code>..        
11120 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 61 20 3d  ///          a =
11130 20 35 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   5..        /// 
11140 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20  </code>..       
11150 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
11160 20 20 20 20 20 2f 2f 2f 20 54 68 65 6e 20 6f 6e       /// Then on
11170 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
11180 69 6e 74 73 20 77 6f 75 6c 64 20 62 65 20 6f 6e  ints would be on
11190 20 74 68 65 20 22 61 22 20 63 6f 6c 75 6d 6e 20   the "a" column 
111a0 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  with..        //
111b0 2f 20 6f 70 65 72 61 74 6f 72 20 22 3d 22 20 61  / operator "=" a
111c0 6e 64 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  nd an expression
111d0 20 6f 66 20 22 35 22 2e 20 43 6f 6e 73 74 72 61   of "5". Constra
111e0 69 6e 74 73 20 6e 65 65 64 20 6e 6f 74 20 68 61  ints need not ha
111f0 76 65 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ve a..        //
11200 2f 20 6c 69 74 65 72 61 6c 20 72 65 70 72 65 73  / literal repres
11210 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
11220 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20 54 68  WHERE clause. Th
11230 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
11240 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  r..        /// m
11250 69 67 68 74 20 6d 61 6b 65 20 74 72 61 6e 73 66  ight make transf
11260 6f 72 6d 61 74 69 6f 6e 73 20 74 6f 20 74 68 65  ormations to the
11270 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 6e   WHERE clause in
11280 20 6f 72 64 65 72 20 74 6f 20 65 78 74 72 61 63   order to extrac
11290 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  t..        /// a
112a0 73 20 6d 61 6e 79 20 63 6f 6e 73 74 72 61 69 6e  s many constrain
112b0 74 73 20 61 73 20 69 74 20 63 61 6e 2e 20 53 6f  ts as it can. So
112c0 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69  , for example, i
112d0 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  f the WHERE clau
112e0 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  se..        /// 
112f0 63 6f 6e 74 61 69 6e 65 64 20 73 6f 6d 65 74 68  contained someth
11300 69 6e 67 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a  ing like this:..
11310 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
11320 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
11330 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20   <code>..       
11340 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20   ///          x 
11350 42 45 54 57 45 45 4e 20 31 30 20 41 4e 44 20 31  BETWEEN 10 AND 1
11360 30 30 20 41 4e 44 20 39 39 39 26 67 74 3b 79 0d  00 AND 999&gt;y.
11370 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63  .        /// </c
11380 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
11390 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
113a0 20 20 2f 2f 2f 20 54 68 65 20 71 75 65 72 79 20    /// The query 
113b0 6f 70 74 69 6d 69 7a 65 72 20 6d 69 67 68 74 20  optimizer might 
113c0 74 72 61 6e 73 6c 61 74 65 20 74 68 69 73 20 69  translate this i
113d0 6e 74 6f 20 74 68 72 65 65 20 73 65 70 61 72 61  nto three separa
113e0 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  te..        /// 
113f0 63 6f 6e 73 74 72 61 69 6e 74 73 3a 0d 0a 20 20  constraints:..  
11400 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
11410 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
11420 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
11430 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20 26 67  //          x &g
11440 74 3b 3d 20 31 30 0d 0a 20 20 20 20 20 20 20 20  t;= 10..        
11450 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20 26  ///          x &
11460 6c 74 3b 3d 20 31 30 30 0d 0a 20 20 20 20 20 20  lt;= 100..      
11470 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 79    ///          y
11480 20 26 6c 74 3b 20 39 39 39 0d 0a 20 20 20 20 20   &lt; 999..     
11490 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a     /// </code>..
114a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
114b0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
114c0 46 6f 72 20 65 61 63 68 20 63 6f 6e 73 74 72 61  For each constra
114d0 69 6e 74 2c 20 74 68 65 20 61 43 6f 6e 73 74 72  int, the aConstr
114e0 61 69 6e 74 5b 5d 2e 69 43 6f 6c 75 6d 6e 20 66  aint[].iColumn f
114f0 69 65 6c 64 20 69 6e 64 69 63 61 74 65 73 0d 0a  ield indicates..
11500 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68 69 63          /// whic
11510 68 20 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73  h column appears
11520 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e   on the left-han
11530 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f  d side of the co
11540 6e 73 74 72 61 69 6e 74 2e 20 54 68 65 0d 0a 20  nstraint. The.. 
11550 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 72 73 74         /// first
11560 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 76   column of the v
11570 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20  irtual table is 
11580 63 6f 6c 75 6d 6e 20 30 2e 20 54 68 65 20 72 6f  column 0. The ro
11590 77 69 64 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  wid of the..    
115a0 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
115b0 74 61 62 6c 65 20 69 73 20 63 6f 6c 75 6d 6e 20  table is column 
115c0 2d 31 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61  -1. The aConstra
115d0 69 6e 74 5b 5d 2e 6f 70 20 66 69 65 6c 64 20 69  int[].op field i
115e0 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20  ndicates..      
115f0 20 20 2f 2f 2f 20 77 68 69 63 68 20 6f 70 65 72    /// which oper
11600 61 74 6f 72 20 69 73 20 75 73 65 64 2e 20 54 68  ator is used. Th
11610 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43  e SQLITE_INDEX_C
11620 4f 4e 53 54 52 41 49 4e 54 5f 2a 20 63 6f 6e 73  ONSTRAINT_* cons
11630 74 61 6e 74 73 20 6d 61 70 0d 0a 20 20 20 20 20  tants map..     
11640 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 63     /// integer c
11650 6f 6e 73 74 61 6e 74 73 20 69 6e 74 6f 20 6f 70  onstants into op
11660 65 72 61 74 6f 72 20 76 61 6c 75 65 73 2e 20 43  erator values. C
11670 6f 6c 75 6d 6e 73 20 6f 63 63 75 72 20 69 6e 20  olumns occur in 
11680 74 68 65 20 6f 72 64 65 72 0d 0a 20 20 20 20 20  the order..     
11690 20 20 20 2f 2f 2f 20 74 68 65 79 20 77 65 72 65     /// they were
116a0 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20   defined by the 
116b0 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
116c0 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 69  declare_vtab() i
116d0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
116e0 2f 2f 20 78 43 72 65 61 74 65 20 6f 72 20 78 43  // xCreate or xC
116f0 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2e 20 48  onnect method. H
11700 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 61 72  idden columns ar
11710 65 20 63 6f 75 6e 74 65 64 20 77 68 65 6e 0d 0a  e counted when..
11720 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 74 65          /// dete
11730 72 6d 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75  rmining the colu
11740 6d 6e 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20  mn index...     
11750 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
11760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
11770 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
11780 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b  The aConstraint[
11790 5d 20 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 73  ] array contains
117a0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
117b0 75 74 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e  ut all constrain
117c0 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ts..        /// 
117d0 74 68 61 74 20 61 70 70 6c 79 20 74 6f 20 74 68  that apply to th
117e0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
117f0 20 42 75 74 20 73 6f 6d 65 20 6f 66 20 74 68 65   But some of the
11800 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 69 67   constraints mig
11810 68 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ht..        /// 
11820 6e 6f 74 20 62 65 20 75 73 61 62 6c 65 20 62 65  not be usable be
11830 63 61 75 73 65 20 6f 66 20 74 68 65 20 77 61 79  cause of the way
11840 20 74 61 62 6c 65 73 20 61 72 65 20 6f 72 64 65   tables are orde
11850 72 65 64 20 69 6e 20 61 20 6a 6f 69 6e 2e 20 54  red in a join. T
11860 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
11870 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f  xBestIndex metho
11880 64 20 6d 75 73 74 20 74 68 65 72 65 66 6f 72 65  d must therefore
11890 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 20 63   only consider c
118a0 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74 0d  onstraints that.
118b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 76  .        /// hav
118c0 65 20 61 6e 20 61 43 6f 6e 73 74 72 61 69 6e 74  e an aConstraint
118d0 5b 5d 2e 75 73 61 62 6c 65 20 66 6c 61 67 20 77  [].usable flag w
118e0 68 69 63 68 20 69 73 20 74 72 75 65 2e 0d 0a 20  hich is true... 
118f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
11900 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
11910 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
11920 2f 2f 2f 20 49 6e 20 61 64 64 69 74 69 6f 6e 20  /// In addition 
11930 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  to WHERE clause 
11940 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74 68 65  constraints, the
11950 20 53 51 4c 69 74 65 20 63 6f 72 65 20 61 6c 73   SQLite core als
11960 6f 20 74 65 6c 6c 73 0d 0a 20 20 20 20 20 20 20  o tells..       
11970 20 2f 2f 2f 20 74 68 65 20 78 42 65 73 74 49 6e   /// the xBestIn
11980 64 65 78 20 6d 65 74 68 6f 64 20 61 62 6f 75 74  dex method about
11990 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
119a0 61 75 73 65 2e 20 28 49 6e 20 61 6e 20 61 67 67  ause. (In an agg
119b0 72 65 67 61 74 65 0d 0a 20 20 20 20 20 20 20 20  regate..        
119c0 2f 2f 2f 20 71 75 65 72 79 2c 20 74 68 65 20 53  /// query, the S
119d0 51 4c 69 74 65 20 63 6f 72 65 20 6d 69 67 68 74  QLite core might
119e0 20 70 75 74 20 69 6e 20 47 52 4f 55 50 20 42 59   put in GROUP BY
119f0 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74   clause informat
11a00 69 6f 6e 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  ion in..        
11a10 2f 2f 2f 20 70 6c 61 63 65 20 6f 66 20 74 68 65  /// place of the
11a20 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
11a30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 62 75   information, bu
11a40 74 20 74 68 69 73 20 66 61 63 74 20 73 68 6f 75  t this fact shou
11a50 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  ld not..        
11a60 2f 2f 2f 20 6d 61 6b 65 20 61 6e 79 20 64 69 66  /// make any dif
11a70 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 78  ference to the x
11a80 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
11a90 2e 29 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20  .) If all terms 
11aa0 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
11ab0 2f 2f 2f 20 4f 52 44 45 52 20 42 59 20 63 6c 61  /// ORDER BY cla
11ac0 75 73 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20  use are columns 
11ad0 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  in the virtual t
11ae0 61 62 6c 65 2c 20 74 68 65 6e 20 6e 4f 72 64 65  able, then nOrde
11af0 72 42 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rBy..        ///
11b00 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d   will be the num
11b10 62 65 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20  ber of terms in 
11b20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
11b30 75 73 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20  use and the..   
11b40 20 20 20 20 20 2f 2f 2f 20 61 4f 72 64 65 72 42       /// aOrderB
11b50 79 5b 5d 20 61 72 72 61 79 20 77 69 6c 6c 20 69  y[] array will i
11b60 64 65 6e 74 69 66 79 20 74 68 65 20 63 6f 6c 75  dentify the colu
11b70 6d 6e 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  mn for each term
11b80 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20   in the..       
11b90 20 2f 2f 2f 20 6f 72 64 65 72 20 62 79 20 63 6c   /// order by cl
11ba0 61 75 73 65 20 61 6e 64 20 77 68 65 74 68 65 72  ause and whether
11bb0 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 63 6f 6c   or not that col
11bc0 75 6d 6e 20 69 73 20 41 53 43 20 6f 72 20 44 45  umn is ASC or DE
11bd0 53 43 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  SC...        ///
11be0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
11bf0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
11c00 20 20 20 20 20 20 2f 2f 2f 20 32 2e 33 2e 32 20        /// 2.3.2 
11c10 4f 75 74 70 75 74 73 0d 0a 20 20 20 20 20 20 20  Outputs..       
11c20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
11c30 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
11c40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 69  ..        /// Gi
11c50 76 65 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20 69  ven all of the i
11c60 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65  nformation above
11c70 2c 20 74 68 65 20 6a 6f 62 20 6f 66 20 74 68 65  , the job of the
11c80 20 78 42 65 73 74 49 6e 64 65 78 0d 0a 20 20 20   xBestIndex..   
11c90 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20       /// method 
11ca0 69 74 20 74 6f 20 66 69 67 75 72 65 20 6f 75 74  it to figure out
11cb0 20 74 68 65 20 62 65 73 74 20 77 61 79 20 74 6f   the best way to
11cc0 20 73 65 61 72 63 68 20 74 68 65 20 76 69 72 74   search the virt
11cd0 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
11ce0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
11cf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
11d00 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
11d10 20 54 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   The xBestIndex 
11d20 6d 65 74 68 6f 64 20 66 69 6c 6c 73 20 74 68 65  method fills the
11d30 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64 78 53   idxNum and idxS
11d40 74 72 20 66 69 65 6c 64 73 20 77 69 74 68 0d 0a  tr fields with..
11d50 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 66 6f          /// info
11d60 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 63 6f 6d  rmation that com
11d70 6d 75 6e 69 63 61 74 65 73 20 61 6e 20 69 6e 64  municates an ind
11d80 65 78 69 6e 67 20 73 74 72 61 74 65 67 79 20 74  exing strategy t
11d90 6f 20 74 68 65 20 78 46 69 6c 74 65 72 0d 0a 20  o the xFilter.. 
11da0 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
11db0 64 2e 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69  d. The informati
11dc0 6f 6e 20 69 6e 20 69 64 78 4e 75 6d 20 61 6e 64  on in idxNum and
11dd0 20 69 64 78 53 74 72 20 69 73 20 61 72 62 69 74   idxStr is arbit
11de0 72 61 72 79 20 61 73 20 66 61 72 20 61 73 0d 0a  rary as far as..
11df0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
11e00 53 51 4c 69 74 65 20 63 6f 72 65 20 69 73 20 63  SQLite core is c
11e10 6f 6e 63 65 72 6e 65 64 2e 20 54 68 65 20 53 51  oncerned. The SQ
11e20 4c 69 74 65 20 63 6f 72 65 20 6a 75 73 74 20 63  Lite core just c
11e30 6f 70 69 65 73 20 74 68 65 0d 0a 20 20 20 20 20  opies the..     
11e40 20 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61 74 69     /// informati
11e50 6f 6e 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  on through to th
11e60 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
11e70 2e 20 41 6e 79 20 64 65 73 69 72 65 64 20 6d 65  . Any desired me
11e80 61 6e 69 6e 67 20 63 61 6e 0d 0a 20 20 20 20 20  aning can..     
11e90 20 20 20 2f 2f 2f 20 62 65 20 61 73 73 69 67 6e     /// be assign
11ea0 65 64 20 74 6f 20 69 64 78 4e 75 6d 20 61 6e 64  ed to idxNum and
11eb0 20 69 64 78 53 74 72 20 61 73 20 6c 6f 6e 67 20   idxStr as long 
11ec0 61 73 20 78 42 65 73 74 49 6e 64 65 78 20 61 6e  as xBestIndex an
11ed0 64 20 78 46 69 6c 74 65 72 0d 0a 20 20 20 20 20  d xFilter..     
11ee0 20 20 20 2f 2f 2f 20 61 67 72 65 65 20 6f 6e 20     /// agree on 
11ef0 77 68 61 74 20 74 68 61 74 20 6d 65 61 6e 69 6e  what that meanin
11f00 67 20 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  g is...        /
11f10 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
11f20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
11f30 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
11f40 69 64 78 53 74 72 20 76 61 6c 75 65 20 6d 61 79  idxStr value may
11f50 20 62 65 20 61 20 73 74 72 69 6e 67 20 6f 62 74   be a string obt
11f60 61 69 6e 65 64 20 66 72 6f 6d 20 61 6e 20 53 51  ained from an SQ
11f70 4c 69 74 65 20 6d 65 6d 6f 72 79 0d 0a 20 20 20  Lite memory..   
11f80 20 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74       /// allocat
11f90 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 73 75 63  ion function suc
11fa0 68 20 61 73 20 73 71 6c 69 74 65 33 5f 6d 70 72  h as sqlite3_mpr
11fb0 69 6e 74 66 28 29 2e 20 49 66 20 74 68 69 73 20  intf(). If this 
11fc0 69 73 20 74 68 65 20 63 61 73 65 2c 0d 0a 20 20  is the case,..  
11fd0 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 6e 20 74        /// then t
11fe0 68 65 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78  he needToFreeIdx
11ff0 53 74 72 20 66 6c 61 67 20 6d 75 73 74 20 62 65  Str flag must be
12000 20 73 65 74 20 74 6f 20 74 72 75 65 20 73 6f 20   set to true so 
12010 74 68 61 74 20 74 68 65 0d 0a 20 20 20 20 20 20  that the..      
12020 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72    /// SQLite cor
12030 65 20 77 69 6c 6c 20 6b 6e 6f 77 20 74 6f 20 63  e will know to c
12040 61 6c 6c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  all sqlite3_free
12050 28 29 20 6f 6e 20 74 68 61 74 20 73 74 72 69 6e  () on that strin
12060 67 20 77 68 65 6e 20 69 74 0d 0a 20 20 20 20 20  g when it..     
12070 20 20 20 2f 2f 2f 20 68 61 73 20 66 69 6e 69 73     /// has finis
12080 68 65 64 20 77 69 74 68 20 69 74 2c 20 61 6e 64  hed with it, and
12090 20 74 68 75 73 20 61 76 6f 69 64 20 61 20 6d 65   thus avoid a me
120a0 6d 6f 72 79 20 6c 65 61 6b 2e 0d 0a 20 20 20 20  mory leak...    
120b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
120c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
120d0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
120e0 20 49 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   If the virtual 
120f0 74 61 62 6c 65 20 77 69 6c 6c 20 6f 75 74 70 75  table will outpu
12100 74 20 72 6f 77 73 20 69 6e 20 74 68 65 20 6f 72  t rows in the or
12110 64 65 72 20 73 70 65 63 69 66 69 65 64 20 62 79  der specified by
12120 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
12130 2f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  / ORDER BY claus
12140 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  e, then the orde
12150 72 42 79 43 6f 6e 73 75 6d 65 64 20 66 6c 61 67  rByConsumed flag
12160 20 6d 61 79 20 62 65 20 73 65 74 20 74 6f 20 74   may be set to t
12170 72 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rue...        //
12180 2f 20 49 66 20 74 68 65 20 6f 75 74 70 75 74 20  / If the output 
12190 69 73 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63  is not automatic
121a0 61 6c 6c 79 20 69 6e 20 74 68 65 20 63 6f 72 72  ally in the corr
121b0 65 63 74 20 6f 72 64 65 72 20 74 68 65 6e 0d 0a  ect order then..
121c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72 64 65          /// orde
121d0 72 42 79 43 6f 6e 73 75 6d 65 64 20 6d 75 73 74  rByConsumed must
121e0 20 62 65 20 6c 65 66 74 20 69 6e 20 69 74 73 20   be left in its 
121f0 64 65 66 61 75 6c 74 20 66 61 6c 73 65 20 73 65  default false se
12200 74 74 69 6e 67 2e 20 54 68 69 73 0d 0a 20 20 20  tting. This..   
12210 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 69 6e       /// will in
12220 64 69 63 61 74 65 20 74 6f 20 74 68 65 20 53 51  dicate to the SQ
12230 4c 69 74 65 20 63 6f 72 65 20 74 68 61 74 20 69  Lite core that i
12240 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 64  t will need to d
12250 6f 20 61 20 73 65 70 61 72 61 74 65 0d 0a 20 20  o a separate..  
12260 20 20 20 20 20 20 2f 2f 2f 20 73 6f 72 74 69 6e        /// sortin
12270 67 20 70 61 73 73 20 6f 76 65 72 20 74 68 65 20  g pass over the 
12280 64 61 74 61 20 61 66 74 65 72 20 69 74 20 63 6f  data after it co
12290 6d 65 73 20 6f 75 74 20 6f 66 20 74 68 65 20 76  mes out of the v
122a0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
122b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
122c0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
122d0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
122e0 2f 2f 2f 20 54 68 65 20 65 73 74 69 6d 61 74 65  /// The estimate
122f0 64 43 6f 73 74 20 66 69 65 6c 64 20 73 68 6f 75  dCost field shou
12300 6c 64 20 62 65 20 73 65 74 20 74 6f 20 74 68 65  ld be set to the
12310 20 65 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   estimated numbe
12320 72 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  r of..        //
12330 2f 20 64 69 73 6b 20 61 63 63 65 73 73 20 6f 70  / disk access op
12340 65 72 61 74 69 6f 6e 73 20 72 65 71 75 69 72 65  erations require
12350 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 69  d to execute thi
12360 73 20 71 75 65 72 79 20 61 67 61 69 6e 73 74 20  s query against 
12370 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
12380 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
12390 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  The SQLite core 
123a0 77 69 6c 6c 20 6f 66 74 65 6e 20 63 61 6c 6c 20  will often call 
123b0 78 42 65 73 74 49 6e 64 65 78 20 6d 75 6c 74 69  xBestIndex multi
123c0 70 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ple..        ///
123d0 20 74 69 6d 65 73 20 77 69 74 68 20 64 69 66 66   times with diff
123e0 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  erent constraint
123f0 73 2c 20 6f 62 74 61 69 6e 20 6d 75 6c 74 69 70  s, obtain multip
12400 6c 65 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65  le cost estimate
12410 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s,..        /// 
12420 74 68 65 6e 20 63 68 6f 6f 73 65 20 74 68 65 20  then choose the 
12430 71 75 65 72 79 20 70 6c 61 6e 20 74 68 61 74 20  query plan that 
12440 67 69 76 65 73 20 74 68 65 20 6c 6f 77 65 73 74  gives the lowest
12450 20 65 73 74 69 6d 61 74 65 2e 0d 0a 20 20 20 20   estimate...    
12460 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
12470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
12480 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
12490 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74   The aConstraint
124a0 55 73 61 67 65 5b 5d 20 61 72 72 61 79 20 63 6f  Usage[] array co
124b0 6e 74 61 69 6e 73 20 6f 6e 65 20 65 6c 65 6d 65  ntains one eleme
124c0 6e 74 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  nt for each of t
124d0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
124e0 6e 43 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73  nConstraint cons
124f0 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 69  traints in the i
12500 6e 70 75 74 73 20 73 65 63 74 69 6f 6e 20 6f 66  nputs section of
12510 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
12520 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  / sqlite3_index_
12530 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 20  info structure. 
12540 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 55  The aConstraintU
12550 73 61 67 65 5b 5d 20 61 72 72 61 79 20 69 73 20  sage[] array is 
12560 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  used..        //
12570 2f 20 62 79 20 78 42 65 73 74 49 6e 64 65 78 20  / by xBestIndex 
12580 74 6f 20 74 65 6c 6c 20 74 68 65 20 63 6f 72 65  to tell the core
12590 20 68 6f 77 20 69 74 20 69 73 20 75 73 69 6e 67   how it is using
125a0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73   the constraints
125b0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
125c0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
125d0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
125e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65 73      /// The xBes
125f0 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 6d 61  tIndex method ma
12600 79 20 73 65 74 20 61 43 6f 6e 73 74 72 61 69 6e  y set aConstrain
12610 74 55 73 61 67 65 5b 5d 2e 61 72 67 76 49 6e 64  tUsage[].argvInd
12620 65 78 20 65 6e 74 72 69 65 73 0d 0a 20 20 20 20  ex entries..    
12630 20 20 20 20 2f 2f 2f 20 74 6f 20 76 61 6c 75 65      /// to value
12640 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
12650 6e 65 2e 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  ne. Exactly one 
12660 65 6e 74 72 79 20 73 68 6f 75 6c 64 20 62 65 20  entry should be 
12670 73 65 74 20 74 6f 20 31 2c 0d 0a 20 20 20 20 20  set to 1,..     
12680 20 20 20 2f 2f 2f 20 61 6e 6f 74 68 65 72 20 74     /// another t
12690 6f 20 32 2c 20 61 6e 6f 74 68 65 72 20 74 6f 20  o 2, another to 
126a0 33 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20  3, and so forth 
126b0 75 70 20 74 6f 20 61 73 20 6d 61 6e 79 20 6f 72  up to as many or
126c0 20 61 73 20 66 65 77 20 61 73 0d 0a 20 20 20 20   as few as..    
126d0 20 20 20 20 2f 2f 2f 20 74 68 65 20 78 42 65 73      /// the xBes
126e0 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 77 61  tIndex method wa
126f0 6e 74 73 2e 20 54 68 65 20 45 58 50 52 20 6f 66  nts. The EXPR of
12700 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
12710 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
12720 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 6c 6c  constraints will
12730 20 74 68 65 6e 20 62 65 20 70 61 73 73 65 64 20   then be passed 
12740 69 6e 20 61 73 20 74 68 65 20 61 72 67 76 5b 5d  in as the argv[]
12750 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0d 0a   parameters to..
12760 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c          /// xFil
12770 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ter...        //
12780 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
12790 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
127a0 20 20 20 20 20 20 20 2f 2f 2f 20 46 6f 72 20 65         /// For e
127b0 78 61 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 61  xample, if the a
127c0 43 6f 6e 73 74 72 61 69 6e 74 5b 33 5d 2e 61 72  Constraint[3].ar
127d0 67 76 49 6e 64 65 78 20 69 73 20 73 65 74 20 74  gvIndex is set t
127e0 6f 20 31 2c 20 74 68 65 6e 20 77 68 65 6e 0d 0a  o 1, then when..
127f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c          /// xFil
12800 74 65 72 20 69 73 20 63 61 6c 6c 65 64 2c 20 74  ter is called, t
12810 68 65 20 61 72 67 76 5b 30 5d 20 70 61 73 73 65  he argv[0] passe
12820 64 20 74 6f 20 78 46 69 6c 74 65 72 20 77 69 6c  d to xFilter wil
12830 6c 20 68 61 76 65 20 74 68 65 20 45 58 50 52 0d  l have the EXPR.
12840 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c  .        /// val
12850 75 65 20 6f 66 20 74 68 65 20 61 43 6f 6e 73 74  ue of the aConst
12860 72 61 69 6e 74 5b 33 5d 20 63 6f 6e 73 74 72 61  raint[3] constra
12870 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  int...        //
12880 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
12890 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
128a0 20 20 20 20 20 20 20 2f 2f 2f 20 42 79 20 64 65         /// By de
128b0 66 61 75 6c 74 2c 20 74 68 65 20 53 51 4c 69 74  fault, the SQLit
128c0 65 20 63 6f 72 65 20 64 6f 75 62 6c 65 20 63 68  e core double ch
128d0 65 63 6b 73 20 61 6c 6c 20 63 6f 6e 73 74 72 61  ecks all constra
128e0 69 6e 74 73 20 6f 6e 20 65 61 63 68 0d 0a 20 20  ints on each..  
128f0 20 20 20 20 20 20 2f 2f 2f 20 72 6f 77 20 6f 66        /// row of
12900 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
12910 6c 65 20 74 68 61 74 20 69 74 20 72 65 63 65 69  le that it recei
12920 76 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 63  ves. If such a c
12930 68 65 63 6b 20 69 73 0d 0a 20 20 20 20 20 20 20  heck is..       
12940 20 2f 2f 2f 20 72 65 64 75 6e 64 61 6e 74 2c 20   /// redundant, 
12950 74 68 65 20 78 42 65 73 74 46 69 6c 74 65 72 20  the xBestFilter 
12960 6d 65 74 68 6f 64 20 63 61 6e 20 73 75 70 70 72  method can suppr
12970 65 73 73 20 74 68 61 74 20 64 6f 75 62 6c 65 2d  ess that double-
12980 63 68 65 63 6b 20 62 79 0d 0a 20 20 20 20 20 20  check by..      
12990 20 20 2f 2f 2f 20 73 65 74 74 69 6e 67 20 61 43    /// setting aC
129a0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d  onstraintUsage[]
129b0 2e 6f 6d 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  .omit...        
129c0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
129d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
129e0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
129f0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
12a00 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tab">..        /
12a10 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
12a20 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
12a30 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
12a40 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
12a50 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
12a60 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
12a70 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e  <param name="pIn
12a80 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  dex">..        /
12a90 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
12aa0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
12ab0 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20  ite3_index_info 
12ac0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
12ad0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
12ae0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
12af0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
12b00 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
12b10 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
12b20 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
12b30 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
12b40 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
12b50 43 6f 64 65 20 78 42 65 73 74 49 6e 64 65 78 28  Code xBestIndex(
12b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
12b70 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
12b80 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
12b90 70 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20  pIndex..        
12ba0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
12bb0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
12bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
12c00 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
12c10 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
12c20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
12c30 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
12c40 72 65 6c 65 61 73 65 73 20 61 20 63 6f 6e 6e 65  releases a conne
12c50 63 74 69 6f 6e 20 74 6f 20 61 20 76 69 72 74 75  ction to a virtu
12c60 61 6c 20 74 61 62 6c 65 2e 20 4f 6e 6c 79 20 74  al table. Only t
12c70 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
12c80 73 71 6c 69 74 65 33 5f 76 74 61 62 20 6f 62 6a  sqlite3_vtab obj
12c90 65 63 74 20 69 73 20 64 65 73 74 72 6f 79 65 64  ect is destroyed
12ca0 2e 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61  . The virtual ta
12cb0 62 6c 65 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20  ble is not..    
12cc0 20 20 20 20 2f 2f 2f 20 64 65 73 74 72 6f 79 65      /// destroye
12cd0 64 20 61 6e 64 20 61 6e 79 20 62 61 63 6b 69 6e  d and any backin
12ce0 67 20 73 74 6f 72 65 20 61 73 73 6f 63 69 61 74  g store associat
12cf0 65 64 20 77 69 74 68 20 74 68 65 20 76 69 72 74  ed with the virt
12d00 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ual table..     
12d10 20 20 20 2f 2f 2f 20 70 65 72 73 69 73 74 73 2e     /// persists.
12d20 20 54 68 69 73 20 6d 65 74 68 6f 64 20 75 6e 64   This method und
12d30 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20  oes the work of 
12d40 78 43 6f 6e 6e 65 63 74 2e 0d 0a 20 20 20 20 20  xConnect...     
12d50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
12d60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
12d70 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
12d80 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 61  This method is a
12d90 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20   destructor for 
12da0 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  a connection to 
12db0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
12dc0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
12dd0 43 6f 6e 74 72 61 73 74 20 74 68 69 73 20 6d 65  Contrast this me
12de0 74 68 6f 64 20 77 69 74 68 20 78 44 65 73 74 72  thod with xDestr
12df0 6f 79 2e 20 54 68 65 20 78 44 65 73 74 72 6f 79  oy. The xDestroy
12e00 20 69 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   is a destructor
12e10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f  ..        /// fo
12e20 72 20 74 68 65 20 65 6e 74 69 72 65 20 76 69 72  r the entire vir
12e30 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
12e40 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
12e50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
12e60 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
12e70 2f 20 54 68 65 20 78 44 69 73 63 6f 6e 6e 65 63  / The xDisconnec
12e80 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  t method is requ
12e90 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
12ea0 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
12eb0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
12ec0 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75 67 68  entation, though
12ed0 20 69 74 20 69 73 20 61 63 63 65 70 74 61 62 6c   it is acceptabl
12ee0 65 20 66 6f 72 20 74 68 65 20 78 44 69 73 63 6f  e for the xDisco
12ef0 6e 6e 65 63 74 20 61 6e 64 0d 0a 20 20 20 20 20  nnect and..     
12f00 20 20 20 2f 2f 2f 20 78 44 65 73 74 72 6f 79 20     /// xDestroy 
12f10 6d 65 74 68 6f 64 73 20 74 6f 20 62 65 20 74 68  methods to be th
12f20 65 20 73 61 6d 65 20 66 75 6e 63 74 69 6f 6e 20  e same function 
12f30 69 66 20 74 68 61 74 20 6d 61 6b 65 73 20 73 65  if that makes se
12f40 6e 73 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  nse for..       
12f50 20 2f 2f 2f 20 74 68 65 20 70 61 72 74 69 63 75   /// the particu
12f60 6c 61 72 20 76 69 72 74 75 61 6c 20 74 61 62 6c  lar virtual tabl
12f70 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
12f80 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
12f90 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
12fa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
12fb0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
12fc0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
12fd0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
12fe0 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
12ff0 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
13000 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
13010 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
13020 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
13030 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
13040 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
13050 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
13060 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
13070 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
13080 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
13090 64 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d  de xDisconnect(.
130a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
130b0 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
130c0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
130d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
130e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
130f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
13120 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
13130 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
13140 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
13150 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
13160 6f 64 20 72 65 6c 65 61 73 65 73 20 61 20 63 6f  od releases a co
13170 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 76 69  nnection to a vi
13180 72 74 75 61 6c 20 74 61 62 6c 65 2c 20 6a 75 73  rtual table, jus
13190 74 20 6c 69 6b 65 20 74 68 65 0d 0a 20 20 20 20  t like the..    
131a0 20 20 20 20 2f 2f 2f 20 78 44 69 73 63 6f 6e 6e      /// xDisconn
131b0 65 63 74 20 6d 65 74 68 6f 64 2c 20 61 6e 64 20  ect method, and 
131c0 69 74 20 61 6c 73 6f 20 64 65 73 74 72 6f 79 73  it also destroys
131d0 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
131e0 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
131f0 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
13200 6e 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20 75  n. This method u
13210 6e 64 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f  ndoes the work o
13220 66 20 78 43 72 65 61 74 65 2e 0d 0a 20 20 20 20  f xCreate...    
13230 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
13240 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
13250 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
13260 20 54 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74   The xDisconnect
13270 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
13280 64 20 77 68 65 6e 65 76 65 72 20 61 20 64 61 74  d whenever a dat
13290 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
132a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
132b0 61 74 20 75 73 65 73 20 61 20 76 69 72 74 75 61  at uses a virtua
132c0 6c 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65  l table is close
132d0 64 2e 20 54 68 65 20 78 44 65 73 74 72 6f 79 20  d. The xDestroy 
132e0 6d 65 74 68 6f 64 20 69 73 20 6f 6e 6c 79 0d 0a  method is only..
132f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c          /// call
13300 65 64 20 77 68 65 6e 20 61 20 44 52 4f 50 20 54  ed when a DROP T
13310 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
13320 73 20 65 78 65 63 75 74 65 64 20 61 67 61 69 6e  s executed again
13330 73 74 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a  st the virtual..
13340 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c          /// tabl
13350 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
13360 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
13370 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
13380 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 44 65       /// The xDe
13390 73 74 72 6f 79 20 6d 65 74 68 6f 64 20 69 73 20  stroy method is 
133a0 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76 65  required for eve
133b0 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ry virtual table
133c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d  ..        /// im
133d0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68  plementation, th
133e0 6f 75 67 68 20 69 74 20 69 73 20 61 63 63 65 70  ough it is accep
133f0 74 61 62 6c 65 20 66 6f 72 20 74 68 65 20 78 44  table for the xD
13400 69 73 63 6f 6e 6e 65 63 74 20 61 6e 64 0d 0a 20  isconnect and.. 
13410 20 20 20 20 20 20 20 2f 2f 2f 20 78 44 65 73 74         /// xDest
13420 72 6f 79 20 6d 65 74 68 6f 64 73 20 74 6f 20 62  roy methods to b
13430 65 20 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74  e the same funct
13440 69 6f 6e 20 69 66 20 74 68 61 74 20 6d 61 6b 65  ion if that make
13450 73 20 73 65 6e 73 65 20 66 6f 72 0d 0a 20 20 20  s sense for..   
13460 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 70 61 72       /// the par
13470 74 69 63 75 6c 61 72 20 76 69 72 74 75 61 6c 20  ticular virtual 
13480 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
13490 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
134a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
134b0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
134c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
134d0 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tab">..        /
134e0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
134f0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
13500 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
13510 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
13520 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
13530 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
13540 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
13550 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
13560 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
13570 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
13580 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
13590 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
135a0 6f 72 43 6f 64 65 20 78 44 65 73 74 72 6f 79 28  orCode xDestroy(
135b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
135c0 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
135d0 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
135e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
135f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
13630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
13640 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
13650 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
13660 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4f 70 65      /// The xOpe
13670 6e 20 6d 65 74 68 6f 64 20 63 72 65 61 74 65 73  n method creates
13680 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 75 73   a new cursor us
13690 65 64 20 66 6f 72 20 61 63 63 65 73 73 69 6e 67  ed for accessing
136a0 20 28 72 65 61 64 0d 0a 20 20 20 20 20 20 20 20   (read..        
136b0 2f 2f 2f 20 61 6e 64 2f 6f 72 20 77 72 69 74 69  /// and/or writi
136c0 6e 67 29 20 61 20 76 69 72 74 75 61 6c 20 74 61  ng) a virtual ta
136d0 62 6c 65 2e 20 41 20 73 75 63 63 65 73 73 66 75  ble. A successfu
136e0 6c 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  l invocation of 
136f0 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  this..        //
13700 2f 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 61 6c  / method will al
13710 6c 6f 63 61 74 65 20 74 68 65 20 6d 65 6d 6f 72  locate the memor
13720 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  y for the sqlite
13730 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 28 6f  3_vtab_cursor (o
13740 72 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r a..        ///
13750 20 73 75 62 63 6c 61 73 73 29 2c 20 69 6e 69 74   subclass), init
13760 69 61 6c 69 7a 65 20 74 68 65 20 6e 65 77 20 6f  ialize the new o
13770 62 6a 65 63 74 2c 20 61 6e 64 20 6d 61 6b 65 20  bject, and make 
13780 2a 70 70 43 75 72 73 6f 72 20 70 6f 69 6e 74 20  *ppCursor point 
13790 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
137a0 74 68 65 20 6e 65 77 20 6f 62 6a 65 63 74 2e 20  the new object. 
137b0 54 68 65 20 73 75 63 63 65 73 73 66 75 6c 20 63  The successful c
137c0 61 6c 6c 20 74 68 65 6e 20 72 65 74 75 72 6e 73  all then returns
137d0 20 53 51 4c 49 54 45 5f 4f 4b 2e 0d 0a 20 20 20   SQLITE_OK...   
137e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
137f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
13800 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13810 2f 20 46 6f 72 20 65 76 65 72 79 20 73 75 63 63  / For every succ
13820 65 73 73 66 75 6c 20 63 61 6c 6c 20 74 6f 20 74  essful call to t
13830 68 69 73 20 6d 65 74 68 6f 64 2c 20 74 68 65 20  his method, the 
13840 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c  SQLite core will
13850 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61  ..        /// la
13860 74 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78  ter invoke the x
13870 43 6c 6f 73 65 20 6d 65 74 68 6f 64 20 74 6f 20  Close method to 
13880 64 65 73 74 72 6f 79 20 74 68 65 20 61 6c 6c 6f  destroy the allo
13890 63 61 74 65 64 20 63 75 72 73 6f 72 2e 0d 0a 20  cated cursor... 
138a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
138b0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
138c0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
138d0 2f 2f 2f 20 54 68 65 20 78 4f 70 65 6e 20 6d 65  /// The xOpen me
138e0 74 68 6f 64 20 6e 65 65 64 20 6e 6f 74 20 69 6e  thod need not in
138f0 69 74 69 61 6c 69 7a 65 20 74 68 65 20 70 56 74  itialize the pVt
13900 61 62 20 66 69 65 6c 64 20 6f 66 20 74 68 65 0d  ab field of the.
13910 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
13920 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
13930 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 20   structure. The 
13940 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c  SQLite core will
13950 20 74 61 6b 65 20 63 61 72 65 20 6f 66 0d 0a 20   take care of.. 
13960 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20         /// that 
13970 63 68 6f 72 65 20 61 75 74 6f 6d 61 74 69 63 61  chore automatica
13980 6c 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lly...        //
13990 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
139a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
139b0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 76 69 72         /// A vir
139c0 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
139d0 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 62  mentation must b
139e0 65 20 61 62 6c 65 20 74 6f 20 73 75 70 70 6f 72  e able to suppor
139f0 74 20 61 6e 20 61 72 62 69 74 72 61 72 79 0d 0a  t an arbitrary..
13a00 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62          /// numb
13a10 65 72 20 6f 66 20 73 69 6d 75 6c 74 61 6e 65 6f  er of simultaneo
13a20 75 73 6c 79 20 6f 70 65 6e 20 63 75 72 73 6f 72  usly open cursor
13a30 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
13a40 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
13a50 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
13a60 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 69 6e       /// When in
13a70 69 74 69 61 6c 6c 79 20 6f 70 65 6e 65 64 2c 20  itially opened, 
13a80 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
13a90 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74   an undefined st
13aa0 61 74 65 2e 20 54 68 65 0d 0a 20 20 20 20 20 20  ate. The..      
13ab0 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72    /// SQLite cor
13ac0 65 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68  e will invoke th
13ad0 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
13ae0 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 70   on the cursor p
13af0 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 20  rior to..       
13b00 20 2f 2f 2f 20 61 6e 79 20 61 74 74 65 6d 70 74   /// any attempt
13b10 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 6f 72 20   to position or 
13b20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 63 75  read from the cu
13b30 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rsor...        /
13b40 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
13b50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
13b60 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
13b70 78 4f 70 65 6e 20 6d 65 74 68 6f 64 20 69 73 20  xOpen method is 
13b80 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76 65  required for eve
13b90 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ry virtual table
13ba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d  ..        /// im
13bb0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20  plementation... 
13bc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
13bd0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
13be0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
13bf0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13c00 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
13c10 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
13c20 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
13c30 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
13c40 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
13c50 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
13c60 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
13c70 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
13c80 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
13c90 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
13ca0 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
13cb0 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
13cc0 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e  modified to poin
13cd0 74 20 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a  t to the newly..
13ce0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61          /// crea
13cf0 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74  ted native sqlit
13d00 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
13d10 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
13d20 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
13d30 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
13d40 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
13d50 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
13d60 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
13d70 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
13d80 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
13d90 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
13da0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4f 70 65  teErrorCode xOpe
13db0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
13dc0 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
13dd0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
13de0 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
13df0 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
13e00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
13e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
13e60 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
13e70 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
13e80 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
13e90 43 6c 6f 73 65 20 6d 65 74 68 6f 64 20 63 6c 6f  Close method clo
13ea0 73 65 73 20 61 20 63 75 72 73 6f 72 20 70 72 65  ses a cursor pre
13eb0 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 62  viously opened b
13ec0 79 20 78 4f 70 65 6e 2e 20 54 68 65 0d 0a 20 20  y xOpen. The..  
13ed0 20 20 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65        /// SQLite
13ee0 20 63 6f 72 65 20 77 69 6c 6c 20 61 6c 77 61 79   core will alway
13ef0 73 20 63 61 6c 6c 20 78 43 6c 6f 73 65 20 6f 6e  s call xClose on
13f00 63 65 20 66 6f 72 20 65 61 63 68 20 63 75 72 73  ce for each curs
13f10 6f 72 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20  or opened..     
13f20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20 78 4f 70     /// using xOp
13f30 65 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  en...        ///
13f40 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
13f50 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
13f60 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
13f70 65 74 68 6f 64 20 6d 75 73 74 20 72 65 6c 65 61  ethod must relea
13f80 73 65 20 61 6c 6c 20 72 65 73 6f 75 72 63 65 73  se all resources
13f90 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 68   allocated by th
13fa0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
13fb0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 4f 70  orresponding xOp
13fc0 65 6e 20 63 61 6c 6c 2e 20 54 68 65 20 72 6f 75  en call. The rou
13fd0 74 69 6e 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  tine will not be
13fe0 20 63 61 6c 6c 65 64 20 61 67 61 69 6e 20 65 76   called again ev
13ff0 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  en..        /// 
14000 69 66 20 69 74 20 72 65 74 75 72 6e 73 20 61 6e  if it returns an
14010 20 65 72 72 6f 72 2e 20 54 68 65 20 53 51 4c 69   error. The SQLi
14020 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 6e 6f 74  te core will not
14030 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20   use the..      
14040 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74    /// sqlite3_vt
14050 61 62 5f 63 75 72 73 6f 72 20 61 67 61 69 6e 20  ab_cursor again 
14060 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
14070 6e 20 63 6c 6f 73 65 64 2e 0d 0a 20 20 20 20 20  n closed...     
14080 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
14090 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
140a0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
140b0 54 68 65 20 78 43 6c 6f 73 65 20 6d 65 74 68 6f  The xClose metho
140c0 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  d is required fo
140d0 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20  r every virtual 
140e0 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
140f0 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
14100 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
14110 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
14120 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
14130 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
14140 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
14150 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
14160 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
14170 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
14180 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
14190 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
141a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
141b0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
141c0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
141d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
141e0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
141f0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
14200 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
14210 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
14220 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6c 6f  teErrorCode xClo
14230 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
14240 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
14250 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
14260 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
14270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
142a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
142b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
142c0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
142d0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
142e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
142f0 73 20 6d 65 74 68 6f 64 20 62 65 67 69 6e 73 20  s method begins 
14300 61 20 73 65 61 72 63 68 20 6f 66 20 61 20 76 69  a search of a vi
14310 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 65  rtual table. The
14320 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 0d   first argument.
14330 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 73 20  .        /// is 
14340 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
14350 62 79 20 78 4f 70 65 6e 2e 20 54 68 65 20 6e 65  by xOpen. The ne
14360 78 74 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 20  xt two argument 
14370 64 65 66 69 6e 65 20 61 0d 0a 20 20 20 20 20 20  define a..      
14380 20 20 2f 2f 2f 20 70 61 72 74 69 63 75 6c 61 72    /// particular
14390 20 73 65 61 72 63 68 20 69 6e 64 65 78 20 70 72   search index pr
143a0 65 76 69 6f 75 73 6c 79 20 63 68 6f 73 65 6e 20  eviously chosen 
143b0 62 79 20 78 42 65 73 74 49 6e 64 65 78 2e 20 54  by xBestIndex. T
143c0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
143d0 73 70 65 63 69 66 69 63 20 6d 65 61 6e 69 6e 67  specific meaning
143e0 73 20 6f 66 20 69 64 78 4e 75 6d 20 61 6e 64 20  s of idxNum and 
143f0 69 64 78 53 74 72 20 61 72 65 20 75 6e 69 6d 70  idxStr are unimp
14400 6f 72 74 61 6e 74 20 61 73 20 6c 6f 6e 67 20 61  ortant as long a
14410 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  s..        /// x
14420 46 69 6c 74 65 72 20 61 6e 64 20 78 42 65 73 74  Filter and xBest
14430 49 6e 64 65 78 20 61 67 72 65 65 20 6f 6e 20 77  Index agree on w
14440 68 61 74 20 74 68 61 74 20 6d 65 61 6e 69 6e 67  hat that meaning
14450 20 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f   is...        //
14460 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
14470 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
14480 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
14490 42 65 73 74 49 6e 64 65 78 20 66 75 6e 63 74 69  BestIndex functi
144a0 6f 6e 20 6d 61 79 20 68 61 76 65 20 72 65 71 75  on may have requ
144b0 65 73 74 65 64 20 74 68 65 20 76 61 6c 75 65 73  ested the values
144c0 20 6f 66 20 63 65 72 74 61 69 6e 0d 0a 20 20 20   of certain..   
144d0 20 20 20 20 20 2f 2f 2f 20 65 78 70 72 65 73 73       /// express
144e0 69 6f 6e 73 20 75 73 69 6e 67 20 74 68 65 20 61  ions using the a
144f0 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b  ConstraintUsage[
14500 5d 2e 61 72 67 76 49 6e 64 65 78 20 76 61 6c 75  ].argvIndex valu
14510 65 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  es of the..     
14520 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69     /// sqlite3_i
14530 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74  ndex_info struct
14540 75 72 65 2e 20 54 68 6f 73 65 20 76 61 6c 75 65  ure. Those value
14550 73 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 20  s are passed to 
14560 78 46 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20  xFilter..       
14570 20 2f 2f 2f 20 75 73 69 6e 67 20 74 68 65 20 61   /// using the a
14580 72 67 63 20 61 6e 64 20 61 72 67 76 20 70 61 72  rgc and argv par
14590 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20 20 20 20  ameters...      
145a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
145b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
145c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  >..        /// I
145d0 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
145e0 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ble contains one
145f0 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 74 68   or more rows th
14600 61 74 20 6d 61 74 63 68 20 74 68 65 0d 0a 20 20  at match the..  
14610 20 20 20 20 20 20 2f 2f 2f 20 73 65 61 72 63 68        /// search
14620 20 63 72 69 74 65 72 69 61 2c 20 74 68 65 6e 20   criteria, then 
14630 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20  the cursor must 
14640 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 20 61 74  be left point at
14650 20 74 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20   the first..    
14660 20 20 20 20 2f 2f 2f 20 72 6f 77 2e 20 53 75 62      /// row. Sub
14670 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
14680 20 78 45 6f 66 20 6d 75 73 74 20 72 65 74 75 72   xEof must retur
14690 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f 29 2e 20  n false (zero). 
146a0 49 66 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20  If there..      
146b0 20 20 2f 2f 2f 20 61 72 65 20 6e 6f 20 72 6f 77    /// are no row
146c0 73 20 6d 61 74 63 68 2c 20 74 68 65 6e 20 74 68  s match, then th
146d0 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  e cursor must be
146e0 20 6c 65 66 74 20 69 6e 20 61 20 73 74 61 74 65   left in a state
146f0 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f   that..        /
14700 2f 2f 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68  // will cause th
14710 65 20 78 45 6f 66 20 74 6f 20 72 65 74 75 72 6e  e xEof to return
14720 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29   true (non-zero)
14730 2e 20 54 68 65 20 53 51 4c 69 74 65 20 65 6e 67  . The SQLite eng
14740 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ine..        ///
14750 20 77 69 6c 6c 20 75 73 65 20 74 68 65 20 78 43   will use the xC
14760 6f 6c 75 6d 6e 20 61 6e 64 20 78 52 6f 77 69 64  olumn and xRowid
14770 20 6d 65 74 68 6f 64 73 20 74 6f 20 61 63 63 65   methods to acce
14780 73 73 20 74 68 61 74 20 72 6f 77 20 63 6f 6e 74  ss that row cont
14790 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ent...        //
147a0 2f 20 54 68 65 20 78 4e 65 78 74 20 6d 65 74 68  / The xNext meth
147b0 6f 64 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  od will be used 
147c0 74 6f 20 61 64 76 61 6e 63 65 20 74 6f 20 74 68  to advance to th
147d0 65 20 6e 65 78 74 20 72 6f 77 2e 0d 0a 20 20 20  e next row...   
147e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
147f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
14800 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
14810 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 6d 75  / This method mu
14820 73 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  st return SQLITE
14830 5f 4f 4b 20 69 66 20 73 75 63 63 65 73 73 66 75  _OK if successfu
14840 6c 2c 20 6f 72 20 61 6e 20 73 71 6c 69 74 65 20  l, or an sqlite 
14850 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  error..        /
14860 2f 2f 20 63 6f 64 65 20 69 66 20 61 6e 20 65 72  // code if an er
14870 72 6f 72 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20  ror occurs...   
14880 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
14890 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
148a0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
148b0 2f 20 54 68 65 20 78 46 69 6c 74 65 72 20 6d 65  / The xFilter me
148c0 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
148d0 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
148e0 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
148f0 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
14900 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
14910 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
14920 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
14930 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
14940 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75  <param name="pCu
14950 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rsor">..        
14960 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
14970 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
14980 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
14990 72 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  r derived struct
149a0 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
149b0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
149c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
149d0 61 6d 65 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20  ame="idxNum">.. 
149e0 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65         /// Numbe
149f0 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  r used to help i
14a00 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
14a10 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20  cted index...   
14a20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
14a30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
14a40 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78 53  param name="idxS
14a50 74 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tr">..        //
14a60 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
14a70 6e 74 65 72 20 74 6f 20 74 68 65 20 55 54 46 2d  nter to the UTF-
14a80 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67  8 encoded string
14a90 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d   containing the.
14aa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72  .        /// str
14ab0 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ing used to help
14ac0 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
14ad0 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20  lected index... 
14ae0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
14af0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
14b00 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
14b10 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gc">..        //
14b20 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
14b30 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20  native pointers 
14b40 74 6f 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  to sqlite3_value
14b50 20 73 74 72 75 63 74 75 72 65 73 20 73 70 65 63   structures spec
14b60 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  ified..        /
14b70 2f 2f 20 69 6e 20 3c 70 61 72 61 6d 72 65 66 20  // in <paramref 
14b80 6e 61 6d 65 3d 22 61 72 67 76 22 20 2f 3e 2e 0d  name="argv" />..
14b90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
14ba0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
14bb0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
14bc0 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20  argv">..        
14bd0 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20  /// An array of 
14be0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20  native pointers 
14bf0 74 6f 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  to sqlite3_value
14c00 20 73 74 72 75 63 74 75 72 65 73 20 63 6f 6e 74   structures cont
14c10 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  aining..        
14c20 2f 2f 2f 20 66 69 6c 74 65 72 69 6e 67 20 63 72  /// filtering cr
14c30 69 74 65 72 69 61 20 66 6f 72 20 74 68 65 20 73  iteria for the s
14c40 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a  elected index...
14c50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
14c60 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
14c70 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
14c80 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
14c90 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
14ca0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
14cb0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
14cc0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
14cd0 72 72 6f 72 43 6f 64 65 20 78 46 69 6c 74 65 72  rrorCode xFilter
14ce0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
14cf0 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a  ntPtr pCursor,..
14d00 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
14d10 69 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20 20  idxNum,..       
14d20 20 20 20 20 20 49 6e 74 50 74 72 20 69 64 78 53       IntPtr idxS
14d30 74 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr,..           
14d40 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20   int argc,..    
14d50 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61          IntPtr a
14d60 72 67 76 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rgv..           
14d70 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
14d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14dc0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
14dd0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
14de0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
14df0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
14e00 20 54 68 65 20 78 4e 65 78 74 20 6d 65 74 68 6f   The xNext metho
14e10 64 20 61 64 76 61 6e 63 65 73 20 61 20 76 69 72  d advances a vir
14e20 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
14e30 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  r to the next ro
14e40 77 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  w of..        //
14e50 2f 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 69  / a result set i
14e60 6e 69 74 69 61 74 65 64 20 62 79 20 78 46 69 6c  nitiated by xFil
14e70 74 65 72 2e 20 49 66 20 74 68 65 20 63 75 72 73  ter. If the curs
14e80 6f 72 20 69 73 20 61 6c 72 65 61 64 79 0d 0a 20  or is already.. 
14e90 20 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74         /// point
14ea0 69 6e 67 20 61 74 20 74 68 65 20 6c 61 73 74 20  ing at the last 
14eb0 72 6f 77 20 77 68 65 6e 20 74 68 69 73 20 72 6f  row when this ro
14ec0 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2c  utine is called,
14ed0 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 20   then the..     
14ee0 20 20 20 2f 2f 2f 20 63 75 72 73 6f 72 20 6e 6f     /// cursor no
14ef0 20 6c 6f 6e 67 65 72 20 70 6f 69 6e 74 73 20 74   longer points t
14f00 6f 20 76 61 6c 69 64 20 64 61 74 61 20 61 6e 64  o valid data and
14f10 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 63 61   a subsequent ca
14f20 6c 6c 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ll to the..     
14f30 20 20 20 2f 2f 2f 20 78 45 6f 66 20 6d 65 74 68     /// xEof meth
14f40 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74  od must return t
14f50 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 2e 20  rue (non-zero). 
14f60 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
14f70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
14f80 63 63 65 73 73 66 75 6c 6c 79 20 61 64 76 61 6e  ccessfully advan
14f90 63 65 64 20 74 6f 20 61 6e 6f 74 68 65 72 20 72  ced to another r
14fa0 6f 77 20 6f 66 20 63 6f 6e 74 65 6e 74 2c 20 74  ow of content, t
14fb0 68 65 6e 20 73 75 62 73 65 71 75 65 6e 74 0d 0a  hen subsequent..
14fc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c          /// call
14fd0 73 20 74 6f 20 78 45 6f 66 20 6d 75 73 74 20 72  s to xEof must r
14fe0 65 74 75 72 6e 20 66 61 6c 73 65 20 28 7a 65 72  eturn false (zer
14ff0 6f 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  o)...        ///
15000 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
15010 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
15020 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
15030 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72  ethod must retur
15040 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 73  n SQLITE_OK if s
15050 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 61 6e  uccessful, or an
15060 20 73 71 6c 69 74 65 20 65 72 72 6f 72 0d 0a 20   sqlite error.. 
15070 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 64 65 20         /// code 
15080 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
15090 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rs...        ///
150a0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
150b0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
150c0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4e        /// The xN
150d0 65 78 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65  ext method is re
150e0 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
150f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
15100 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
15110 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
15120 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
15130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15140 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
15150 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
15160 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20  e="pCursor">..  
15170 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
15180 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
15190 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
151a0 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20  _cursor derived 
151b0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
151c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
151d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
151e0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
151f0 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
15200 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
15210 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
15220 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
15230 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
15240 43 6f 64 65 20 78 4e 65 78 74 28 0d 0a 20 20 20  Code xNext(..   
15250 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
15260 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
15270 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
15280 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
15290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
152d0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
152e0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
152f0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
15300 20 2f 2f 2f 20 54 68 65 20 78 45 6f 66 20 6d 65   /// The xEof me
15310 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e  thod must return
15320 20 66 61 6c 73 65 20 28 7a 65 72 6f 29 20 69 66   false (zero) if
15330 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
15340 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  ursor..        /
15350 2f 2f 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  // currently poi
15360 6e 74 73 20 74 6f 20 61 20 76 61 6c 69 64 20 72  nts to a valid r
15370 6f 77 20 6f 66 20 64 61 74 61 2c 20 6f 72 20 74  ow of data, or t
15380 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 0d 0a  rue (non-zero)..
15390 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 74 68 65          /// othe
153a0 72 77 69 73 65 2e 20 54 68 69 73 20 6d 65 74 68  rwise. This meth
153b0 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 62 79 20  od is called by 
153c0 74 68 65 20 53 51 4c 20 65 6e 67 69 6e 65 20 69  the SQL engine i
153d0 6d 6d 65 64 69 61 74 65 6c 79 0d 0a 20 20 20 20  mmediately..    
153e0 20 20 20 20 2f 2f 2f 20 61 66 74 65 72 20 65 61      /// after ea
153f0 63 68 20 78 46 69 6c 74 65 72 20 61 6e 64 20 78  ch xFilter and x
15400 4e 65 78 74 20 69 6e 76 6f 63 61 74 69 6f 6e 2e  Next invocation.
15410 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15420 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15430 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
15440 20 20 20 2f 2f 2f 20 54 68 65 20 78 45 6f 66 20     /// The xEof 
15450 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72  method is requir
15460 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72  ed for every vir
15470 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
15480 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
15490 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
154a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
154b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
154c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
154d0 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
154e0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
154f0 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
15500 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  he sqlite3_vtab_
15510 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73  cursor derived s
15520 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
15530 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
15540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
15550 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
15560 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
15570 6e 6f 20 6d 6f 72 65 20 72 6f 77 73 20 61 72 65  no more rows are
15580 20 61 76 61 69 6c 61 62 6c 65 3b 20 7a 65 72 6f   available; zero
15590 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20   otherwise...   
155a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
155b0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ns>..        int
155c0 20 78 45 6f 66 28 0d 0a 20 20 20 20 20 20 20 20   xEof(..        
155d0 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73      IntPtr pCurs
155e0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
155f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
15600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15640 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
15650 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
15660 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
15670 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
15680 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  The SQLite core 
15690 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6d 65 74  invokes this met
156a0 68 6f 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  hod in order to 
156b0 66 69 6e 64 20 74 68 65 20 76 61 6c 75 65 20 66  find the value f
156c0 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
156d0 74 68 65 20 4e 2d 74 68 20 63 6f 6c 75 6d 6e 20  the N-th column 
156e0 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
156f0 6f 77 2e 20 4e 20 69 73 20 7a 65 72 6f 2d 62 61  ow. N is zero-ba
15700 73 65 64 20 73 6f 20 74 68 65 20 66 69 72 73 74  sed so the first
15710 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
15720 6c 75 6d 6e 20 69 73 20 6e 75 6d 62 65 72 65 64  lumn is numbered
15730 20 30 2e 20 54 68 65 20 78 43 6f 6c 75 6d 6e 20   0. The xColumn 
15740 6d 65 74 68 6f 64 20 6d 61 79 20 72 65 74 75 72  method may retur
15750 6e 20 69 74 73 20 72 65 73 75 6c 74 20 62 61 63  n its result bac
15760 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  k..        /// t
15770 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20 6f  o SQLite using o
15780 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
15790 69 6e 67 20 69 6e 74 65 72 66 61 63 65 3a 0d 0a  ing interface:..
157a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
157b0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
157c0 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20   <code>..       
157d0 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33   ///     sqlite3
157e0 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 29 0d 0a  _result_blob()..
157f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
15800 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
15810 6f 75 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20  ouble()..       
15820 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33   ///     sqlite3
15830 5f 72 65 73 75 6c 74 5f 69 6e 74 28 29 0d 0a 20  _result_int().. 
15840 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73         ///     s
15850 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
15860 74 36 34 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  t64()..        /
15870 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
15880 65 73 75 6c 74 5f 6e 75 6c 6c 28 29 0d 0a 20 20  esult_null()..  
15890 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71        ///     sq
158a0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
158b0 74 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t()..        ///
158c0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
158d0 75 6c 74 5f 74 65 78 74 31 36 28 29 0d 0a 20 20  ult_text16()..  
158e0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71        ///     sq
158f0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
15900 74 31 36 6c 65 28 29 0d 0a 20 20 20 20 20 20 20  t16le()..       
15910 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33   ///     sqlite3
15920 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65  _result_text16be
15930 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ()..        /// 
15940 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
15950 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 0d 0a 20  lt_zeroblob().. 
15960 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
15970 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
15980 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
15990 2f 2f 2f 20 49 66 20 74 68 65 20 78 43 6f 6c 75  /// If the xColu
159a0 6d 6e 20 6d 65 74 68 6f 64 20 69 6d 70 6c 65 6d  mn method implem
159b0 65 6e 74 61 74 69 6f 6e 20 63 61 6c 6c 73 20 6e  entation calls n
159c0 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  one of the funct
159d0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ions..        //
159e0 2f 20 61 62 6f 76 65 2c 20 74 68 65 6e 20 74 68  / above, then th
159f0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
15a00 6f 6c 75 6d 6e 20 64 65 66 61 75 6c 74 73 20 74  olumn defaults t
15a10 6f 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e 0d 0a  o an SQL NULL...
15a20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
15a30 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
15a40 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
15a50 20 2f 2f 2f 20 54 6f 20 72 61 69 73 65 20 61 6e   /// To raise an
15a60 20 65 72 72 6f 72 2c 20 74 68 65 20 78 43 6f 6c   error, the xCol
15a70 75 6d 6e 20 6d 65 74 68 6f 64 20 73 68 6f 75 6c  umn method shoul
15a80 64 20 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65  d use one of the
15a90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65  ..        /// re
15aa0 73 75 6c 74 5f 74 65 78 74 28 29 20 6d 65 74 68  sult_text() meth
15ab0 6f 64 73 20 74 6f 20 73 65 74 20 74 68 65 20 65  ods to set the e
15ac0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65 78  rror message tex
15ad0 74 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20 61  t, then return a
15ae0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  n..        /// a
15af0 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
15b00 20 63 6f 64 65 2e 20 54 68 65 20 78 43 6f 6c 75   code. The xColu
15b10 6d 6e 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72  mn method must r
15b20 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20  eturn SQLITE_OK 
15b30 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  on..        /// 
15b40 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  success...      
15b50 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
15b60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
15b70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
15b80 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f  he xColumn metho
15b90 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  d is required fo
15ba0 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20  r every virtual 
15bb0 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
15bc0 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
15bd0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
15be0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
15bf0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
15c00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
15c10 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
15c20 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
15c30 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
15c40 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
15c50 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
15c60 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
15c70 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15c80 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
15c90 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15ca0 3d 22 70 43 6f 6e 74 65 78 74 22 3e 0d 0a 20 20  ="pContext">..  
15cb0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
15cc0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
15cd0 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  the sqlite3_cont
15ce0 65 78 74 20 73 74 72 75 63 74 75 72 65 20 74 6f  ext structure to
15cf0 20 62 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20   be used..      
15d00 20 20 2f 2f 2f 20 66 6f 72 20 72 65 74 75 72 6e    /// for return
15d10 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65  ing the specifie
15d20 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74  d column value t
15d30 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  o the SQLite cor
15d40 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  e..        /// l
15d50 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
15d60 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
15d70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
15d80 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d  m name="index">.
15d90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
15da0 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
15db0 78 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  x corresponding 
15dc0 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f  to the column co
15dd0 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20  ntaining the..  
15de0 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20        /// value 
15df0 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d  to be returned..
15e00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
15e10 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
15e20 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
15e30 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
15e40 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
15e50 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
15e60 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
15e70 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
15e80 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75 6d  ErrorCode xColum
15e90 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
15ea0 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d  IntPtr pCursor,.
15eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
15ec0 50 74 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20  Ptr pContext,.. 
15ed0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
15ee0 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ndex..          
15ef0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
15f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
15f50 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
15f60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
15f70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
15f80 2f 20 41 20 73 75 63 63 65 73 73 66 75 6c 20 69  / A successful i
15f90 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69  nvocation of thi
15fa0 73 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 63 61  s method will ca
15fb0 75 73 65 20 2a 70 52 6f 77 69 64 20 74 6f 20 62  use *pRowid to b
15fc0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66  e..        /// f
15fd0 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 72  illed with the r
15fe0 6f 77 69 64 20 6f 66 20 72 6f 77 20 74 68 61 74  owid of row that
15ff0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
16000 6c 65 20 63 75 72 73 6f 72 20 70 43 75 72 20 69  le cursor pCur i
16010 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  s..        /// c
16020 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
16030 67 20 61 74 2e 20 54 68 69 73 20 6d 65 74 68 6f  g at. This metho
16040 64 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  d returns SQLITE
16050 5f 4f 4b 20 6f 6e 20 73 75 63 63 65 73 73 2e 20  _OK on success. 
16060 49 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  It..        /// 
16070 72 65 74 75 72 6e 73 20 61 6e 20 61 70 70 72 6f  returns an appro
16080 70 72 69 61 74 65 20 65 72 72 6f 72 20 63 6f 64  priate error cod
16090 65 20 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20  e on failure... 
160a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
160b0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
160c0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
160d0 2f 2f 2f 20 54 68 65 20 78 52 6f 77 69 64 20 6d  /// The xRowid m
160e0 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65  ethod is require
160f0 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74  d for every virt
16100 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ual table..     
16110 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74     /// implement
16120 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
16130 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
16140 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
16150 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
16160 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
16170 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
16180 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
16190 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
161a0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
161b0 6f 72 20 64 65 72 69 76 65 64 20 73 74 72 75 63  or derived struc
161c0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
161d0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
161e0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
161f0 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20  name="rowId">.. 
16200 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
16210 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
16220 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
16230 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74  modified to cont
16240 61 69 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a  ain the unique..
16250 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65          /// inte
16260 67 65 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69  ger row identifi
16270 65 72 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  er for the curre
16280 6e 74 20 72 6f 77 20 66 6f 72 20 74 68 65 20 73  nt row for the s
16290 70 65 63 69 66 69 65 64 20 63 75 72 73 6f 72 2e  pecified cursor.
162a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
162b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
162c0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
162d0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
162e0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
162f0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
16300 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
16310 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
16320 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 77 49  eErrorCode xRowI
16330 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
16340 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d  IntPtr pCursor,.
16350 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
16360 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20   long rowId..   
16370 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
16380 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
16390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
163a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
163b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
163c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
163d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
163e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
163f0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
16400 20 20 20 20 20 2f 2f 2f 20 41 6c 6c 20 63 68 61       /// All cha
16410 6e 67 65 73 20 74 6f 20 61 20 76 69 72 74 75 61  nges to a virtua
16420 6c 20 74 61 62 6c 65 20 61 72 65 20 6d 61 64 65  l table are made
16430 20 75 73 69 6e 67 20 74 68 65 20 78 55 70 64 61   using the xUpda
16440 74 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  te method...    
16450 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6f 6e 65      /// This one
16460 20 6d 65 74 68 6f 64 20 63 61 6e 20 62 65 20 75   method can be u
16470 73 65 64 20 74 6f 20 69 6e 73 65 72 74 2c 20 64  sed to insert, d
16480 65 6c 65 74 65 2c 20 6f 72 20 75 70 64 61 74 65  elete, or update
16490 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
164a0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
164b0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
164c0 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 63      /// The argc
164d0 20 70 61 72 61 6d 65 74 65 72 20 73 70 65 63 69   parameter speci
164e0 66 69 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20  fies the number 
164f0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  of entries in th
16500 65 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20  e argv..        
16510 2f 2f 2f 20 61 72 72 61 79 2e 20 54 68 65 20 76  /// array. The v
16520 61 6c 75 65 20 6f 66 20 61 72 67 63 20 77 69 6c  alue of argc wil
16530 6c 20 62 65 20 31 20 66 6f 72 20 61 20 70 75 72  l be 1 for a pur
16540 65 20 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69  e delete operati
16550 6f 6e 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  on or..        /
16560 2f 2f 20 4e 2b 32 20 66 6f 72 20 61 6e 20 69 6e  // N+2 for an in
16570 73 65 72 74 20 6f 72 20 72 65 70 6c 61 63 65 20  sert or replace 
16580 6f 72 20 75 70 64 61 74 65 20 77 68 65 72 65 20  or update where 
16590 4e 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  N is the number 
165a0 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
165b0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
165c0 61 62 6c 65 2e 20 49 6e 20 74 68 65 20 70 72 65  able. In the pre
165d0 76 69 6f 75 73 20 73 65 6e 74 65 6e 63 65 2c 20  vious sentence, 
165e0 4e 20 69 6e 63 6c 75 64 65 73 20 61 6e 79 0d 0a  N includes any..
165f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 69 64 64          /// hidd
16600 65 6e 20 63 6f 6c 75 6d 6e 73 2e 0d 0a 20 20 20  en columns...   
16610 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
16620 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
16630 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
16640 2f 20 45 76 65 72 79 20 61 72 67 76 20 65 6e 74  / Every argv ent
16650 72 79 20 77 69 6c 6c 20 68 61 76 65 20 61 20 6e  ry will have a n
16660 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e  on-NULL value in
16670 20 43 20 62 75 74 20 6d 61 79 20 63 6f 6e 74 61   C but may conta
16680 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  in..        /// 
16690 74 68 65 20 53 51 4c 20 76 61 6c 75 65 20 4e 55  the SQL value NU
166a0 4c 4c 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  LL. In other wor
166b0 64 73 2c 20 69 74 20 69 73 20 61 6c 77 61 79 73  ds, it is always
166c0 20 74 72 75 65 20 74 68 61 74 0d 0a 20 20 20 20   true that..    
166d0 20 20 20 20 2f 2f 2f 20 61 72 67 76 5b 69 5d 21      /// argv[i]!
166e0 3d 30 20 66 6f 72 20 69 20 62 65 74 77 65 65 6e  =0 for i between
166f0 20 30 20 61 6e 64 20 61 72 67 63 2d 31 2e 20 48   0 and argc-1. H
16700 6f 77 65 76 65 72 2c 20 69 74 20 6d 69 67 68 74  owever, it might
16710 20 62 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20   be the..       
16720 20 2f 2f 2f 20 63 61 73 65 20 74 68 61 74 20 73   /// case that s
16730 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
16740 65 28 61 72 67 76 5b 69 5d 29 3d 3d 53 51 4c 49  e(argv[i])==SQLI
16750 54 45 5f 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20  TE_NULL...      
16760 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
16770 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
16780 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
16790 68 65 20 61 72 67 76 5b 30 5d 20 70 61 72 61 6d  he argv[0] param
167a0 65 74 65 72 20 69 73 20 74 68 65 20 72 6f 77 69  eter is the rowi
167b0 64 20 6f 66 20 61 20 72 6f 77 20 69 6e 20 74 68  d of a row in th
167c0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  e virtual table.
167d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
167e0 62 65 20 64 65 6c 65 74 65 64 2e 20 49 66 20 61  be deleted. If a
167f0 72 67 76 5b 30 5d 20 69 73 20 61 6e 20 53 51 4c  rgv[0] is an SQL
16800 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 6e 6f 20 64   NULL, then no d
16810 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 0d  eletion occurs..
16820 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
16830 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
16840 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
16850 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 76 5b 31    /// The argv[1
16860 5d 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 74  ] parameter is t
16870 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 6e 65  he rowid of a ne
16880 77 20 72 6f 77 20 74 6f 20 62 65 20 69 6e 73 65  w row to be inse
16890 72 74 65 64 20 69 6e 74 6f 0d 0a 20 20 20 20 20  rted into..     
168a0 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75     /// the virtu
168b0 61 6c 20 74 61 62 6c 65 2e 20 49 66 20 61 72 67  al table. If arg
168c0 76 5b 31 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e  v[1] is an SQL N
168d0 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20  ULL, then the.. 
168e0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
168f0 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 63  mentation must c
16900 68 6f 6f 73 65 20 61 20 72 6f 77 69 64 20 66 6f  hoose a rowid fo
16910 72 20 74 68 65 20 6e 65 77 6c 79 20 69 6e 73 65  r the newly inse
16920 72 74 65 64 20 72 6f 77 2e 0d 0a 20 20 20 20 20  rted row...     
16930 20 20 20 2f 2f 2f 20 53 75 62 73 65 71 75 65 6e     /// Subsequen
16940 74 20 61 72 67 76 5b 5d 20 65 6e 74 72 69 65 73  t argv[] entries
16950 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20   contain values 
16960 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
16970 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
16980 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
16990 2c 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74  , in the order t
169a0 68 61 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  hat the columns 
169b0 77 65 72 65 20 64 65 63 6c 61 72 65 64 2e 20 54  were declared. T
169c0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
169d0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
169e0 73 20 77 69 6c 6c 20 6d 61 74 63 68 20 74 68 65  s will match the
169f0 20 74 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69   table declarati
16a00 6f 6e 20 74 68 61 74 20 74 68 65 0d 0a 20 20 20  on that the..   
16a10 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e 65 63       /// xConnec
16a20 74 20 6f 72 20 78 43 72 65 61 74 65 20 6d 65 74  t or xCreate met
16a30 68 6f 64 20 6d 61 64 65 20 75 73 69 6e 67 20 74  hod made using t
16a40 68 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  he sqlite3_decla
16a50 72 65 5f 76 74 61 62 28 29 0d 0a 20 20 20 20 20  re_vtab()..     
16a60 20 20 20 2f 2f 2f 20 63 61 6c 6c 2e 20 41 6c 6c     /// call. All
16a70 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
16a80 61 72 65 20 69 6e 63 6c 75 64 65 64 2e 0d 0a 20  are included... 
16a90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
16aa0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16ab0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
16ac0 2f 2f 2f 20 57 68 65 6e 20 64 6f 69 6e 67 20 61  /// When doing a
16ad0 6e 20 69 6e 73 65 72 74 20 77 69 74 68 6f 75 74  n insert without
16ae0 20 61 20 72 6f 77 69 64 20 28 61 72 67 63 3e 31   a rowid (argc>1
16af0 2c 20 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20  , argv[1] is an 
16b00 53 51 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  SQL..        ///
16b10 20 4e 55 4c 4c 29 2c 20 74 68 65 20 69 6d 70 6c   NULL), the impl
16b20 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20  ementation must 
16b30 73 65 74 20 2a 70 52 6f 77 69 64 20 74 6f 20 74  set *pRowid to t
16b40 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0d  he rowid of the.
16b50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 65 77  .        /// new
16b60 6c 79 20 69 6e 73 65 72 74 65 64 20 72 6f 77 3b  ly inserted row;
16b70 20 74 68 69 73 20 77 69 6c 6c 20 62 65 63 6f 6d   this will becom
16b80 65 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75  e the value retu
16b90 72 6e 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  rned by the..   
16ba0 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
16bb0 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
16bc0 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  id() function. S
16bd0 65 74 74 69 6e 67 20 74 68 69 73 20 76 61 6c 75  etting this valu
16be0 65 20 69 6e 20 61 6c 6c 20 74 68 65 0d 0a 20 20  e in all the..  
16bf0 20 20 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 20        /// other 
16c00 63 61 73 65 73 20 69 73 20 61 20 68 61 72 6d 6c  cases is a harml
16c10 65 73 73 20 6e 6f 2d 6f 70 3b 20 74 68 65 20 53  ess no-op; the S
16c20 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 69 67 6e  QLite engine ign
16c30 6f 72 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20  ores the..      
16c40 20 20 2f 2f 2f 20 2a 70 52 6f 77 69 64 20 72 65    /// *pRowid re
16c50 74 75 72 6e 20 76 61 6c 75 65 20 69 66 20 61 72  turn value if ar
16c60 67 63 3d 3d 31 20 6f 72 20 61 72 67 76 5b 31 5d  gc==1 or argv[1]
16c70 20 69 73 20 6e 6f 74 20 61 6e 20 53 51 4c 20 4e   is not an SQL N
16c80 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ULL...        //
16c90 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
16ca0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
16cb0 20 20 20 20 20 20 20 2f 2f 2f 20 45 61 63 68 20         /// Each 
16cc0 63 61 6c 6c 20 74 6f 20 78 55 70 64 61 74 65 20  call to xUpdate 
16cd0 77 69 6c 6c 20 66 61 6c 6c 20 69 6e 74 6f 20 6f  will fall into o
16ce0 6e 65 20 6f 66 20 63 61 73 65 73 20 73 68 6f 77  ne of cases show
16cf0 6e 20 62 65 6c 6f 77 2e 20 4e 6f 74 65 0d 0a 20  n below. Note.. 
16d00 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20         /// that 
16d10 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 61 72  references to ar
16d20 67 76 5b 69 5d 20 6d 65 61 6e 20 74 68 65 20 53  gv[i] mean the S
16d30 51 4c 20 76 61 6c 75 65 20 68 65 6c 64 20 77 69  QL value held wi
16d40 74 68 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  thin the..      
16d50 20 20 2f 2f 2f 20 61 72 67 76 5b 69 5d 20 6f 62    /// argv[i] ob
16d60 6a 65 63 74 2c 20 6e 6f 74 20 74 68 65 20 61 72  ject, not the ar
16d70 67 76 5b 69 5d 20 6f 62 6a 65 63 74 20 69 74 73  gv[i] object its
16d80 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  elf...        //
16d90 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
16da0 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20     /// <code>.. 
16db0 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61         ///     a
16dc0 72 67 63 20 3d 20 31 0d 0a 20 20 20 20 20 20 20  rgc = 1..       
16dd0 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
16de0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
16df0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
16e00 20 20 20 20 20 20 54 68 65 20 73 69 6e 67 6c 65        The single
16e10 20 72 6f 77 20 77 69 74 68 20 72 6f 77 69 64 20   row with rowid 
16e20 65 71 75 61 6c 20 74 6f 20 61 72 67 76 5b 30 5d  equal to argv[0]
16e30 20 69 73 20 64 65 6c 65 74 65 64 2e 20 4e 6f 0d   is deleted. No.
16e40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
16e50 20 20 20 20 20 69 6e 73 65 72 74 20 6f 63 63 75       insert occu
16e60 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rs...        ///
16e70 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
16e80 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20    /// <code>..  
16e90 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72        ///     ar
16ea0 67 63 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20  gc > 1..        
16eb0 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20  ///     argv[0] 
16ec0 3d 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20  = NULL..        
16ed0 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20  /// </code>..   
16ee0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
16ef0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
16f00 20 20 20 20 20 41 20 6e 65 77 20 72 6f 77 20 69       A new row i
16f10 73 20 69 6e 73 65 72 74 65 64 20 77 69 74 68 20  s inserted with 
16f20 61 20 72 6f 77 69 64 20 61 72 67 76 5b 31 5d 20  a rowid argv[1] 
16f30 61 6e 64 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20  and column..    
16f40 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
16f50 76 61 6c 75 65 73 20 69 6e 20 61 72 67 76 5b 32  values in argv[2
16f60 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 2e  ] and following.
16f70 20 49 66 20 61 72 67 76 5b 31 5d 20 69 73 20 61   If argv[1] is a
16f80 6e 20 53 51 4c 20 4e 55 4c 4c 2c 0d 0a 20 20 20  n SQL NULL,..   
16f90 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
16fa0 20 74 68 65 20 61 20 6e 65 77 20 75 6e 69 71 75   the a new uniqu
16fb0 65 20 72 6f 77 69 64 20 69 73 20 67 65 6e 65 72  e rowid is gener
16fc0 61 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  ated automatical
16fd0 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ly...        ///
16fe0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
16ff0 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20    /// <code>..  
17000 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72        ///     ar
17010 67 63 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20  gc > 1..        
17020 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20  ///     argv[0] 
17030 3f 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20  ? NULL..        
17040 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20  ///     argv[0] 
17050 3d 20 61 72 67 76 5b 31 5d 0d 0a 20 20 20 20 20  = argv[1]..     
17060 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a     /// </code>..
17070 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
17080 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17090 20 20 20 20 20 20 20 20 54 68 65 20 72 6f 77 20          The row 
170a0 77 69 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b  with rowid argv[
170b0 30 5d 20 69 73 20 75 70 64 61 74 65 64 20 77 69  0] is updated wi
170c0 74 68 20 6e 65 77 20 76 61 6c 75 65 73 20 69 6e  th new values in
170d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
170e0 20 20 20 20 20 20 61 72 67 76 5b 32 5d 20 61 6e        argv[2] an
170f0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 72 61  d following para
17100 6d 65 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  meters...       
17110 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
17120 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e        /// <code>
17130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
17140 20 20 61 72 67 63 20 3e 20 31 0d 0a 20 20 20 20    argc > 1..    
17150 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76      ///     argv
17160 5b 30 5d 20 3f 20 4e 55 4c 4c 0d 0a 20 20 20 20  [0] ? NULL..    
17170 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76      ///     argv
17180 5b 30 5d 20 3f 20 61 72 67 76 5b 31 5d 0d 0a 20  [0] ? argv[1].. 
17190 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
171a0 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
171b0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
171c0 2f 2f 2f 20 20 20 20 20 20 20 20 20 54 68 65 20  ///         The 
171d0 72 6f 77 20 77 69 74 68 20 72 6f 77 69 64 20 61  row with rowid a
171e0 72 67 76 5b 30 5d 20 69 73 20 75 70 64 61 74 65  rgv[0] is update
171f0 64 20 77 69 74 68 20 72 6f 77 69 64 20 61 72 67  d with rowid arg
17200 76 5b 31 5d 0d 0a 20 20 20 20 20 20 20 20 2f 2f  v[1]..        //
17210 2f 20 20 20 20 20 20 20 20 20 61 6e 64 20 6e 65  /         and ne
17220 77 20 76 61 6c 75 65 73 20 69 6e 20 61 72 67 76  w values in argv
17230 5b 32 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e  [2] and followin
17240 67 20 70 61 72 61 6d 65 74 65 72 73 2e 20 54 68  g parameters. Th
17250 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
17260 20 20 20 20 20 20 20 20 77 69 6c 6c 20 6f 63 63          will occ
17270 75 72 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73  ur when an SQL s
17280 74 61 74 65 6d 65 6e 74 20 75 70 64 61 74 65 73  tatement updates
17290 20 61 20 72 6f 77 69 64 2c 20 61 73 20 69 6e 0d   a rowid, as in.
172a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
172b0 20 20 20 20 20 74 68 65 20 73 74 61 74 65 6d 65       the stateme
172c0 6e 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt:..        ///
172d0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
172e0 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20    /// <code>..  
172f0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
17300 20 20 20 20 20 20 55 50 44 41 54 45 20 74 61 62        UPDATE tab
17310 6c 65 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77  le SET rowid=row
17320 69 64 2b 31 20 57 48 45 52 45 20 2e 2e 2e 3b 0d  id+1 WHERE ...;.
17330 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63  .        /// </c
17340 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
17350 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
17360 20 20 2f 2f 2f 20 54 68 65 20 78 55 70 64 61 74    /// The xUpdat
17370 65 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65  e method must re
17380 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69  turn SQLITE_OK i
17390 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 69 74  f and only if it
173a0 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   is..        ///
173b0 20 73 75 63 63 65 73 73 66 75 6c 2e 20 49 66 20   successful. If 
173c0 61 20 66 61 69 6c 75 72 65 20 6f 63 63 75 72 73  a failure occurs
173d0 2c 20 74 68 65 20 78 55 70 64 61 74 65 20 6d 75  , the xUpdate mu
173e0 73 74 20 72 65 74 75 72 6e 20 61 6e 0d 0a 20 20  st return an..  
173f0 20 20 20 20 20 20 2f 2f 2f 20 61 70 70 72 6f 70        /// approp
17400 72 69 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65  riate error code
17410 2e 20 4f 6e 20 61 20 66 61 69 6c 75 72 65 2c 20  . On a failure, 
17420 74 68 65 20 70 56 54 61 62 2d 3e 7a 45 72 72 4d  the pVTab->zErrM
17430 73 67 20 65 6c 65 6d 65 6e 74 0d 0a 20 20 20 20  sg element..    
17440 20 20 20 20 2f 2f 2f 20 6d 61 79 20 6f 70 74 69      /// may opti
17450 6f 6e 61 6c 6c 79 20 62 65 20 72 65 70 6c 61 63  onally be replac
17460 65 64 20 77 69 74 68 20 65 72 72 6f 72 20 6d 65  ed with error me
17470 73 73 61 67 65 20 74 65 78 74 20 73 74 6f 72 65  ssage text store
17480 64 20 69 6e 20 6d 65 6d 6f 72 79 0d 0a 20 20 20  d in memory..   
17490 20 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74       /// allocat
174a0 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 75  ed from SQLite u
174b0 73 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 73  sing functions s
174c0 75 63 68 20 61 73 20 73 71 6c 69 74 65 33 5f 6d  uch as sqlite3_m
174d0 70 72 69 6e 74 66 28 29 20 6f 72 0d 0a 20 20 20  printf() or..   
174e0 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
174f0 5f 6d 61 6c 6c 6f 63 28 29 2e 0d 0a 20 20 20 20  _malloc()...    
17500 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
17510 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
17520 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
17530 20 49 66 20 74 68 65 20 78 55 70 64 61 74 65 20   If the xUpdate 
17540 6d 65 74 68 6f 64 20 76 69 6f 6c 61 74 65 73 20  method violates 
17550 73 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  some constraint 
17560 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  of the virtual t
17570 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
17580 2f 20 28 69 6e 63 6c 75 64 69 6e 67 2c 20 62 75  / (including, bu
17590 74 20 6e 6f 74 20 6c 69 6d 69 74 65 64 20 74 6f  t not limited to
175a0 2c 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  , attempting to 
175b0 73 74 6f 72 65 20 61 20 76 61 6c 75 65 20 6f 66  store a value of
175c0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
175d0 2f 20 77 72 6f 6e 67 20 64 61 74 61 74 79 70 65  / wrong datatype
175e0 2c 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  , attempting to 
175f0 73 74 6f 72 65 20 61 20 76 61 6c 75 65 20 74 68  store a value th
17600 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20  at is too large 
17610 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
17620 74 6f 6f 20 73 6d 61 6c 6c 2c 20 6f 72 20 61 74  too small, or at
17630 74 65 6d 70 74 69 6e 67 20 74 6f 20 63 68 61 6e  tempting to chan
17640 67 65 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76  ge a read-only v
17650 61 6c 75 65 29 20 74 68 65 6e 20 74 68 65 0d 0a  alue) then the..
17660 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 55 70 64          /// xUpd
17670 61 74 65 20 6d 75 73 74 20 66 61 69 6c 20 77 69  ate must fail wi
17680 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  th an appropriat
17690 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 0d 0a 20  e error code... 
176a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
176b0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
176c0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
176d0 2f 2f 2f 20 54 68 65 72 65 20 6d 69 67 68 74 20  /// There might 
176e0 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  be one or more s
176f0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
17700 6f 72 20 6f 62 6a 65 63 74 73 20 6f 70 65 6e 20  or objects open 
17710 61 6e 64 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  and in..        
17720 2f 2f 2f 20 75 73 65 20 6f 6e 20 74 68 65 20 76  /// use on the v
17730 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 73  irtual table ins
17740 74 61 6e 63 65 20 61 6e 64 20 70 65 72 68 61 70  tance and perhap
17750 73 20 65 76 65 6e 20 6f 6e 20 74 68 65 20 72 6f  s even on the ro
17760 77 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  w of..        //
17770 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  / the virtual ta
17780 62 6c 65 20 77 68 65 6e 20 74 68 65 20 78 55 70  ble when the xUp
17790 64 61 74 65 20 6d 65 74 68 6f 64 20 69 73 20 69  date method is i
177a0 6e 76 6f 6b 65 64 2e 20 54 68 65 0d 0a 20 20 20  nvoked. The..   
177b0 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
177c0 6e 74 61 74 69 6f 6e 20 6f 66 20 78 55 70 64 61  ntation of xUpda
177d0 74 65 20 6d 75 73 74 20 62 65 20 70 72 65 70 61  te must be prepa
177e0 72 65 64 20 66 6f 72 20 61 74 74 65 6d 70 74 73  red for attempts
177f0 20 74 6f 20 64 65 6c 65 74 65 0d 0a 20 20 20 20   to delete..    
17800 20 20 20 20 2f 2f 2f 20 6f 72 20 6d 6f 64 69 66      /// or modif
17810 79 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61  y rows of the ta
17820 62 6c 65 20 6f 75 74 20 66 72 6f 6d 20 6f 74 68  ble out from oth
17830 65 72 20 65 78 69 73 74 69 6e 67 20 63 75 72 73  er existing curs
17840 6f 72 73 2e 20 49 66 20 74 68 65 0d 0a 20 20 20  ors. If the..   
17850 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c       /// virtual
17860 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 61 63   table cannot ac
17870 63 6f 6d 6d 6f 64 61 74 65 20 73 75 63 68 20 63  commodate such c
17880 68 61 6e 67 65 73 2c 20 74 68 65 20 78 55 70 64  hanges, the xUpd
17890 61 74 65 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20  ate method..    
178a0 20 20 20 20 2f 2f 2f 20 6d 75 73 74 20 72 65 74      /// must ret
178b0 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  urn an error cod
178c0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
178d0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
178e0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
178f0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 55 70       /// The xUp
17900 64 61 74 65 20 6d 65 74 68 6f 64 20 69 73 20 6f  date method is o
17910 70 74 69 6f 6e 61 6c 2e 20 49 66 20 74 68 65 20  ptional. If the 
17920 78 55 70 64 61 74 65 20 70 6f 69 6e 74 65 72 20  xUpdate pointer 
17930 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..        
17940 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  /// sqlite3_modu
17950 6c 65 20 66 6f 72 20 61 20 76 69 72 74 75 61 6c  le for a virtual
17960 20 74 61 62 6c 65 20 69 73 20 61 20 4e 55 4c 4c   table is a NULL
17970 20 70 6f 69 6e 74 65 72 2c 20 74 68 65 6e 20 74   pointer, then t
17980 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
17990 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
179a0 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20   read-only...   
179b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
179c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
179d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
179e0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
179f0 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
17a00 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
17a10 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
17a20 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
17a30 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
17a40 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17a50 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
17a60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
17a70 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20  ="argc">..      
17a80 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
17a90 20 6f 66 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66   of new or modif
17aa0 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  ied column value
17ab0 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 0d 0a  s contained in..
17ac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
17ad0 61 6d 72 65 66 20 6e 61 6d 65 3d 22 61 72 67 76  amref name="argv
17ae0 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  " />...        /
17af0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
17b00 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
17b10 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20  name="argv">..  
17b20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
17b30 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20 70 6f  ray of native po
17b40 69 6e 74 65 72 73 20 74 6f 20 73 71 6c 69 74 65  inters to sqlite
17b50 33 5f 76 61 6c 75 65 20 73 74 72 75 63 74 75 72  3_value structur
17b60 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  es containing.. 
17b70 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6e         /// the n
17b80 65 77 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 63  ew or modified c
17b90 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 2c 20 69 66  olumn values, if
17ba0 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f   any...        /
17bb0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
17bc0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
17bd0 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20  name="rowId">.. 
17be0 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
17bf0 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
17c00 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
17c10 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74  modified to cont
17c20 61 69 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a  ain the unique..
17c30 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65          /// inte
17c40 67 65 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69  ger row identifi
17c50 65 72 20 66 6f 72 20 74 68 65 20 72 6f 77 20 74  er for the row t
17c60 68 61 74 20 77 61 73 20 69 6e 73 65 72 74 65 64  hat was inserted
17c70 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20  , if any...     
17c80 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
17c90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
17ca0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
17cb0 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
17cc0 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
17cd0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
17ce0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
17cf0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
17d00 6f 64 65 20 78 55 70 64 61 74 65 28 0d 0a 20 20  ode xUpdate(..  
17d10 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
17d20 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
17d30 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a       int argc,..
17d40 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
17d50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  tr argv,..      
17d60 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72        ref long r
17d70 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  owId..          
17d80 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
17d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17dd0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
17de0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
17df0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
17e00 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
17e10 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 62 65  / This method be
17e20 67 69 6e 73 20 61 20 74 72 61 6e 73 61 63 74 69  gins a transacti
17e30 6f 6e 20 6f 6e 20 61 20 76 69 72 74 75 61 6c 20  on on a virtual 
17e40 74 61 62 6c 65 2e 20 54 68 69 73 20 69 73 20 6d  table. This is m
17e50 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 2f  ethod..        /
17e60 2f 2f 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20  // is optional. 
17e70 54 68 65 20 78 42 65 67 69 6e 20 70 6f 69 6e 74  The xBegin point
17e80 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d 6f  er of sqlite3_mo
17e90 64 75 6c 65 20 6d 61 79 20 62 65 20 4e 55 4c 4c  dule may be NULL
17ea0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17eb0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
17ec0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
17ed0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
17ee0 68 6f 64 20 69 73 20 61 6c 77 61 79 73 20 66 6f  hod is always fo
17ef0 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 63 61  llowed by one ca
17f00 6c 6c 20 74 6f 20 65 69 74 68 65 72 20 74 68 65  ll to either the
17f10 20 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20 20 20   xCommit or..   
17f20 20 20 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c 62 61       /// xRollba
17f30 63 6b 20 6d 65 74 68 6f 64 2e 20 56 69 72 74 75  ck method. Virtu
17f40 61 6c 20 74 61 62 6c 65 20 74 72 61 6e 73 61 63  al table transac
17f50 74 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 6e 65 73  tions do not nes
17f60 74 2c 20 73 6f 20 74 68 65 0d 0a 20 20 20 20 20  t, so the..     
17f70 20 20 20 2f 2f 2f 20 78 42 65 67 69 6e 20 6d 65     /// xBegin me
17f80 74 68 6f 64 20 77 69 6c 6c 20 6e 6f 74 20 62 65  thod will not be
17f90 20 69 6e 76 6f 6b 65 64 20 6d 6f 72 65 20 74 68   invoked more th
17fa0 61 6e 20 6f 6e 63 65 20 6f 6e 20 61 20 73 69 6e  an once on a sin
17fb0 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  gle..        ///
17fc0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77   virtual table w
17fd0 69 74 68 6f 75 74 20 61 6e 20 69 6e 74 65 72 76  ithout an interv
17fe0 65 6e 69 6e 67 20 63 61 6c 6c 20 74 6f 20 65 69  ening call to ei
17ff0 74 68 65 72 20 78 43 6f 6d 6d 69 74 20 6f 72 0d  ther xCommit or.
18000 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 52 6f  .        /// xRo
18010 6c 6c 62 61 63 6b 2e 20 4d 75 6c 74 69 70 6c 65  llback. Multiple
18020 20 63 61 6c 6c 73 20 74 6f 20 6f 74 68 65 72 20   calls to other 
18030 6d 65 74 68 6f 64 73 20 63 61 6e 20 61 6e 64 20  methods can and 
18040 6c 69 6b 65 6c 79 20 77 69 6c 6c 0d 0a 20 20 20  likely will..   
18050 20 20 20 20 20 2f 2f 2f 20 6f 63 63 75 72 20 69       /// occur i
18060 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 78 42  n between the xB
18070 65 67 69 6e 20 61 6e 64 20 74 68 65 20 63 6f 72  egin and the cor
18080 72 65 73 70 6f 6e 64 69 6e 67 20 78 43 6f 6d 6d  responding xComm
18090 69 74 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  it or..        /
180a0 2f 2f 20 78 52 6f 6c 6c 62 61 63 6b 2e 0d 0a 20  // xRollback... 
180b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
180c0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
180d0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
180e0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
180f0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
18100 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
18110 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
18120 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
18130 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
18140 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
18150 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
18160 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
18170 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
18180 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
18190 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
181a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
181b0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
181c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42  LiteErrorCode xB
181d0 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  egin(..         
181e0 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
181f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
18200 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
18210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18250 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
18260 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
18270 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
18280 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
18290 73 20 6d 65 74 68 6f 64 20 73 69 67 6e 61 6c 73  s method signals
182a0 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 61 20   the start of a 
182b0 74 77 6f 2d 70 68 61 73 65 20 63 6f 6d 6d 69 74  two-phase commit
182c0 20 6f 6e 20 61 20 76 69 72 74 75 61 6c 0d 0a 20   on a virtual.. 
182d0 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65         /// table
182e0 2e 20 54 68 69 73 20 69 73 20 6d 65 74 68 6f 64  . This is method
182f0 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68   is optional. Th
18300 65 20 78 53 79 6e 63 20 70 6f 69 6e 74 65 72 20  e xSync pointer 
18310 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
18320 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d  sqlite3_module m
18330 61 79 20 62 65 20 4e 55 4c 4c 2e 0d 0a 20 20 20  ay be NULL...   
18340 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
18350 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18360 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
18370 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
18380 20 6f 6e 6c 79 20 69 6e 76 6f 6b 65 64 20 61 66   only invoked af
18390 74 65 72 20 63 61 6c 6c 20 74 6f 20 74 68 65 20  ter call to the 
183a0 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 61 6e  xBegin method an
183b0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  d..        /// p
183c0 72 69 6f 72 20 74 6f 20 61 6e 20 78 43 6f 6d 6d  rior to an xComm
183d0 69 74 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 2e  it or xRollback.
183e0 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 69 6d 70   In order to imp
183f0 6c 65 6d 65 6e 74 20 74 77 6f 2d 70 68 61 73 65  lement two-phase
18400 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
18410 6d 6d 69 74 2c 20 74 68 65 20 78 53 79 6e 63 20  mmit, the xSync 
18420 6d 65 74 68 6f 64 20 6f 6e 20 61 6c 6c 20 76 69  method on all vi
18430 72 74 75 61 6c 20 74 61 62 6c 65 73 20 69 73 20  rtual tables is 
18440 69 6e 76 6f 6b 65 64 20 70 72 69 6f 72 20 74 6f  invoked prior to
18450 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
18460 76 6f 6b 69 6e 67 20 74 68 65 20 78 43 6f 6d 6d  voking the xComm
18470 69 74 20 6d 65 74 68 6f 64 20 6f 6e 20 61 6e 79  it method on any
18480 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
18490 49 66 20 61 6e 79 20 6f 66 20 74 68 65 0d 0a 20  If any of the.. 
184a0 20 20 20 20 20 20 20 2f 2f 2f 20 78 53 79 6e 63         /// xSync
184b0 20 6d 65 74 68 6f 64 73 20 66 61 69 6c 2c 20 74   methods fail, t
184c0 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  he entire transa
184d0 63 74 69 6f 6e 20 69 73 20 72 6f 6c 6c 65 64 20  ction is rolled 
184e0 62 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f  back...        /
184f0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
18500 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
18510 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
18520 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
18530 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
18540 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
18550 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
18560 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
18570 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
18580 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
18590 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
185a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
185b0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
185c0 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
185d0 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
185e0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
185f0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
18600 72 43 6f 64 65 20 78 53 79 6e 63 28 0d 0a 20 20  rCode xSync(..  
18610 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
18620 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
18630 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
18640 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18680 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
18690 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
186a0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
186b0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
186c0 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
186d0 63 61 75 73 65 73 20 61 20 76 69 72 74 75 61 6c  causes a virtual
186e0 20 74 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69   table transacti
186f0 6f 6e 20 74 6f 20 63 6f 6d 6d 69 74 2e 20 54 68  on to commit. Th
18700 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f  is is..        /
18710 2f 2f 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74  // method is opt
18720 69 6f 6e 61 6c 2e 20 54 68 65 20 78 43 6f 6d 6d  ional. The xComm
18730 69 74 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71  it pointer of sq
18740 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79  lite3_module may
18750 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   be..        ///
18760 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20   NULL...        
18770 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
18780 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
18790 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 63  .        /// A c
187a0 61 6c 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68  all to this meth
187b0 6f 64 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  od always follow
187c0 73 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74  s a prior call t
187d0 6f 20 78 42 65 67 69 6e 20 61 6e 64 0d 0a 20 20  o xBegin and..  
187e0 20 20 20 20 20 20 2f 2f 2f 20 78 53 79 6e 63 2e        /// xSync.
187f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18800 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18810 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
18820 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
18830 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
18840 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
18850 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
18860 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
18870 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
18880 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
18890 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
188a0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
188b0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
188c0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
188d0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
188e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
188f0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
18900 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18910 20 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20   xCommit(..     
18920 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
18930 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tab..           
18940 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
18950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18990 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
189a0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
189b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
189c0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
189d0 20 54 68 69 73 20 6d 65 74 68 6f 64 20 63 61 75   This method cau
189e0 73 65 73 20 61 20 76 69 72 74 75 61 6c 20 74 61  ses a virtual ta
189f0 62 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ble transaction 
18a00 74 6f 20 72 6f 6c 6c 62 61 63 6b 2e 20 54 68 69  to rollback. Thi
18a10 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s is..        //
18a20 2f 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69  / method is opti
18a30 6f 6e 61 6c 2e 20 54 68 65 20 78 52 6f 6c 6c 62  onal. The xRollb
18a40 61 63 6b 20 70 6f 69 6e 74 65 72 20 6f 66 20 73  ack pointer of s
18a50 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61  qlite3_module ma
18a60 79 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  y be..        //
18a70 2f 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20  / NULL...       
18a80 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
18a90 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
18aa0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
18ab0 63 61 6c 6c 20 74 6f 20 74 68 69 73 20 6d 65 74  call to this met
18ac0 68 6f 64 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  hod always follo
18ad0 77 73 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20  ws a prior call 
18ae0 74 6f 20 78 42 65 67 69 6e 2e 0d 0a 20 20 20 20  to xBegin...    
18af0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
18b00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
18b10 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
18b20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
18b30 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
18b40 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
18b50 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
18b60 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
18b70 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
18b80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18b90 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
18ba0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
18bb0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
18bc0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
18bd0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
18be0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
18bf0 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
18c00 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c  eErrorCode xRoll
18c10 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
18c20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
18c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
18c40 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
18c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
18ca0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
18cb0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
18cc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
18cd0 73 20 6d 65 74 68 6f 64 20 70 72 6f 76 69 64 65  s method provide
18ce0 73 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20 74  s notification t
18cf0 68 61 74 20 74 68 65 20 76 69 72 74 75 61 6c 20  hat the virtual 
18d00 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
18d10 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
18d20 6e 20 74 68 61 74 20 74 68 65 20 76 69 72 74 75  n that the virtu
18d30 61 6c 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65  al table will be
18d40 20 67 69 76 65 6e 20 61 20 6e 65 77 20 6e 61 6d   given a new nam
18d50 65 2e 20 49 66 0d 0a 20 20 20 20 20 20 20 20 2f  e. If..        /
18d60 2f 2f 20 74 68 69 73 20 6d 65 74 68 6f 64 20 72  // this method r
18d70 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b  eturns SQLITE_OK
18d80 20 74 68 65 6e 20 53 51 4c 69 74 65 20 72 65 6e   then SQLite ren
18d90 61 6d 65 73 20 74 68 65 20 74 61 62 6c 65 2e 20  ames the table. 
18da0 49 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  If..        /// 
18db0 74 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75  this method retu
18dc0 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
18dd0 65 20 74 68 65 6e 20 74 68 65 20 72 65 6e 61 6d  e then the renam
18de0 69 6e 67 20 69 73 20 70 72 65 76 65 6e 74 65 64  ing is prevented
18df0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18e00 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
18e10 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
18e20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 52 65 6e      /// The xRen
18e30 61 6d 65 20 6d 65 74 68 6f 64 20 69 73 20 72 65  ame method is re
18e40 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
18e50 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
18e60 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
18e70 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
18e80 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
18e90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18ea0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
18eb0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
18ec0 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
18ed0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
18ee0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
18ef0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
18f00 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
18f10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18f20 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
18f30 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
18f40 3d 22 6e 41 72 67 22 3e 0d 0a 20 20 20 20 20 20  ="nArg">..      
18f50 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
18f60 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
18f70 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
18f80 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20 20 20  ing sought...   
18f90 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
18fa0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18fb0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d  param name="zNam
18fc0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
18fd0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
18fe0 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
18ff0 73 6f 75 67 68 74 2e 0d 0a 20 20 20 20 20 20 20  sought...       
19000 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
19010 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
19020 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b  m name="callback
19030 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
19040 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
19050 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73  is parameter mus
19060 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f  t be modified to
19070 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20   contain the..  
19080 20 20 20 20 20 20 2f 2f 2f 20 64 65 6c 65 67 61        /// delega
19090 74 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  te responsible f
190a0 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  or implementing 
190b0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 75  the specified fu
190c0 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  nction...       
190d0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
190e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
190f0 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44  m name="pClientD
19100 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ata">..        /
19110 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
19120 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
19130 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
19140 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d   to contain the.
19150 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74  .        /// nat
19160 69 76 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f  ive user-data po
19170 69 6e 74 65 72 20 61 73 73 6f 63 69 61 74 65 64  inter associated
19180 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f   with..        /
19190 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  // <paramref nam
191a0 65 3d 22 63 61 6c 6c 62 61 63 6b 22 20 2f 3e 2e  e="callback" />.
191b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
191c0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
191d0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
191e0 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
191f0 65 72 6f 20 69 66 20 74 68 65 20 73 70 65 63 69  ero if the speci
19200 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 20 77 61  fied function wa
19210 73 20 66 6f 75 6e 64 3b 20 7a 65 72 6f 20 6f 74  s found; zero ot
19220 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 20 20  herwise...      
19230 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
19240 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 78 46  ..        int xF
19250 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
19260 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
19270 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
19280 20 20 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d 0a       int nArg,..
19290 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
192a0 74 72 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  tr zName,..     
192b0 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74         ref SQLit
192c0 65 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  eCallback callba
192d0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
192e0 20 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69   ref IntPtr pCli
192f0 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20  entData..       
19300 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
19310 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19360 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
19370 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
19380 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
19390 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
193a0 20 70 72 6f 76 69 64 65 73 20 6e 6f 74 69 66 69   provides notifi
193b0 63 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20  cation that the 
193c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
193d0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
193e0 6d 65 6e 74 61 74 69 6f 6e 20 74 68 61 74 20 74  mentation that t
193f0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
19400 20 77 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 61   will be given a
19410 20 6e 65 77 20 6e 61 6d 65 2e 20 49 66 0d 0a 20   new name. If.. 
19420 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20         /// this 
19430 6d 65 74 68 6f 64 20 72 65 74 75 72 6e 73 20 53  method returns S
19440 51 4c 49 54 45 5f 4f 4b 20 74 68 65 6e 20 53 51  QLITE_OK then SQ
19450 4c 69 74 65 20 72 65 6e 61 6d 65 73 20 74 68 65  Lite renames the
19460 20 74 61 62 6c 65 2e 20 49 66 0d 0a 20 20 20 20   table. If..    
19470 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74      /// this met
19480 68 6f 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  hod returns an e
19490 72 72 6f 72 20 63 6f 64 65 20 74 68 65 6e 20 74  rror code then t
194a0 68 65 20 72 65 6e 61 6d 69 6e 67 20 69 73 20 70  he renaming is p
194b0 72 65 76 65 6e 74 65 64 2e 0d 0a 20 20 20 20 20  revented...     
194c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
194d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
194e0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
194f0 54 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  The xRename meth
19500 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66  od is required f
19510 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c  or every virtual
19520 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
19530 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  /// implementati
19540 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
19550 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
19560 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
19570 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
19580 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
19590 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
195a0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
195b0 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
195c0 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
195d0 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
195e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
195f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
19600 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 65 77 22 3e  ram name="zNew">
19610 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
19620 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
19630 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20 65 6e   to the UTF-8 en
19640 63 6f 64 65 64 20 73 74 72 69 6e 67 20 63 6f 6e  coded string con
19650 74 61 69 6e 69 6e 67 20 74 68 65 20 6e 65 77 0d  taining the new.
19660 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d  .        /// nam
19670 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
19680 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
19690 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
196a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
196b0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
196c0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
196d0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
196e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
196f0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
19700 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
19710 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20  de xRename(..   
19720 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
19730 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
19740 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 65 77 0d      IntPtr zNew.
19750 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
19760 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
19770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19790 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
197c0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
197d0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
197e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
197f0 73 65 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69  se methods provi
19800 64 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  de the virtual t
19810 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
19820 69 6f 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  ion an..        
19830 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79 20  /// opportunity 
19840 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65 73  to implement nes
19850 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
19860 2e 20 54 68 65 79 20 61 72 65 20 61 6c 77 61 79  . They are alway
19870 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  s..        /// o
19880 70 74 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c 6c  ptional and will
19890 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20   only be called 
198a0 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  in SQLite versio
198b0 6e 20 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74 65  n 3.7.7 and late
198c0 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
198d0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
198e0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
198f0 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78 53       /// When xS
19900 61 76 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69 73  avepoint(X,N) is
19910 20 69 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20 69   invoked, that i
19920 73 20 61 20 73 69 67 6e 61 6c 20 74 6f 20 74 68  s a signal to th
19930 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20  e virtual..     
19940 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20 74     /// table X t
19950 68 61 74 20 69 74 20 73 68 6f 75 6c 64 20 73 61  hat it should sa
19960 76 65 20 69 74 73 20 63 75 72 72 65 6e 74 20 73  ve its current s
19970 74 61 74 65 20 61 73 20 73 61 76 65 70 6f 69 6e  tate as savepoin
19980 74 20 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20 20  t N. A..        
19990 2f 2f 2f 20 73 75 62 73 65 71 75 65 6e 74 20 63  /// subsequent c
199a0 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  all to xRollback
199b0 54 6f 28 58 2c 52 29 20 6d 65 61 6e 73 20 74 68  To(X,R) means th
199c0 61 74 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  at the state of 
199d0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
199e0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
199f0 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 74 6f 20  hould return to 
19a00 77 68 61 74 20 69 74 20 77 61 73 20 77 68 65 6e  what it was when
19a10 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 52 29   xSavepoint(X,R)
19a20 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f   was..        //
19a30 2f 20 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20 54  / last called. T
19a40 68 65 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c  he call to xRoll
19a50 62 61 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c 6c  backTo(X,R) will
19a60 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 0d   invalidate all.
19a70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 61 76  .        /// sav
19a80 65 70 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e 52  epoints with N>R
19a90 3b 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  ; none of the in
19aa0 76 61 6c 69 64 65 64 20 73 61 76 65 70 6f 69 6e  valided savepoin
19ab0 74 73 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20  ts will be..    
19ac0 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62      /// rolled b
19ad0 61 63 6b 20 6f 72 20 72 65 6c 65 61 73 65 64 20  ack or released 
19ae0 77 69 74 68 6f 75 74 20 66 69 72 73 74 20 62 65  without first be
19af0 69 6e 67 20 72 65 69 6e 69 74 69 61 6c 69 7a 65  ing reinitialize
19b00 64 20 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20 20  d by a call..   
19b10 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61 76       /// to xSav
19b20 65 70 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c 6c  epoint(). A call
19b30 20 74 6f 20 78 52 65 6c 65 61 73 65 28 58 2c 4d   to xRelease(X,M
19b40 29 20 69 6e 76 61 6c 69 64 61 74 65 73 20 61 6c  ) invalidates al
19b50 6c 20 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20 20  l savepoints..  
19b60 20 20 20 20 20 20 2f 2f 2f 20 77 68 65 72 65 20        /// where 
19b70 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f  N>=M...        /
19b80 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
19b90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
19ba0 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65          /// None
19bb0 20 6f 66 20 74 68 65 20 78 53 61 76 65 70 6f 69   of the xSavepoi
19bc0 6e 74 28 29 2c 20 78 52 65 6c 65 61 73 65 28 29  nt(), xRelease()
19bd0 2c 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  , or xRollbackTo
19be0 28 29 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 0d  () methods will.
19bf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65  .        /// eve
19c00 72 20 62 65 20 63 61 6c 6c 65 64 20 65 78 63 65  r be called exce
19c10 70 74 20 69 6e 20 62 65 74 77 65 65 6e 20 63 61  pt in between ca
19c20 6c 6c 73 20 74 6f 20 78 42 65 67 69 6e 28 29 20  lls to xBegin() 
19c30 61 6e 64 20 65 69 74 68 65 72 0d 0a 20 20 20 20  and either..    
19c40 20 20 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28      /// xCommit(
19c50 29 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28 29  ) or xRollback()
19c60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
19c70 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
19c80 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
19c90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
19ca0 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
19cb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
19cc0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
19cd0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
19ce0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
19cf0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
19d00 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
19d10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
19d20 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69  m name="iSavepoi
19d30 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nt">..        //
19d40 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74  / This is an int
19d50 65 67 65 72 20 69 64 65 6e 74 69 66 69 65 72 20  eger identifier 
19d60 75 6e 64 65 72 20 77 68 69 63 68 20 74 68 65 20  under which the 
19d70 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
19d80 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e of..        //
19d90 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  / the virtual ta
19da0 62 6c 65 20 73 68 6f 75 6c 64 20 62 65 20 73 61  ble should be sa
19db0 76 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ved...        //
19dc0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
19dd0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
19de0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
19df0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
19e00 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
19e10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
19e20 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
19e30 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
19e40 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20  Savepoint(..    
19e50 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
19e60 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
19e70 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e     int iSavepoin
19e80 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
19e90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
19ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ee0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19ef0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
19f00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
19f10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
19f20 68 65 73 65 20 6d 65 74 68 6f 64 73 20 70 72 6f  hese methods pro
19f30 76 69 64 65 20 74 68 65 20 76 69 72 74 75 61 6c  vide the virtual
19f40 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
19f50 61 74 69 6f 6e 20 61 6e 0d 0a 20 20 20 20 20 20  ation an..      
19f60 20 20 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e 69 74    /// opportunit
19f70 79 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 6e  y to implement n
19f80 65 73 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f  ested transactio
19f90 6e 73 2e 20 54 68 65 79 20 61 72 65 20 61 6c 77  ns. They are alw
19fa0 61 79 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ays..        ///
19fb0 20 6f 70 74 69 6f 6e 61 6c 20 61 6e 64 20 77 69   optional and wi
19fc0 6c 6c 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65  ll only be calle
19fd0 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73  d in SQLite vers
19fe0 69 6f 6e 20 33 2e 37 2e 37 20 61 6e 64 20 6c 61  ion 3.7.7 and la
19ff0 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ter...        //
1a000 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1a010 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1a020 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20         /// When 
1a030 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 4e 29 20  xSavepoint(X,N) 
1a040 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 61 74  is invoked, that
1a050 20 69 73 20 61 20 73 69 67 6e 61 6c 20 74 6f 20   is a signal to 
1a060 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20  the virtual..   
1a070 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 58       /// table X
1a080 20 74 68 61 74 20 69 74 20 73 68 6f 75 6c 64 20   that it should 
1a090 73 61 76 65 20 69 74 73 20 63 75 72 72 65 6e 74  save its current
1a0a0 20 73 74 61 74 65 20 61 73 20 73 61 76 65 70 6f   state as savepo
1a0b0 69 6e 74 20 4e 2e 20 41 0d 0a 20 20 20 20 20 20  int N. A..      
1a0c0 20 20 2f 2f 2f 20 73 75 62 73 65 71 75 65 6e 74    /// subsequent
1a0d0 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61   call to xRollba
1a0e0 63 6b 54 6f 28 58 2c 52 29 20 6d 65 61 6e 73 20  ckTo(X,R) means 
1a0f0 74 68 61 74 20 74 68 65 20 73 74 61 74 65 20 6f  that the state o
1a100 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
1a110 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
1a120 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 74   should return t
1a130 6f 20 77 68 61 74 20 69 74 20 77 61 73 20 77 68  o what it was wh
1a140 65 6e 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c  en xSavepoint(X,
1a150 52 29 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20  R) was..        
1a160 2f 2f 2f 20 6c 61 73 74 20 63 61 6c 6c 65 64 2e  /// last called.
1a170 20 54 68 65 20 63 61 6c 6c 20 74 6f 20 78 52 6f   The call to xRo
1a180 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20 77 69  llbackTo(X,R) wi
1a190 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6c  ll invalidate al
1a1a0 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  l..        /// s
1a1b0 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20 4e  avepoints with N
1a1c0 3e 52 3b 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  >R; none of the 
1a1d0 69 6e 76 61 6c 69 64 65 64 20 73 61 76 65 70 6f  invalided savepo
1a1e0 69 6e 74 73 20 77 69 6c 6c 20 62 65 0d 0a 20 20  ints will be..  
1a1f0 20 20 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64        /// rolled
1a200 20 62 61 63 6b 20 6f 72 20 72 65 6c 65 61 73 65   back or release
1a210 64 20 77 69 74 68 6f 75 74 20 66 69 72 73 74 20  d without first 
1a220 62 65 69 6e 67 20 72 65 69 6e 69 74 69 61 6c 69  being reinitiali
1a230 7a 65 64 20 62 79 20 61 20 63 61 6c 6c 0d 0a 20  zed by a call.. 
1a240 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78 53         /// to xS
1a250 61 76 65 70 6f 69 6e 74 28 29 2e 20 41 20 63 61  avepoint(). A ca
1a260 6c 6c 20 74 6f 20 78 52 65 6c 65 61 73 65 28 58  ll to xRelease(X
1a270 2c 4d 29 20 69 6e 76 61 6c 69 64 61 74 65 73 20  ,M) invalidates 
1a280 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 0d 0a  all savepoints..
1a290 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68 65 72          /// wher
1a2a0 65 20 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20 20 20  e N>=M...       
1a2b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
1a2c0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
1a2d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ..        /// No
1a2e0 6e 65 20 6f 66 20 74 68 65 20 78 53 61 76 65 70  ne of the xSavep
1a2f0 6f 69 6e 74 28 29 2c 20 78 52 65 6c 65 61 73 65  oint(), xRelease
1a300 28 29 2c 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b  (), or xRollback
1a310 54 6f 28 29 20 6d 65 74 68 6f 64 73 20 77 69 6c  To() methods wil
1a320 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65  l..        /// e
1a330 76 65 72 20 62 65 20 63 61 6c 6c 65 64 20 65 78  ver be called ex
1a340 63 65 70 74 20 69 6e 20 62 65 74 77 65 65 6e 20  cept in between 
1a350 63 61 6c 6c 73 20 74 6f 20 78 42 65 67 69 6e 28  calls to xBegin(
1a360 29 20 61 6e 64 20 65 69 74 68 65 72 0d 0a 20 20  ) and either..  
1a370 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69        /// xCommi
1a380 74 28 29 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b  t() or xRollback
1a390 28 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ()...        ///
1a3a0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1a3b0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1a3c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1a3d0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
1a3e0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1a3f0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
1a400 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
1a410 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
1a420 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
1a430 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1a440 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1a450 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70  ram name="iSavep
1a460 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  oint">..        
1a470 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69  /// This is an i
1a480 6e 74 65 67 65 72 20 75 73 65 64 20 74 6f 20 69  nteger used to i
1a490 6e 64 69 63 61 74 65 20 74 68 61 74 20 61 6e 79  ndicate that any
1a4a0 20 73 61 76 65 64 20 73 74 61 74 65 73 20 77 69   saved states wi
1a4b0 74 68 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f  th an..        /
1a4c0 2f 2f 20 69 64 65 6e 74 69 66 69 65 72 20 67 72  // identifier gr
1a4d0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1a4e0 75 61 6c 20 74 6f 20 74 68 69 73 20 73 68 6f 75  ual to this shou
1a4f0 6c 64 20 62 65 20 64 65 6c 65 74 65 64 20 62 79  ld be deleted by
1a500 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1a510 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  / virtual table.
1a520 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1a530 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1a540 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1a550 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1a560 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1a570 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1a580 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1a590 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1a5a0 65 45 72 72 6f 72 43 6f 64 65 20 78 52 65 6c 65  eErrorCode xRele
1a5b0 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ase(..          
1a5c0 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
1a5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
1a5e0 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20   iSavepoint..   
1a5f0 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1a600 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1a610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1a650 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1a660 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1a670 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1a680 20 20 20 20 20 2f 2f 2f 20 54 68 65 73 65 20 6d       /// These m
1a690 65 74 68 6f 64 73 20 70 72 6f 76 69 64 65 20 74  ethods provide t
1a6a0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
1a6b0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1a6c0 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  an..        /// 
1a6d0 6f 70 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 69  opportunity to i
1a6e0 6d 70 6c 65 6d 65 6e 74 20 6e 65 73 74 65 64 20  mplement nested 
1a6f0 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 54 68  transactions. Th
1a700 65 79 20 61 72 65 20 61 6c 77 61 79 73 0d 0a 20  ey are always.. 
1a710 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f         /// optio
1a720 6e 61 6c 20 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c  nal and will onl
1a730 79 20 62 65 20 63 61 6c 6c 65 64 20 69 6e 20 53  y be called in S
1a740 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1a750 37 2e 37 20 61 6e 64 20 6c 61 74 65 72 2e 0d 0a  7.7 and later...
1a760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1a770 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1a780 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1a790 20 2f 2f 2f 20 57 68 65 6e 20 78 53 61 76 65 70   /// When xSavep
1a7a0 6f 69 6e 74 28 58 2c 4e 29 20 69 73 20 69 6e 76  oint(X,N) is inv
1a7b0 6f 6b 65 64 2c 20 74 68 61 74 20 69 73 20 61 20  oked, that is a 
1a7c0 73 69 67 6e 61 6c 20 74 6f 20 74 68 65 20 76 69  signal to the vi
1a7d0 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f  rtual..        /
1a7e0 2f 2f 20 74 61 62 6c 65 20 58 20 74 68 61 74 20  // table X that 
1a7f0 69 74 20 73 68 6f 75 6c 64 20 73 61 76 65 20 69  it should save i
1a800 74 73 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  ts current state
1a810 20 61 73 20 73 61 76 65 70 6f 69 6e 74 20 4e 2e   as savepoint N.
1a820 20 41 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   A..        /// 
1a830 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20  subsequent call 
1a840 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58  to xRollbackTo(X
1a850 2c 52 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ,R) means that t
1a860 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 0d  he state of the.
1a870 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72  .        /// vir
1a880 74 75 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c  tual table shoul
1a890 64 20 72 65 74 75 72 6e 20 74 6f 20 77 68 61 74  d return to what
1a8a0 20 69 74 20 77 61 73 20 77 68 65 6e 20 78 53 61   it was when xSa
1a8b0 76 65 70 6f 69 6e 74 28 58 2c 52 29 20 77 61 73  vepoint(X,R) was
1a8c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61  ..        /// la
1a8d0 73 74 20 63 61 6c 6c 65 64 2e 20 54 68 65 20 63  st called. The c
1a8e0 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  all to xRollback
1a8f0 54 6f 28 58 2c 52 29 20 77 69 6c 6c 20 69 6e 76  To(X,R) will inv
1a900 61 6c 69 64 61 74 65 20 61 6c 6c 0d 0a 20 20 20  alidate all..   
1a910 20 20 20 20 20 2f 2f 2f 20 73 61 76 65 70 6f 69       /// savepoi
1a920 6e 74 73 20 77 69 74 68 20 4e 3e 52 3b 20 6e 6f  nts with N>R; no
1a930 6e 65 20 6f 66 20 74 68 65 20 69 6e 76 61 6c 69  ne of the invali
1a940 64 65 64 20 73 61 76 65 70 6f 69 6e 74 73 20 77  ded savepoints w
1a950 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
1a960 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20  /// rolled back 
1a970 6f 72 20 72 65 6c 65 61 73 65 64 20 77 69 74 68  or released with
1a980 6f 75 74 20 66 69 72 73 74 20 62 65 69 6e 67 20  out first being 
1a990 72 65 69 6e 69 74 69 61 6c 69 7a 65 64 20 62 79  reinitialized by
1a9a0 20 61 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20   a call..       
1a9b0 20 2f 2f 2f 20 74 6f 20 78 53 61 76 65 70 6f 69   /// to xSavepoi
1a9c0 6e 74 28 29 2e 20 41 20 63 61 6c 6c 20 74 6f 20  nt(). A call to 
1a9d0 78 52 65 6c 65 61 73 65 28 58 2c 4d 29 20 69 6e  xRelease(X,M) in
1a9e0 76 61 6c 69 64 61 74 65 73 20 61 6c 6c 20 73 61  validates all sa
1a9f0 76 65 70 6f 69 6e 74 73 0d 0a 20 20 20 20 20 20  vepoints..      
1aa00 20 20 2f 2f 2f 20 77 68 65 72 65 20 4e 3e 3d 4d    /// where N>=M
1aa10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1aa20 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1aa30 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
1aa40 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20      /// None of 
1aa50 74 68 65 20 78 53 61 76 65 70 6f 69 6e 74 28 29  the xSavepoint()
1aa60 2c 20 78 52 65 6c 65 61 73 65 28 29 2c 20 6f 72  , xRelease(), or
1aa70 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 29 20 6d   xRollbackTo() m
1aa80 65 74 68 6f 64 73 20 77 69 6c 6c 0d 0a 20 20 20  ethods will..   
1aa90 20 20 20 20 20 2f 2f 2f 20 65 76 65 72 20 62 65       /// ever be
1aaa0 20 63 61 6c 6c 65 64 20 65 78 63 65 70 74 20 69   called except i
1aab0 6e 20 62 65 74 77 65 65 6e 20 63 61 6c 6c 73 20  n between calls 
1aac0 74 6f 20 78 42 65 67 69 6e 28 29 20 61 6e 64 20  to xBegin() and 
1aad0 65 69 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20  either..        
1aae0 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28 29 20 6f 72  /// xCommit() or
1aaf0 20 78 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20   xRollback()... 
1ab00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1ab10 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1ab20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1ab30 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1ab40 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
1ab50 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
1ab60 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
1ab70 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
1ab80 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
1ab90 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
1aba0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1abb0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1abc0 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e  me="iSavepoint">
1abd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1abe0 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  is is an integer
1abf0 20 69 64 65 6e 74 69 66 69 65 72 20 75 73 65 64   identifier used
1ac00 20 74 6f 20 73 70 65 63 69 66 79 20 61 20 73 70   to specify a sp
1ac10 65 63 69 66 69 63 20 73 61 76 65 64 0d 0a 20 20  ecific saved..  
1ac20 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 20        /// state 
1ac30 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
1ac40 74 61 62 6c 65 20 66 6f 72 20 69 74 20 74 6f 20  table for it to 
1ac50 72 65 73 74 6f 72 65 20 69 74 73 65 6c 66 20 62  restore itself b
1ac60 61 63 6b 20 74 6f 2c 20 77 68 69 63 68 0d 0a 20  ack to, which.. 
1ac70 20 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c         /// shoul
1ac80 64 20 61 6c 73 6f 20 68 61 76 65 20 74 68 65 20  d also have the 
1ac90 65 66 66 65 63 74 20 6f 66 20 64 65 6c 65 74 69  effect of deleti
1aca0 6e 67 20 61 6c 6c 20 73 61 76 65 64 20 73 74 61  ng all saved sta
1acb0 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20  tes with an..   
1acc0 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72       /// integer
1acd0 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61   identifier grea
1ace0 74 65 72 20 74 68 61 6e 20 74 68 69 73 20 6f 6e  ter than this on
1acf0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1ad00 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1ad10 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1ad20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1ad30 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1ad40 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1ad50 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1ad60 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1ad70 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f  iteErrorCode xRo
1ad80 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20  llbackTo(..     
1ad90 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
1ada0 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
1adb0 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
1adc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1add0 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
1ade0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
1adf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1ae40 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74    #region ISQLit
1ae50 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 20 49  eManagedModule I
1ae60 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f  nterface..    //
1ae70 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1ae80 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66   /// This interf
1ae90 61 63 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ace represents a
1aea0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
1aeb0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 72  mplementation wr
1aec0 69 74 74 65 6e 20 69 6e 0d 0a 20 20 20 20 2f 2f  itten in..    //
1aed0 2f 20 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d  / managed code..
1aee0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1aef0 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
1af00 69 6e 74 65 72 66 61 63 65 20 49 53 51 4c 69 74  interface ISQLit
1af10 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 0d 0a  eManagedModule..
1af20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
1af30 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1af40 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e        /// Return
1af50 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  s non-zero if th
1af60 65 20 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e schema for the
1af70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
1af80 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 20  as been..       
1af90 20 2f 2f 2f 20 64 65 63 6c 61 72 65 64 2e 0d 0a   /// declared...
1afa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1afb0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1afc0 62 6f 6f 6c 20 44 65 63 6c 61 72 65 64 20 7b 20  bool Declared { 
1afd0 67 65 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20  get; }....      
1afe0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1aff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b020 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1b030 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1b040 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1b050 52 65 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65  Returns the name
1b060 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 61   of the module a
1b070 73 20 69 74 20 77 61 73 20 72 65 67 69 73 74 65  s it was registe
1b080 72 65 64 20 77 69 74 68 20 74 68 65 20 53 51 4c  red with the SQL
1b090 69 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ite..        ///
1b0a0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
1b0b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1b0c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1b0d0 73 74 72 69 6e 67 20 4e 61 6d 65 20 7b 20 67 65  string Name { ge
1b0e0 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t; }....        
1b0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b130 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1b140 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1b150 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1b160 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
1b170 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
1b180 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1b190 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
1b1a0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
1b1b0 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d  le.xCreate" /> m
1b1c0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
1b1d0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1b1e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1b1f0 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74  am name="connect
1b200 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ion">..        /
1b210 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1b220 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
1b230 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  on" /> object in
1b240 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
1b250 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  d with..        
1b260 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20  /// the virtual 
1b270 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1b280 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1b290 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1b2a0 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61   name="pClientDa
1b2b0 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ta">..        //
1b2c0 2f 20 54 68 65 20 6e 61 74 69 76 65 20 75 73 65  / The native use
1b2d0 72 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61  r-data pointer a
1b2e0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1b2f0 68 69 73 20 6d 6f 64 75 6c 65 2c 20 61 73 20 69  his module, as i
1b300 74 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f  t was..        /
1b310 2f 2f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74  // provided to t
1b320 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
1b330 69 62 72 61 72 79 20 77 68 65 6e 20 74 68 65 20  ibrary when the 
1b340 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 20 69 6e  native module in
1b350 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
1b360 2f 2f 2f 20 77 61 73 20 63 72 65 61 74 65 64 2e  /// was created.
1b370 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b380 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1b390 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1b3a0 22 61 72 67 75 6d 65 6e 74 73 22 3e 0d 0a 20 20  "arguments">..  
1b3b0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f        /// The mo
1b3c0 64 75 6c 65 20 6e 61 6d 65 2c 20 64 61 74 61 62  dule name, datab
1b3d0 61 73 65 20 6e 61 6d 65 2c 20 76 69 72 74 75 61  ase name, virtua
1b3e0 6c 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 61 6e  l table name, an
1b3f0 64 20 61 6c 6c 20 6f 74 68 65 72 0d 0a 20 20 20  d all other..   
1b400 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e       /// argumen
1b410 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  ts passed to the
1b420 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
1b430 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
1b440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b450 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1b460 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1b470 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20  "table">..      
1b480 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
1b490 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  ss, this paramet
1b4a0 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
1b4b0 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  ied to contain t
1b4c0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1b4d0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
1b4e0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
1b4f0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1b500 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
1b510 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  h..        /// t
1b520 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
1b530 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1b540 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1b550 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1b560 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20  ="error">..     
1b570 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c     /// Upon fail
1b580 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ure, this parame
1b590 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
1b5a0 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
1b5b0 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  an error..      
1b5c0 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2e 0d 0a    /// message...
1b5d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1b5e0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1b5f0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1b600 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1b610 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1b620 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1b630 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1b640 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1b650 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28  rrorCode Create(
1b660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1b670 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
1b680 6f 6e 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a 20 69  onnection,  /* i
1b690 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1b6a0 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74    IntPtr pClient
1b6b0 44 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20  Data,           
1b6c0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1b6d0 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
1b6e0 72 67 75 6d 65 6e 74 73 2c 20 20 20 20 20 20 20  rguments,       
1b6f0 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
1b700 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51            ref SQ
1b710 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1b720 20 74 61 62 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a   table, /* out *
1b730 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
1b740 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20  ef string error 
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b760 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
1b770 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1b780 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1b790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1b7d0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1b7e0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1b7f0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1b800 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1b810 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1b820 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1b830 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1b840 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
1b850 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
1b860 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1b870 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1b880 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e  param name="conn
1b890 65 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20  ection">..      
1b8a0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
1b8b0 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65  ref="SQLiteConne
1b8c0 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74  ction" /> object
1b8d0 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
1b8e0 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20  ated with..     
1b8f0 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75     /// the virtu
1b900 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
1b910 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1b920 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1b930 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e  ram name="pClien
1b940 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20  tData">..       
1b950 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
1b960 75 73 65 72 2d 64 61 74 61 20 70 6f 69 6e 74 65  user-data pointe
1b970 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
1b980 68 20 74 68 69 73 20 6d 6f 64 75 6c 65 2c 20 61  h this module, a
1b990 73 20 69 74 20 77 61 73 0d 0a 20 20 20 20 20 20  s it was..      
1b9a0 20 20 2f 2f 2f 20 70 72 6f 76 69 64 65 64 20 74    /// provided t
1b9b0 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  o the SQLite cor
1b9c0 65 20 6c 69 62 72 61 72 79 20 77 68 65 6e 20 74  e library when t
1b9d0 68 65 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65  he native module
1b9e0 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20   instance..     
1b9f0 20 20 20 2f 2f 2f 20 77 61 73 20 63 72 65 61 74     /// was creat
1ba00 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
1ba10 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1ba20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1ba30 6d 65 3d 22 61 72 67 75 6d 65 6e 74 73 22 3e 0d  me="arguments">.
1ba40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1ba50 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 2c 20 64 61   module name, da
1ba60 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 76 69 72  tabase name, vir
1ba70 74 75 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 2c  tual table name,
1ba80 20 61 6e 64 20 61 6c 6c 20 6f 74 68 65 72 0d 0a   and all other..
1ba90 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75          /// argu
1baa0 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
1bab0 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
1bac0 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
1bad0 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
1bae0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1baf0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1bb00 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
1bb10 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
1bb20 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
1bb30 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
1bb40 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
1bb50 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
1bb60 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
1bb70 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1bb80 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1bb90 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 20  ance associated 
1bba0 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  with..        //
1bbb0 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  / the virtual ta
1bbc0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
1bbd0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1bbe0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1bbf0 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20  ame="error">..  
1bc00 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66        /// Upon f
1bc10 61 69 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72  ailure, this par
1bc20 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d  ameter must be m
1bc30 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61  odified to conta
1bc40 69 6e 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20  in an error..   
1bc50 20 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65       /// message
1bc60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1bc70 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1bc80 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1bc90 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
1bca0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
1bcb0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
1bcc0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1bcd0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
1bce0 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6e 6e  teErrorCode Conn
1bcf0 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
1bd00 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
1bd10 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 20  on connection,  
1bd20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1bd30 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c        IntPtr pCl
1bd40 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20  ientData,       
1bd50 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
1bd60 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1bd70 5b 5d 20 61 72 67 75 6d 65 6e 74 73 2c 20 20 20  [] arguments,   
1bd80 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
1bd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1bda0 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  f SQLiteVirtualT
1bdb0 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 6f  able table, /* o
1bdc0 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
1bdd0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
1bde0 72 6f 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ror             
1bdf0 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
1be00 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
1be10 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1be20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1be60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1be70 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1be80 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1be90 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
1bea0 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
1beb0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
1bec0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
1bed0 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e  veModule.xBestIn
1bee0 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  dex" /> method..
1bef0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
1bf00 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1bf10 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1bf20 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  ="table">..     
1bf30 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
1bf40 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
1bf50 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a  ualTable" /> obj
1bf60 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
1bf70 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
1bf80 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76   /// with this v
1bf90 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
1bfa0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1bfb0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1bfc0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e   <param name="in
1bfd0 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  dex">..        /
1bfe0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1bff0 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f  ="SQLiteIndex" /
1c000 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1c010 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c  e containing all
1c020 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1c030 2f 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69  / data for the i
1c040 6e 70 75 74 73 20 61 6e 64 20 6f 75 74 70 75 74  nputs and output
1c050 73 20 72 65 6c 61 74 69 6e 67 20 74 6f 20 69 6e  s relating to in
1c060 64 65 78 20 73 65 6c 65 63 74 69 6f 6e 2e 0d 0a  dex selection...
1c070 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1c080 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1c090 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1c0a0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1c0b0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1c0c0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1c0d0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1c0e0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1c0f0 72 72 6f 72 43 6f 64 65 20 42 65 73 74 49 6e 64  rrorCode BestInd
1c100 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ex(..           
1c110 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
1c120 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e  ble table, /* in
1c130 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1c140 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64   SQLiteIndex ind
1c150 65 78 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  ex         /* in
1c160 2c 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  , out */..      
1c170 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1c180 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1c190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1c1d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1c1e0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1c1f0 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
1c200 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
1c210 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
1c220 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1c230 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
1c240 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65  Module.xDisconne
1c250 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  ct" /> method...
1c260 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1c270 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1c280 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1c290 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20  "table">..      
1c2a0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
1c2b0 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
1c2c0 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
1c2d0 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
1c2e0 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
1c2f0 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69  /// with this vi
1c300 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
1c310 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1c320 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1c330 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1c340 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1c350 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1c360 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1c370 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1c380 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1c390 6f 72 43 6f 64 65 20 44 69 73 63 6f 6e 6e 65 63  orCode Disconnec
1c3a0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1c3b0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1c3c0 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a  le table /* in *
1c3d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
1c3e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1c3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c430 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1c440 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1c450 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1c460 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
1c470 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
1c480 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1c490 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
1c4a0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
1c4b0 78 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65 74  xDestroy" /> met
1c4c0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1c4d0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1c4e0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1c4f0 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a   name="table">..
1c500 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1c510 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
1c520 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
1c530 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1c540 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
1c550 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
1c560 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c  his virtual tabl
1c570 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1c580 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1c590 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1c5a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1c5b0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1c5c0 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1c5d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1c5e0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1c5f0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 73  iteErrorCode Des
1c600 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20  troy(..         
1c610 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
1c620 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69  Table table /* i
1c630 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1c640 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1c650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c690 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1c6a0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1c6b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1c6c0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
1c6d0 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
1c6e0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1c6f0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
1c700 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
1c710 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74  le.xOpen" /> met
1c720 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1c730 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1c740 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1c750 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a   name="table">..
1c760 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1c770 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
1c780 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
1c790 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1c7a0 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
1c7b0 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
1c7c0 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c  his virtual tabl
1c7d0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1c7e0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1c7f0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1c800 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20  e="cursor">..   
1c810 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
1c820 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
1c830 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
1c840 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
1c850 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
1c860 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
1c870 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1c880 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63  Cursor" /> objec
1c890 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63  t instance assoc
1c8a0 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  iated..        /
1c8b0 2f 2f 20 77 69 74 68 20 74 68 65 20 6e 65 77 6c  // with the newl
1c8c0 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c  y opened virtual
1c8d0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0d 0a   table cursor...
1c8e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1c8f0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1c900 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1c910 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1c920 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1c930 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1c940 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1c950 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1c960 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a  rrorCode Open(..
1c970 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1c980 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
1c990 61 62 6c 65 2c 20 20 20 20 20 20 20 20 20 20 20  able,           
1c9a0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1c9b0 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65        ref SQLite
1c9c0 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1c9d0 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 6f 75 74  or cursor /* out
1c9e0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1c9f0 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
1ca00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ca50 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1ca60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
1ca70 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
1ca80 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
1ca90 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
1caa0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
1cab0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
1cac0 65 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74  e.xClose" /> met
1cad0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1cae0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1caf0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1cb00 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d   name="cursor">.
1cb10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1cb20 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1cb30 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
1cb40 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
1cb50 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20  instance..      
1cb60 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
1cb70 20 77 69 74 68 20 74 68 65 20 70 72 65 76 69 6f   with the previo
1cb80 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74  usly opened virt
1cb90 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
1cba0 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
1cbb0 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20  /// used...     
1cbc0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1cbd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
1cbe0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1cbf0 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
1cc00 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
1cc10 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1cc20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1cc30 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1cc40 6f 64 65 20 43 6c 6f 73 65 28 0d 0a 20 20 20 20  ode Close(..    
1cc50 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
1cc60 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1cc70 20 63 75 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f   cursor /* in */
1cc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1cc90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1cca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cce0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1ccf0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1cd00 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1cd10 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
1cd20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
1cd30 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1cd40 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
1cd50 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
1cd60 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f  Filter" /> metho
1cd70 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1cd80 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1cd90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1cda0 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20  ame="cursor">.. 
1cdb0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1cdc0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1cdd0 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1cde0 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  or" /> object in
1cdf0 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
1ce00 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
1ce10 69 74 68 20 74 68 65 20 70 72 65 76 69 6f 75 73  ith the previous
1ce20 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61  ly opened virtua
1ce30 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74  l table cursor t
1ce40 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o be..        //
1ce50 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  / used...       
1ce60 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1ce70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1ce80 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 4e 75 6d  m name="indexNum
1ce90 62 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ber">..        /
1cea0 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74  // Number used t
1ceb0 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
1cec0 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
1ced0 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ex...        ///
1cee0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1cef0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1cf00 6d 65 3d 22 69 6e 64 65 78 53 74 72 69 6e 67 22  me="indexString"
1cf10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53  >..        /// S
1cf20 74 72 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65  tring used to he
1cf30 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20  lp identify the 
1cf40 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d  selected index..
1cf50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1cf60 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1cf70 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1cf80 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20  values">..      
1cf90 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 73    /// The values
1cfa0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1cfb0 6f 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  o each column in
1cfc0 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e   the selected in
1cfd0 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
1cfe0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1cff0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1d000 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1d010 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1d020 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1d030 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1d040 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1d050 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46  QLiteErrorCode F
1d060 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20  ilter(..        
1d070 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1d080 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
1d090 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  sor, /* in */.. 
1d0a0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
1d0b0 6e 64 65 78 4e 75 6d 62 65 72 2c 20 20 20 20 20  ndexNumber,     
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
1d0d0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1d0e0 20 20 73 74 72 69 6e 67 20 69 6e 64 65 78 53 74    string indexSt
1d0f0 72 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  ring,           
1d100 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
1d110 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
1d120 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73 20 20 20  alue[] values   
1d130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
1d140 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1d150 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1d160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d1a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1d1b0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1d1c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1d1d0 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1d1e0 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1d1f0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1d200 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1d210 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1d220 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f  .xNext" /> metho
1d230 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1d240 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1d250 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1d260 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20  ame="cursor">.. 
1d270 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1d280 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1d290 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1d2a0 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  or" /> object in
1d2b0 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
1d2c0 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
1d2d0 69 74 68 20 74 68 65 20 70 72 65 76 69 6f 75 73  ith the previous
1d2e0 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61  ly opened virtua
1d2f0 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74  l table cursor t
1d300 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o be..        //
1d310 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  / used...       
1d320 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1d330 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1d340 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1d350 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1d360 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1d370 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d380 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1d390 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1d3a0 65 20 4e 65 78 74 28 0d 0a 20 20 20 20 20 20 20  e Next(..       
1d3b0 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
1d3c0 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
1d3d0 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  rsor /* in */.. 
1d3e0 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1d3f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1d400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1d450 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1d460 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1d470 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20  od is called in 
1d480 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d  response to the.
1d490 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
1d4a0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
1d4b0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66  ativeModule.xEof
1d4c0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
1d4d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1d4e0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1d4f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
1d500 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
1d510 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1d520 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
1d530 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e  lTableCursor" />
1d540 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1d550 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73  ..        /// as
1d560 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1d570 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  e previously ope
1d580 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ned virtual tabl
1d590 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a  e cursor to be..
1d5a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64          /// used
1d5b0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1d5c0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1d5d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1d5e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
1d5f0 7a 65 72 6f 20 69 66 20 6e 6f 20 6d 6f 72 65 20  zero if no more 
1d600 72 6f 77 73 20 61 72 65 20 61 76 61 69 6c 61 62  rows are availab
1d610 6c 65 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77 69  le; zero otherwi
1d620 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
1d630 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1d640 20 20 20 20 20 62 6f 6f 6c 20 45 6f 66 28 0d 0a       bool Eof(..
1d650 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1d660 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
1d670 72 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 69  rsor cursor /* i
1d680 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1d690 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1d6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1d6f0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1d700 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1d710 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
1d720 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
1d730 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1d740 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
1d750 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
1d760 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d  le.xColumn" /> m
1d770 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
1d780 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1d790 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1d7a0 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22  am name="cursor"
1d7b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1d7c0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
1d7d0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1d7e0 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63  Cursor" /> objec
1d7f0 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20  t instance..    
1d800 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
1d810 65 64 20 77 69 74 68 20 74 68 65 20 70 72 65 76  ed with the prev
1d820 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69  iously opened vi
1d830 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73  rtual table curs
1d840 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20  or to be..      
1d850 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20    /// used...   
1d860 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1d870 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1d880 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74  param name="cont
1d890 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ext">..        /
1d8a0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1d8b0 3d 22 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 22  ="SQLiteContext"
1d8c0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
1d8d0 6e 63 65 20 74 6f 20 62 65 20 75 73 65 64 20 66  nce to be used f
1d8e0 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
1d8f0 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 73 70  returning the sp
1d900 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76  ecified column v
1d910 61 6c 75 65 20 74 6f 20 74 68 65 20 53 51 4c 69  alue to the SQLi
1d920 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
1d930 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d940 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1d950 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1d960 22 69 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20  "index">..      
1d970 20 20 2f 2f 2f 20 54 68 65 20 7a 65 72 6f 2d 62    /// The zero-b
1d980 61 73 65 64 20 69 6e 64 65 78 20 63 6f 72 72 65  ased index corre
1d990 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20  sponding to the 
1d9a0 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 69 6e  column containin
1d9b0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
1d9c0 2f 2f 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72  // value to be r
1d9d0 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20  eturned...      
1d9e0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1d9f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1da00 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1da10 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1da20 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1da30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1da40 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1da50 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1da60 64 65 20 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20  de Column(..    
1da70 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
1da80 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1da90 20 63 75 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a   cursor, /* in *
1daa0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  /..            S
1dab0 51 4c 69 74 65 43 6f 6e 74 65 78 74 20 63 6f 6e  QLiteContext con
1dac0 74 65 78 74 2c 20 20 20 20 20 20 20 20 20 20 20  text,           
1dad0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1dae0 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20        int index 
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
1db10 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1db20 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1db30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1db80 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1db90 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1dba0 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
1dbb0 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
1dbc0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1dbd0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
1dbe0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
1dbf0 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  owId" /> method.
1dc00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1dc10 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1dc20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1dc30 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20  e="cursor">..   
1dc40 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1dc50 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
1dc60 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1dc70 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1dc80 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
1dc90 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
1dca0 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  h the previously
1dcb0 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20   opened virtual 
1dcc0 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20  table cursor to 
1dcd0 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1dce0 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
1dcf0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1dd00 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1dd10 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20  name="rowId">.. 
1dd20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
1dd30 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
1dd40 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
1dd50 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74  modified to cont
1dd60 61 69 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a  ain the unique..
1dd70 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65          /// inte
1dd80 67 65 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69  ger row identifi
1dd90 65 72 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  er for the curre
1dda0 6e 74 20 72 6f 77 20 66 6f 72 20 74 68 65 20 73  nt row for the s
1ddb0 70 65 63 69 66 69 65 64 20 63 75 72 73 6f 72 2e  pecified cursor.
1ddc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1ddd0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1dde0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1ddf0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1de00 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1de10 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1de20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1de30 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1de40 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 77 49 64  eErrorCode RowId
1de50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
1de60 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1de70 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 20  eCursor cursor, 
1de80 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1de90 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72        ref long r
1dea0 6f 77 49 64 20 20 20 20 20 20 20 20 20 20 20 20  owId            
1deb0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f         /* out */
1dec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1ded0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1dee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1def0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1df30 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1df40 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1df50 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
1df60 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
1df70 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1df80 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
1df90 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
1dfa0 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Update" /> metho
1dfb0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1dfc0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1dfd0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1dfe0 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
1dff0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1e000 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1e010 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
1e020 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1e030 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
1e040 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
1e050 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
1e060 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e070 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1e080 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e090 22 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20  "values">..     
1e0a0 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79     /// The array
1e0b0 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53   of <see cref="S
1e0c0 51 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f  QLiteValue" /> o
1e0d0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20  bject instances 
1e0e0 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..    
1e0f0 20 20 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77 20      /// the new 
1e100 6f 72 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c 75  or modified colu
1e110 6d 6e 20 76 61 6c 75 65 73 2c 20 69 66 20 61 6e  mn values, if an
1e120 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
1e130 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1e140 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1e150 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20  e="rowId">..    
1e160 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
1e170 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d  cess, this param
1e180 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
1e190 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  ified to contain
1e1a0 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20 20   the unique..   
1e1b0 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72       /// integer
1e1c0 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72 20   row identifier 
1e1d0 66 6f 72 20 74 68 65 20 72 6f 77 20 74 68 61 74  for the row that
1e1e0 20 77 61 73 20 69 6e 73 65 72 74 65 64 2c 20 69   was inserted, i
1e1f0 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20  f any...        
1e200 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1e210 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1e220 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1e230 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1e240 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1e250 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1e260 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1e270 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1e280 20 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20   Update(..      
1e290 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1e2a0 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20  ualTable table, 
1e2b0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1e2c0 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75        SQLiteValu
1e2d0 65 5b 5d 20 76 61 6c 75 65 73 2c 20 20 20 20 20  e[] values,     
1e2e0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1e2f0 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72        ref long r
1e300 6f 77 49 64 20 20 20 20 20 20 20 20 20 20 20 20  owId            
1e310 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  /* out */..     
1e320 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1e330 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1e340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e380 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1e390 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1e3a0 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
1e3b0 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
1e3c0 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
1e3d0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
1e3e0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
1e3f0 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 22 20  eModule.xBegin" 
1e400 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
1e410 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1e420 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1e430 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
1e440 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
1e450 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1e460 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
1e470 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
1e480 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
1e490 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
1e4a0 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61  with this virtua
1e4b0 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
1e4c0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1e4d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1e4e0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1e4f0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1e500 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1e510 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1e520 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1e530 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1e540 64 65 20 42 65 67 69 6e 28 0d 0a 20 20 20 20 20  de Begin(..     
1e550 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
1e560 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20  tualTable table 
1e570 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1e580 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1e590 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1e5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e5e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1e5f0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1e600 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
1e610 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
1e620 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
1e630 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1e640 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
1e650 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e  Module.xSync" />
1e660 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
1e670 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1e680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1e690 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
1e6a0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1e6b0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
1e6c0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1e6d0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
1e6e0 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
1e6f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
1e700 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
1e710 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1e720 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1e730 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1e740 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1e750 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1e760 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1e770 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1e780 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1e790 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1e7a0 20 53 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20   Sync(..        
1e7b0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1e7c0 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20  lTable table /* 
1e7d0 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
1e7e0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
1e7f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1e800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e830 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e840 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1e850 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1e860 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
1e870 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65  lled in response
1e880 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
1e890 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
1e8a0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
1e8b0 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20  ule.xCommit" /> 
1e8c0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
1e8d0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1e8e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1e8f0 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
1e900 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1e910 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
1e920 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1e930 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1e940 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
1e950 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
1e960 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
1e970 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
1e980 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1e990 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1e9a0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
1e9b0 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
1e9c0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
1e9d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
1e9e0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1e9f0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1ea00 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20  Commit(..       
1ea10 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
1ea20 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a  alTable table /*
1ea30 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1ea40 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1ea50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1ea60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1eaa0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1eab0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1eac0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1ead0 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1eae0 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1eaf0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1eb00 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1eb10 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20  dule.xRollback" 
1eb20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
1eb30 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1eb40 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1eb50 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
1eb60 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
1eb70 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1eb80 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
1eb90 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
1eba0 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
1ebb0 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
1ebc0 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61  with this virtua
1ebd0 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
1ebe0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1ebf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1ec00 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1ec10 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1ec20 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1ec30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ec40 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1ec50 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1ec60 64 65 20 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20  de Rollback(..  
1ec70 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1ec80 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
1ec90 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  le /* in */..   
1eca0 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1ecb0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1ecc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ecd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ece0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ecf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ed00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1ed10 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1ed20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
1ed30 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
1ed40 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
1ed50 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
1ed60 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
1ed70 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  iveModule.xFindF
1ed80 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68  unction" /> meth
1ed90 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
1eda0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1edb0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1edc0 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20  name="table">.. 
1edd0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1ede0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1edf0 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e  VirtualTable" />
1ee00 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1ee10 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
1ee20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68       /// with th
1ee30 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  is virtual table
1ee40 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ee50 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1ee60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1ee70 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22  ="argumentCount"
1ee80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1ee90 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
1eea0 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75  uments to the fu
1eeb0 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f 75  nction being sou
1eec0 67 68 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ght...        //
1eed0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1eee0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1eef0 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20  ame="name">..   
1ef00 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d       /// The nam
1ef10 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
1ef20 6e 20 62 65 69 6e 67 20 73 6f 75 67 68 74 2e 0d  n being sought..
1ef30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1ef40 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1ef50 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1ef60 66 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20  function">..    
1ef70 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
1ef80 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d  cess, this param
1ef90 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
1efa0 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  ified to contain
1efb0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1efc0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
1efd0 69 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  iteFunction" /> 
1efe0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1eff0 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 0d  responsible for.
1f000 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70  .        /// imp
1f010 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 73 70  lementing the sp
1f020 65 63 69 66 69 65 64 20 66 75 6e 63 74 69 6f 6e  ecified function
1f030 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1f040 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1f050 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1f060 3d 22 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d  ="pClientData">.
1f070 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f  .        /// Upo
1f080 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20  n success, this 
1f090 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62  parameter must b
1f0a0 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f  e modified to co
1f0b0 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ntain the..     
1f0c0 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 75 73     /// native us
1f0d0 65 72 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20  er-data pointer 
1f0e0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d  associated with.
1f0f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1f100 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 66 75 6e  ramref name="fun
1f110 63 74 69 6f 6e 22 20 2f 3e 2e 0d 0a 20 20 20 20  ction" />...    
1f120 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1f130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1f140 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1f150 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
1f160 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
1f170 75 6e 63 74 69 6f 6e 20 77 61 73 20 66 6f 75 6e  unction was foun
1f180 64 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73  d; zero otherwis
1f190 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1f1a0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1f1b0 20 20 20 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e      bool FindFun
1f1c0 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
1f1d0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1f1e0 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20  lTable table,   
1f1f0 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
1f200 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d         int argum
1f210 65 6e 74 43 6f 75 6e 74 2c 20 20 20 20 20 20 20  entCount,       
1f220 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
1f230 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1f240 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
1f250 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
1f260 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1f270 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20   SQLiteFunction 
1f280 66 75 6e 63 74 69 6f 6e 2c 20 2f 2a 20 6f 75 74  function, /* out
1f290 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1f2a0 20 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69   ref IntPtr pCli
1f2b0 65 6e 74 44 61 74 61 20 20 20 20 20 20 20 2f 2a  entData       /*
1f2c0 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20   out */..       
1f2d0 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
1f2e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f330 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1f340 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1f350 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
1f360 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
1f370 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
1f380 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
1f390 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
1f3a0 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f  odule.xRename" /
1f3b0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
1f3c0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1f3d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1f3e0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
1f3f0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
1f400 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1f410 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1f420 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
1f430 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
1f440 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
1f450 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c  ith this virtual
1f460 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
1f470 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1f480 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1f490 6d 20 6e 61 6d 65 3d 22 6e 65 77 4e 61 6d 65 22  m name="newName"
1f4a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1f4b0 68 65 20 6e 65 77 20 6e 61 6d 65 20 66 6f 72 20  he new name for 
1f4c0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1f4d0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1f4e0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1f4f0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1f500 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1f510 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1f520 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1f530 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1f540 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1f550 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6e  iteErrorCode Ren
1f560 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
1f570 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1f580 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69  able table, /* i
1f590 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1f5a0 20 20 73 74 72 69 6e 67 20 6e 65 77 4e 61 6d 65    string newName
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
1f5c0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1f5d0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1f5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f620 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f630 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1f640 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1f650 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
1f660 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
1f670 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1f680 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
1f690 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
1f6a0 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f  le.xSavepoint" /
1f6b0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
1f6c0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1f6d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1f6e0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
1f6f0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
1f700 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1f710 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1f720 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
1f730 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
1f740 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
1f750 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c  ith this virtual
1f760 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
1f770 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1f780 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1f790 6d 20 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e  m name="savepoin
1f7a0 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
1f7b0 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65   This is an inte
1f7c0 67 65 72 20 69 64 65 6e 74 69 66 69 65 72 20 75  ger identifier u
1f7d0 6e 64 65 72 20 77 68 69 63 68 20 74 68 65 20 74  nder which the t
1f7e0 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
1f7f0 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   of..        ///
1f800 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
1f810 6c 65 20 73 68 6f 75 6c 64 20 62 65 20 73 61 76  le should be sav
1f820 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
1f830 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1f840 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1f850 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
1f860 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
1f870 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
1f880 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
1f890 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
1f8a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 61  LiteErrorCode Sa
1f8b0 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20  vepoint(..      
1f8c0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1f8d0 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20  ualTable table, 
1f8e0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1f8f0 20 20 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f        int savepo
1f900 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20  int             
1f910 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1f920 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1f930 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f980 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1f990 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1f9a0 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
1f9b0 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
1f9c0 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
1f9d0 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1f9e0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
1f9f0 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22  Module.xRelease"
1fa00 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
1fa10 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
1fa20 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1fa30 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61   <param name="ta
1fa40 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
1fa50 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1fa60 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
1fa70 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
1fa80 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
1fa90 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
1faa0 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75   with this virtu
1fab0 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
1fac0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1fad0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1fae0 72 61 6d 20 6e 61 6d 65 3d 22 73 61 76 65 70 6f  ram name="savepo
1faf0 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  int">..        /
1fb00 2f 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e  // This is an in
1fb10 74 65 67 65 72 20 75 73 65 64 20 74 6f 20 69 6e  teger used to in
1fb20 64 69 63 61 74 65 20 74 68 61 74 20 61 6e 79 20  dicate that any 
1fb30 73 61 76 65 64 20 73 74 61 74 65 73 20 77 69 74  saved states wit
1fb40 68 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  h an..        //
1fb50 2f 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65  / identifier gre
1fb60 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1fb70 61 6c 20 74 6f 20 74 68 69 73 20 73 68 6f 75 6c  al to this shoul
1fb80 64 20 62 65 20 64 65 6c 65 74 65 64 20 62 79 20  d be deleted by 
1fb90 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1fba0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
1fbb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1fbc0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1fbd0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1fbe0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
1fbf0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
1fc00 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
1fc10 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1fc20 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1fc30 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73  ErrorCode Releas
1fc40 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1fc50 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1fc60 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20  le table, /* in 
1fc70 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1fc80 69 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 20 20  int savepoint   
1fc90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
1fca0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1fcb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1fcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd00 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fd10 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1fd20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1fd30 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1fd40 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1fd50 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1fd60 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1fd70 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1fd80 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e  .xRollbackTo" />
1fd90 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
1fda0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1fdb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1fdc0 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
1fdd0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1fde0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
1fdf0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1fe00 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
1fe10 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
1fe20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
1fe30 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
1fe40 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1fe50 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1fe60 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1fe70 20 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74   name="savepoint
1fe80 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1fe90 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67  This is an integ
1fea0 65 72 20 69 64 65 6e 74 69 66 69 65 72 20 75 73  er identifier us
1feb0 65 64 20 74 6f 20 73 70 65 63 69 66 79 20 61 20  ed to specify a 
1fec0 73 70 65 63 69 66 69 63 20 73 61 76 65 64 0d 0a  specific saved..
1fed0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74          /// stat
1fee0 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
1fef0 6c 20 74 61 62 6c 65 20 66 6f 72 20 69 74 20 74  l table for it t
1ff00 6f 20 72 65 73 74 6f 72 65 20 69 74 73 65 6c 66  o restore itself
1ff10 20 62 61 63 6b 20 74 6f 2c 20 77 68 69 63 68 0d   back to, which.
1ff20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f  .        /// sho
1ff30 75 6c 64 20 61 6c 73 6f 20 68 61 76 65 20 74 68  uld also have th
1ff40 65 20 65 66 66 65 63 74 20 6f 66 20 64 65 6c 65  e effect of dele
1ff50 74 69 6e 67 20 61 6c 6c 20 73 61 76 65 64 20 73  ting all saved s
1ff60 74 61 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20  tates with an.. 
1ff70 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67         /// integ
1ff80 65 72 20 69 64 65 6e 74 69 66 69 65 72 20 67 72  er identifier gr
1ff90 65 61 74 65 72 20 74 68 61 6e 20 74 68 69 73 20  eater than this 
1ffa0 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  one...        //
1ffb0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1ffc0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1ffd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1ffe0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1fff0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
20000 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
20010 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
20020 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52  QLiteErrorCode R
20030 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20  ollbackTo(..    
20040 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
20050 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
20060 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
20070 20 20 20 20 20 20 20 20 69 6e 74 20 73 61 76 65          int save
20080 70 6f 69 6e 74 20 20 20 20 20 20 20 20 20 20 20  point           
20090 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
200a0 20 20 20 20 20 20 20 20 29 3b 0d 0a 20 20 20 20          );..    
200b0 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
200c0 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
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 2f  ////////////////
200f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20110 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
20120 69 6f 6e 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79  ion SQLiteMemory
20130 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20   Static Class.. 
20140 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
20150 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63  ..    /// This c
20160 6c 61 73 73 20 63 6f 6e 74 61 69 6e 73 20 73 74  lass contains st
20170 61 74 69 63 20 6d 65 74 68 6f 64 73 20 74 68 61  atic methods tha
20180 74 20 61 72 65 20 75 73 65 64 20 74 6f 20 61 6c  t are used to al
20190 6c 6f 63 61 74 65 2c 0d 0a 20 20 20 20 2f 2f 2f  locate,..    ///
201a0 20 6d 61 6e 69 70 75 6c 61 74 65 2c 20 61 6e 64   manipulate, and
201b0 20 66 72 65 65 20 6e 61 74 69 76 65 20 6d 65 6d   free native mem
201c0 6f 72 79 20 70 72 6f 76 69 64 65 64 20 62 79 20  ory provided by 
201d0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
201e0 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f  library...    //
201f0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
20200 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
20210 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 65  c class SQLiteMe
20220 6d 6f 72 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  mory..    {..   
20230 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
20240 76 61 74 65 20 44 61 74 61 0d 0a 23 69 66 20 54  vate Data..#if T
20250 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45  RACK_MEMORY_BYTE
20260 53 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  S..        /// <
20270 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
20280 20 20 2f 2f 2f 20 54 68 69 73 20 6f 62 6a 65 63    /// This objec
20290 74 20 69 6e 73 74 61 6e 63 65 20 69 73 20 75 73  t instance is us
202a0 65 64 20 74 6f 20 73 79 6e 63 68 72 6f 6e 69 7a  ed to synchroniz
202b0 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
202c0 6f 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f  other..        /
202d0 2f 2f 20 73 74 61 74 69 63 20 66 69 65 6c 64 73  // static fields
202e0 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d   of this class..
202f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
20300 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
20310 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
20320 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20  object syncRoot 
20330 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d  = new object();.
20340 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
20350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20390 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
203a0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
203b0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 6f 74       /// The tot
203c0 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74  al number of out
203d0 73 74 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20  standing memory 
203e0 62 79 74 65 73 20 61 6c 6c 6f 63 61 74 65 64 20  bytes allocated 
203f0 62 79 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  by this..       
20400 20 2f 2f 2f 20 63 6c 61 73 73 20 75 73 69 6e 67   /// class using
20410 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
20420 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
20430 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
20440 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
20450 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 62 79  te static int by
20460 74 65 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 0d  tesAllocated;...
20470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
20480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
204d0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
204e0 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 78 69 6d     /// The maxim
204f0 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74  um number of out
20500 73 74 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20  standing memory 
20510 62 79 74 65 73 20 65 76 65 72 20 61 6c 6c 6f 63  bytes ever alloc
20520 61 74 65 64 20 62 79 0d 0a 20 20 20 20 20 20 20  ated by..       
20530 20 2f 2f 2f 20 74 68 69 73 20 63 6c 61 73 73 20   /// this class 
20540 75 73 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65  using the SQLite
20550 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
20560 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
20570 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
20580 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
20590 6e 74 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41  nt maximumBytesA
205a0 6c 6c 6f 63 61 74 65 64 3b 0d 0a 23 65 6e 64 69  llocated;..#endi
205b0 66 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  f..        #endr
205c0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
205d0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
205e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20610 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20620 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 65 6d 6f      #region Memo
20630 72 79 20 41 6c 6c 6f 63 61 74 69 6f 6e 20 48 65  ry Allocation He
20640 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
20650 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
20660 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
20670 20 41 6c 6c 6f 63 61 74 65 73 20 61 74 20 6c 65   Allocates at le
20680 61 73 74 20 74 68 65 20 73 70 65 63 69 66 69 65  ast the specifie
20690 64 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  d number of byte
206a0 73 20 6f 66 20 6e 61 74 69 76 65 20 6d 65 6d 6f  s of native memo
206b0 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ry..        /// 
206c0 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 63  via the SQLite c
206d0 6f 72 65 20 6c 69 62 72 61 72 79 20 73 71 6c 69  ore library sqli
206e0 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e  te3_malloc() fun
206f0 63 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ction and return
20700 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  s..        /// t
20710 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6e 61 74  he resulting nat
20720 69 76 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20  ive pointer...  
20730 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
20740 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
20750 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
20760 69 7a 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ize">..        /
20770 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
20780 20 62 79 74 65 73 20 74 6f 20 61 6c 6c 6f 63 61   bytes to alloca
20790 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  te...        ///
207a0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
207b0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
207c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
207d0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
207e0 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
207f0 61 20 62 6c 6f 63 6b 20 6f 66 20 6d 65 6d 6f 72  a block of memor
20800 79 20 6f 66 20 61 74 20 6c 65 61 73 74 20 74 68  y of at least th
20810 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
20820 70 65 63 69 66 69 65 64 20 73 69 7a 65 20 2d 4f  pecified size -O
20830 52 2d 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  R- <see cref="In
20840 74 50 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 69 66  tPtr.Zero" /> if
20850 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 6f 75 6c   the memory coul
20860 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  d..        /// n
20870 6f 74 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e  ot be allocated.
20880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
20890 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
208a0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
208b0 49 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 28  IntPtr Allocate(
208c0 69 6e 74 20 73 69 7a 65 29 0d 0a 20 20 20 20 20  int size)..     
208d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
208e0 20 20 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79    IntPtr pMemory
208f0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
20900 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
20910 61 6c 6c 6f 63 28 73 69 7a 65 29 3b 0d 0a 0d 0a  alloc(size);....
20920 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59  #if TRACK_MEMORY
20930 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20  _BYTES..        
20940 20 20 20 20 69 66 20 28 70 4d 65 6d 6f 72 79 20      if (pMemory 
20950 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
20960 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20980 69 6e 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20  int blockSize = 
20990 53 69 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a  Size(pMemory);..
209a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
209b0 20 20 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20    if (blockSize 
209c0 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
209d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63               loc
209f0 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
20a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20a20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
20a30 65 73 41 6c 6c 6f 63 61 74 65 64 20 2b 3d 20 62  esAllocated += b
20a40 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20  lockSize;....   
20a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a60 20 20 20 20 20 69 66 20 28 62 79 74 65 73 41 6c       if (bytesAl
20a70 6c 6f 63 61 74 65 64 20 3e 20 6d 61 78 69 6d 75  located > maximu
20a80 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 29  mBytesAllocated)
20a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61                ma
20ab0 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61  ximumBytesAlloca
20ac0 74 65 64 20 3d 20 62 79 74 65 73 41 6c 6c 6f 63  ted = bytesAlloc
20ad0 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ated;..         
20ae0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
20af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
20b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20b10 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
20b20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65        return pMe
20b30 6d 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 7d  mory;..        }
20b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b90 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
20ba0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20bb0 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61        /// Gets a
20bc0 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  nd returns the a
20bd0 63 74 75 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  ctual size of th
20be0 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f  e specified memo
20bf0 72 79 20 62 6c 6f 63 6b 20 74 68 61 74 0d 0a 20  ry block that.. 
20c00 20 20 20 20 20 20 20 2f 2f 2f 20 77 61 73 20 70         /// was p
20c10 72 65 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e  reviously obtain
20c20 65 64 20 66 72 6f 6d 20 74 68 65 20 3c 73 65 65  ed from the <see
20c30 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65 22   cref="Allocate"
20c40 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
20c50 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
20c60 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
20c70 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 4d   <param name="pM
20c80 65 6d 6f 72 79 22 3e 0d 0a 20 20 20 20 20 20 20  emory">..       
20c90 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
20ca0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d  pointer to the m
20cb0 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65 76  emory block prev
20cc0 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20  iously obtained 
20cd0 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20  from the..      
20ce0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
20cf0 22 41 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65  "Allocate" /> me
20d00 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
20d10 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
20d20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
20d30 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
20d40 54 68 65 20 61 63 74 75 61 6c 20 73 69 7a 65 2c  The actual size,
20d50 20 69 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68   in bytes, of th
20d60 65 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 73  e memory block s
20d70 70 65 63 69 66 69 65 64 20 76 69 61 20 74 68 65  pecified via the
20d80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61  ..        /// na
20d90 74 69 76 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 20  tive pointer... 
20da0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
20db0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
20dc0 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74  ublic static int
20dd0 20 53 69 7a 65 28 49 6e 74 50 74 72 20 70 4d 65   Size(IntPtr pMe
20de0 6d 6f 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b  mory)..        {
20df0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
20e00 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
20e10 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
20e20 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
20e30 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 73 69  qlite3_malloc_si
20e40 7a 65 5f 69 6e 74 65 72 6f 70 28 70 4d 65 6d 6f  ze_interop(pMemo
20e50 72 79 29 3b 0d 0a 23 65 6c 69 66 20 54 52 41 43  ry);..#elif TRAC
20e60 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a  K_MEMORY_BYTES..
20e70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
20e80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48              // H
20e90 41 43 4b 3a 20 4f 6b 2c 20 77 65 20 63 61 6e 6e  ACK: Ok, we cann
20ea0 6f 74 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  ot determine the
20eb0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d   size of the mem
20ec0 6f 72 79 20 62 6c 6f 63 6b 3b 0d 0a 20 20 20 20  ory block;..    
20ed0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
20ee0 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74   therefore, just
20ef0 20 74 72 61 63 6b 20 6e 75 6d 62 65 72 20 6f 66   track number of
20f00 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 6e 73   allocations ins
20f10 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  tead...         
20f20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
20f30 20 20 20 72 65 74 75 72 6e 20 28 70 4d 65 6d 6f     return (pMemo
20f40 72 79 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ry != IntPtr.Zer
20f50 6f 29 20 3f 20 31 20 3a 20 30 3b 0d 0a 23 65 6c  o) ? 1 : 0;..#el
20f60 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
20f70 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69  return 0;..#endi
20f80 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
20f90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20fe0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20ff0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
21000 20 20 2f 2f 2f 20 46 72 65 65 73 20 61 20 6d 65    /// Frees a me
21010 6d 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65 76 69  mory block previ
21020 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66  ously obtained f
21030 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20  rom the..       
21040 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
21050 41 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74  Allocate" /> met
21060 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
21070 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
21080 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
21090 20 6e 61 6d 65 3d 22 70 4d 65 6d 6f 72 79 22 3e   name="pMemory">
210a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
210b0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
210c0 20 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 62   to the memory b
210d0 6c 6f 63 6b 20 70 72 65 76 69 6f 75 73 6c 79 20  lock previously 
210e0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68  obtained from th
210f0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
21100 73 65 65 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61  see cref="Alloca
21110 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
21120 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
21130 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
21140 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
21150 20 46 72 65 65 28 49 6e 74 50 74 72 20 70 4d 65   Free(IntPtr pMe
21160 6d 6f 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b  mory)..        {
21170 0d 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f  ..#if TRACK_MEMO
21180 52 59 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20  RY_BYTES..      
21190 20 20 20 20 20 20 69 66 20 28 70 4d 65 6d 6f 72        if (pMemor
211a0 79 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  y != IntPtr.Zero
211b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
211c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
211d0 20 20 69 6e 74 20 62 6c 6f 63 6b 53 69 7a 65 20    int blockSize 
211e0 3d 20 53 69 7a 65 28 70 4d 65 6d 6f 72 79 29 3b  = Size(pMemory);
211f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21200 20 20 20 20 69 66 20 28 62 6c 6f 63 6b 53 69 7a      if (blockSiz
21210 65 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  e > 0)..        
21220 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
21240 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
21250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21260 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
21280 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20 2d 3d  ytesAllocated -=
21290 20 62 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 20 20 20   blockSize;..   
212a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
212c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
212d0 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
212e0 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
212f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
21300 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 4d 65  sqlite3_free(pMe
21310 6d 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  mory);..        
21320 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
21330 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
21340 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
21350 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
213a0 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
213b0 51 4c 69 74 65 53 74 72 69 6e 67 20 53 74 61 74  QLiteString Stat
213c0 69 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  ic Class..    //
213d0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
213e0 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
213f0 63 6f 6e 74 61 69 6e 73 20 73 74 61 74 69 63 20  contains static 
21400 6d 65 74 68 6f 64 73 20 74 68 61 74 20 61 72 65  methods that are
21410 20 75 73 65 64 20 74 6f 20 64 65 61 6c 20 77 69   used to deal wi
21420 74 68 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f  th native..    /
21430 2f 2f 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  // UTF-8 string 
21440 70 6f 69 6e 74 65 72 73 20 74 6f 20 62 65 20 75  pointers to be u
21450 73 65 64 20 77 69 74 68 20 74 68 65 20 53 51 4c  sed with the SQL
21460 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
21470 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
21480 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
21490 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73  nal static class
214a0 20 53 51 4c 69 74 65 53 74 72 69 6e 67 0d 0a 20   SQLiteString.. 
214b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
214c0 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
214d0 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20  nstants..       
214e0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
214f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
21500 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   is the maximum 
21510 70 6f 73 73 69 62 6c 65 20 6c 65 6e 67 74 68 20  possible length 
21520 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20 55  for the native U
21530 54 46 2d 38 20 65 6e 63 6f 64 65 64 0d 0a 20 20  TF-8 encoded..  
21540 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67        /// string
21550 73 20 75 73 65 64 20 77 69 74 68 20 74 68 65 20  s used with the 
21560 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
21570 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary...        //
21580 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
21590 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
215a0 61 74 69 63 20 69 6e 74 20 54 68 69 72 74 79 42  atic int ThirtyB
215b0 69 74 73 20 3d 20 30 78 33 66 66 66 66 66 66 66  its = 0x3fffffff
215c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
215d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21610 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21620 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
21630 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
21640 69 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  is the <see cref
21650 3d 22 45 6e 63 6f 64 69 6e 67 22 20 2f 3e 20 6f  ="Encoding" /> o
21660 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 75  bject instance u
21670 73 65 64 20 74 6f 20 68 61 6e 64 6c 65 0d 0a 20  sed to handle.. 
21680 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65         /// conve
21690 72 73 69 6f 6e 73 20 66 72 6f 6d 2f 74 6f 20 55  rsions from/to U
216a0 54 46 2d 38 2e 0d 0a 20 20 20 20 20 20 20 20 2f  TF-8...        /
216b0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
216c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
216d0 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 45  tatic readonly E
216e0 6e 63 6f 64 69 6e 67 20 55 74 66 38 45 6e 63 6f  ncoding Utf8Enco
216f0 64 69 6e 67 20 3d 20 45 6e 63 6f 64 69 6e 67 2e  ding = Encoding.
21700 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 23  UTF8;..        #
21710 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
21720 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21740 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
21770 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
21780 55 54 46 2d 38 20 45 6e 63 6f 64 69 6e 67 20 48  UTF-8 Encoding H
21790 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
217a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
217b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
217c0 2f 20 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73  / Converts the s
217d0 70 65 63 69 66 69 65 64 20 6d 61 6e 61 67 65 64  pecified managed
217e0 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 74 68 65   string into the
217f0 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20   UTF-8 encoding 
21800 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  and..        ///
21810 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 72   returns the arr
21820 61 79 20 6f 66 20 62 79 74 65 73 20 63 6f 6e 74  ay of bytes cont
21830 61 69 6e 69 6e 67 20 69 74 73 20 72 65 70 72 65  aining its repre
21840 73 65 6e 74 61 74 69 6f 6e 20 69 6e 20 74 68 61  sentation in tha
21850 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65  t..        /// e
21860 6e 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 20 20  ncoding...      
21870 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
21880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
21890 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
218a0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
218b0 54 68 65 20 6d 61 6e 61 67 65 64 20 73 74 72 69  The managed stri
218c0 6e 67 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a  ng to convert...
218d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
218e0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
218f0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
21900 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72       /// The arr
21910 61 79 20 6f 66 20 62 79 74 65 73 20 63 6f 6e 74  ay of bytes cont
21920 61 69 6e 69 6e 67 20 74 68 65 20 72 65 70 72 65  aining the repre
21930 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
21940 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20   managed..      
21950 20 20 2f 2f 2f 20 73 74 72 69 6e 67 20 69 6e 20    /// string in 
21960 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 69  the UTF-8 encodi
21970 6e 67 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20  ng or null upon 
21980 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20  failure...      
21990 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
219a0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
219b0 20 73 74 61 74 69 63 20 62 79 74 65 5b 5d 20 47   static byte[] G
219c0 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d 53  etUtf8BytesFromS
219d0 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20  tring(..        
219e0 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
219f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
21a00 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
21a10 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
21a20 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
21a30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21a40 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
21a50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
21a60 74 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 42  tf8Encoding.GetB
21a70 79 74 65 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20  ytes(value);..  
21a80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21a90 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21ae0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
21af0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
21b00 20 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70   Converts the sp
21b10 65 63 69 66 69 65 64 20 61 72 72 61 79 20 6f 66  ecified array of
21b20 20 62 79 74 65 73 20 72 65 70 72 65 73 65 6e 74   bytes represent
21b30 69 6e 67 20 61 20 73 74 72 69 6e 67 20 69 6e 20  ing a string in 
21b40 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
21b50 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20   UTF-8 encoding 
21b60 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 6d 61  and returns a ma
21b70 6e 61 67 65 64 20 73 74 72 69 6e 67 2e 0d 0a 20  naged string... 
21b80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
21b90 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
21ba0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
21bb0 62 79 74 65 73 22 3e 0d 0a 20 20 20 20 20 20 20  bytes">..       
21bc0 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f   /// The array o
21bd0 66 20 62 79 74 65 73 20 74 6f 20 63 6f 6e 76 65  f bytes to conve
21be0 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rt...        ///
21bf0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
21c00 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
21c10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21c20 65 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67  e managed string
21c30 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61   or null upon fa
21c40 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  ilure...        
21c50 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
21c60 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
21c70 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
21c80 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 42 79  StringFromUtf8By
21c90 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tes(..          
21ca0 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73 0d 0a    byte[] bytes..
21cb0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
21cc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21cd0 20 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20        if (bytes 
21ce0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21cf0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21d00 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 21 50   null;....#if !P
21d10 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
21d20 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
21d30 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 74 66        return Utf
21d40 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 53 74 72  8Encoding.GetStr
21d50 69 6e 67 28 62 79 74 65 73 29 3b 0d 0a 23 65 6c  ing(bytes);..#el
21d60 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
21d70 72 65 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64  return Utf8Encod
21d80 69 6e 67 2e 47 65 74 53 74 72 69 6e 67 28 62 79  ing.GetString(by
21d90 74 65 73 2c 20 30 2c 20 62 79 74 65 73 2e 4c 65  tes, 0, bytes.Le
21da0 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ngth);..#endif..
21db0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
21dc0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
21dd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
21de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
21e30 69 6f 6e 20 55 54 46 2d 38 20 53 74 72 69 6e 67  ion UTF-8 String
21e40 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d   Helper Methods.
21e50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
21e60 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
21e70 2f 2f 2f 20 50 72 6f 62 65 73 20 61 20 6e 61 74  /// Probes a nat
21e80 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  ive pointer to a
21e90 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 55   string in the U
21ea0 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 66 6f  TF-8 encoding fo
21eb0 72 20 69 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  r its..        /
21ec0 2f 2f 20 74 65 72 6d 69 6e 61 74 69 6e 67 20 4e  // terminating N
21ed0 55 4c 20 63 68 61 72 61 63 74 65 72 2c 20 77 69  UL character, wi
21ee0 74 68 69 6e 20 74 68 65 20 73 70 65 63 69 66 69  thin the specifi
21ef0 65 64 20 6c 65 6e 67 74 68 20 6c 69 6d 69 74 2e  ed length limit.
21f00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
21f10 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
21f20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
21f30 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20 20  e="pValue">..   
21f40 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
21f50 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74  ive NUL-terminat
21f60 65 64 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  ed string pointe
21f70 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
21f80 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
21f90 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
21fa0 65 3d 22 6c 69 6d 69 74 22 3e 0d 0a 20 20 20 20  e="limit">..    
21fb0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 78 69      /// The maxi
21fc0 6d 75 6d 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  mum length of th
21fd0 65 20 6e 61 74 69 76 65 20 73 74 72 69 6e 67 2c  e native string,
21fe0 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20   in bytes...    
21ff0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
22000 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
22010 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
22020 20 2f 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 20   /// The length 
22030 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 73 74  of the native st
22040 72 69 6e 67 2c 20 69 6e 20 62 79 74 65 73 20 2d  ring, in bytes -
22050 4f 52 2d 20 7a 65 72 6f 20 69 66 20 74 68 65 20  OR- zero if the 
22060 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20  length..        
22070 2f 2f 2f 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65  /// could not be
22080 20 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20   determined...  
22090 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
220a0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
220b0 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
220c0 50 72 6f 62 65 46 6f 72 55 74 66 38 42 79 74 65  ProbeForUtf8Byte
220d0 4c 65 6e 67 74 68 28 0d 0a 20 20 20 20 20 20 20  Length(..       
220e0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c       IntPtr pVal
220f0 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
22100 20 69 6e 74 20 6c 69 6d 69 74 0d 0a 20 20 20 20   int limit..    
22110 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
22120 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22130 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 30    int length = 0
22140 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22150 20 69 66 20 28 28 70 56 61 6c 75 65 20 21 3d 20   if ((pValue != 
22160 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 26 26 20  IntPtr.Zero) && 
22170 28 6c 69 6d 69 74 20 3e 20 30 29 29 0d 0a 20 20  (limit > 0))..  
22180 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 0d               do.
221a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
221b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
221c0 20 20 20 20 20 20 20 20 69 66 20 28 4d 61 72 73          if (Mars
221d0 68 61 6c 2e 52 65 61 64 42 79 74 65 28 70 56 61  hal.ReadByte(pVa
221e0 6c 75 65 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20  lue, length) == 
221f0 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
22200 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
22210 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  k;....          
22220 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 65            if (le
22230 6e 67 74 68 20 3e 3d 20 6c 69 6d 69 74 29 0d 0a  ngth >= limit)..
22240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22250 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
22260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22270 20 20 20 20 20 20 6c 65 6e 67 74 68 2b 2b 3b 0d        length++;.
22280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22290 20 7d 20 77 68 69 6c 65 20 28 74 72 75 65 29 3b   } while (true);
222a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
222b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
222c0 65 74 75 72 6e 20 6c 65 6e 67 74 68 3b 0d 0a 20  eturn length;.. 
222d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
222e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
222f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22330 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
22340 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
22350 2f 20 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73  / Converts the s
22360 70 65 63 69 66 69 65 64 20 6e 61 74 69 76 65 20  pecified native 
22370 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55  NUL-terminated U
22380 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e  TF-8 string poin
22390 74 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ter..        ///
223a0 20 69 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20   into a managed 
223b0 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...       
223c0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
223d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
223e0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65  ram name="pValue
223f0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
22400 54 68 65 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74  The native NUL-t
22410 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
22420 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d  string pointer..
22430 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
22440 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
22450 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
22460 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61        /// The ma
22470 6e 61 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20  naged string or 
22480 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72  null upon failur
22490 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
224a0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
224b0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
224c0 63 20 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46  c string StringF
224d0 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a  romUtf8IntPtr(..
224e0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
224f0 74 72 20 70 56 61 6c 75 65 0d 0a 20 20 20 20 20  tr pValue..     
22500 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
22510 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22520 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 46 72   return StringFr
22530 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 70 56 61  omUtf8IntPtr(pVa
22540 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lue,..          
22550 20 20 20 20 20 20 50 72 6f 62 65 46 6f 72 55 74        ProbeForUt
22560 66 38 42 79 74 65 4c 65 6e 67 74 68 28 70 56 61  f8ByteLength(pVa
22570 6c 75 65 2c 20 54 68 69 72 74 79 42 69 74 73 29  lue, ThirtyBits)
22580 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
22590 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
225a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
225f0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
22600 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20     /// Converts 
22610 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61  the specified na
22620 74 69 76 65 20 55 54 46 2d 38 20 73 74 72 69 6e  tive UTF-8 strin
22630 67 20 70 6f 69 6e 74 65 72 20 6f 66 20 74 68 65  g pointer of the
22640 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20   specified..    
22650 20 20 20 20 2f 2f 2f 20 6c 65 6e 67 74 68 20 69      /// length i
22660 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 73 74  nto a managed st
22670 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ring...        /
22680 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
22690 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
226a0 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e  m name="pValue">
226b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
226c0 65 20 6e 61 74 69 76 65 20 55 54 46 2d 38 20 73  e native UTF-8 s
226d0 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a  tring pointer...
226e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
226f0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
22700 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
22710 65 6e 67 74 68 22 3e 0d 0a 20 20 20 20 20 20 20  ength">..       
22720 20 2f 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 20   /// The length 
22730 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 73 74  of the native st
22740 72 69 6e 67 2c 20 69 6e 20 62 79 74 65 73 2e 0d  ring, in bytes..
22750 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
22760 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
22770 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
22780 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61        /// The ma
22790 6e 61 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20  naged string or 
227a0 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72  null upon failur
227b0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
227c0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
227d0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
227e0 63 20 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46  c string StringF
227f0 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a  romUtf8IntPtr(..
22800 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
22810 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20  tr pValue,..    
22820 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
22830 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  th..            
22840 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
22850 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56            if (pV
22860 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  alue == IntPtr.Z
22870 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
22880 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
22890 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
228a0 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3e 20 30    if (length > 0
228b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
228c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
228d0 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d    byte[] bytes =
228e0 20 6e 65 77 20 62 79 74 65 5b 6c 65 6e 67 74 68   new byte[length
228f0 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
22900 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f        Marshal.Co
22910 70 79 28 70 56 61 6c 75 65 2c 20 62 79 74 65 73  py(pValue, bytes
22920 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d  , 0, length);...
22930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22940 20 72 65 74 75 72 6e 20 47 65 74 53 74 72 69 6e   return GetStrin
22950 67 46 72 6f 6d 55 74 66 38 42 79 74 65 73 28 62  gFromUtf8Bytes(b
22960 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
22970 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22980 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
22990 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20  ng.Empty;..     
229a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
229b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22a00 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
22a10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
22a20 6e 76 65 72 74 73 20 74 68 65 20 73 70 65 63 69  nverts the speci
22a30 66 69 65 64 20 6d 61 6e 61 67 65 64 20 73 74 72  fied managed str
22a40 69 6e 67 20 69 6e 74 6f 20 61 20 6e 61 74 69 76  ing into a nativ
22a50 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64  e NUL-terminated
22a60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54  ..        /// UT
22a70 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74  F-8 string point
22a80 65 72 20 75 73 69 6e 67 20 6d 65 6d 6f 72 79 20  er using memory 
22a90 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68  obtained from th
22aa0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20  e SQLite core.. 
22ab0 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61         /// libra
22ac0 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry...        ///
22ad0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
22ae0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
22af0 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20  name="value">.. 
22b00 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d         /// The m
22b10 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20 74 6f  anaged string to
22b20 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20   convert...     
22b30 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
22b40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
22b50 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
22b60 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 4e  /// The native N
22b70 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54  UL-terminated UT
22b80 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74  F-8 string point
22b90 65 72 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  er or..        /
22ba0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  // <see cref="In
22bb0 74 50 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 75 70  tPtr.Zero" /> up
22bc0 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20  on failure...   
22bd0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
22be0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
22bf0 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74  lic static IntPt
22c00 72 20 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  r Utf8IntPtrFrom
22c10 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
22c20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
22c30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
22c40 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
22c50 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
22c60 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22c80 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  urn IntPtr.Zero;
22c90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22ca0 49 6e 74 50 74 72 20 72 65 73 75 6c 74 20 3d 20  IntPtr result = 
22cb0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
22cc0 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
22cd0 20 62 79 74 65 73 20 3d 20 47 65 74 55 74 66 38   bytes = GetUtf8
22ce0 42 79 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28  BytesFromString(
22cf0 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  value);....     
22d00 20 20 20 20 20 20 20 69 66 20 28 62 79 74 65 73         if (bytes
22d10 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
22d20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
22d30 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  n IntPtr.Zero;..
22d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
22d50 74 20 6c 65 6e 67 74 68 20 3d 20 62 79 74 65 73  t length = bytes
22d60 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
22d70 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
22d80 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c   SQLiteMemory.Al
22d90 6c 6f 63 61 74 65 28 6c 65 6e 67 74 68 20 2b 20  locate(length + 
22da0 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  1);....         
22db0 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d     if (result ==
22dc0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22de0 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72  eturn IntPtr.Zer
22df0 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
22e00 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 62    Marshal.Copy(b
22e10 79 74 65 73 2c 20 30 2c 20 72 65 73 75 6c 74 2c  ytes, 0, result,
22e20 20 6c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20   length);..     
22e30 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57         Marshal.W
22e40 72 69 74 65 42 79 74 65 28 72 65 73 75 6c 74 2c  riteByte(result,
22e50 20 6c 65 6e 67 74 68 2c 20 30 29 3b 0d 0a 0d 0a   length, 0);....
22e60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22e70 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
22e80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
22e90 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
22ea0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22ef0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
22f00 55 54 46 2d 38 20 53 74 72 69 6e 67 20 41 72 72  UTF-8 String Arr
22f10 61 79 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  ay Helper Method
22f20 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
22f30 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
22f40 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61    /// Converts a
22f50 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f   logical array o
22f60 66 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72  f native NUL-ter
22f70 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
22f80 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ring..        //
22f90 2f 20 70 6f 69 6e 74 65 72 73 20 69 6e 74 6f 20  / pointers into 
22fa0 61 6e 20 61 72 72 61 79 20 6f 66 20 6d 61 6e 61  an array of mana
22fb0 67 65 64 20 73 74 72 69 6e 67 73 2e 0d 0a 20 20  ged strings...  
22fc0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
22fd0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
22fe0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
22ff0 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rgc">..        /
23000 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
23010 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65   elements in the
23020 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f   logical array o
23030 66 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  f native..      
23040 20 20 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e    /// NUL-termin
23050 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
23060 67 20 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20  g pointers...   
23070 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
23080 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
23090 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76  param name="argv
230a0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
230b0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
230c0 65 72 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61  er to the logica
230d0 6c 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76  l array of nativ
230e0 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64  e NUL-terminated
230f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54  ..        /// UT
23100 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74  F-8 string point
23110 65 72 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d  ers to convert..
23120 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
23130 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
23140 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
23150 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
23160 72 61 79 20 6f 66 20 6d 61 6e 61 67 65 64 20 73  ray of managed s
23170 74 72 69 6e 67 73 20 6f 72 20 6e 75 6c 6c 20 75  trings or null u
23180 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20  pon failure...  
23190 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
231a0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
231b0 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
231c0 6e 67 5b 5d 20 53 74 72 69 6e 67 41 72 72 61 79  ng[] StringArray
231d0 46 72 6f 6d 55 74 66 38 53 69 7a 65 41 6e 64 49  FromUtf8SizeAndI
231e0 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
231f0 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
23200 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
23210 72 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20  r argv..        
23220 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
23230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
23240 20 28 61 72 67 63 20 3c 20 30 29 0d 0a 20 20 20   (argc < 0)..   
23250 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23260 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
23270 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67           if (arg
23280 76 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  v == IntPtr.Zero
23290 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
232a0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
232b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
232c0 74 72 69 6e 67 5b 5d 20 72 65 73 75 6c 74 20 3d  tring[] result =
232d0 20 6e 65 77 20 73 74 72 69 6e 67 5b 61 72 67 63   new string[argc
232e0 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
232f0 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
23300 20 3d 20 30 2c 20 6f 66 66 73 65 74 20 3d 20 30   = 0, offset = 0
23310 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
23320 20 20 20 20 20 20 20 69 6e 64 65 78 20 3c 20 72         index < r
23330 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20  esult.Length;.. 
23340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23350 20 20 20 69 6e 64 65 78 2b 2b 2c 20 6f 66 66 73     index++, offs
23360 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a  et += IntPtr.Siz
23370 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
23380 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23390 20 20 20 49 6e 74 50 74 72 20 70 41 72 67 20 3d     IntPtr pArg =
233a0 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52   SQLiteMarshal.R
233b0 65 61 64 49 6e 74 50 74 72 28 61 72 67 76 2c 20  eadIntPtr(argv, 
233c0 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20  offset);....    
233d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
233e0 6c 74 5b 69 6e 64 65 78 5d 20 3d 20 28 70 41 72  lt[index] = (pAr
233f0 67 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  g != IntPtr.Zero
23400 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
23410 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 46           StringF
23420 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 70 41  romUtf8IntPtr(pA
23430 72 67 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20  rg) : null;..   
23440 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23450 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
23460 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
23470 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
23480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
234d0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
234e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
234f0 76 65 72 74 73 20 61 6e 20 61 72 72 61 79 20 6f  verts an array o
23500 66 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67  f managed string
23510 73 20 69 6e 74 6f 20 61 6e 20 61 72 72 61 79 20  s into an array 
23520 6f 66 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  of native..     
23530 20 20 20 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69     /// NUL-termi
23540 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
23550 6e 67 20 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20  ng pointers...  
23560 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
23570 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
23580 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
23590 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20  alues">..       
235a0 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f   /// The array o
235b0 66 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67  f managed string
235c0 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20  s to convert... 
235d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
235e0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
235f0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
23600 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
23610 79 20 6f 66 20 6e 61 74 69 76 65 20 4e 55 4c 2d  y of native NUL-
23620 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
23630 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 73   string pointers
23640 20 6f 72 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20   or null..      
23650 20 20 2f 2f 2f 20 75 70 6f 6e 20 66 61 69 6c 75    /// upon failu
23660 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
23670 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
23680 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
23690 69 63 20 49 6e 74 50 74 72 5b 5d 20 55 74 66 38  ic IntPtr[] Utf8
236a0 49 6e 74 50 74 72 41 72 72 61 79 46 72 6f 6d 53  IntPtrArrayFromS
236b0 74 72 69 6e 67 41 72 72 61 79 28 0d 0a 20 20 20  tringArray(..   
236c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
236d0 5d 20 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  ] values..      
236e0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
236f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23700 69 66 20 28 76 61 6c 75 65 73 20 3d 3d 20 6e 75  if (values == nu
23710 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
23720 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
23730 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23740 20 49 6e 74 50 74 72 5b 5d 20 72 65 73 75 6c 74   IntPtr[] result
23750 20 3d 20 6e 65 77 20 49 6e 74 50 74 72 5b 76 61   = new IntPtr[va
23760 6c 75 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d  lues.Length];...
23770 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
23780 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
23790 20 69 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e   index < result.
237a0 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  Length; index++)
237b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
237c0 20 20 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20    result[index] 
237d0 3d 20 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  = Utf8IntPtrFrom
237e0 53 74 72 69 6e 67 28 76 61 6c 75 65 73 5b 69 6e  String(values[in
237f0 64 65 78 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dex]);....      
23800 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
23810 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
23820 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
23830 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
23840 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
23850 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
238a0 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
238b0 69 74 65 42 79 74 65 73 20 53 74 61 74 69 63 20  iteBytes Static 
238c0 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  Class..    /// <
238d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
238e0 2f 20 54 68 69 73 20 63 6c 61 73 73 20 63 6f 6e  / This class con
238f0 74 61 69 6e 73 20 73 74 61 74 69 63 20 6d 65 74  tains static met
23900 68 6f 64 73 20 74 68 61 74 20 61 72 65 20 75 73  hods that are us
23910 65 64 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20  ed to deal with 
23920 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20  native..    /// 
23930 70 6f 69 6e 74 65 72 73 20 74 6f 20 6d 65 6d 6f  pointers to memo
23940 72 79 20 62 6c 6f 63 6b 73 20 74 68 61 74 20 6c  ry blocks that l
23950 6f 67 69 63 61 6c 6c 79 20 63 6f 6e 74 61 69 6e  ogically contain
23960 20 61 72 72 61 79 73 20 6f 66 20 62 79 74 65 73   arrays of bytes
23970 20 74 6f 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20   to be..    /// 
23980 75 73 65 64 20 77 69 74 68 20 74 68 65 20 53 51  used with the SQ
23990 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
239a0 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  y...    /// </su
239b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
239c0 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73  rnal static clas
239d0 73 20 53 51 4c 69 74 65 42 79 74 65 73 0d 0a 20  s SQLiteBytes.. 
239e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
239f0 65 67 69 6f 6e 20 42 79 74 65 20 41 72 72 61 79  egion Byte Array
23a00 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d   Helper Methods.
23a10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
23a20 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
23a30 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6e  /// Converts a n
23a40 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
23a50 20 61 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79   a logical array
23a60 20 6f 66 20 62 79 74 65 73 20 6f 66 20 74 68 65   of bytes of the
23a70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70  ..        /// sp
23a80 65 63 69 66 69 65 64 20 6c 65 6e 67 74 68 20 69  ecified length i
23a90 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 62 79  nto a managed by
23aa0 74 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20  te array...     
23ab0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
23ac0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
23ad0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c  param name="pVal
23ae0 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ue">..        //
23af0 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
23b00 6e 74 65 72 20 74 6f 20 74 68 65 20 6c 6f 67 69  nter to the logi
23b10 63 61 6c 20 61 72 72 61 79 20 6f 66 20 62 79 74  cal array of byt
23b20 65 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a  es to convert...
23b30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
23b40 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
23b50 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
23b60 65 6e 67 74 68 22 3e 0d 0a 20 20 20 20 20 20 20  ength">..       
23b70 20 2f 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 2c   /// The length,
23b80 20 69 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68   in bytes, of th
23b90 65 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20  e logical array 
23ba0 6f 66 20 62 79 74 65 73 20 74 6f 20 63 6f 6e 76  of bytes to conv
23bb0 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ert...        //
23bc0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
23bd0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
23be0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
23bf0 68 65 20 6d 61 6e 61 67 65 64 20 62 79 74 65 20  he managed byte 
23c00 61 72 72 61 79 20 6f 72 20 6e 75 6c 6c 20 75 70  array or null up
23c10 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20  on failure...   
23c20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
23c30 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
23c40 6c 69 63 20 73 74 61 74 69 63 20 62 79 74 65 5b  lic static byte[
23c50 5d 20 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20  ] FromIntPtr(.. 
23c60 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
23c70 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20  r pValue,..     
23c80 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
23c90 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  h..            )
23ca0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
23cb0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61           if (pVa
23cc0 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  lue == IntPtr.Ze
23cd0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
23ce0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
23cf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23d00 20 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30   if (length == 0
23d10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23d20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 62 79     return new by
23d30 74 65 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  te[0];....      
23d40 20 20 20 20 20 20 62 79 74 65 5b 5d 20 72 65 73        byte[] res
23d50 75 6c 74 20 3d 20 6e 65 77 20 62 79 74 65 5b 6c  ult = new byte[l
23d60 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20  ength];....     
23d70 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
23d80 6f 70 79 28 70 56 61 6c 75 65 2c 20 72 65 73 75  opy(pValue, resu
23d90 6c 74 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d  lt, 0, length);.
23da0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
23db0 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
23dc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23dd0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23e20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
23e30 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
23e40 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6d 61 6e  / Converts a man
23e50 61 67 65 64 20 62 79 74 65 20 61 72 72 61 79 20  aged byte array 
23e60 69 6e 74 6f 20 61 20 6e 61 74 69 76 65 20 70 6f  into a native po
23e70 69 6e 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63  inter to a logic
23e80 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  al..        /// 
23e90 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 2e 0d  array of bytes..
23ea0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
23eb0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
23ec0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
23ed0 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20  ="value">..     
23ee0 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67     /// The manag
23ef0 65 64 20 62 79 74 65 20 61 72 72 61 79 20 74 6f  ed byte array to
23f00 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20   convert...     
23f10 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
23f20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
23f30 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
23f40 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
23f50 6f 69 6e 74 65 72 20 74 6f 20 61 20 6c 6f 67 69  ointer to a logi
23f60 63 61 6c 20 62 79 74 65 20 61 72 72 61 79 20 6f  cal byte array o
23f70 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c  r null upon fail
23f80 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
23f90 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
23fa0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
23fb0 74 69 63 20 49 6e 74 50 74 72 20 54 6f 49 6e 74  tic IntPtr ToInt
23fc0 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
23fd0 20 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 0d 0a    byte[] value..
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
23ff0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24000 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
24010 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24020 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24030 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
24040 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
24050 20 6c 65 6e 67 74 68 20 3d 20 76 61 6c 75 65 2e   length = value.
24060 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
24070 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74         if (lengt
24080 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  h == 0)..       
24090 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
240a0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
240b0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
240c0 74 72 20 72 65 73 75 6c 74 20 3d 20 53 51 4c 69  tr result = SQLi
240d0 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74  teMemory.Allocat
240e0 65 28 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20  e(length);....  
240f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
24100 73 75 6c 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  sult == IntPtr.Z
24110 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
24120 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
24130 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
24140 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
24150 2e 43 6f 70 79 28 76 61 6c 75 65 2c 20 30 2c 20  .Copy(value, 0, 
24160 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68 29 3b  result, length);
24170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24180 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
24190 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
241a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
241b0 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
241c0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
241d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24210 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
24220 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 61 72  region SQLiteMar
24230 73 68 61 6c 20 53 74 61 74 69 63 20 43 6c 61 73  shal Static Clas
24240 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  s..    internal 
24250 73 74 61 74 69 63 20 63 6c 61 73 73 20 53 51 4c  static class SQL
24260 69 74 65 4d 61 72 73 68 61 6c 0d 0a 20 20 20 20  iteMarshal..    
24270 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
24280 6f 6e 20 49 6e 74 50 74 72 20 48 65 6c 70 65 72  on IntPtr Helper
24290 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
242a0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
242b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74  .        /// Ret
242c0 75 72 6e 73 20 61 20 6e 65 77 20 3c 73 65 65 20  urns a new <see 
242d0 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
242e0 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
242f0 20 62 61 73 65 64 20 6f 6e 20 74 68 65 0d 0a 20   based on the.. 
24300 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63 69         /// speci
24310 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  fied <see cref="
24320 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63  IntPtr" /> objec
24330 74 20 69 6e 73 74 61 6e 63 65 20 61 6e 64 20 61  t instance and a
24340 6e 20 69 6e 74 65 67 65 72 0d 0a 20 20 20 20 20  n integer..     
24350 20 20 20 2f 2f 2f 20 6f 66 66 73 65 74 2e 0d 0a     /// offset...
24360 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
24370 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
24380 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
24390 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20  "pointer">..    
243a0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
243b0 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f   cref="IntPtr" /
243c0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
243d0 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
243e0 68 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20  he base..       
243f0 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   /// memory loca
24400 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
24410 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
24420 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
24430 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a  name="offset">..
24440 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
24450 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20 66  integer offset f
24460 72 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d  rom the base mem
24470 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
24480 74 20 74 68 65 20 6e 65 77 0d 0a 20 20 20 20 20  t the new..     
24490 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
244a0 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a  ="IntPtr" /> obj
244b0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 73 68 6f  ect instance sho
244c0 75 6c 64 20 70 6f 69 6e 74 20 74 6f 2e 0d 0a 20  uld point to... 
244d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
244e0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
244f0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
24500 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20      /// The new 
24510 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74  <see cref="IntPt
24520 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  r" /> object ins
24530 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
24540 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
24550 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
24560 74 61 74 69 63 20 49 6e 74 50 74 72 20 49 6e 74  tatic IntPtr Int
24570 50 74 72 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20  PtrForOffset(.. 
24580 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
24590 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20  r pointer,..    
245a0 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
245b0 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
245c0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
245d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
245e0 20 6e 65 77 20 49 6e 74 50 74 72 28 70 6f 69 6e   new IntPtr(poin
245f0 74 65 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20  ter.ToInt64() + 
24600 6f 66 66 73 65 74 29 3b 0d 0a 20 20 20 20 20 20  offset);..      
24610 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
24620 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
24630 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24680 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 61        #region Ma
24690 72 73 68 61 6c 20 52 65 61 64 20 48 65 6c 70 65  rshal Read Helpe
246a0 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
246b0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
246c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65  ..        /// Re
246d0 61 64 73 20 61 20 3c 73 65 65 20 63 72 65 66 3d  ads a <see cref=
246e0 22 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65  "Int32" /> value
246f0 20 66 72 6f 6d 20 74 68 65 20 73 70 65 63 69 66   from the specif
24700 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20  ied memory..    
24710 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e      /// location
24720 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
24730 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
24740 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
24750 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20  me="pointer">.. 
24760 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
24770 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72  see cref="IntPtr
24780 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
24790 61 6e 63 65 20 72 65 70 72 65 73 65 6e 74 69 6e  ance representin
247a0 67 20 74 68 65 20 62 61 73 65 0d 0a 20 20 20 20  g the base..    
247b0 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c      /// memory l
247c0 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ocation...      
247d0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
247e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
247f0 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22  am name="offset"
24800 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
24810 68 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65  he integer offse
24820 74 20 66 72 6f 6d 20 74 68 65 20 62 61 73 65 20  t from the base 
24830 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  memory location 
24840 77 68 65 72 65 20 74 68 65 0d 0a 20 20 20 20 20  where the..     
24850 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
24860 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75  ="Int32" /> valu
24870 65 20 74 6f 20 62 65 20 72 65 61 64 20 69 73 20  e to be read is 
24880 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20  located...      
24890 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
248a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
248b0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
248c0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
248d0 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75  ="Int32" /> valu
248e0 65 20 61 74 20 74 68 65 20 73 70 65 63 69 66 69  e at the specifi
248f0 65 64 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  ed memory locati
24900 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
24910 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
24920 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
24930 69 63 20 69 6e 74 20 52 65 61 64 49 6e 74 33 32  ic int ReadInt32
24940 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
24950 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a  ntPtr pointer,..
24960 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
24970 6f 66 66 73 65 74 0d 0a 20 20 20 20 20 20 20 20  offset..        
24980 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
24990 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
249a0 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
249b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
249c0 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61  turn Marshal.Rea
249d0 64 49 6e 74 33 32 28 70 6f 69 6e 74 65 72 2c 20  dInt32(pointer, 
249e0 6f 66 66 73 65 74 29 3b 0d 0a 23 65 6c 73 65 0d  offset);..#else.
249f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
24a00 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64  urn Marshal.Read
24a10 49 6e 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f  Int32(IntPtrForO
24a20 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f  ffset(pointer, o
24a30 66 66 73 65 74 29 29 3b 0d 0a 23 65 6e 64 69 66  ffset));..#endif
24a40 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
24a50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24aa0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
24ab0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
24ac0 20 2f 2f 2f 20 52 65 61 64 73 20 61 20 3c 73 65   /// Reads a <se
24ad0 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20  e cref="Double" 
24ae0 2f 3e 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68  /> value from th
24af0 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f  e specified memo
24b00 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ry..        /// 
24b10 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  location...     
24b20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
24b30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
24b40 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e  param name="poin
24b50 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ter">..        /
24b60 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
24b70 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a  ="IntPtr" /> obj
24b80 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70  ect instance rep
24b90 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61  resenting the ba
24ba0 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  se..        /// 
24bb0 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e  memory location.
24bc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
24bd0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
24be0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
24bf0 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20  "offset">..     
24c00 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67     /// The integ
24c10 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  er offset from t
24c20 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c  he base memory l
24c30 6f 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68  ocation where th
24c40 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
24c50 73 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65  see cref="Double
24c60 22 20 2f 3e 20 74 6f 20 62 65 20 72 65 61 64 20  " /> to be read 
24c70 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20  is located...   
24c80 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
24c90 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
24ca0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
24cb0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
24cc0 72 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20  ref="Double" /> 
24cd0 76 61 6c 75 65 20 61 74 20 74 68 65 20 73 70 65  value at the spe
24ce0 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 20 6c 6f  cified memory lo
24cf0 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
24d00 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
24d10 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
24d20 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20 52 65  static double Re
24d30 61 64 44 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20  adDouble(..     
24d40 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f         IntPtr po
24d50 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  inter,..        
24d60 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a      int offset..
24d70 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
24d80 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
24d90 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
24da0 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
24db0 20 20 20 20 20 20 72 65 74 75 72 6e 20 42 69 74        return Bit
24dc0 43 6f 6e 76 65 72 74 65 72 2e 49 6e 74 36 34 42  Converter.Int64B
24dd0 69 74 73 54 6f 44 6f 75 62 6c 65 28 4d 61 72 73  itsToDouble(Mars
24de0 68 61 6c 2e 52 65 61 64 49 6e 74 36 34 28 0d 0a  hal.ReadInt64(..
24df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e00 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29  pointer, offset)
24e10 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
24e20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 42 69         return Bi
24e30 74 43 6f 6e 76 65 72 74 65 72 2e 54 6f 44 6f 75  tConverter.ToDou
24e40 62 6c 65 28 42 69 74 43 6f 6e 76 65 72 74 65 72  ble(BitConverter
24e50 2e 47 65 74 42 79 74 65 73 28 0d 0a 20 20 20 20  .GetBytes(..    
24e60 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
24e70 68 61 6c 2e 52 65 61 64 49 6e 74 36 34 28 49 6e  hal.ReadInt64(In
24e80 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f  tPtrForOffset(po
24e90 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29 29  inter, offset)))
24ea0 2c 20 30 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  , 0);..#endif.. 
24eb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24ec0 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24f10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
24f20 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
24f30 2f 20 52 65 61 64 73 20 61 6e 20 3c 73 65 65 20  / Reads an <see 
24f40 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
24f50 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
24f60 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79  specified memory
24f70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f  ..        /// lo
24f80 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
24f90 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
24fa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
24fb0 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65  ram name="pointe
24fc0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
24fd0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
24fe0 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63  IntPtr" /> objec
24ff0 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65  t instance repre
25000 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65  senting the base
25010 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
25020 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  mory location...
25030 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
25040 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
25050 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f  / <param name="o
25060 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20  ffset">..       
25070 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
25080 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
25090 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63   base memory loc
250a0 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d  ation where the.
250b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
250c0 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
250d0 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72  /> value to be r
250e0 65 61 64 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d  ead is located..
250f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
25100 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
25110 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
25120 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
25130 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22  ee cref="IntPtr"
25140 20 2f 3e 20 76 61 6c 75 65 20 61 74 20 74 68 65   /> value at the
25150 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72   specified memor
25160 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  y location...   
25170 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
25180 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
25190 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74  lic static IntPt
251a0 72 20 52 65 61 64 49 6e 74 50 74 72 28 0d 0a 20  r ReadIntPtr(.. 
251b0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
251c0 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20  r pointer,..    
251d0 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
251e0 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
251f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  )..        {..#i
25200 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
25210 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
25220 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25230 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74   Marshal.ReadInt
25240 50 74 72 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  Ptr(pointer, off
25250 73 65 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  set);..#else..  
25260 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25270 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74   Marshal.ReadInt
25280 50 74 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  Ptr(IntPtrForOff
25290 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
252a0 73 65 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  set));..#endif..
252b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
252c0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
252d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
252e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
25330 69 6f 6e 20 4d 61 72 73 68 61 6c 20 57 72 69 74  ion Marshal Writ
25340 65 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73  e Helper Methods
25350 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
25360 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
25370 20 2f 2f 2f 20 57 72 69 74 65 73 20 61 6e 20 3c   /// Writes an <
25380 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22  see cref="Int32"
25390 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 74 68 65   /> value to the
253a0 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72   specified memor
253b0 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  y..        /// l
253c0 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ocation...      
253d0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
253e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
253f0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74  aram name="point
25400 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  er">..        //
25410 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
25420 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65  "IntPtr" /> obje
25430 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72  ct instance repr
25440 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73  esenting the bas
25450 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  e..        /// m
25460 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d  emory location..
25470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
25480 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
25490 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
254a0 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20  offset">..      
254b0 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65    /// The intege
254c0 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  r offset from th
254d0 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f  e base memory lo
254e0 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65  cation where the
254f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
25500 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20  ee cref="Int32" 
25510 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 77  /> value to be w
25520 72 69 74 74 65 6e 20 69 73 20 6c 6f 63 61 74 65  ritten is locate
25530 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
25540 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
25550 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
25560 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20  e="value">..    
25570 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
25580 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
25590 20 76 61 6c 75 65 20 74 6f 20 77 72 69 74 65 2e   value to write.
255a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
255b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
255c0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
255d0 69 64 20 57 72 69 74 65 49 6e 74 33 32 28 0d 0a  id WriteInt32(..
255e0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
255f0 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20  tr pointer,..   
25600 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
25610 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  set,..          
25620 20 20 69 6e 74 20 76 61 6c 75 65 0d 0a 20 20 20    int value..   
25630 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
25640 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
25650 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
25660 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
25670 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65     Marshal.Write
25680 49 6e 74 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f  Int32(pointer, o
25690 66 66 73 65 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ffset, value);..
256a0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
256b0 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65     Marshal.Write
256c0 49 6e 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f  Int32(IntPtrForO
256d0 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f  ffset(pointer, o
256e0 66 66 73 65 74 29 2c 20 76 61 6c 75 65 29 3b 0d  ffset), value);.
256f0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
25700 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25750 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25760 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
25770 20 20 20 20 20 20 20 20 2f 2f 2f 20 57 72 69 74          /// Writ
25780 65 73 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22  es a <see cref="
25790 44 6f 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65  Double" /> value
257a0 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
257b0 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20  d memory..      
257c0 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d    /// location..
257d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
257e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
257f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
25800 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20  ="pointer">..   
25810 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
25820 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
25830 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
25840 63 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  ce representing 
25850 74 68 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20  the base..      
25860 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63    /// memory loc
25870 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
25880 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
25890 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
258a0 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d   name="offset">.
258b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
258c0 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20   integer offset 
258d0 66 72 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65  from the base me
258e0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68  mory location wh
258f0 65 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ere the..       
25900 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
25910 44 6f 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65  Double" /> value
25920 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 69   to be written i
25930 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20  s located...    
25940 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
25950 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
25960 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
25970 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
25980 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44  The <see cref="D
25990 6f 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20  ouble" /> value 
259a0 74 6f 20 77 72 69 74 65 2e 0d 0a 20 20 20 20 20  to write...     
259b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
259c0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
259d0 73 74 61 74 69 63 20 76 6f 69 64 20 57 72 69 74  static void Writ
259e0 65 44 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20 20  eDouble(..      
259f0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69        IntPtr poi
25a00 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  nter,..         
25a10 20 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a     int offset,..
25a20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62              doub
25a30 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  le value..      
25a40 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
25a50 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
25a60 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
25a70 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
25a80 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74  Marshal.WriteInt
25a90 36 34 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  64(pointer, offs
25aa0 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et,..           
25ab0 20 20 20 20 20 42 69 74 43 6f 6e 76 65 72 74 65       BitConverte
25ac0 72 2e 44 6f 75 62 6c 65 54 6f 49 6e 74 36 34 42  r.DoubleToInt64B
25ad0 69 74 73 28 76 61 6c 75 65 29 29 3b 0d 0a 23 65  its(value));..#e
25ae0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
25af0 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e   Marshal.WriteIn
25b00 74 36 34 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  t64(IntPtrForOff
25b10 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
25b20 73 65 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  set),..         
25b30 20 20 20 20 20 20 20 42 69 74 43 6f 6e 76 65 72         BitConver
25b40 74 65 72 2e 54 6f 49 6e 74 36 34 28 42 69 74 43  ter.ToInt64(BitC
25b50 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
25b60 73 28 76 61 6c 75 65 29 2c 20 30 29 29 3b 0d 0a  s(value), 0));..
25b70 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
25b80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
25b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bd0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25be0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
25bf0 20 20 20 20 20 20 20 2f 2f 2f 20 57 72 69 74 65         /// Write
25c00 73 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 49  s a <see cref="I
25c10 6e 74 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20  ntPtr" /> value 
25c20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64  to the specified
25c30 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20   memory..       
25c40 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a   /// location...
25c50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
25c60 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
25c70 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
25c80 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20  "pointer">..    
25c90 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
25ca0 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f   cref="IntPtr" /
25cb0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
25cc0 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
25cd0 68 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20  he base..       
25ce0 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   /// memory loca
25cf0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
25d00 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
25d10 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
25d20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a  name="offset">..
25d30 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
25d40 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20 66  integer offset f
25d50 72 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d  rom the base mem
25d60 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65  ory location whe
25d70 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  re the..        
25d80 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
25d90 6e 74 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20  ntPtr" /> value 
25da0 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 69 73  to be written is
25db0 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20   located...     
25dc0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
25dd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
25de0 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
25df0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
25e00 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  he <see cref="In
25e10 74 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74  tPtr" /> value t
25e20 6f 20 77 72 69 74 65 2e 0d 0a 20 20 20 20 20 20  o write...      
25e30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
25e40 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
25e50 74 61 74 69 63 20 76 6f 69 64 20 57 72 69 74 65  tatic void Write
25e60 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20  IntPtr(..       
25e70 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e       IntPtr poin
25e80 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ter,..          
25e90 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20    int offset,.. 
25ea0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
25eb0 72 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  r value..       
25ec0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
25ed0 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
25ee0 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
25ef0 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  K..            M
25f00 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50  arshal.WriteIntP
25f10 74 72 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  tr(pointer, offs
25f20 65 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  et, value);..#el
25f30 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
25f40 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74  Marshal.WriteInt
25f50 50 74 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  Ptr(IntPtrForOff
25f60 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
25f70 73 65 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  set), value);..#
25f80 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
25f90 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
25fa0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
25fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ff0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26000 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
26010 65 56 61 6c 75 65 20 48 65 6c 70 65 72 20 4d 65  eValue Helper Me
26020 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
26030 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
26040 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72        /// Conver
26050 74 73 20 61 20 6c 6f 67 69 63 61 6c 20 61 72 72  ts a logical arr
26060 61 79 20 6f 66 20 6e 61 74 69 76 65 20 70 6f 69  ay of native poi
26070 6e 74 65 72 73 20 74 6f 20 6e 61 74 69 76 65 20  nters to native 
26080 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 0d 0a 20  sqlite3_value.. 
26090 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63         /// struc
260a0 74 75 72 65 73 20 69 6e 74 6f 20 61 20 6d 61 6e  tures into a man
260b0 61 67 65 64 20 61 72 72 61 79 20 6f 66 20 3c 73  aged array of <s
260c0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
260d0 61 6c 75 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20  alue" />..      
260e0 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73    /// object ins
260f0 74 61 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 20  tances...       
26100 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
26110 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
26120 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
26130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
26140 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  e number of elem
26150 65 6e 74 73 20 69 6e 20 74 68 65 20 6c 6f 67 69  ents in the logi
26160 63 61 6c 20 61 72 72 61 79 20 6f 66 20 6e 61 74  cal array of nat
26170 69 76 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ive sqlite3_valu
26180 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
26190 74 72 75 63 74 75 72 65 73 2e 0d 0a 20 20 20 20  tructures...    
261a0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
261b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
261c0 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22  aram name="argv"
261d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
261e0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
261f0 72 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61 6c  r to the logical
26200 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65   array of native
26210 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 0d 0a   sqlite3_value..
26220 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75          /// stru
26230 63 74 75 72 65 73 20 74 6f 20 63 6f 6e 76 65 72  ctures to conver
26240 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
26250 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
26260 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
26270 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
26280 20 6d 61 6e 61 67 65 64 20 61 72 72 61 79 20 6f   managed array o
26290 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
262a0 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62 6a  iteValue" /> obj
262b0 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20 6f 72  ect instances or
262c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75  ..        /// nu
262d0 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e  ll upon failure.
262e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
262f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
26300 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
26310 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 56 61  SQLiteValue[] Va
26320 6c 75 65 41 72 72 61 79 46 72 6f 6d 53 69 7a 65  lueArrayFromSize
26330 41 6e 64 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  AndIntPtr(..    
26340 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63          int argc
26350 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
26360 6e 74 50 74 72 20 61 72 67 76 0d 0a 20 20 20 20  ntPtr argv..    
26370 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
26380 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26390 20 20 69 66 20 28 61 72 67 63 20 3c 20 30 29 0d    if (argc < 0).
263a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
263b0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
263c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
263d0 28 61 72 67 76 20 3d 3d 20 49 6e 74 50 74 72 2e  (argv == IntPtr.
263e0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
263f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
26400 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
26410 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d     SQLiteValue[]
26420 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 51   result = new SQ
26430 4c 69 74 65 56 61 6c 75 65 5b 61 72 67 63 5d 3b  LiteValue[argc];
26440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26450 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
26460 20 30 2c 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d   0, offset = 0;.
26470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26480 20 20 20 20 20 69 6e 64 65 78 20 3c 20 72 65 73       index < res
26490 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 20  ult.Length;..   
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264b0 20 69 6e 64 65 78 2b 2b 2c 20 6f 66 66 73 65 74   index++, offset
264c0 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 29   += IntPtr.Size)
264d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
264e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
264f0 20 49 6e 74 50 74 72 20 70 41 72 67 20 3d 20 52   IntPtr pArg = R
26500 65 61 64 49 6e 74 50 74 72 28 61 72 67 76 2c 20  eadIntPtr(argv, 
26510 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20  offset);....    
26520 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
26530 6c 74 5b 69 6e 64 65 78 5d 20 3d 20 28 70 41 72  lt[index] = (pAr
26540 67 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  g != IntPtr.Zero
26550 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
26560 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
26570 69 74 65 56 61 6c 75 65 28 70 41 72 67 29 20 3a  iteValue(pArg) :
26580 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
26590 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
265a0 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
265b0 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
265c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
265d0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
265e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26620 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
26630 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49   #region SQLiteI
26640 6e 64 65 78 20 48 65 6c 70 65 72 20 4d 65 74 68  ndex Helper Meth
26650 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
26660 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
26670 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73      /// Converts
26680 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65   a native pointe
26690 72 20 74 6f 20 61 20 6e 61 74 69 76 65 20 73 71  r to a native sq
266a0 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
266b0 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20   structure..    
266c0 20 20 20 20 2f 2f 2f 20 69 6e 74 6f 20 61 20 6e      /// into a n
266d0 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ew <see cref="SQ
266e0 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f 62  LiteIndex" /> ob
266f0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
26700 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
26710 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
26720 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
26730 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20  "pIndex">..     
26740 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
26750 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
26760 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
26770 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63  index_info struc
26780 74 75 72 65 20 74 6f 0d 0a 20 20 20 20 20 20 20  ture to..       
26790 20 2f 2f 2f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20   /// convert... 
267a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
267b0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
267c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e   <param name="in
267d0 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  dex">..        /
267e0 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
267f0 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
26800 77 69 6c 6c 20 62 65 20 6d 6f 64 69 66 69 65 64  will be modified
26810 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20   to contain the 
26820 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f  newly..        /
26830 2f 2f 20 63 72 65 61 74 65 64 20 3c 73 65 65 20  // created <see 
26840 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
26850 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  x" /> object ins
26860 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
26870 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
26880 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
26890 74 69 63 20 76 6f 69 64 20 49 6e 64 65 78 46 72  tic void IndexFr
268a0 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  omIntPtr(..     
268b0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 49         IntPtr pI
268c0 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndex,..         
268d0 20 20 20 72 65 66 20 53 51 4c 69 74 65 49 6e 64     ref SQLiteInd
268e0 65 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20  ex index..      
268f0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
26900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26910 69 66 20 28 70 49 6e 64 65 78 20 3d 3d 20 49 6e  if (pIndex == In
26920 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
26930 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26940 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
26950 20 20 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20     int offset = 
26960 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
26970 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e    int nConstrain
26980 74 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49  t = ReadInt32(pI
26990 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
269a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
269b0 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69  fset += sizeof(i
269c0 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
269d0 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 73      IntPtr pCons
269e0 74 72 61 69 6e 74 20 3d 20 52 65 61 64 49 6e 74  traint = ReadInt
269f0 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  Ptr(pIndex, offs
26a00 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
26a10 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e      offset += In
26a20 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20  tPtr.Size;....  
26a30 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4f            int nO
26a40 72 64 65 72 42 79 20 3d 20 52 65 61 64 49 6e 74  rderBy = ReadInt
26a50 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65  32(pIndex, offse
26a60 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
26a70 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a     offset += siz
26a80 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20  eof(int);....   
26a90 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
26aa0 70 4f 72 64 65 72 42 79 20 3d 20 52 65 61 64 49  pOrderBy = ReadI
26ab0 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66  ntPtr(pIndex, of
26ac0 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
26ad0 20 20 20 20 20 20 69 6e 64 65 78 20 3d 20 6e 65        index = ne
26ae0 77 20 53 51 4c 69 74 65 49 6e 64 65 78 28 6e 43  w SQLiteIndex(nC
26af0 6f 6e 73 74 72 61 69 6e 74 2c 20 6e 4f 72 64 65  onstraint, nOrde
26b00 72 42 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rBy);....       
26b10 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43       int sizeOfC
26b20 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 20 3d 20  onstraintType = 
26b30 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74  Marshal.SizeOf(t
26b40 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20  ypeof(..        
26b50 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
26b60 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
26b70 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
26b80 61 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  aint));....     
26b90 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
26ba0 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b  iConstraint = 0;
26bb0 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e   iConstraint < n
26bc0 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e  Constraint; iCon
26bd0 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20  straint++)..    
26be0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26bf0 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
26c00 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
26c10 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
26c20 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69  straint constrai
26c30 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
26c40 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e            new Un
26c50 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
26c60 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
26c70 63 6f 6e 73 74 72 61 69 6e 74 28 29 3b 0d 0a 0d  constraint();...
26c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c90 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74   Marshal.PtrToSt
26ca0 72 75 63 74 75 72 65 28 49 6e 74 50 74 72 46 6f  ructure(IntPtrFo
26cb0 72 4f 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61  rOffset(pConstra
26cc0 69 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  int,..          
26cd0 20 20 20 20 20 20 20 20 20 20 69 43 6f 6e 73 74            iConst
26ce0 72 61 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f  raint * sizeOfCo
26cf0 6e 73 74 72 61 69 6e 74 54 79 70 65 29 2c 20 63  nstraintType), c
26d00 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 0d 0a 20  onstraint);.... 
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26d20 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73  ndex.Inputs.Cons
26d30 74 72 61 69 6e 74 73 5b 69 43 6f 6e 73 74 72 61  traints[iConstra
26d40 69 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20  int] =..        
26d50 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
26d60 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
26d70 72 61 69 6e 74 28 63 6f 6e 73 74 72 61 69 6e 74  raint(constraint
26d80 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
26d90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26da0 20 69 6e 74 20 73 69 7a 65 4f 66 4f 72 64 65 72   int sizeOfOrder
26db0 42 79 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c  ByType = Marshal
26dc0 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d  .SizeOf(typeof(.
26dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26de0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
26df0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
26e00 65 78 5f 6f 72 64 65 72 62 79 29 29 3b 0d 0a 0d  ex_orderby));...
26e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
26e20 20 28 69 6e 74 20 69 4f 72 64 65 72 42 79 20 3d   (int iOrderBy =
26e30 20 30 3b 20 69 4f 72 64 65 72 42 79 20 3c 20 6e   0; iOrderBy < n
26e40 4f 72 64 65 72 42 79 3b 20 69 4f 72 64 65 72 42  OrderBy; iOrderB
26e50 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  y++)..          
26e60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26e70 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
26e80 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
26e90 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f  _index_orderby o
26ea0 72 64 65 72 42 79 20 3d 0d 0a 20 20 20 20 20 20  rderBy =..      
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
26ec0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
26ed0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
26ee0 64 65 78 5f 6f 72 64 65 72 62 79 28 29 3b 0d 0a  dex_orderby();..
26ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26f00 20 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53    Marshal.PtrToS
26f10 74 72 75 63 74 75 72 65 28 49 6e 74 50 74 72 46  tructure(IntPtrF
26f20 6f 72 4f 66 66 73 65 74 28 70 4f 72 64 65 72 42  orOffset(pOrderB
26f30 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
26f40 20 20 20 20 20 20 20 20 69 4f 72 64 65 72 42 79          iOrderBy
26f50 20 2a 20 73 69 7a 65 4f 66 4f 72 64 65 72 42 79   * sizeOfOrderBy
26f60 54 79 70 65 29 2c 20 6f 72 64 65 72 42 79 29 3b  Type), orderBy);
26f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26f80 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73      index.Inputs
26f90 2e 4f 72 64 65 72 42 79 73 5b 69 4f 72 64 65 72  .OrderBys[iOrder
26fa0 42 79 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  By] =..         
26fb0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
26fc0 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42  QLiteIndexOrderB
26fd0 79 28 6f 72 64 65 72 42 79 29 3b 0d 0a 20 20 20  y(orderBy);..   
26fe0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26ff0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27000 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27040 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
27050 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
27060 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 50  >..        /// P
27070 6f 70 75 6c 61 74 65 73 20 74 68 65 20 6f 75 74  opulates the out
27080 70 75 74 73 20 6f 66 20 61 20 70 72 65 2d 61 6c  puts of a pre-al
27090 6c 6f 63 61 74 65 64 20 6e 61 74 69 76 65 20 73  located native s
270a0 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
270b0 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  o..        /// s
270c0 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 61  tructure using a
270d0 6e 20 65 78 69 73 74 69 6e 67 20 3c 73 65 65 20  n existing <see 
270e0 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
270f0 78 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20  x" /> object..  
27100 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
27110 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
27120 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
27130 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
27140 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
27150 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65         /// The e
27160 78 69 73 74 69 6e 67 20 3c 73 65 65 20 63 72 65  xisting <see cre
27170 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20  f="SQLiteIndex" 
27180 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
27190 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
271a0 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6f         /// the o
271b0 75 74 70 75 74 20 64 61 74 61 20 74 6f 20 75 73  utput data to us
271c0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
271d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
271e0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
271f0 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20  e="pIndex">..   
27200 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
27210 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
27220 68 65 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 64  he pre-allocated
27230 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
27240 69 6e 64 65 78 5f 69 6e 66 6f 0d 0a 20 20 20 20  index_info..    
27250 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72      /// structur
27260 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
27270 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
27280 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
27290 76 6f 69 64 20 49 6e 64 65 78 54 6f 49 6e 74 50  void IndexToIntP
272a0 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
272b0 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64   SQLiteIndex ind
272c0 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ex,..           
272d0 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a   IntPtr pIndex..
272e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
272f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27300 20 20 20 20 20 20 69 66 20 28 28 69 6e 64 65 78        if ((index
27310 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e   == null) || (in
27320 64 65 78 2e 49 6e 70 75 74 73 20 3d 3d 20 6e 75  dex.Inputs == nu
27330 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  ll) ||..        
27340 20 20 20 20 20 20 20 20 28 69 6e 64 65 78 2e 49          (index.I
27350 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  nputs.Constraint
27360 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20  s == null) ||.. 
27370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
27380 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 20 3d 3d  index.Outputs ==
27390 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20   null) ||..     
273a0 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 64 65             (inde
273b0 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72  x.Outputs.Constr
273c0 61 69 6e 74 55 73 61 67 65 73 20 3d 3d 20 6e 75  aintUsages == nu
273d0 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
273e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
273f0 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20       return;..  
27400 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27410 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
27420 49 6e 64 65 78 20 3d 3d 20 49 6e 74 50 74 72 2e  Index == IntPtr.
27430 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
27440 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
27450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
27460 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d  t offset = 0;...
27470 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
27480 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 52   nConstraint = R
27490 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c  eadInt32(pIndex,
274a0 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
274b0 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 43 6f           if (nCo
274c0 6e 73 74 72 61 69 6e 74 20 21 3d 20 69 6e 64 65  nstraint != inde
274d0 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61  x.Inputs.Constra
274e0 69 6e 74 73 2e 4c 65 6e 67 74 68 29 0d 0a 20 20  ints.Length)..  
274f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27500 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
27510 20 20 20 20 20 69 66 20 28 6e 43 6f 6e 73 74 72       if (nConstr
27520 61 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e 4f 75  aint != index.Ou
27530 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
27540 55 73 61 67 65 73 2e 4c 65 6e 67 74 68 29 0d 0a  Usages.Length)..
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27560 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
27570 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
27580 20 73 69 7a 65 6f 66 28 69 6e 74 29 20 2b 20 49   sizeof(int) + I
27590 6e 74 50 74 72 2e 53 69 7a 65 20 2b 20 73 69 7a  ntPtr.Size + siz
275a0 65 6f 66 28 69 6e 74 29 20 2b 20 49 6e 74 50 74  eof(int) + IntPt
275b0 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20  r.Size;....     
275c0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
275d0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20 3d  onstraintUsage =
275e0 20 52 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64   ReadIntPtr(pInd
275f0 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ex, offset);....
27600 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
27610 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74  sizeOfConstraint
27620 55 73 61 67 65 54 79 70 65 20 3d 20 4d 61 72 73  UsageType = Mars
27630 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f  hal.SizeOf(typeo
27640 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f(..            
27650 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
27660 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
27670 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74  index_constraint
27680 5f 75 73 61 67 65 29 29 3b 0d 0a 0d 0a 20 20 20  _usage));....   
27690 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
276a0 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20  t iConstraint = 
276b0 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c  0; iConstraint <
276c0 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43   nConstraint; iC
276d0 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20  onstraint++)..  
276e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
27700 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
27710 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
27720 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20  onstraint_usage 
27730 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20  constraintUsage 
27740 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
27750 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73 61 66         new Unsaf
27760 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
27770 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
27780 73 74 72 61 69 6e 74 5f 75 73 61 67 65 28 0d 0a  straint_usage(..
27790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277a0 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75          index.Ou
277b0 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
277c0 55 73 61 67 65 73 5b 69 43 6f 6e 73 74 72 61 69  Usages[iConstrai
277d0 6e 74 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt]);....       
277e0 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
277f0 2e 53 74 72 75 63 74 75 72 65 54 6f 50 74 72 28  .StructureToPtr(
27800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27810 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
27820 55 73 61 67 65 2c 20 49 6e 74 50 74 72 46 6f 72  Usage, IntPtrFor
27830 4f 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61 69  Offset(pConstrai
27840 6e 74 55 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  ntUsage,..      
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43                iC
27860 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a 65  onstraint * size
27870 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  OfConstraintUsag
27880 65 54 79 70 65 29 2c 20 66 61 6c 73 65 29 3b 0d  eType), false);.
27890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
278a0 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73     index.Outputs
278b0 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  .ConstraintUsage
278c0 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20 3d  s[iConstraint] =
278d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
278e0 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
278f0 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
27900 73 61 67 65 28 63 6f 6e 73 74 72 61 69 6e 74 55  sage(constraintU
27910 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
27920 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27930 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49       offset += I
27940 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20  ntPtr.Size;.... 
27950 20 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65             Write
27960 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66  Int32(pIndex, of
27970 66 73 65 74 2c 20 69 6e 64 65 78 2e 4f 75 74 70  fset, index.Outp
27980 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65 72 29  uts.IndexNumber)
27990 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
279a0 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f   offset += sizeo
279b0 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  f(int);....     
279c0 20 20 20 20 20 20 20 57 72 69 74 65 49 6e 74 50         WriteIntP
279d0 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65  tr(pIndex, offse
279e0 74 2c 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e  t, SQLiteString.
279f0 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
27a00 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ring(..         
27a10 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74         index.Out
27a20 70 75 74 73 2e 49 6e 64 65 78 53 74 72 69 6e 67  puts.IndexString
27a30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
27a40 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74     offset += Int
27a50 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20  Ptr.Size;....   
27a60 20 20 20 20 20 20 20 20 20 57 72 69 74 65 49 6e           WriteIn
27a70 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  t32(pIndex, offs
27a80 65 74 2c 20 31 29 3b 20 2f 2a 20 4e 4f 54 45 3a  et, 1); /* NOTE:
27a90 20 57 65 20 6a 75 73 74 20 61 6c 6c 6f 63 61 74   We just allocat
27aa0 65 64 20 69 74 2e 20 2a 2f 0d 0a 0d 0a 20 20 20  ed it. */....   
27ab0 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
27ac0 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d  += sizeof(int);.
27ad0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 57  ...            W
27ae0 72 69 74 65 49 6e 74 33 32 28 70 49 6e 64 65 78  riteInt32(pIndex
27af0 2c 20 6f 66 66 73 65 74 2c 20 69 6e 64 65 78 2e  , offset, index.
27b00 4f 75 74 70 75 74 73 2e 4f 72 64 65 72 42 79 43  Outputs.OrderByC
27b10 6f 6e 73 75 6d 65 64 29 3b 0d 0a 0d 0a 20 20 20  onsumed);....   
27b20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
27b30 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d  += sizeof(int);.
27b40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 57  ...            W
27b50 72 69 74 65 44 6f 75 62 6c 65 28 70 49 6e 64 65  riteDouble(pInde
27b60 78 2c 20 6f 66 66 73 65 74 2c 20 69 6e 64 65 78  x, offset, index
27b70 2e 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74  .Outputs.Estimat
27b80 65 64 43 6f 73 74 29 3b 0d 0a 20 20 20 20 20 20  edCost);..      
27b90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
27ba0 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
27bb0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
27bc0 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
27bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c10 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
27c20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 42 61   SQLiteModule Ba
27c30 73 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  se Class..    //
27c40 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
27c50 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
27c60 72 65 70 72 65 73 65 6e 74 73 20 61 20 6d 61 6e  represents a man
27c70 61 67 65 64 20 76 69 72 74 75 61 6c 20 74 61 62  aged virtual tab
27c80 6c 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  le module implem
27c90 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  entation...    /
27ca0 2f 2f 20 49 74 20 69 73 20 6e 6f 74 20 73 65 61  // It is not sea
27cb0 6c 65 64 20 61 6e 64 20 6d 75 73 74 20 62 65 20  led and must be 
27cc0 75 73 65 64 20 61 73 20 74 68 65 20 62 61 73 65  used as the base
27cd0 20 63 6c 61 73 73 20 66 6f 72 20 61 6e 79 0d 0a   class for any..
27ce0 20 20 20 20 2f 2f 2f 20 75 73 65 72 2d 64 65 66      /// user-def
27cf0 69 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61 62  ined virtual tab
27d00 6c 65 20 6d 6f 64 75 6c 65 20 63 6c 61 73 73 65  le module classe
27d10 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e  s implemented in
27d20 20 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a   managed code...
27d30 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
27d40 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 61  y>..    public a
27d50 62 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51  bstract class SQ
27d60 4c 69 74 65 4d 6f 64 75 6c 65 20 3a 0d 0a 20 20  LiteModule :..  
27d70 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74            ISQLit
27d80 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2c 20  eManagedModule, 
27d90 2f 2a 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  /*ISQLiteNativeM
27da0 6f 64 75 6c 65 2c 2a 2f 0d 0a 20 20 20 20 20 20  odule,*/..      
27db0 20 20 20 20 20 20 49 44 69 73 70 6f 73 61 62 6c        IDisposabl
27dc0 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45 44 20  e /* NOT SEALED 
27dd0 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  */..    {..     
27de0 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
27df0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 50 72  eNativeModule Pr
27e00 69 76 61 74 65 20 43 6c 61 73 73 0d 0a 20 20 20  ivate Class..   
27e10 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
27e20 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
27e30 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3a 0d 0a  NativeModule :..
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e50 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
27e60 75 6c 65 2c 20 49 44 69 73 70 6f 73 61 62 6c 65  ule, IDisposable
27e70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
27e80 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
27e90 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
27ea0 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
27eb0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
27ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54             /// T
27ed0 68 69 73 20 69 73 20 74 68 65 20 76 61 6c 75 65  his is the value
27ee0 20 74 68 61 74 20 69 73 20 61 6c 77 61 79 73 20   that is always 
27ef0 75 73 65 64 20 66 6f 72 20 74 68 65 20 22 6c 6f  used for the "lo
27f00 67 45 72 72 6f 72 73 22 0d 0a 20 20 20 20 20 20  gErrors"..      
27f10 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65        /// parame
27f20 74 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f  ter to the vario
27f30 75 73 20 73 74 61 74 69 63 20 65 72 72 6f 72 20  us static error 
27f40 68 61 6e 64 6c 69 6e 67 20 6d 65 74 68 6f 64 73  handling methods
27f50 20 70 72 6f 76 69 64 65 64 0d 0a 20 20 20 20 20   provided..     
27f60 20 20 20 20 20 20 20 2f 2f 2f 20 62 79 20 74 68         /// by th
27f70 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
27f80 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 63 6c  iteModule" /> cl
27f90 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ass...          
27fa0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
27fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
27fc0 69 76 61 74 65 20 63 6f 6e 73 74 20 62 6f 6f 6c  ivate const bool
27fd0 20 44 65 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72   DefaultLogError
27fe0 73 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  s = true;....   
27ff0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
28000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28050 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
28060 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
28070 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  is the error mes
28080 73 61 67 65 20 74 65 78 74 20 75 73 65 64 20 77  sage text used w
28090 68 65 6e 20 74 68 65 20 63 6f 6e 74 61 69 6e 65  hen the containe
280a0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  d..            /
280b0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
280c0 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f  LiteModule" /> o
280d0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 69  bject instance i
280e0 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0d  s not available.
280f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28100 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e 2e   for any reason.
28110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28120 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
28130 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
28140 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4d  e const string M
28150 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
28160 65 45 72 72 6f 72 4d 65 73 73 61 67 65 20 3d 0d  eErrorMessage =.
28170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28180 20 22 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 20   "native module 
28190 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6e  implementation n
281a0 6f 74 20 61 76 61 69 6c 61 62 6c 65 22 3b 0d 0a  ot available";..
281b0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
281c0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
281d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
281e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28210 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28220 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
28230 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20   Private Data.. 
28240 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28250 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
28260 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
28270 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d  ee cref="SQLiteM
28280 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  odule" /> object
28290 20 69 6e 73 74 61 6e 63 65 20 75 73 65 64 20 74   instance used t
282a0 6f 20 70 72 6f 76 69 64 65 0d 0a 20 20 20 20 20  o provide..     
282b0 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 20 69 6d         /// an im
282c0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
282d0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
282e0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
282f0 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  le" />..        
28300 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63      /// interfac
28310 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
28320 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
28330 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
28340 61 74 65 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ate SQLiteModule
28350 20 6d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20   module;..      
28360 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
28370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
283d0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
283e0 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
283f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28400 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
28410 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
28420 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
28430 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e  e of this class.
28440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28450 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
28460 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
28470 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
28480 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e">..           
28490 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
284a0 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
284b0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
284c0 61 6e 63 65 20 75 73 65 64 20 74 6f 20 70 72 6f  ance used to pro
284d0 76 69 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20  vide..          
284e0 20 20 2f 2f 2f 20 61 6e 20 69 6d 70 6c 65 6d 65    /// an impleme
284f0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c  ntation of the <
28500 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
28510 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f  eNativeModule" /
28520 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28530 2f 2f 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20  // interface... 
28540 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28550 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
28560 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
28570 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 0d  teNativeModule(.
28580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28590 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f   SQLiteModule mo
285a0 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  dule..          
285b0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
285c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
285d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 6f 64          this.mod
285e0 75 6c 65 20 3d 20 6d 6f 64 75 6c 65 3b 0d 0a 20  ule = module;.. 
285f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
28600 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
28610 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
28620 20 20 20 20 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28670 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
28680 72 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65  rivate Static Me
28690 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
286a0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
286b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
286c0 2f 20 53 65 74 73 20 74 68 65 20 74 61 62 6c 65  / Sets the table
286d0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
286e0 6f 20 6f 6e 65 20 74 68 61 74 20 69 6e 64 69 63  o one that indic
286f0 61 74 65 73 20 74 68 65 20 6e 61 74 69 76 65 0d  ates the native.
28700 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28710 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
28720 74 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 76  tation is not av
28730 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...      
28740 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
28750 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
28760 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
28770 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
28780 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
28790 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
287a0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
287b0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
287c0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ture...         
287d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
287e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
287f0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
28800 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
28810 76 61 6c 75 65 20 6f 66 20 3c 73 65 65 20 63 72  value of <see cr
28820 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72 43  ef="SQLiteErrorC
28830 6f 64 65 2e 45 72 72 6f 72 22 20 2f 3e 2e 0d 0a  ode.Error" />...
28840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28850 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
28860 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28870 73 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72  static SQLiteErr
28880 6f 72 43 6f 64 65 20 4d 6f 64 75 6c 65 4e 6f 74  orCode ModuleNot
28890 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
288a0 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ror(..          
288b0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
288c0 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
288d0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
288e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
288f0 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
28900 72 6f 72 28 6e 75 6c 6c 2c 20 70 56 74 61 62 2c  ror(null, pVtab,
28910 20 44 65 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72   DefaultLogError
28920 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
28930 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f          ModuleNo
28940 74 41 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d  tAvailableErrorM
28950 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20  essage);....    
28960 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28970 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
28980 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
28990 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
289a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
289b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
289f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28a00 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
28a10 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74        /// Sets t
28a20 68 65 20 74 61 62 6c 65 20 65 72 72 6f 72 20 6d  he table error m
28a30 65 73 73 61 67 65 20 74 6f 20 6f 6e 65 20 74 68  essage to one th
28a40 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  at indicates the
28a50 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20   native..       
28a60 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20       /// module 
28a70 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
28a80 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2e  s not available.
28a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28aa0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
28ab0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
28ac0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
28ad0 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  or">..          
28ae0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
28af0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
28b00 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
28b10 73 6f 72 20 64 65 72 69 76 65 64 0d 0a 20 20 20  sor derived..   
28b20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72           /// str
28b30 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
28b40 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
28b50 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28b60 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
28b70 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68            /// Th
28b80 65 20 76 61 6c 75 65 20 6f 66 20 3c 73 65 65 20  e value of <see 
28b90 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f  cref="SQLiteErro
28ba0 72 43 6f 64 65 2e 45 72 72 6f 72 22 20 2f 3e 2e  rCode.Error" />.
28bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28bc0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
28bd0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
28be0 65 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 45  e static SQLiteE
28bf0 72 72 6f 72 43 6f 64 65 20 4d 6f 64 75 6c 65 4e  rrorCode ModuleN
28c00 6f 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f  otAvailableCurso
28c10 72 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20  rError(..       
28c20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
28c30 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
28c40 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
28c50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28c60 20 20 20 20 20 20 20 20 20 20 20 53 65 74 43 75             SetCu
28c70 72 73 6f 72 45 72 72 6f 72 28 6e 75 6c 6c 2c 20  rsorError(null, 
28c80 70 43 75 72 73 6f 72 2c 20 44 65 66 61 75 6c 74  pCursor, Default
28c90 4c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20  LogErrors,..    
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cb0 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
28cc0 6c 65 45 72 72 6f 72 4d 65 73 73 61 67 65 29 3b  leErrorMessage);
28cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28ce0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
28cf0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
28d00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
28d20 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
28d30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28d80 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
28d90 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  on ISQLiteNative
28da0 4d 6f 64 75 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  Module Members..
28db0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28dc0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
28dd0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
28de0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
28df0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
28e00 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65  e.xCreate" /> me
28e10 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
28e20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
28e30 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28e40 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28e50 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  pDb">..         
28e60 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
28e70 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
28e80 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
28e90 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
28ea0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
28eb0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
28ec0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
28ed0 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22 3e  ram name="pAux">
28ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28ef0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
28f00 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
28f10 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
28f20 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
28f30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
28f40 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
28f50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
28f60 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20  ame="argc">..   
28f70 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
28f80 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
28f90 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
28fa0 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
28fb0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
28fc0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
28fd0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28fe0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28ff0 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20  argv">..        
29000 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29010 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29020 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29030 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Create" /> metho
29040 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
29050 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
29060 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
29070 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
29080 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
29090 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
290a0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
290b0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
290c0 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
290d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
290e0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
290f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
29100 20 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d   name="pError">.
29110 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29120 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
29130 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
29140 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22  eModule.xCreate"
29150 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
29160 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
29170 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
29180 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
29190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
291a0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
291b0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
291c0 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
291d0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
291e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
291f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
29200 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
29210 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 72  iteErrorCode xCr
29220 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
29230 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44         IntPtr pD
29240 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
29250 20 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c      IntPtr pAux,
29260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29270 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
29280 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
29290 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20  Ptr argv,..     
292a0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
292b0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
292d0 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d  f IntPtr pError.
292e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
292f0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
29300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29310 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
29320 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
29330 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
29340 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
29350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
29360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29370 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53        pError = S
29380 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
29390 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
293a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
293b0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c             Modul
293c0 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72  eNotAvailableErr
293d0 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  orMessage);.... 
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293f0 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
29400 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
29410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29420 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29430 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
29440 64 75 6c 65 2e 78 43 72 65 61 74 65 28 0d 0a 20  dule.xCreate(.. 
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29460 20 20 20 70 44 62 2c 20 70 41 75 78 2c 20 61 72     pDb, pAux, ar
29470 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20 70 56  gc, argv, ref pV
29480 74 61 62 2c 20 72 65 66 20 70 45 72 72 6f 72 29  tab, ref pError)
29490 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
294a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
294b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
29500 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
29510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29520 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
29530 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
29540 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
29550 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
29560 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
29570 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
29580 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
29590 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20  m name="pDb">.. 
295a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
295b0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
295c0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
295d0 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20  odule.xConnect" 
295e0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
295f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
29600 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
29610 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
29620 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20  e="pAux">..     
29630 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
29640 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
29650 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
29660 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
29670 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
29680 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
29690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
296a0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
296b0 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  rgc">..         
296c0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
296d0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
296e0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
296f0 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
29700 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
29710 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
29720 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
29730 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22  aram name="argv"
29740 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29750 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
29760 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
29770 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65  iveModule.xConne
29780 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  ct" /> method...
29790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
297a0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
297b0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
297c0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
297d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
297e0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
297f0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
29800 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
29810 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
29820 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
29830 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
29840 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
29850 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20  me="pError">..  
29860 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
29870 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
29880 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
29890 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
298a0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
298b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
298c0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
298d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
298e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
298f0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
29900 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
29910 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
29920 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
29930 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
29940 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
29950 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
29960 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e  teErrorCode xCon
29970 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
29980 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44         IntPtr pD
29990 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
299a0 20 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c      IntPtr pAux,
299b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
299c0 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
299d0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
299e0 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20  Ptr argv,..     
299f0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
29a00 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
29a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29a20 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d  f IntPtr pError.
29a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a40 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
29a50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29a60 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
29a70 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
29a80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
29a90 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
29aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
29ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ac0 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53        pError = S
29ad0 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
29ae0 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
29af0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29b00 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c             Modul
29b10 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72  eNotAvailableErr
29b20 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  orMessage);.... 
29b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b40 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
29b50 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
29b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29b80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
29b90 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a  dule.xConnect(..
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bb0 20 20 20 20 70 44 62 2c 20 70 41 75 78 2c 20 61      pDb, pAux, a
29bc0 72 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20 70  rgc, argv, ref p
29bd0 56 74 61 62 2c 20 72 65 66 20 70 45 72 72 6f 72  Vtab, ref pError
29be0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
29bf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29c00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29c50 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
29c60 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29c70 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
29c80 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
29c90 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
29ca0 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ndex" /> method.
29cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29cc0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
29cd0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
29ce0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
29cf0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
29d00 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29d10 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29d20 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74  tiveModule.xBest
29d30 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
29d40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29d50 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
29d60 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
29d70 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65 78  ram name="pIndex
29d80 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
29d90 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29da0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29db0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74  tiveModule.xBest
29dc0 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
29dd0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29de0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
29df0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
29e00 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
29e10 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29e20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29e30 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29e40 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65  BestIndex" /> me
29e50 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
29e60 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
29e70 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
29e80 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
29e90 72 43 6f 64 65 20 78 42 65 73 74 49 6e 64 65 78  rCode xBestIndex
29ea0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29eb0 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c     IntPtr pVtab,
29ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ed0 20 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d    IntPtr pIndex.
29ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29ef0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
29f00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29f10 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
29f20 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
29f30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
29f40 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
29f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f60 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
29f70 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
29f80 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
29f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29fa0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
29fb0 78 42 65 73 74 49 6e 64 65 78 28 70 56 74 61 62  xBestIndex(pVtab
29fc0 2c 20 70 49 6e 64 65 78 29 3b 0d 0a 20 20 20 20  , pIndex);..    
29fd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29fe0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
29ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2a030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a040 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2a050 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2a060 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2a070 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2a080 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f  e.xDisconnect" /
2a090 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2a0a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2a0b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2a0c0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2a0d0 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
2a0e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2a0f0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2a100 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2a110 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22  ule.xDisconnect"
2a120 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2a130 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2a140 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2a150 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2a160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a170 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2a180 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2a190 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e  veModule.xDiscon
2a1a0 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
2a1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a1c0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2a1d0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2a1e0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2a1f0 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20   xDisconnect(.. 
2a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2a210 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
2a220 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2a230 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a250 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2a260 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a270 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2a280 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a2a0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2a2b0 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2a2c0 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a2e0 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 44 69 73  turn module.xDis
2a2f0 63 6f 6e 6e 65 63 74 28 70 56 74 61 62 29 3b 0d  connect(pVtab);.
2a300 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2a310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a360 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2a370 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2a380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a390 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2a3a0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2a3b0 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22  Module.xDestroy"
2a3c0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2a3d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
2a3e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2a3f0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2a400 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
2a410 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2a420 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2a430 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2a440 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22 20  odule.xDestroy" 
2a450 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2a460 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2a470 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2a480 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2a490 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a4a0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2a4b0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2a4c0 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79  eModule.xDestroy
2a4d0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2a4e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2a4f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2a500 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2a510 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44 65  iteErrorCode xDe
2a520 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20  stroy(..        
2a530 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2a540 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
2a550 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2a560 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a570 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2a580 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2a5a0 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2a5b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2a5c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2a5d0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2a5e0 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2a5f0 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
2a600 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2a610 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 28 70 56  dule.xDestroy(pV
2a620 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tab);..         
2a630 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a640 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a680 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a690 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2a6a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2a6b0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2a6c0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2a6d0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70  NativeModule.xOp
2a6e0 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  en" /> method...
2a6f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a700 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2a710 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2a720 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
2a730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a740 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2a750 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2a760 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20  veModule.xOpen" 
2a770 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2a780 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2a790 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2a7a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2a7b0 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20  e="pCursor">..  
2a7c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2a7d0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2a7e0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2a7f0 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d  dule.xOpen" /> m
2a800 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2a810 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2a820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a830 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2a840 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2a850 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2a860 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2a870 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65  ule.xOpen" /> me
2a880 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2a890 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
2a8a0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
2a8b0 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
2a8c0 72 43 6f 64 65 20 78 4f 70 65 6e 28 0d 0a 20 20  rCode xOpen(..  
2a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2a8e0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
2a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2a900 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
2a910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a920 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2a930 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a940 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2a950 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2a960 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2a970 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a990 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2a9a0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2a9b0 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2a9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a9d0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2a9e0 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 72 65 66  xOpen(pVtab, ref
2a9f0 20 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20   pCursor);..    
2aa00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2aa10 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2aa60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2aa70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2aa80 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2aa90 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2aaa0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2aab0 65 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74  e.xClose" /> met
2aac0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2aad0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2aae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2aaf0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2ab00 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
2ab10 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2ab20 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2ab30 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2ab40 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68  .xClose" /> meth
2ab50 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2ab60 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2ab70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ab80 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2ab90 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2aba0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2abb0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2abc0 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68  .xClose" /> meth
2abd0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2abe0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2abf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2ac00 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
2ac10 6f 64 65 20 78 43 6c 6f 73 65 28 0d 0a 20 20 20  ode xClose(..   
2ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2ac30 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
2ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2ac50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ac70 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2ac80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ac90 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2aca0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2acc0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2acd0 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72  vailableCursorEr
2ace0 72 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d  ror(pCursor);...
2acf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ad00 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
2ad10 43 6c 6f 73 65 28 70 43 75 72 73 6f 72 29 3b 0d  Close(pCursor);.
2ad20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ad30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ad40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2ad90 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2adb0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2adc0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2add0 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2ade0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2adf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2ae00 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2ae10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2ae20 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a  ame="pCursor">..
2ae30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ae40 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2ae50 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2ae60 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2ae70 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2ae80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2ae90 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2aea0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2aeb0 65 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20 20 20  e="idxNum">..   
2aec0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2aed0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2aee0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2aef0 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20  ule.xFilter" /> 
2af00 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2af10 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2af20 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2af30 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2af40 69 64 78 53 74 72 22 3e 0d 0a 20 20 20 20 20 20  idxStr">..      
2af50 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2af60 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2af70 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2af80 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74  .xFilter" /> met
2af90 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2afa0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2afb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2afc0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
2afd0 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c">..           
2afe0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2aff0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2b000 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c  ativeModule.xFil
2b010 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ter" /> method..
2b020 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b030 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2b040 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2b050 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a  m name="argv">..
2b060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b070 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b080 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b090 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2b0a0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2b0b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2b0c0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2b0d0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2b0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b0f0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2b100 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2b110 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22  eModule.xFilter"
2b120 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2b130 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2b140 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2b150 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2b160 74 65 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c  teErrorCode xFil
2b170 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
2b180 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
2b190 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  rsor,..         
2b1a0 20 20 20 20 20 20 20 69 6e 74 20 69 64 78 4e 75         int idxNu
2b1b0 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m,..            
2b1c0 20 20 20 20 49 6e 74 50 74 72 20 69 64 78 53 74      IntPtr idxSt
2b1d0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2b1e0 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
2b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2b200 6e 74 50 74 72 20 61 72 67 76 0d 0a 20 20 20 20  ntPtr argv..    
2b210 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2b220 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2b240 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2b250 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b260 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2b270 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b290 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2b2a0 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72  ailableCursorErr
2b2b0 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  or(pCursor);....
2b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2d0 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 46  return module.xF
2b2e0 69 6c 74 65 72 28 70 43 75 72 73 6f 72 2c 20 69  ilter(pCursor, i
2b2f0 64 78 4e 75 6d 2c 20 69 64 78 53 74 72 2c 20 61  dxNum, idxStr, a
2b300 72 67 63 2c 20 61 72 67 76 29 3b 0d 0a 20 20 20  rgc, argv);..   
2b310 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b320 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2b330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2b370 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b380 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2b390 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2b3a0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2b3b0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2b3c0 6c 65 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74  le.xNext" /> met
2b3d0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2b3e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2b3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b400 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2b410 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
2b420 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2b430 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2b440 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2b450 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f  .xNext" /> metho
2b460 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2b470 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2b480 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2b490 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2b4a0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2b4b0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2b4c0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2b4d0 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64  xNext" /> method
2b4e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b4f0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2b500 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2b510 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2b520 65 20 78 4e 65 78 74 28 0d 0a 20 20 20 20 20 20  e xNext(..      
2b530 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2b540 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20   pCursor..      
2b550 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2b560 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2b580 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2b590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b5a0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2b5b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b5c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b5d0 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
2b5e0 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72  lableCursorError
2b5f0 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20  (pCursor);....  
2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b610 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 4e 65 78  turn module.xNex
2b620 74 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20  t(pCursor);..   
2b630 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b640 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2b650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2b690 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b6a0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2b6b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2b6c0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2b6d0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2b6e0 6c 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68  le.xEof" /> meth
2b6f0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2b700 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2b710 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b720 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
2b730 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
2b740 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2b750 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2b760 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2b770 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  xEof" /> method.
2b780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b790 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2b7a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2b7b0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2b7c0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2b7d0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2b7e0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45  eNativeModule.xE
2b7f0 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  of" /> method...
2b800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b810 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2b820 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69          public i
2b830 6e 74 20 78 45 6f 66 28 0d 0a 20 20 20 20 20 20  nt xEof(..      
2b840 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2b850 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20   pCursor..      
2b860 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2b870 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2b890 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2b8a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b8b0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2b8c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b8d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
2b8f0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2b900 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75  eCursorError(pCu
2b910 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rsor);..        
2b920 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b930 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  rn 1;..         
2b940 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b950 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b960 72 6e 20 6d 6f 64 75 6c 65 2e 78 45 6f 66 28 70  rn module.xEof(p
2b970 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20  Cursor);..      
2b980 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b990 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b9e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2b9f0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ba00 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2ba10 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2ba20 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2ba30 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68  xColumn" /> meth
2ba40 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2ba50 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2ba60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ba70 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
2ba80 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
2ba90 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2baa0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2bab0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2bac0 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68  xColumn" /> meth
2bad0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2bae0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2baf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2bb00 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6f 6e  param name="pCon
2bb10 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  text">..        
2bb20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2bb30 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2bb40 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2bb50 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f  Column" /> metho
2bb60 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2bb70 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2bb80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2bb90 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78  aram name="index
2bba0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2bbb0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2bbc0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2bbd0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
2bbe0 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  mn" /> method...
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2bc00 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2bc10 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2bc20 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2bc30 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2bc40 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2bc50 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c  ativeModule.xCol
2bc60 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  umn" /> method..
2bc70 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bc80 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2bc90 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2bca0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2bcb0 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20  xColumn(..      
2bcc0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2bcd0 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20   pCursor,..     
2bce0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2bcf0 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  r pContext,..   
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2bd10 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20   index..        
2bd20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2bd30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2bd40 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2bd50 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2bd60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd70 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2bd80 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2bd90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2bda0 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2bdb0 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70  bleCursorError(p
2bdc0 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  Cursor);....    
2bdd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2bde0 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  rn module.xColum
2bdf0 6e 28 70 43 75 72 73 6f 72 2c 20 70 43 6f 6e 74  n(pCursor, pCont
2be00 65 78 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  ext, index);..  
2be10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2be20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2be30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2be70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2be80 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2be90 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2bea0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2beb0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2bec0 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d  ule.xRowId" /> m
2bed0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2bee0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2bef0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2bf00 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2bf10 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
2bf20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2bf30 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2bf40 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2bf50 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d 65  le.xRowId" /> me
2bf60 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2bf70 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2bf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bf90 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f   <param name="ro
2bfa0 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  wId">..         
2bfb0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2bfc0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2bfd0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2bfe0 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  owId" /> method.
2bff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c000 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2c010 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2c020 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2c030 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2c040 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2c050 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2c060 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  owId" /> method.
2c070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c080 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2c090 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2c0a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2c0b0 20 78 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20   xRowId(..      
2c0c0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2c0d0 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20   pCursor,..     
2c0e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c             ref l
2c0f0 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20  ong rowId..     
2c100 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2c110 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c120 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c130 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2c140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c150 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2c160 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c180 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2c190 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f  ilableCursorErro
2c1a0 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  r(pCursor);.... 
2c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c1c0 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f  eturn module.xRo
2c1d0 77 49 64 28 70 43 75 72 73 6f 72 2c 20 72 65 66  wId(pCursor, ref
2c1e0 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20   rowId);..      
2c1f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c200 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2c210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c250 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2c260 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2c270 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2c280 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2c290 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2c2a0 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68  xUpdate" /> meth
2c2b0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c2c0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2c2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c2e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
2c2f0 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  tab">..         
2c300 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2c310 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2c320 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55  eNativeModule.xU
2c330 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  pdate" /> method
2c340 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c350 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2c360 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2c370 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
2c380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c390 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2c3a0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2c3b0 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65  veModule.xUpdate
2c3c0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2c3d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2c3e0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2c3f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2c400 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20  ame="argv">..   
2c410 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2c420 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2c430 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2c440 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20  ule.xUpdate" /> 
2c450 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2c460 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2c470 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c480 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2c490 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20  rowId">..       
2c4a0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2c4b0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2c4c0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2c4d0 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68  xUpdate" /> meth
2c4e0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c4f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2c500 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c510 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2c520 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2c530 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2c540 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2c550 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74  .xUpdate" /> met
2c560 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2c570 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2c580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2c590 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
2c5a0 43 6f 64 65 20 78 55 70 64 61 74 65 28 0d 0a 20  Code xUpdate(.. 
2c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2c5c0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2c5e0 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20  t argc,..       
2c5f0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2c600 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20  argv,..         
2c610 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20         ref long 
2c620 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20  rowId..         
2c630 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2c640 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c650 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
2c660 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c680 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
2c690 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2c6a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c6b0 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2c6c0 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  leTableError(pVt
2c6d0 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
2c6e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
2c6f0 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 28 70 56  odule.xUpdate(pV
2c700 74 61 62 2c 20 61 72 67 63 2c 20 61 72 67 76 2c  tab, argc, argv,
2c710 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20   ref rowId);..  
2c720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c730 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2c740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2c780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c790 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2c7a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2c7b0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2c7c0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2c7d0 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d  ule.xBegin" /> m
2c7e0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2c7f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c800 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2c810 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2c820 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
2c830 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2c840 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2c850 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2c860 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68  .xBegin" /> meth
2c870 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c880 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2c890 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c8a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2c8b0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2c8c0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2c8d0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2c8e0 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68  .xBegin" /> meth
2c8f0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c900 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2c910 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2c920 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
2c930 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a 20 20 20  ode xBegin(..   
2c940 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2c950 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
2c960 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2c970 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c980 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c990 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2c9a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c9b0 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2c9c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c9e0 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2c9f0 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72  ilableTableError
2ca00 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ca20 72 6e 20 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e  rn module.xBegin
2ca30 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20  (pVtab);..      
2ca40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ca50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ca60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2caa0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2cab0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2cac0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2cad0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2cae0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2caf0 78 53 79 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64  xSync" /> method
2cb00 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2cb10 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2cb20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2cb30 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
2cb40 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
2cb50 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2cb60 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2cb70 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e  ativeModule.xSyn
2cb80 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  c" /> method... 
2cb90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2cba0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2cbb0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2cbc0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2cbd0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2cbe0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2cbf0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63  tiveModule.xSync
2cc00 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2cc10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2cc20 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2cc30 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2cc40 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 79  iteErrorCode xSy
2cc50 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nc(..           
2cc60 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
2cc70 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b..             
2cc80 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2cc90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cca0 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2ccb0 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ccd0 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2cce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ccf0 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2cd00 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61  leNotAvailableTa
2cd10 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b  bleError(pVtab);
2cd20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cd30 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c      return modul
2cd40 65 2e 78 53 79 6e 63 28 70 56 74 61 62 29 3b 0d  e.xSync(pVtab);.
2cd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2cd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2cd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdb0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2cdc0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2cdd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2cde0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2cdf0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2ce00 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20  Module.xCommit" 
2ce10 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2ce20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2ce30 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2ce40 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2ce50 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
2ce60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2ce70 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2ce80 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2ce90 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e  dule.xCommit" />
2cea0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2ceb0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2cec0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2ced0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2cee0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2cef0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2cf00 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2cf10 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f  odule.xCommit" /
2cf20 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2cf30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2cf40 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2cf50 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
2cf60 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6d 6d 69  ErrorCode xCommi
2cf70 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2cf80 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
2cf90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cfa0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2cfb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2cfc0 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70      // CheckDisp
2cfd0 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
2cfe0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2cff0 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d010 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c      return Modul
2d020 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62  eNotAvailableTab
2d030 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d  leError(pVtab);.
2d040 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d050 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
2d060 2e 78 43 6f 6d 6d 69 74 28 70 56 74 61 62 29 3b  .xCommit(pVtab);
2d070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2d080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2d090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2d0e0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2d0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d100 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2d110 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2d120 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
2d130 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  k" /> method... 
2d140 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d150 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2d160 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2d170 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
2d180 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d190 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2d1a0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2d1b0 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
2d1c0 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  k" /> method... 
2d1d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d1e0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2d1f0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2d200 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2d210 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d220 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d230 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
2d240 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  back" /> method.
2d250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d260 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2d270 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2d280 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2d290 20 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20   xRollback(..   
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2d2b0 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
2d2c0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2d2d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2d2f0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2d300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d310 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2d320 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2d330 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2d340 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2d350 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72  ilableTableError
2d360 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
2d370 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d380 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  rn module.xRollb
2d390 61 63 6b 28 70 56 74 61 62 29 3b 0d 0a 20 20 20  ack(pVtab);..   
2d3a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d3b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2d3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2d400 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d410 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2d420 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2d430 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2d440 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2d450 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
2d460 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2d470 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2d480 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2d490 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2d4a0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2d4b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d4c0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2d4d0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2d4e0 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
2d4f0 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  tion" /> method.
2d500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d510 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2d520 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2d530 61 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 22 3e 0d  am name="nArg">.
2d540 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d550 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2d560 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2d570 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  eModule.xFindFun
2d580 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  ction" /> method
2d590 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2d5a0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2d5b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2d5c0 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d 65 22  ram name="zName"
2d5d0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2d5e0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2d5f0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2d600 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  iveModule.xFindF
2d610 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68  unction" /> meth
2d620 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d630 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2d640 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d650 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c  param name="call
2d660 62 61 63 6b 22 3e 0d 0a 20 20 20 20 20 20 20 20  back">..        
2d670 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2d680 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2d690 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2d6a0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e  FindFunction" />
2d6b0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2d6c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2d6d0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2d6e0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2d6f0 22 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a  "pClientData">..
2d700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d710 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2d720 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2d730 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
2d740 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  tion" /> method.
2d750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d760 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2d770 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2d780 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2d790 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2d7a0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2d7b0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
2d7c0 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  indFunction" /> 
2d7d0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2d7e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2d7f0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2d800 20 70 75 62 6c 69 63 20 69 6e 74 20 78 46 69 6e   public int xFin
2d810 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
2d820 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2d830 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
2d840 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
2d850 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Arg,..          
2d860 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 61        IntPtr zNa
2d870 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2d880 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 43       ref SQLiteC
2d890 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
2d8a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d8b0 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43     ref IntPtr pC
2d8c0 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20  lientData..     
2d8d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2d8e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2d900 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2d910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d920 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2d930 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2d940 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d960 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2d970 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  leTableError(pVt
2d980 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ab);..          
2d990 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d9a0 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
2d9b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d9c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d9d0 20 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e   module.xFindFun
2d9e0 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
2d9f0 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61              pVta
2da00 62 2c 20 6e 41 72 67 2c 20 7a 4e 61 6d 65 2c 20  b, nArg, zName, 
2da10 72 65 66 20 63 61 6c 6c 62 61 63 6b 2c 20 72 65  ref callback, re
2da20 66 20 70 43 6c 69 65 6e 74 44 61 74 61 29 3b 0d  f pClientData);.
2da30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2da40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da90 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2daa0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2dab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2dac0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2dad0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2dae0 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20  Module.xRename" 
2daf0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2db00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2db10 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2db20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2db30 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
2db40 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2db50 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2db60 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2db70 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e  dule.xRename" />
2db80 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2db90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2dba0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2dbb0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2dbc0 22 7a 4e 65 77 22 3e 0d 0a 20 20 20 20 20 20 20  "zNew">..       
2dbd0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2dbe0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2dbf0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2dc00 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68  xRename" /> meth
2dc10 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2dc20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2dc30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2dc40 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2dc50 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2dc60 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2dc70 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2dc80 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74  .xRename" /> met
2dc90 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2dca0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2dcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2dcc0 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
2dcd0 43 6f 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20  Code xRename(.. 
2dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2dcf0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
2dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2dd10 74 50 74 72 20 7a 4e 65 77 0d 0a 20 20 20 20 20  tPtr zNew..     
2dd20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2dd30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2dd50 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2dd60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dd70 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2dd80 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2dda0 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2ddb0 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72  ilableTableError
2ddc0 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
2ddd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2dde0 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d  rn module.xRenam
2ddf0 65 28 70 56 74 61 62 2c 20 7a 4e 65 77 29 3b 0d  e(pVtab, zNew);.
2de00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2de10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2de20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de60 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2de70 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2de80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2de90 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2dea0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2deb0 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  Module.xSavepoin
2dec0 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2ded0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2dee0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2def0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2df00 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
2df10 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2df20 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2df30 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2df40 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69  eModule.xSavepoi
2df50 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  nt" /> method...
2df60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2df70 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2df80 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2df90 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e   name="iSavepoin
2dfa0 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t">..           
2dfb0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2dfc0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2dfd0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76  ativeModule.xSav
2dfe0 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f  epoint" /> metho
2dff0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2e000 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2e010 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2e020 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2e030 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2e040 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2e050 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2e060 78 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d  xSavepoint" /> m
2e070 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2e080 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2e090 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2e0a0 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2e0b0 6f 72 43 6f 64 65 20 78 53 61 76 65 70 6f 69 6e  orCode xSavepoin
2e0c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2e0d0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
2e0e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e0f0 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e     int iSavepoin
2e100 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
2e110 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2e120 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e130 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2e140 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2e150 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e160 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2e170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e180 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2e190 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61  leNotAvailableTa
2e1a0 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b  bleError(pVtab);
2e1b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e1c0 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c      return modul
2e1d0 65 2e 78 53 61 76 65 70 6f 69 6e 74 28 70 56 74  e.xSavepoint(pVt
2e1e0 61 62 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  ab, iSavepoint);
2e1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e250 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2e260 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2e270 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e280 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2e290 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2e2a0 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65  eModule.xRelease
2e2b0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2e2c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2e2d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2e2e0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2e2f0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2e300 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e310 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2e320 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2e330 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22  Module.xRelease"
2e340 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2e350 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2e360 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2e370 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2e380 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e  me="iSavepoint">
2e390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e3a0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2e3b0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2e3c0 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73  veModule.xReleas
2e3d0 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
2e3e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e3f0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2e400 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2e410 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2e420 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2e430 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2e440 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65  tiveModule.xRele
2e450 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ase" /> method..
2e460 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e470 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2e480 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2e490 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2e4a0 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20  xRelease(..     
2e4b0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2e4c0 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
2e4d0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53            int iS
2e4e0 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20  avepoint..      
2e4f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e500 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2e520 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2e530 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e540 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2e550 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e560 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e570 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
2e580 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
2e590 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
2e5a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e5b0 6e 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73  n module.xReleas
2e5c0 65 28 70 56 74 61 62 2c 20 69 53 61 76 65 70 6f  e(pVtab, iSavepo
2e5d0 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  int);..         
2e5e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e5f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2e600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e630 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e640 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2e650 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2e660 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2e670 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2e680 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  NativeModule.xRo
2e690 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74  llbackTo" /> met
2e6a0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2e6b0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2e6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e6d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2e6e0 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
2e6f0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2e700 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2e710 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2e720 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d  RollbackTo" /> m
2e730 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2e740 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2e750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e760 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
2e770 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20  Savepoint">..   
2e780 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2e790 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2e7a0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2e7b0 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22  ule.xRollbackTo"
2e7c0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2e7d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2e7e0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2e7f0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2e800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e810 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2e820 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2e830 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61  veModule.xRollba
2e840 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ckTo" /> method.
2e850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e860 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2e870 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2e880 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2e890 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20   xRollbackTo(.. 
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2e8b0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
2e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2e8d0 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20  t iSavepoint..  
2e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2e8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e910 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2e920 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2e930 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2e940 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e960 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
2e970 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
2e980 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
2e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e9a0 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f  eturn module.xRo
2e9b0 6c 6c 62 61 63 6b 54 6f 28 70 56 74 61 62 2c 20  llbackTo(pVtab, 
2e9c0 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20 20  iSavepoint);..  
2e9d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2e9e0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2e9f0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
2ea00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2ea10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2ea50 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
2ea60 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72  isposable Member
2ea70 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
2ea80 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2ea90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69            /// Di
2eaa0 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f  sposes of this o
2eab0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
2eac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ead0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2eae0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2eaf0 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
2eb00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
2eb20 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
2eb40 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69  C.SuppressFinali
2eb50 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20  ze(this);..     
2eb60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2eb70 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2eb80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2eb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2ebe0 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
2ebf0 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22  osable "Pattern"
2ec00 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
2ec10 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
2ec20 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
2ec30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2ec40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ec50 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20       /// Throws 
2ec60 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62  an <see cref="Ob
2ec70 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
2ec80 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74 68 69  ption" /> if thi
2ec90 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20  s object..      
2eca0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
2ecb0 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 70  ce has been disp
2ecc0 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  osed...         
2ecd0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2ece0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
2ecf0 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
2ed00 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74  kDisposed() /* t
2ed10 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
2ed20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f       {..#if THRO
2ed30 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20  W_ON_DISPOSED.. 
2ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ed50 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20  f (disposed)..  
2ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2ed70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed80 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f       throw new O
2ed90 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
2eda0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
2edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edc0 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 4e 61   typeof(SQLiteNa
2edd0 74 69 76 65 4d 6f 64 75 6c 65 29 2e 4e 61 6d 65  tiveModule).Name
2ede0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2edf0 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
2ee00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2ee20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2ee60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ee70 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2ee80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69            /// Di
2ee90 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f  sposes of this o
2eea0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
2eeb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2eec0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2eed0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2eee0 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73  ram name="dispos
2eef0 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  ing">..         
2ef00 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
2ef10 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69  if this method i
2ef20 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  s being called f
2ef30 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20  rom the..       
2ef40 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
2ef50 65 66 3d 22 44 69 73 70 6f 73 65 28 29 22 20 2f  ef="Dispose()" /
2ef60 3e 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20  > method.  Zero 
2ef70 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69  if this method i
2ef80 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20  s being..       
2ef90 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 20       /// called 
2efa0 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 69 7a  from the finaliz
2efb0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...           
2efc0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2efd0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2efe0 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
2eff0 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
2f000 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
2f010 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
2f020 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f030 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
2f040 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
2f050 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f070 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d  /if (disposing).
2f080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f090 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
2f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f0b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2f0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f0f0 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
2f100 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
2f110 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f130 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2f140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f150 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
2f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f180 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2f190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2f1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f1c0 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
2f1d0 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
2f1e0 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
2f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f200 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2f210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f220 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f240 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2f250 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2f260 54 68 65 20 6d 6f 64 75 6c 65 20 69 73 20 6e 6f  The module is no
2f270 74 20 6f 77 6e 65 64 20 62 79 20 75 73 3b 20 74  t owned by us; t
2f280 68 65 72 65 66 6f 72 65 2c 20 64 6f 20 6e 6f 74  herefore, do not
2f290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f2a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
2f2b0 69 73 70 6f 73 65 20 69 74 2e 0d 0a 20 20 20 20  ispose it...    
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2f2e0 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
2f2f0 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le != null)..   
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f310 20 20 20 20 20 6d 6f 64 75 6c 65 20 3d 20 6e 75       module = nu
2f320 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
2f330 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
2f340 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
2f350 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2f360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2f370 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2f380 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2f390 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2f3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2f3e0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2f3f0 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
2f400 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2f410 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2f420 20 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73     /// Finalizes
2f430 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
2f440 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
2f450 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2f460 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2f470 7e 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ~SQLiteNativeMod
2f480 75 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ule()..         
2f490 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f4a0 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
2f4b0 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
2f4c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2f4d0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
2f4e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2f4f0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2f500 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2f510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f550 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2f560 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
2f570 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nts..        ///
2f580 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2f590 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61      /// The defa
2f5a0 75 6c 74 20 65 73 74 69 6d 61 74 65 64 20 63 6f  ult estimated co
2f5b0 73 74 20 66 6f 72 20 75 73 65 20 77 69 74 68 20  st for use with 
2f5c0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
2f5d0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2f5e0 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
2f5f0 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d  .BestIndex" /> m
2f600 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2f610 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2f620 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2f630 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
2f640 64 6f 75 62 6c 65 20 44 65 66 61 75 6c 74 45 73  double DefaultEs
2f650 74 69 6d 61 74 65 64 43 6f 73 74 20 3d 20 64 6f  timatedCost = do
2f660 75 62 6c 65 2e 4d 61 78 56 61 6c 75 65 3b 0d 0a  uble.MaxValue;..
2f670 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2f680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
2f6d0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2f6e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61      /// The defa
2f6f0 75 6c 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  ult version of t
2f700 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
2f710 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  3_module structu
2f720 72 65 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20  re in use...    
2f730 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2f740 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
2f750 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
2f760 6e 6c 79 20 69 6e 74 20 44 65 66 61 75 6c 74 4d  nly int DefaultM
2f770 6f 64 75 6c 65 56 65 72 73 69 6f 6e 20 3d 20 32  oduleVersion = 2
2f780 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
2f790 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2f7a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2f7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f7e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2f7f0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
2f800 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20  ate Data..      
2f810 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2f820 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
2f830 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  s field is used 
2f840 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6e 61 74  to store the nat
2f850 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ive sqlite3_modu
2f860 6c 65 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20  le structure..  
2f870 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69        /// associ
2f880 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  ated with this o
2f890 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
2f8a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
2f8b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2f8c0 20 70 72 69 76 61 74 65 20 55 6e 73 61 66 65 4e   private UnsafeN
2f8d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2f8e0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6e 61 74 69  ite3_module nati
2f8f0 76 65 4d 6f 64 75 6c 65 3b 0d 0a 0d 0a 20 20 20  veModule;....   
2f900 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2f910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f950 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  #if PLATFORM_COM
2f960 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
2f970 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2f980 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2f990 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20  / This field is 
2f9a0 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65  used to hold the
2f9b0 20 62 6c 6f 63 6b 20 6f 66 20 6e 61 74 69 76 65   block of native
2f9c0 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 63 6f 6e   memory that con
2f9d0 74 61 69 6e 73 0d 0a 20 20 20 20 20 20 20 20 2f  tains..        /
2f9e0 2f 2f 20 74 68 65 20 6e 61 74 69 76 65 20 73 71  // the native sq
2f9f0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72  lite3_module str
2fa00 75 63 74 75 72 65 20 61 73 73 6f 63 69 61 74 65  ucture associate
2fa10 64 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65  d with this obje
2fa20 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ct..        /// 
2fa30 69 6e 73 74 61 6e 63 65 20 77 68 65 6e 20 72 75  instance when ru
2fa40 6e 6e 69 6e 67 20 6f 6e 20 74 68 65 20 2e 4e 45  nning on the .NE
2fa50 54 20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65 77  T Compact Framew
2fa60 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ork...        //
2fa70 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2fa80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e        private In
2fa90 74 50 74 72 20 70 4e 61 74 69 76 65 4d 6f 64 75  tPtr pNativeModu
2faa0 6c 65 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  le;..#endif.... 
2fab0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2fb00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2fb10 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2fb20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
2fb30 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2fb40 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2fb50 6c 65 20 69 6e 73 74 61 6e 63 65 73 20 61 73 73  le instances ass
2fb60 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
2fb70 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 6d   /// with this m
2fb80 6f 64 75 6c 65 2e 20 20 54 68 65 20 6e 61 74 69  odule.  The nati
2fb90 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
2fba0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
2fbb0 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20 20  erived..        
2fbc0 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20 69 73  /// structure is
2fbd0 20 75 73 65 64 20 74 6f 20 6b 65 79 20 69 6e 74   used to key int
2fbe0 6f 20 74 68 69 73 20 63 6f 6c 6c 65 63 74 69 6f  o this collectio
2fbf0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
2fc00 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2fc10 20 20 20 20 70 72 69 76 61 74 65 20 44 69 63 74      private Dict
2fc20 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20 53  ionary<IntPtr, S
2fc30 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
2fc40 65 3e 20 74 61 62 6c 65 73 3b 0d 0a 0d 0a 20 20  e> tables;....  
2fc50 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2fc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2fca0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
2fcb0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2fcc0 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69  /// This field i
2fcd0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2fce0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
2fcf0 65 20 63 75 72 73 6f 72 20 69 6e 73 74 61 6e 63  e cursor instanc
2fd00 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  es..        /// 
2fd10 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2fd20 74 68 69 73 20 6d 6f 64 75 6c 65 2e 20 20 54 68  this module.  Th
2fd30 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
2fd40 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
2fd50 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61   /// sqlite3_vta
2fd60 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64  b_cursor derived
2fd70 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
2fd80 65 64 20 74 6f 20 6b 65 79 20 69 6e 74 6f 20 74  ed to key into t
2fd90 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
2fda0 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20   collection...  
2fdb0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2fdc0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
2fdd0 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79  ivate Dictionary
2fde0 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56  <IntPtr, SQLiteV
2fdf0 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
2fe00 72 3e 20 63 75 72 73 6f 72 73 3b 0d 0a 0d 0a 20  r> cursors;.... 
2fe10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fe20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2fe60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2fe70 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2fe80 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
2fe90 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2fea0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2feb0 6c 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 73 74  le function inst
2fec0 61 6e 63 65 73 0d 0a 20 20 20 20 20 20 20 20 2f  ances..        /
2fed0 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
2fee0 74 68 20 74 68 69 73 20 6d 6f 64 75 6c 65 2e 20  th this module. 
2fef0 20 54 68 65 20 63 61 73 65 2d 69 6e 73 65 6e 73   The case-insens
2ff00 69 74 69 76 65 20 66 75 6e 63 74 69 6f 6e 20 6e  itive function n
2ff10 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ame..        ///
2ff20 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20   and the number 
2ff30 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 28 77 69  of arguments (wi
2ff40 74 68 20 2d 31 20 6d 65 61 6e 69 6e 67 20 22 61  th -1 meaning "a
2ff50 6e 79 22 29 20 61 72 65 20 75 73 65 64 20 74 6f  ny") are used to
2ff60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
2ff70 6e 73 74 72 75 63 74 20 74 68 65 20 73 74 72 69  nstruct the stri
2ff80 6e 67 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ng that is used 
2ff90 74 6f 20 6b 65 79 20 69 6e 74 6f 20 74 68 69 73  to key into this
2ffa0 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20   collection...  
2ffb0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2ffc0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
2ffd0 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79  ivate Dictionary
2ffe0 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 46  <string, SQLiteF
2fff0 75 6e 63 74 69 6f 6e 3e 20 66 75 6e 63 74 69 6f  unction> functio
30000 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ns;..        #en
30010 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
30020 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
30030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
30070 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
30080 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
30090 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
300a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
300b0 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
300c0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
300d0 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
300e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
300f0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
30100 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
30110 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  me">..        //
30120 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
30130 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 69 73 20  e module.  This 
30140 70 61 72 61 6d 65 74 65 72 20 63 61 6e 6e 6f 74  parameter cannot
30150 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20   be null...     
30160 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
30170 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
30180 53 51 4c 69 74 65 4d 6f 64 75 6c 65 28 73 74 72  SQLiteModule(str
30190 69 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20  ing name)..     
301a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
301b0 20 20 69 66 20 28 6e 61 6d 65 20 3d 3d 20 6e 75    if (name == nu
301c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
301d0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
301e0 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
301f0 74 69 6f 6e 28 22 6e 61 6d 65 22 29 3b 0d 0a 0d  tion("name");...
30200 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
30210 73 2e 6e 61 6d 65 20 3d 20 6e 61 6d 65 3b 0d 0a  s.name = name;..
30220 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
30230 2e 74 61 62 6c 65 73 20 3d 20 6e 65 77 20 44 69  .tables = new Di
30240 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c  ctionary<IntPtr,
30250 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
30260 62 6c 65 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20  ble>();..       
30270 20 20 20 20 20 74 68 69 73 2e 63 75 72 73 6f 72       this.cursor
30280 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
30290 72 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74  ry<IntPtr, SQLit
302a0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
302b0 73 6f 72 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20  sor>();..       
302c0 20 20 20 20 20 74 68 69 73 2e 66 75 6e 63 74 69       this.functi
302d0 6f 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  ons = new Dictio
302e0 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
302f0 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d  iteFunction>();.
30300 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
30310 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
30320 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
30330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30370 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
30380 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 4d 65  gion Internal Me
30390 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
303a0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
303b0 20 20 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65        /// Create
303c0 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
303d0 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f  e native sqlite_
303e0 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65  module structure
303f0 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20   using the..    
30400 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72      /// configur
30410 65 64 20 28 6f 72 20 64 65 66 61 75 6c 74 29 20  ed (or default) 
30420 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
30430 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
30440 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
30450 69 6e 74 65 72 66 61 63 65 20 69 6d 70 6c 65 6d  interface implem
30460 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
30470 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
30480 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
30490 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
304a0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
304b0 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73   sqlite_module s
304c0 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 74  tructure using t
304d0 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 28 6f  he configured (o
304e0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  r..        /// d
304f0 65 66 61 75 6c 74 29 20 3c 73 65 65 20 63 72 65  efault) <see cre
30500 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
30510 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72  Module" /> inter
30520 66 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  face..        //
30530 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
30540 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
30550 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
30560 20 20 20 69 6e 74 65 72 6e 61 6c 20 55 6e 73 61     internal Unsa
30570 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
30580 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 43  sqlite3_module C
30590 72 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  reateNativeModul
305a0 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e()..        {..
305b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
305c0 72 6e 20 43 72 65 61 74 65 4e 61 74 69 76 65 4d  rn CreateNativeM
305d0 6f 64 75 6c 65 28 47 65 74 4e 61 74 69 76 65 4d  odule(GetNativeM
305e0 6f 64 75 6c 65 49 6d 70 6c 28 29 29 3b 0d 0a 20  oduleImpl());.. 
305f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30600 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23  ///////////....#
30650 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  if PLATFORM_COMP
30660 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
30670 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
30680 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
30690 20 43 72 65 61 74 65 73 20 61 6e 64 20 72 65 74   Creates and ret
306a0 75 72 6e 73 20 61 20 6d 65 6d 6f 72 79 20 62 6c  urns a memory bl
306b0 6f 63 6b 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ock obtained fro
306c0 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  m the SQLite cor
306d0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  e..        /// l
306e0 69 62 72 61 72 79 20 75 73 65 64 20 74 6f 20 73  ibrary used to s
306f0 74 6f 72 65 20 74 68 65 20 6e 61 74 69 76 65 20  tore the native 
30700 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73  sqlite3_module s
30710 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
30720 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  s..        /// o
30730 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 77  bject instance w
30740 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74  hen running on t
30750 68 65 20 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20  he .NET Compact 
30760 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  Framework...    
30770 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
30780 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
30790 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
307a0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
307b0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
307c0 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
307d0 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65  module structure
307e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
307f0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
30800 20 20 20 69 6e 74 65 72 6e 61 6c 20 49 6e 74 50     internal IntP
30810 74 72 20 43 72 65 61 74 65 4e 61 74 69 76 65 4d  tr CreateNativeM
30820 6f 64 75 6c 65 49 6e 74 65 72 6f 70 28 29 0d 0a  oduleInterop()..
30830 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30840 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 74 69         if (pNati
30850 76 65 4d 6f 64 75 6c 65 20 3d 3d 20 49 6e 74 50  veModule == IntP
30860 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
30870 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30880 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
30890 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
308a0 48 41 43 4b 3a 20 4e 6f 20 65 61 73 79 20 77 61  HACK: No easy wa
308b0 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  y to determine t
308c0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6e  he size of the n
308d0 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 20  ative..         
308e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
308f0 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74  sqlite_module st
30900 72 75 63 74 75 72 65 20 77 68 65 6e 20 72 75 6e  ructure when run
30910 6e 69 6e 67 20 6f 6e 20 74 68 65 20 2e 4e 45 54  ning on the .NET
30920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30930 20 20 2f 2f 20 20 20 20 20 20 20 43 6f 6d 70 61    //       Compa
30940 63 74 20 46 72 61 6d 65 77 6f 72 6b 3b 20 74 68  ct Framework; th
30950 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 20 62 61  erefore, just ba
30960 73 65 20 74 68 65 20 73 69 7a 65 0d 0a 20 20 20  se the size..   
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
30980 20 20 20 20 20 20 6f 6e 20 77 68 61 74 20 77 65        on what we
30990 20 6b 6e 6f 77 3a 0d 0a 20 20 20 20 20 20 20 20   know:..        
309a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
309b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
309c0 20 20 20 20 20 54 68 65 72 65 20 69 73 20 6f 6e       There is on
309d0 65 20 69 6e 74 65 67 65 72 20 6d 65 6d 62 65 72  e integer member
309e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
309f0 20 20 20 2f 2f 20 20 20 20 20 20 20 54 68 65 72     //       Ther
30a00 65 20 61 72 65 20 32 32 20 66 75 6e 63 74 69 6f  e are 22 functio
30a10 6e 20 70 6f 69 6e 74 65 72 20 6d 65 6d 62 65 72  n pointer member
30a20 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
30a30 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
30a40 20 20 20 20 20 20 20 20 70 4e 61 74 69 76 65 4d          pNativeM
30a50 6f 64 75 6c 65 20 3d 20 53 51 4c 69 74 65 4d 65  odule = SQLiteMe
30a60 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28 0d 0a  mory.Allocate(..
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a80 20 20 20 20 73 69 7a 65 6f 66 28 69 6e 74 29 20      sizeof(int) 
30a90 2b 20 28 32 32 20 2a 20 49 6e 74 50 74 72 2e 53  + (22 * IntPtr.S
30aa0 69 7a 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ize));....      
30ab0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4e            if (pN
30ac0 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 3d 20 49  ativeModule == I
30ad0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
30ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30af0 20 74 68 72 6f 77 20 6e 65 77 20 4f 75 74 4f 66   throw new OutOf
30b00 4d 65 6d 6f 72 79 45 78 63 65 70 74 69 6f 6e 28  MemoryException(
30b10 22 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22  "sqlite3_module"
30b20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30b30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30b40 20 72 65 74 75 72 6e 20 70 4e 61 74 69 76 65 4d   return pNativeM
30b50 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  odule;..        
30b60 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
30b70 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
30b80 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
30be0 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68  ion Private Meth
30bf0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
30c00 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
30c10 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
30c20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
30c30 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f 6d 6f  native sqlite_mo
30c40 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 20 75  dule structure u
30c50 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  sing the..      
30c60 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 65 64 20    /// specified 
30c70 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
30c80 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
30c90 2f 3e 20 69 6e 74 65 72 66 61 63 65 0d 0a 20 20  /> interface..  
30ca0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
30cb0 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
30cc0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
30cd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
30ce0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
30cf0 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
30d00 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
30d10 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
30d20 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61  dule" /> interfa
30d30 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ce implementatio
30d40 6e 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n to..        //
30d50 2f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  / use...        
30d60 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
30d70 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
30d80 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
30d90 20 54 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   The native sqli
30da0 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74  te_module struct
30db0 75 72 65 20 75 73 69 6e 67 20 74 68 65 20 73 70  ure using the sp
30dc0 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20  ecified..       
30dd0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
30de0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
30df0 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63  ule" /> interfac
30e00 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
30e10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
30e20 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
30e30 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61 66     private Unsaf
30e40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
30e50 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 43 72  qlite3_module Cr
30e60 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  eateNativeModule
30e70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
30e80 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
30e90 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20  le module..     
30ea0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
30eb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30ec0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 20   nativeModule = 
30ed0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
30ee0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
30ef0 6d 6f 64 75 6c 65 28 29 3b 0d 0a 20 20 20 20 20  module();..     
30f00 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
30f10 75 6c 65 2e 69 56 65 72 73 69 6f 6e 20 3d 20 44  ule.iVersion = D
30f20 65 66 61 75 6c 74 4d 6f 64 75 6c 65 56 65 72 73  efaultModuleVers
30f30 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ion;....        
30f40 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 21      if (module !
30f50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30f60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30f70 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
30f80 64 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20 6e  dule.xCreate = n
30f90 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
30fa0 65 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28 0d  ethods.xCreate(.
30fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30fc0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 72 65 61      module.xCrea
30fd0 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
30fe0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
30ff0 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20  dule.xConnect = 
31000 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31010 4d 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74  Methods.xConnect
31020 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31030 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43         module.xC
31040 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20  onnect);....    
31050 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31060 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e  veModule.xBestIn
31070 64 65 78 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  dex = new Unsafe
31080 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42  NativeMethods.xB
31090 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20  estIndex(..     
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
310b0 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
310c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
310d0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
310e0 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d  le.xDisconnect =
310f0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
31100 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e  eMethods.xDiscon
31110 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
31120 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
31130 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d  e.xDisconnect);.
31140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31150 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31160 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20 55  xDestroy = new U
31170 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
31180 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20 20  ds.xDestroy(..  
31190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311a0 20 20 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f    module.xDestro
311b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
311c0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
311d0 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65 77 20  ule.xOpen = new 
311e0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
311f0 6f 64 73 2e 78 4f 70 65 6e 28 0d 0a 20 20 20 20  ods.xOpen(..    
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 29 3b 0d 0a  module.xOpen);..
31220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31230 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
31240 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55 6e 73 61  Close = new Unsa
31250 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
31260 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20  xClose(..       
31270 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
31280 75 6c 65 2e 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a  ule.xClose);....
31290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312a0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  nativeModule.xFi
312b0 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61 66  lter = new Unsaf
312c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
312d0 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20  Filter(..       
312e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
312f0 75 6c 65 2e 78 46 69 6c 74 65 72 29 3b 0d 0a 0d  ule.xFilter);...
31300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31310 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e   nativeModule.xN
31320 65 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ext = new Unsafe
31330 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e  NativeMethods.xN
31340 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ext(..          
31350 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
31360 2e 78 4e 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  .xNext);....    
31370 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31380 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20  veModule.xEof = 
31390 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
313a0 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 6d 6f 64  Methods.xEof(mod
313b0 75 6c 65 2e 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20  ule.xEof);....  
313c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
313d0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
313e0 6d 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  mn = new UnsafeN
313f0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
31400 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  lumn(..         
31410 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
31420 65 2e 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20  e.xColumn);.... 
31430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
31440 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77  ativeModule.xRow
31450 49 64 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  Id = new UnsafeN
31460 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f  ativeMethods.xRo
31470 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  wId(..          
31480 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
31490 2e 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20  .xRowId);....   
314a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
314b0 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74  iveModule.xUpdat
314c0 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
314d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 55 70 64  tiveMethods.xUpd
314e0 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
314f0 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
31500 2e 78 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20  .xUpdate);....  
31510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
31520 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69  tiveModule.xBegi
31530 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
31540 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 67  tiveMethods.xBeg
31550 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in(..           
31560 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
31570 78 42 65 67 69 6e 29 3b 0d 0a 0d 0a 20 20 20 20  xBegin);....    
31580 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31590 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d  veModule.xSync =
315a0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
315b0 65 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 0d  eMethods.xSync(.
315c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
315d0 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53 79 6e       module.xSyn
315e0 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  c);....         
315f0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31600 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e 65  ule.xCommit = ne
31610 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
31620 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a  thods.xCommit(..
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31640 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d      module.xComm
31650 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  it);....        
31660 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
31670 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d  dule.xRollback =
31680 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
31690 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61  eMethods.xRollba
316a0 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
316b0 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
316c0 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  xRollback);.... 
316d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
316e0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
316f0 64 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20  dFunction = new 
31700 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
31710 6f 64 73 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ods.xFindFunctio
31720 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
31730 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
31740 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a  FindFunction);..
31750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31760 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
31770 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73  Rename = new Uns
31780 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
31790 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20  .xRename(..     
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
317b0 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 29 3b 0d  odule.xRename);.
317c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
317d0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
317e0 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 6e 65 77  xSavepoint = new
317f0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
31800 68 6f 64 73 2e 78 53 61 76 65 70 6f 69 6e 74 28  hods.xSavepoint(
31810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31820 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53 61        module.xSa
31830 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20  vepoint);....   
31840 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
31850 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61  iveModule.xRelea
31860 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  se = new UnsafeN
31870 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65  ativeMethods.xRe
31880 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20  lease(..        
31890 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
318a0 6c 65 2e 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d  le.xRelease);...
318b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
318c0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
318d0 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20  ollbackTo = new 
318e0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
318f0 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28  ods.xRollbackTo(
31900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31910 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 6f        module.xRo
31920 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20 20 20  llbackTo);..    
31930 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
31940 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
31950 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31960 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31970 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
31980 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
31990 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 72 65 61  iveMethods.xCrea
319a0 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
319b0 20 20 20 20 20 20 20 20 20 78 43 72 65 61 74 65           xCreate
319c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
319d0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
319e0 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20 6e 65  le.xConnect = ne
319f0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
31a00 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74 28 0d  thods.xConnect(.
31a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31a20 20 20 20 20 20 78 43 6f 6e 6e 65 63 74 29 3b 0d       xConnect);.
31a30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31a40 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31a50 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65 77  xBestIndex = new
31a60 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
31a70 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78 28  hods.xBestIndex(
31a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31a90 20 20 20 20 20 20 78 42 65 73 74 49 6e 64 65 78        xBestIndex
31aa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31ab0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
31ac0 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d  le.xDisconnect =
31ad0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
31ae0 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e  eMethods.xDiscon
31af0 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
31b00 20 20 20 20 20 20 20 20 20 20 20 78 44 69 73 63             xDisc
31b10 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20  onnect);....    
31b20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31b30 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f  veModule.xDestro
31b40 79 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  y = new UnsafeNa
31b50 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 65 73  tiveMethods.xDes
31b60 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20  troy(..         
31b70 20 20 20 20 20 20 20 20 20 20 20 78 44 65 73 74             xDest
31b80 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  roy);....       
31b90 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
31ba0 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65  odule.xOpen = ne
31bb0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
31bc0 74 68 6f 64 73 2e 78 4f 70 65 6e 28 78 4f 70 65  thods.xOpen(xOpe
31bd0 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
31be0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
31bf0 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55  e.xClose = new U
31c00 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
31c10 64 73 2e 78 43 6c 6f 73 65 28 78 43 6c 6f 73 65  ds.xClose(xClose
31c20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31c30 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
31c40 6c 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65 77  le.xFilter = new
31c50 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
31c60 68 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a 20  hods.xFilter(.. 
31c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c80 20 20 20 78 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a     xFilter);....
31c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ca0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65  nativeModule.xNe
31cb0 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  xt = new UnsafeN
31cc0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e 65  ativeMethods.xNe
31cd0 78 74 28 78 4e 65 78 74 29 3b 0d 0a 20 20 20 20  xt(xNext);..    
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31cf0 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20  veModule.xEof = 
31d00 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31d10 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 78 45 6f  Methods.xEof(xEo
31d20 66 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  f);....         
31d30 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31d40 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65  ule.xColumn = ne
31d50 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
31d60 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a  thods.xColumn(..
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d80 20 20 20 20 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d      xColumn);...
31d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31da0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
31db0 6f 77 49 64 20 3d 20 6e 65 77 20 55 6e 73 61 66  owId = new Unsaf
31dc0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
31dd0 52 6f 77 49 64 28 78 52 6f 77 49 64 29 3b 0d 0a  RowId(xRowId);..
31de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31df0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
31e00 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55 6e 73  Update = new Uns
31e10 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
31e20 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20  .xUpdate(..     
31e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
31e40 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  Update);....    
31e50 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31e60 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20  veModule.xBegin 
31e70 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
31e80 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 67 69 6e  veMethods.xBegin
31e90 28 78 42 65 67 69 6e 29 3b 0d 0a 20 20 20 20 20  (xBegin);..     
31ea0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
31eb0 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d 20  eModule.xSync = 
31ec0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31ed0 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 78 53  Methods.xSync(xS
31ee0 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ync);....       
31ef0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
31f00 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20  odule.xCommit = 
31f10 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31f20 4d 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28  Methods.xCommit(
31f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31f40 20 20 20 20 20 20 78 43 6f 6d 6d 69 74 29 3b 0d        xCommit);.
31f50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31f60 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31f70 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20  xRollback = new 
31f80 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
31f90 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a  ods.xRollback(..
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fb0 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d      xRollback);.
31fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31fd0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31fe0 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20  xFindFunction = 
31ff0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
32000 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64 46 75 6e  Methods.xFindFun
32010 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
32020 20 20 20 20 20 20 20 20 20 20 20 20 78 46 69 6e              xFin
32030 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20  dFunction);.... 
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
32050 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e  ativeModule.xRen
32060 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ame = new Unsafe
32070 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52  NativeMethods.xR
32080 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  ename(..        
32090 20 20 20 20 20 20 20 20 20 20 20 20 78 52 65 6e              xRen
320a0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
320b0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
320c0 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74  odule.xSavepoint
320d0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
320e0 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61 76 65  iveMethods.xSave
320f0 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  point(..        
32100 20 20 20 20 20 20 20 20 20 20 20 20 78 53 61 76              xSav
32110 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  epoint);....    
32120 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
32130 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73  veModule.xReleas
32140 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
32150 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6c  tiveMethods.xRel
32160 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  ease(..         
32170 20 20 20 20 20 20 20 20 20 20 20 78 52 65 6c 65             xRele
32180 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ase);....       
32190 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
321a0 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54  odule.xRollbackT
321b0 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  o = new UnsafeNa
321c0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c  tiveMethods.xRol
321d0 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
321e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 52                xR
321f0 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20 20  ollbackTo);..   
32200 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32210 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32220 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a   nativeModule;..
32230 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32240 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
32250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32290 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
322a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
322b0 2f 2f 20 43 72 65 61 74 65 73 20 61 20 63 6f 70  // Creates a cop
322c0 79 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69  y of the specifi
322d0 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
322e0 3c 73 65 65 20 63 72 65 66 3d 22 55 6e 73 61 66  <see cref="Unsaf
322f0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
32300 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22 20 2f  qlite3_module" /
32310 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
32320 65 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e,..        /// 
32330 75 73 69 6e 67 20 64 65 66 61 75 6c 74 20 69 6d  using default im
32340 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f  plementations fo
32350 72 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20  r the contained 
32360 64 65 6c 65 67 61 74 65 73 20 77 68 65 6e 0d 0a  delegates when..
32370 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 65 63 65          /// nece
32380 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  ssary...        
32390 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
323a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
323b0 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
323c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
323d0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 55 6e  he <see cref="Un
323e0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
323f0 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  s.sqlite3_module
32400 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20  " /> object..   
32410 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63       /// instanc
32420 65 20 74 6f 20 63 6f 70 79 2e 0d 0a 20 20 20 20  e to copy...    
32430 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
32440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
32450 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
32460 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73 65   /// The new <se
32470 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65 4e 61  e cref="UnsafeNa
32480 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
32490 74 65 33 5f 6d 6f 64 75 6c 65 22 20 2f 3e 20 6f  te3_module" /> o
324a0 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f  bject..        /
324b0 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  // instance...  
324c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
324d0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
324e0 69 76 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69  ivate UnsafeNati
324f0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
32500 33 5f 6d 6f 64 75 6c 65 20 43 6f 70 79 4e 61 74  3_module CopyNat
32510 69 76 65 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20  iveModule(..    
32520 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
32530 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
32540 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 6f 64 75 6c  te3_module modul
32550 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
32560 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
32570 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
32580 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
32590 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6e 65 77 4d  ite3_module newM
325a0 6f 64 75 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20  odule =..       
325b0 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73           new Uns
325c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
325d0 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 28  .sqlite3_module(
325e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
325f0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 69 56 65 72    newModule.iVer
32600 73 69 6f 6e 20 3d 20 6d 6f 64 75 6c 65 2e 69 56  sion = module.iV
32610 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20  ersion;....     
32620 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
32630 2e 78 43 72 65 61 74 65 20 3d 20 6e 65 77 20 55  .xCreate = new U
32640 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32650 64 73 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20  ds.xCreate(..   
32660 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f               (mo
32670 64 75 6c 65 2e 78 43 72 65 61 74 65 20 21 3d 20  dule.xCreate != 
32680 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
32690 43 72 65 61 74 65 20 3a 20 78 43 72 65 61 74 65  Create : xCreate
326a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
326b0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 6f 6e    newModule.xCon
326c0 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  nect = new Unsaf
326d0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
326e0 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  Connect(..      
326f0 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
32700 65 2e 78 43 6f 6e 6e 65 63 74 20 21 3d 20 6e 75  e.xConnect != nu
32710 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43 6f  ll) ? module.xCo
32720 6e 6e 65 63 74 20 3a 20 78 43 6f 6e 6e 65 63 74  nnect : xConnect
32730 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32740 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 42 65 73    newModule.xBes
32750 74 49 6e 64 65 78 20 3d 20 6e 65 77 20 55 6e 73  tIndex = new Uns
32760 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
32770 2e 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20  .xBestIndex(..  
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
32790 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
327a0 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
327b0 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 20 3a 20  le.xBestIndex : 
327c0 78 42 65 73 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a  xBestIndex);....
327d0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
327e0 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63  odule.xDisconnec
327f0 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
32800 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 69 73  tiveMethods.xDis
32810 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  connect(..      
32820 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
32830 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 21 3d  e.xDisconnect !=
32840 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
32850 78 44 69 73 63 6f 6e 6e 65 63 74 20 3a 0d 0a 20  xDisconnect :.. 
32860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
32870 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a  Disconnect);....
32880 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
32890 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20 3d  odule.xDestroy =
328a0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
328b0 65 4d 65 74 68 6f 64 73 2e 78 44 65 73 74 72 6f  eMethods.xDestro
328c0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
328d0 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 44 65 73      (module.xDes
328e0 74 72 6f 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  troy != null) ? 
328f0 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20  module.xDestroy 
32900 3a 20 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a  : xDestroy);....
32910 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
32920 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65  odule.xOpen = ne
32930 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
32940 74 68 6f 64 73 2e 78 4f 70 65 6e 28 0d 0a 20 20  thods.xOpen(..  
32950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
32960 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 21 3d 20 6e  odule.xOpen != n
32970 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 4f  ull) ? module.xO
32980 70 65 6e 20 3a 20 78 4f 70 65 6e 29 3b 0d 0a 0d  pen : xOpen);...
32990 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
329a0 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3d 20  Module.xClose = 
329b0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
329c0 4d 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65 28 0d  Methods.xClose(.
329d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
329e0 20 28 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20   (module.xClose 
329f0 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
32a00 65 2e 78 43 6c 6f 73 65 20 3a 20 78 43 6c 6f 73  e.xClose : xClos
32a10 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
32a20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 46 69     newModule.xFi
32a30 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61 66  lter = new Unsaf
32a40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
32a50 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20  Filter(..       
32a60 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
32a70 2e 78 46 69 6c 74 65 72 20 21 3d 20 6e 75 6c 6c  .xFilter != null
32a80 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74  ) ? module.xFilt
32a90 65 72 20 3a 20 78 46 69 6c 74 65 72 29 3b 0d 0a  er : xFilter);..
32aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
32ab0 77 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 3d 20  wModule.xNext = 
32ac0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
32ad0 4d 65 74 68 6f 64 73 2e 78 4e 65 78 74 28 0d 0a  Methods.xNext(..
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32af0 28 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 21 3d  (module.xNext !=
32b00 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
32b10 78 4e 65 78 74 20 3a 20 78 4e 65 78 74 29 3b 0d  xNext : xNext);.
32b20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ...            n
32b30 65 77 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20  ewModule.xEof = 
32b40 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
32b50 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 0d 0a 20  Methods.xEof(.. 
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
32b70 6d 6f 64 75 6c 65 2e 78 45 6f 66 20 21 3d 20 6e  module.xEof != n
32b80 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 45  ull) ? module.xE
32b90 6f 66 20 3a 20 78 45 6f 66 29 3b 0d 0a 0d 0a 20  of : xEof);.... 
32ba0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f             newMo
32bb0 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e  dule.xColumn = n
32bc0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32bd0 65 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d  ethods.xColumn(.
32be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32bf0 20 28 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e   (module.xColumn
32c00 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
32c10 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3a 20 78 43 6f  le.xColumn : xCo
32c20 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lumn);....      
32c30 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e        newModule.
32c40 78 52 6f 77 49 64 20 3d 20 6e 65 77 20 55 6e 73  xRowId = new Uns
32c50 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
32c60 2e 78 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20  .xRowId(..      
32c70 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
32c80 65 2e 78 52 6f 77 49 64 20 21 3d 20 6e 75 6c 6c  e.xRowId != null
32c90 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 6f 77 49  ) ? module.xRowI
32ca0 64 20 3a 20 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a  d : xRowId);....
32cb0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
32cc0 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 20 3d 20  odule.xUpdate = 
32cd0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
32ce0 4d 65 74 68 6f 64 73 2e 78 55 70 64 61 74 65 28  Methods.xUpdate(
32cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32d00 20 20 28 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74    (module.xUpdat
32d10 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  e != null) ? mod
32d20 75 6c 65 2e 78 55 70 64 61 74 65 20 3a 20 78 55  ule.xUpdate : xU
32d30 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  pdate);....     
32d40 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
32d50 2e 78 42 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e  .xBegin = new Un
32d60 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
32d70 73 2e 78 42 65 67 69 6e 28 0d 0a 20 20 20 20 20  s.xBegin(..     
32d80 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
32d90 6c 65 2e 78 42 65 67 69 6e 20 21 3d 20 6e 75 6c  le.xBegin != nul
32da0 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 42 65 67  l) ? module.xBeg
32db0 69 6e 20 3a 20 78 42 65 67 69 6e 29 3b 0d 0a 0d  in : xBegin);...
32dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
32dd0 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d 20 6e  Module.xSync = n
32de0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32df0 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 0d 0a 20  ethods.xSync(.. 
32e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
32e10 6d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 21 3d 20  module.xSync != 
32e20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
32e30 53 79 6e 63 20 3a 20 78 53 79 6e 63 29 3b 0d 0a  Sync : xSync);..
32e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
32e50 77 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20  wModule.xCommit 
32e60 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
32e70 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69  veMethods.xCommi
32e80 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
32e90 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43 6f 6d      (module.xCom
32ea0 6d 69 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  mit != null) ? m
32eb0 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3a 20  odule.xCommit : 
32ec0 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20  xCommit);....   
32ed0 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
32ee0 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e  le.xRollback = n
32ef0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32f00 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b  ethods.xRollback
32f10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32f20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c     (module.xRoll
32f30 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  back != null) ? 
32f40 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  module.xRollback
32f50 20 3a 20 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a   : xRollback);..
32f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
32f70 77 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  wModule.xFindFun
32f80 63 74 69 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61  ction = new Unsa
32f90 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
32fa0 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  xFindFunction(..
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fc0 28 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  (module.xFindFun
32fd0 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f  ction != null) ?
32fe0 20 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e   module.xFindFun
32ff0 63 74 69 6f 6e 20 3a 0d 0a 20 20 20 20 20 20 20  ction :..       
33000 20 20 20 20 20 20 20 20 20 78 46 69 6e 64 46 75           xFindFu
33010 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  nction);....    
33020 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
33030 65 2e 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20  e.xRename = new 
33040 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
33050 6f 64 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20  ods.xRename(..  
33060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
33070 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 21 3d  odule.xRename !=
33080 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
33090 78 52 65 6e 61 6d 65 20 3a 20 78 52 65 6e 61 6d  xRename : xRenam
330a0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
330b0 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 53 61     newModule.xSa
330c0 76 65 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e  vepoint = new Un
330d0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
330e0 73 2e 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20  s.xSavepoint(.. 
330f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
33100 6d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  module.xSavepoin
33110 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  t != null) ? mod
33120 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 20 3a  ule.xSavepoint :
33130 20 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d   xSavepoint);...
33140 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
33150 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 20  Module.xRelease 
33160 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
33170 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6c 65 61  veMethods.xRelea
33180 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
33190 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52 65       (module.xRe
331a0 6c 65 61 73 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  lease != null) ?
331b0 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65   module.xRelease
331c0 20 3a 20 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d   : xRelease);...
331d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
331e0 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
331f0 54 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  To = new UnsafeN
33200 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f  ativeMethods.xRo
33210 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20  llbackTo(..     
33220 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
33230 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 21  le.xRollbackTo !
33240 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65  = null) ? module
33250 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3a 0d 0a  .xRollbackTo :..
33260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33270 78 52 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 0d  xRollbackTo);...
33280 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
33290 75 72 6e 20 6e 65 77 4d 6f 64 75 6c 65 3b 0d 0a  urn newModule;..
332a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
332b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
332c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
33300 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
33310 53 74 61 74 69 63 20 45 72 72 6f 72 20 48 61 6e  Static Error Han
33320 64 6c 69 6e 67 20 48 65 6c 70 65 72 20 4d 65 74  dling Helper Met
33330 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
33340 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
33350 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e 67 65       /// Arrange
33360 73 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  s for the specif
33370 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ied error messag
33380 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64 20 69  e to be placed i
33390 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20  nto the..       
333a0 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66 69 65   /// zErrMsg fie
333b0 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65 33 5f  ld of a sqlite3_
333c0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
333d0 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e 67 20  ucture, freeing 
333e0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
333f0 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f 72 20   existing error 
33400 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e  message, if any.
33410 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
33420 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
33430 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
33440 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
33450 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
33460 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
33470 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  dule" /> object 
33480 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65 20 75  instance to be u
33490 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
334a0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
334b0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
334c0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
334d0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
334e0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
334f0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
33500 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
33510 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
33520 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
33530 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
33540 6d 65 3d 22 6c 6f 67 45 72 72 6f 72 73 22 3e 0d  me="logErrors">.
33550 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
33560 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 65 72  -zero if this er
33570 72 6f 72 20 6d 65 73 73 61 67 65 20 73 68 6f 75  ror message shou
33580 6c 64 20 61 6c 73 6f 20 62 65 20 6c 6f 67 67 65  ld also be logge
33590 64 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  d using the..   
335a0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
335b0 65 66 3d 22 53 51 4c 69 74 65 4c 6f 67 22 20 2f  ef="SQLiteLog" /
335c0 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20  > class...      
335d0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
335e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
335f0 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e  am name="error">
33600 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
33610 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  e error message.
33620 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
33630 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
33640 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
33650 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
33660 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65 73 73  ero upon success
33670 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
33680 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
33690 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
336a0 63 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c 65 45  c bool SetTableE
336b0 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20  rror(..         
336c0 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20     SQLiteModule 
336d0 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20  module,..       
336e0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
336f0 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
33700 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d  bool logErrors,.
33710 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
33720 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
33730 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
33740 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33750 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
33760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33770 20 20 20 20 20 69 66 20 28 6c 6f 67 45 72 72 6f       if (logErro
33780 72 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs)..           
33790 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
337a0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
337b0 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
337c0 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
337d0 2e 45 72 72 6f 72 2c 0d 0a 20 20 20 20 20 20 20  .Error,..       
337e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43   String.Format(C
33800 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
33810 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
33820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33830 20 20 20 20 22 56 69 72 74 75 61 6c 20 74 61 62      "Virtual tab
33840 6c 65 20 65 72 72 6f 72 3a 20 7b 30 7d 22 2c 20  le error: {0}", 
33850 65 72 72 6f 72 29 29 3b 20 2f 2a 20 74 68 72 6f  error)); /* thro
33860 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
33870 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33880 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
33890 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
338a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
338b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
338c0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
338d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
338e0 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61 62         if (pVtab
338f0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
33900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33910 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
33920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33930 6e 74 20 6f 66 66 73 65 74 20 3d 20 49 6e 74 50  nt offset = IntP
33940 74 72 2e 53 69 7a 65 20 2b 20 73 69 7a 65 6f 66  tr.Size + sizeof
33950 28 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  (int);..        
33960 20 20 20 20 49 6e 74 50 74 72 20 70 45 72 72 6f      IntPtr pErro
33970 72 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61  r = SQLiteMarsha
33980 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 70 56 74  l.ReadIntPtr(pVt
33990 61 62 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ab, offset);....
339a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
339b0 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72  pError != IntPtr
339c0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
339d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
339e0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
339f0 6f 72 79 2e 46 72 65 65 28 70 45 72 72 6f 72 29  ory.Free(pError)
33a00 3b 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74  ; pError = IntPt
33a10 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
33a20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
33a30 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50  arshal.WriteIntP
33a40 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74  tr(pVtab, offset
33a50 2c 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  , pError);..    
33a60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33a70 20 20 20 20 20 20 20 20 20 69 66 20 28 65 72 72           if (err
33a80 6f 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  or == null)..   
33a90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
33aa0 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
33ab0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 75           bool su
33ac0 63 63 65 73 73 20 3d 20 66 61 6c 73 65 3b 0d 0a  ccess = false;..
33ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
33ae0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
33af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33b00 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74    pError = SQLit
33b10 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
33b20 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 65 72 72  trFromString(err
33b30 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
33b40 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73        SQLiteMars
33b50 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28  hal.WriteIntPtr(
33b60 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c 20 70  pVtab, offset, p
33b70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  Error);..       
33b80 20 20 20 20 20 20 20 20 20 73 75 63 63 65 73 73           success
33b90 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
33ba0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33bb0 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
33bc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
33bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
33be0 28 21 73 75 63 63 65 73 73 20 26 26 20 28 70 45  (!success && (pE
33bf0 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  rror != IntPtr.Z
33c00 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ero))..         
33c10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
33c30 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
33c40 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20  pError);..      
33c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
33c60 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
33c70 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
33c80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
33c90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
33ca0 20 20 20 20 20 72 65 74 75 72 6e 20 73 75 63 63       return succ
33cb0 65 73 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ess;..        }.
33cc0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
33cd0 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
33d20 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
33d30 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e 67 65       /// Arrange
33d40 73 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  s for the specif
33d50 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ied error messag
33d60 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64 20 69  e to be placed i
33d70 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20  nto the..       
33d80 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66 69 65   /// zErrMsg fie
33d90 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65 33 5f  ld of a sqlite3_
33da0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
33db0 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e 67 20  ucture, freeing 
33dc0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
33dd0 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f 72 20   existing error 
33de0 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e  message, if any.
33df0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
33e00 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
33e10 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
33e20 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
33e30 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
33e40 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
33e50 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  dule" /> object 
33e60 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65 20 75  instance to be u
33e70 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
33e80 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
33e90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
33ea0 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
33eb0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
33ec0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
33ed0 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
33ee0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
33ef0 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20  used to..       
33f00 20 2f 2f 2f 20 6c 6f 6f 6b 75 70 20 74 68 65 20   /// lookup the 
33f10 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
33f20 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
33f30 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
33f40 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
33f50 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
33f60 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
33f70 6e 61 6d 65 3d 22 6c 6f 67 45 72 72 6f 72 73 22  name="logErrors"
33f80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
33f90 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20  on-zero if this 
33fa0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 68  error message sh
33fb0 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20 6c 6f 67  ould also be log
33fc0 67 65 64 20 75 73 69 6e 67 20 74 68 65 0d 0a 20  ged using the.. 
33fd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
33fe0 63 72 65 66 3d 22 53 51 4c 69 74 65 4c 6f 67 22  cref="SQLiteLog"
33ff0 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20   /> class...    
34000 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
34010 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
34020 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72  aram name="error
34030 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
34040 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  The error messag
34050 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
34060 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
34070 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
34080 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
34090 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65  -zero upon succe
340a0 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
340b0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
340c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
340d0 74 69 63 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c  tic bool SetTabl
340e0 65 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20  eError(..       
340f0 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
34100 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
34110 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
34120 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
34130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
34140 6f 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20  ol logErrors,.. 
34150 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
34160 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
34170 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
34180 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
34190 66 20 28 74 61 62 6c 65 20 3d 3d 20 6e 75 6c 6c  f (table == null
341a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
341b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
341c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
341d0 49 6e 74 50 74 72 20 70 56 74 61 62 20 3d 20 74  IntPtr pVtab = t
341e0 61 62 6c 65 2e 4e 61 74 69 76 65 48 61 6e 64 6c  able.NativeHandl
341f0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
34200 20 20 69 66 20 28 70 56 74 61 62 20 3d 3d 20 49    if (pVtab == I
34210 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
34220 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
34230 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
34240 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34250 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 6d   SetTableError(m
34260 6f 64 75 6c 65 2c 20 70 56 74 61 62 2c 20 6c 6f  odule, pVtab, lo
34270 67 45 72 72 6f 72 73 2c 20 65 72 72 6f 72 29 3b  gErrors, error);
34280 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
34290 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
342a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
342e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
342f0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
34300 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73 20 66 6f   /// Arranges fo
34310 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  r the specified 
34320 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f  error message to
34330 20 62 65 20 70 6c 61 63 65 64 20 69 6e 74 6f 20   be placed into 
34340 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
34350 20 7a 45 72 72 4d 73 67 20 66 69 65 6c 64 20 6f   zErrMsg field o
34360 66 20 61 20 73 71 6c 69 74 65 33 5f 76 74 61 62  f a sqlite3_vtab
34370 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
34380 72 65 2c 20 66 72 65 65 69 6e 67 20 74 68 65 0d  re, freeing the.
34390 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 78 69  .        /// exi
343a0 73 74 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73  sting error mess
343b0 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20  age, if any...  
343c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
343d0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
343e0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
343f0 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  odule">..       
34400 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
34410 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
34420 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
34430 61 6e 63 65 20 74 6f 20 62 65 20 75 73 65 64 2e  ance to be used.
34440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
34450 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
34460 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
34470 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
34480 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
34490 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
344a0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
344b0 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
344c0 72 75 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  ructure..       
344d0 20 2f 2f 2f 20 75 73 65 64 20 74 6f 20 67 65 74   /// used to get
344e0 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   the native poin
344f0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
34500 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 0d  e3_vtab derived.
34510 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72  .        /// str
34520 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
34530 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
34540 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
34550 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72 72 6f 72  m name="logError
34560 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  s">..        ///
34570 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69   Non-zero if thi
34580 73 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  s error message 
34590 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20 6c  should also be l
345a0 6f 67 67 65 64 20 75 73 69 6e 67 20 74 68 65 0d  ogged using the.
345b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
345c0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4c 6f  e cref="SQLiteLo
345d0 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20  g" /> class...  
345e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
345f0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
34600 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
34610 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
34620 2f 20 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73  / The error mess
34630 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  age...        //
34640 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
34650 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
34660 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
34670 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63  on-zero upon suc
34680 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  cess...        /
34690 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
346a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
346b0 74 61 74 69 63 20 62 6f 6f 6c 20 53 65 74 43 75  tatic bool SetCu
346c0 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20 20 20 20  rsorError(..    
346d0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f          SQLiteMo
346e0 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20  dule module,..  
346f0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
34700 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20   pCursor,..     
34710 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 67 45         bool logE
34720 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20 20 20  rrors,..        
34730 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72      string error
34740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
34750 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
34760 20 20 20 20 20 20 20 20 69 66 20 28 70 43 75 72          if (pCur
34770 73 6f 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  sor == IntPtr.Ze
34780 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
34790 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
347a0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
347b0 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 20 3d    IntPtr pVtab =
347c0 20 54 61 62 6c 65 46 72 6f 6d 43 75 72 73 6f 72   TableFromCursor
347d0 28 6d 6f 64 75 6c 65 2c 20 70 43 75 72 73 6f 72  (module, pCursor
347e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
347f0 20 20 69 66 20 28 70 56 74 61 62 20 3d 3d 20 49    if (pVtab == I
34800 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
34810 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
34820 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
34830 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34840 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 6d   SetTableError(m
34850 6f 64 75 6c 65 2c 20 70 56 74 61 62 2c 20 6c 6f  odule, pVtab, lo
34860 67 45 72 72 6f 72 73 2c 20 65 72 72 6f 72 29 3b  gErrors, error);
34870 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
34880 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
34890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
348a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
348b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
348c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
348d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
348e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
348f0 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73 20 66 6f   /// Arranges fo
34900 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  r the specified 
34910 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f  error message to
34920 20 62 65 20 70 6c 61 63 65 64 20 69 6e 74 6f 20   be placed into 
34930 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
34940 20 7a 45 72 72 4d 73 67 20 66 69 65 6c 64 20 6f   zErrMsg field o
34950 66 20 61 20 73 71 6c 69 74 65 33 5f 76 74 61 62  f a sqlite3_vtab
34960 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
34970 72 65 2c 20 66 72 65 65 69 6e 67 20 74 68 65 0d  re, freeing the.
34980 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 78 69  .        /// exi
34990 73 74 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73  sting error mess
349a0 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20  age, if any...  
349b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
349c0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
349d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
349e0 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  odule">..       
349f0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
34a00 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
34a10 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
34a20 61 6e 63 65 20 74 6f 20 62 65 20 75 73 65 64 2e  ance to be used.
34a30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
34a40 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
34a50 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
34a60 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
34a70 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
34a80 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
34a90 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
34aa0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
34ab0 63 65 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20  ce used to..    
34ac0 20 20 20 20 2f 2f 2f 20 6c 6f 6f 6b 75 70 20 74      /// lookup t
34ad0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
34ae0 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
34af0 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
34b00 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
34b10 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
34b20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
34b30 61 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72 72 6f  am name="logErro
34b40 72 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rs">..        //
34b50 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
34b60 69 73 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  is error message
34b70 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20   should also be 
34b80 6c 6f 67 67 65 64 20 75 73 69 6e 67 20 74 68 65  logged using the
34b90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
34ba0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4c  ee cref="SQLiteL
34bb0 6f 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20  og" /> class... 
34bc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
34bd0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
34be0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72   <param name="er
34bf0 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ror">..        /
34c00 2f 2f 20 54 68 65 20 65 72 72 6f 72 20 6d 65 73  // The error mes
34c10 73 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sage...        /
34c20 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
34c30 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
34c40 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
34c50 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75  Non-zero upon su
34c60 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
34c70 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
34c80 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
34c90 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 65 74 43  static bool SetC
34ca0 75 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20 20 20  ursorError(..   
34cb0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
34cc0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20  odule module,.. 
34cd0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
34ce0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
34cf0 73 6f 72 20 63 75 72 73 6f 72 2c 0d 0a 20 20 20  sor cursor,..   
34d00 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f           bool lo
34d10 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20  gErrors,..      
34d20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72        string err
34d30 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
34d40 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
34d50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
34d60 72 73 6f 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rsor == null).. 
34d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34d80 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
34d90 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
34da0 74 72 20 70 43 75 72 73 6f 72 20 3d 20 63 75 72  tr pCursor = cur
34db0 73 6f 72 2e 4e 61 74 69 76 65 48 61 6e 64 6c 65  sor.NativeHandle
34dc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34dd0 20 69 66 20 28 70 43 75 72 73 6f 72 20 3d 3d 20   if (pCursor == 
34de0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
34df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34e00 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
34e10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34e20 6e 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72  n SetCursorError
34e30 28 6d 6f 64 75 6c 65 2c 20 70 43 75 72 73 6f 72  (module, pCursor
34e40 2c 20 6c 6f 67 45 72 72 6f 72 73 2c 20 65 72 72  , logErrors, err
34e50 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  or);..        }.
34e60 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
34e70 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ion..        #en
34e80 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
34e90 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
34ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
34ee0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
34ef0 6f 74 65 63 74 65 64 20 4d 65 6d 62 65 72 73 0d  otected Members.
34f00 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
34f10 20 4d 6f 64 75 6c 65 20 48 65 6c 70 65 72 20 4d   Module Helper M
34f20 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
34f30 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
34f40 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20         /// Gets 
34f50 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
34f60 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
34f70 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
34f80 2f 3e 20 69 6e 74 65 72 66 61 63 65 0d 0a 20 20  /> interface..  
34f90 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
34fa0 65 6e 74 61 74 69 6f 6e 20 74 6f 20 62 65 20 75  entation to be u
34fb0 73 65 64 20 77 68 65 6e 20 63 72 65 61 74 69 6e  sed when creatin
34fc0 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  g the native sql
34fd0 69 74 65 33 5f 6d 6f 64 75 6c 65 0d 0a 20 20 20  ite3_module..   
34fe0 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75       /// structu
34ff0 72 65 2e 20 20 44 65 72 69 76 65 64 20 63 6c 61  re.  Derived cla
35000 73 73 65 73 20 6d 61 79 20 6f 76 65 72 72 69 64  sses may overrid
35010 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 74 6f  e this method to
35020 20 73 75 70 70 6c 79 20 61 6e 0d 0a 20 20 20 20   supply an..    
35030 20 20 20 20 2f 2f 2f 20 61 6c 74 65 72 6e 61 74      /// alternat
35040 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
35050 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63 72   for the <see cr
35060 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
35070 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20  eModule" />..   
35080 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61       /// interfa
35090 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
350a0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
350b0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
350c0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
350d0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
350e0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
350f0 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65  le" /> interface
35100 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
35110 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
35120 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 6f 70  be used when pop
35130 75 6c 61 74 69 6e 67 20 74 68 65 20 6e 61 74 69  ulating the nati
35140 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ve sqlite3_modul
35150 65 20 73 74 72 75 63 74 75 72 65 2e 20 20 49 66  e structure.  If
35160 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
35170 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65  e returned value
35180 20 69 73 20 6e 75 6c 6c 2c 20 74 68 65 20 70 72   is null, the pr
35190 69 76 61 74 65 20 6d 65 74 68 6f 64 73 20 70 72  ivate methods pr
351a0 6f 76 69 64 65 64 20 62 79 20 74 68 65 0d 0a 20  ovided by the.. 
351b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
351c0 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75  cref="SQLiteModu
351d0 6c 65 22 20 2f 3e 20 63 6c 61 73 73 20 61 6e 64  le" /> class and
351e0 20 72 65 6c 61 74 69 6e 67 20 74 6f 20 74 68 65   relating to the
351f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
35200 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
35210 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e  NativeModule" />
35220 20 69 6e 74 65 72 66 61 63 65 20 20 77 69 6c 6c   interface  will
35230 20 62 65 20 75 73 65 64 20 74 6f 0d 0a 20 20 20   be used to..   
35240 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 65 20       /// create 
35250 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 64 65  the necessary de
35260 6c 65 67 61 74 65 73 2e 0d 0a 20 20 20 20 20 20  legates...      
35270 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
35280 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
35290 74 65 64 20 76 69 72 74 75 61 6c 20 49 53 51 4c  ted virtual ISQL
352a0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20  iteNativeModule 
352b0 47 65 74 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49  GetNativeModuleI
352c0 6d 70 6c 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  mpl()..        {
352d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
352e0 74 75 72 6e 20 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f  turn null; /* NO
352f0 54 45 3a 20 55 73 65 20 74 68 65 20 62 75 69 6c  TE: Use the buil
35300 74 2d 69 6e 20 64 65 66 61 75 6c 74 20 64 65 6c  t-in default del
35310 65 67 61 74 65 73 2e 20 2a 2f 0d 0a 20 20 20 20  egates. */..    
35320 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35330 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
35340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35370 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
35380 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
35390 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
353a0 72 65 61 74 65 73 20 61 6e 64 20 72 65 74 75 72  reates and retur
353b0 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ns the <see cref
353c0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
353d0 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20  odule" />..     
353e0 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65     /// interface
353f0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
35400 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
35410 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20   the current..  
35420 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
35430 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c  ref="SQLiteModul
35440 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
35450 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
35460 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
35470 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
35480 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
35490 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
354a0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
354b0 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66  odule" /> interf
354c0 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ace implementati
354d0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  on..        /// 
354e0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
354f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 3c 73 65   the current <se
35500 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
35510 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d  dule" /> object.
35520 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73  .        /// ins
35530 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
35540 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
35550 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
35560 64 20 76 69 72 74 75 61 6c 20 49 53 51 4c 69 74  d virtual ISQLit
35570 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 43 72  eNativeModule Cr
35580 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  eateNativeModule
35590 49 6d 70 6c 28 29 0d 0a 20 20 20 20 20 20 20 20  Impl()..        
355a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
355b0 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
355c0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 74 68 69  NativeModule(thi
355d0 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  s);..        }..
355e0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
355f0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
35600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35640 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
35650 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20   #region Native 
35660 54 61 62 6c 65 20 48 65 6c 70 65 72 20 4d 65 74  Table Helper Met
35670 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
35680 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
35690 20 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 63 61 74       /// Allocat
356a0 65 73 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69  es a native sqli
356b0 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
356c0 20 73 74 72 75 63 74 75 72 65 20 61 6e 64 20 72   structure and r
356d0 65 74 75 72 6e 73 20 61 0d 0a 20 20 20 20 20 20  eturns a..      
356e0 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 70 6f 69    /// native poi
356f0 6e 74 65 72 20 74 6f 20 69 74 2e 0d 0a 20 20 20  nter to it...   
35700 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
35710 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
35720 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
35730 20 20 20 20 2f 2f 2f 20 41 20 6e 61 74 69 76 65      /// A native
35740 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 6e 61   pointer to a na
35750 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61  tive sqlite3_vta
35760 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
35770 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
35780 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
35790 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
357a0 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20 41  virtual IntPtr A
357b0 6c 6c 6f 63 61 74 65 54 61 62 6c 65 28 29 0d 0a  llocateTable()..
357c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
357d0 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20         int size 
357e0 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66  = Marshal.SizeOf
357f0 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20  (typeof(..      
35800 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
35810 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
35820 6c 69 74 65 33 5f 76 74 61 62 29 29 3b 0d 0a 0d  lite3_vtab));...
35830 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
35840 75 72 6e 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79  urn SQLiteMemory
35850 2e 41 6c 6c 6f 63 61 74 65 28 73 69 7a 65 29 3b  .Allocate(size);
35860 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
35870 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
35880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
358c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
358d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
358e0 20 2f 2f 2f 20 5a 65 72 6f 73 20 6f 75 74 20 74   /// Zeros out t
358f0 68 65 20 66 69 65 6c 64 73 20 6f 66 20 61 20 6e  he fields of a n
35900 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74  ative sqlite3_vt
35910 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
35920 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
35930 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
35940 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
35950 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
35960 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
35970 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
35980 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 73 71  to the native sq
35990 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
359a0 65 64 20 73 74 72 75 63 74 75 72 65 20 74 6f 0d  ed structure to.
359b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 7a 65 72  .        /// zer
359c0 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  o...        /// 
359d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
359e0 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74    protected virt
359f0 75 61 6c 20 76 6f 69 64 20 5a 65 72 6f 54 61 62  ual void ZeroTab
35a00 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
35a10 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
35a20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
35a30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35a40 20 20 20 20 20 69 66 20 28 70 56 74 61 62 20 3d       if (pVtab =
35a50 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
35a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a70 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
35a80 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
35a90 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  t = 0;....      
35aa0 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73        SQLiteMars
35ab0 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28  hal.WriteIntPtr(
35ac0 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c 20 49  pVtab, offset, I
35ad0 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a  ntPtr.Zero);....
35ae0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
35af0 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a  et += IntPtr.Siz
35b00 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
35b10 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e    SQLiteMarshal.
35b20 57 72 69 74 65 49 6e 74 33 32 28 70 56 74 61 62  WriteInt32(pVtab
35b30 2c 20 6f 66 66 73 65 74 2c 20 30 29 3b 0d 0a 0d  , offset, 0);...
35b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66  .            off
35b50 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e  set += sizeof(in
35b60 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
35b70 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c     SQLiteMarshal
35b80 2e 57 72 69 74 65 49 6e 74 50 74 72 28 70 56 74  .WriteIntPtr(pVt
35b90 61 62 2c 20 6f 66 66 73 65 74 2c 20 49 6e 74 50  ab, offset, IntP
35ba0 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 20  tr.Zero);..     
35bb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
35c10 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
35c20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 72  ..        /// Fr
35c30 65 65 73 20 61 20 6e 61 74 69 76 65 20 73 71 6c  ees a native sql
35c40 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
35c50 75 72 65 20 75 73 69 6e 67 20 74 68 65 20 70 72  ure using the pr
35c60 6f 76 69 64 65 64 20 6e 61 74 69 76 65 0d 0a 20  ovided native.. 
35c70 20 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74         /// point
35c80 65 72 20 74 6f 20 69 74 2e 0d 0a 20 20 20 20 20  er to it...     
35c90 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
35ca0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
35cb0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
35cc0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
35cd0 20 41 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65   A native pointe
35ce0 72 20 74 6f 20 61 20 6e 61 74 69 76 65 20 73 71  r to a native sq
35cf0 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
35d00 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
35d10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
35d20 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  am>..        pro
35d30 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76  tected virtual v
35d40 6f 69 64 20 46 72 65 65 54 61 62 6c 65 28 0d 0a  oid FreeTable(..
35d50 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
35d60 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
35d70 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
35d80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35d90 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56  SetTableError(pV
35da0 74 61 62 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  tab, null);..   
35db0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
35dc0 65 6d 6f 72 79 2e 46 72 65 65 28 70 56 74 61 62  emory.Free(pVtab
35dd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
35de0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
35df0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
35e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
35e50 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 43  #region Native C
35e60 75 72 73 6f 72 20 48 65 6c 70 65 72 20 4d 65 74  ursor Helper Met
35e70 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
35e80 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
35e90 20 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 63 61 74       /// Allocat
35ea0 65 73 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69  es a native sqli
35eb0 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
35ec0 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
35ed0 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f  e and..        /
35ee0 2f 2f 20 72 65 74 75 72 6e 73 20 61 20 6e 61 74  // returns a nat
35ef0 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  ive pointer to i
35f00 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
35f10 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
35f20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
35f30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
35f40 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
35f50 74 6f 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69  to a native sqli
35f60 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
35f70 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
35f80 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
35f90 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
35fa0 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
35fb0 72 74 75 61 6c 20 49 6e 74 50 74 72 20 41 6c 6c  rtual IntPtr All
35fc0 6f 63 61 74 65 43 75 72 73 6f 72 28 29 0d 0a 20  ocateCursor().. 
35fd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35fe0 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d        int size =
35ff0 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28   Marshal.SizeOf(
36000 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20  typeof(..       
36010 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
36020 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
36030 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
36040 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
36050 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
36060 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28  Memory.Allocate(
36070 73 69 7a 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  size);..        
36080 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
36090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
360e0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
360f0 20 20 20 20 20 20 20 2f 2f 2f 20 46 72 65 65 73         /// Frees
36100 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65   a native sqlite
36110 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 73 74  3_vtab_cursor st
36120 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 74 68  ructure using th
36130 65 20 70 72 6f 76 69 64 65 64 0d 0a 20 20 20 20  e provided..    
36140 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 70      /// native p
36150 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 0d 0a 20  ointer to it... 
36160 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
36170 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
36180 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
36190 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
361a0 20 20 20 2f 2f 2f 20 41 20 6e 61 74 69 76 65 20     /// A native 
361b0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 6e 61 74  pointer to a nat
361c0 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ive sqlite3_vtab
361d0 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20  _cursor derived 
361e0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
361f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
36200 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
36210 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64  ted virtual void
36220 20 46 72 65 65 43 75 72 73 6f 72 28 0d 0a 20 20   FreeCursor(..  
36230 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
36240 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20   pCursor..      
36250 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
36260 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36270 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
36280 65 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20  e(pCursor);..   
36290 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
362a0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
362b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
362c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
362d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
362e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
362f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
36300 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
36310 20 53 74 61 74 69 63 20 54 61 62 6c 65 20 4c 6f   Static Table Lo
36320 6f 6b 75 70 20 4d 65 74 68 6f 64 73 0d 0a 20 20  okup Methods..  
36330 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
36340 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
36350 20 52 65 61 64 73 20 61 6e 64 20 72 65 74 75 72   Reads and retur
36360 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f  ns the native po
36370 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
36380 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
36390 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  d..        /// s
363a0 74 72 75 63 74 75 72 65 20 62 61 73 65 64 20 6f  tructure based o
363b0 6e 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69  n the native poi
363c0 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
363d0 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 0d  te3_vtab_cursor.
363e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 72  .        /// der
363f0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
36400 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
36410 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
36420 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
36430 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
36440 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
36450 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64   cref="SQLiteMod
36460 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ule" /> object i
36470 6e 73 74 61 6e 63 65 20 74 6f 20 62 65 20 75 73  nstance to be us
36480 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
36490 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
364a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
364b0 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
364c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
364d0 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
364e0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
364f0 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64  b_cursor derived
36500 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20   structure..    
36510 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 77 68 69      /// from whi
36520 63 68 20 74 6f 20 72 65 61 64 20 74 68 65 20 6e  ch to read the n
36530 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
36540 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
36550 62 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 20  b derived..     
36560 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65     /// structure
36570 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
36580 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
36590 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
365a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
365b0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
365c0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
365d0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
365e0 74 75 72 65 20 2d 4f 52 2d 0d 0a 20 20 20 20 20  ture -OR-..     
365f0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
36600 3d 22 49 6e 74 50 74 72 2e 5a 65 72 6f 22 20 2f  ="IntPtr.Zero" /
36610 3e 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62  > if it cannot b
36620 65 20 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20  e determined... 
36630 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
36640 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
36650 72 69 76 61 74 65 20 73 74 61 74 69 63 20 49 6e  rivate static In
36660 74 50 74 72 20 54 61 62 6c 65 46 72 6f 6d 43 75  tPtr TableFromCu
36670 72 73 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20  rsor(..         
36680 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20     SQLiteModule 
36690 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20  module,..       
366a0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
366b0 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
366c0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
366d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
366e0 43 75 72 73 6f 72 20 3d 3d 20 49 6e 74 50 74 72  Cursor == IntPtr
366f0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
36700 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
36710 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
36720 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
36730 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  n Marshal.ReadIn
36740 74 50 74 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a  tPtr(pCursor);..
36750 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
36760 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
36770 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
36780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
367d0 69 6f 6e 20 54 61 62 6c 65 20 4c 6f 6f 6b 75 70  ion Table Lookup
367e0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
367f0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
36800 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 61  .        /// Rea
36810 64 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  ds and returns t
36820 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
36830 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
36840 5f 76 74 61 62 20 64 65 72 69 76 65 64 0d 0a 20  _vtab derived.. 
36850 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63         /// struc
36860 74 75 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68  ture based on th
36870 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
36880 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
36890 76 74 61 62 5f 63 75 72 73 6f 72 0d 0a 20 20 20  vtab_cursor..   
368a0 20 20 20 20 20 2f 2f 2f 20 64 65 72 69 76 65 64       /// derived
368b0 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
368c0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
368d0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
368e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
368f0 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
36900 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
36910 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
36920 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
36930 6f 72 20 64 65 72 69 76 65 64 20 73 74 72 75 63  or derived struc
36940 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ture..        //
36950 2f 20 66 72 6f 6d 20 77 68 69 63 68 20 74 6f 20  / from which to 
36960 72 65 61 64 20 74 68 65 20 6e 61 74 69 76 65 20  read the native 
36970 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
36980 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
36990 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ved..        ///
369a0 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
369b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
369c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
369d0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
369e0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
369f0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
36a00 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
36a10 69 76 65 64 20 73 74 72 75 63 74 75 72 65 20 2d  ived structure -
36a20 4f 52 2d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  OR-..        ///
36a30 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
36a40 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 69 66 20 69  tr.Zero" /> if i
36a50 74 20 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 65  t cannot be dete
36a60 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20  rmined...       
36a70 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
36a80 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
36a90 65 64 20 76 69 72 74 75 61 6c 20 49 6e 74 50 74  ed virtual IntPt
36aa0 72 20 54 61 62 6c 65 46 72 6f 6d 43 75 72 73 6f  r TableFromCurso
36ab0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
36ac0 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
36ad0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
36ae0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36af0 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 61 62        return Tab
36b00 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 74 68 69  leFromCursor(thi
36b10 73 2c 20 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20  s, pCursor);..  
36b20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36b30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
36b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
36b80 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
36b90 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
36ba0 20 4c 6f 6f 6b 73 20 75 70 20 61 6e 64 20 72 65   Looks up and re
36bb0 74 75 72 6e 73 20 74 68 65 20 3c 73 65 65 20 63  turns the <see c
36bc0 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
36bd0 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
36be0 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ct..        /// 
36bf0 69 6e 73 74 61 6e 63 65 20 62 61 73 65 64 20 6f  instance based o
36c00 6e 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69  n the native poi
36c10 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
36c20 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
36c30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
36c40 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
36c50 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
36c60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
36c70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
36c80 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
36c90 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
36ca0 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
36cb0 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
36cc0 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
36cd0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
36ce0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
36cf0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
36d00 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
36d10 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
36d20 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
36d30 20 69 6e 73 74 61 6e 63 65 20 6f 72 20 6e 75 6c   instance or nul
36d40 6c 20 69 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  l if..        //
36d50 2f 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  / the correspond
36d60 69 6e 67 20 6f 6e 65 20 63 61 6e 6e 6f 74 20 62  ing one cannot b
36d70 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20  e found...      
36d80 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
36d90 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
36da0 74 65 64 20 76 69 72 74 75 61 6c 20 53 51 4c 69  ted virtual SQLi
36db0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 54  teVirtualTable T
36dc0 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 0d  ableFromIntPtr(.
36dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
36de0 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
36df0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
36e00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36e10 20 69 66 20 28 70 56 74 61 62 20 3d 3d 20 49 6e   if (pVtab == In
36e20 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
36e30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36e40 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
36e50 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
36e60 22 69 6e 76 61 6c 69 64 20 6e 61 74 69 76 65 20  "invalid native 
36e70 74 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20  table");..      
36e80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
36e90 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
36ea0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36eb0 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
36ec0 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 3b 0d 0a  alTable table;..
36ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
36ee0 20 28 28 74 61 62 6c 65 73 20 21 3d 20 6e 75 6c   ((tables != nul
36ef0 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
36f00 20 20 20 20 20 20 20 74 61 62 6c 65 73 2e 54 72         tables.Tr
36f10 79 47 65 74 56 61 6c 75 65 28 70 56 74 61 62 2c  yGetValue(pVtab,
36f20 20 6f 75 74 20 74 61 62 6c 65 29 29 0d 0a 20 20   out table))..  
36f30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36f40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
36f50 75 72 6e 20 74 61 62 6c 65 3b 0d 0a 20 20 20 20  urn table;..    
36f60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
36f70 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c           SetTabl
36f80 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 53 74  eError(pVtab, St
36f90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
36fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
36fb0 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
36fc0 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
36fd0 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 6e 61             "mana
36fe0 67 65 64 20 74 61 62 6c 65 20 66 6f 72 20 7b 30  ged table for {0
36ff0 7d 20 6e 6f 74 20 66 6f 75 6e 64 22 2c 20 70 56  } not found", pV
37000 74 61 62 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tab));....      
37010 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
37020 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  l;..        }...
37030 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
37040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37080 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
37090 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
370a0 20 20 20 2f 2f 2f 20 41 6c 6c 6f 63 61 74 65 73     /// Allocates
370b0 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 6e   and returns a n
370c0 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
370d0 20 61 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20   a sqlite3_vtab 
370e0 64 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20  derived..       
370f0 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20 61   /// structure a
37100 6e 64 20 63 72 65 61 74 65 73 20 61 6e 20 61 73  nd creates an as
37110 73 6f 63 69 61 74 69 6f 6e 20 62 65 74 77 65 65  sociation betwee
37120 6e 20 69 74 20 61 6e 64 20 74 68 65 20 73 70 65  n it and the spe
37130 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20 20  cified..        
37140 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
37150 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
37160 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
37170 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
37180 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
37190 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
371a0 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
371b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
371c0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
371d0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
371e0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
371f0 6e 63 65 20 74 6f 20 62 65 20 75 73 65 64 0d 0a  nce to be used..
37200 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68 65 6e          /// when
37210 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 61 73   creating the as
37220 73 6f 63 69 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  sociation...    
37230 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
37240 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
37250 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
37260 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
37270 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 73 71 6c  pointer to a sql
37280 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
37290 64 20 73 74 72 75 63 74 75 72 65 20 6f 72 0d 0a  d structure or..
372a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
372b0 20 63 72 65 66 3d 22 49 6e 74 50 74 72 2e 5a 65   cref="IntPtr.Ze
372c0 72 6f 22 20 2f 3e 20 69 66 20 74 68 65 20 6d 65  ro" /> if the me
372d0 74 68 6f 64 20 66 61 69 6c 73 20 66 6f 72 20 61  thod fails for a
372e0 6e 79 20 72 65 61 73 6f 6e 2e 0d 0a 20 20 20 20  ny reason...    
372f0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
37300 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  s>..        prot
37310 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 49 6e  ected virtual In
37320 74 50 74 72 20 54 61 62 6c 65 54 6f 49 6e 74 50  tPtr TableToIntP
37330 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
37340 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
37350 62 6c 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ble table..     
37360 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
37370 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37380 20 69 66 20 28 28 74 61 62 6c 65 20 3d 3d 20 6e   if ((table == n
37390 75 6c 6c 29 20 7c 7c 20 28 74 61 62 6c 65 73 20  ull) || (tables 
373a0 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
373b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
373c0 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  n IntPtr.Zero;..
373d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
373e0 74 50 74 72 20 70 56 74 61 62 20 3d 20 49 6e 74  tPtr pVtab = Int
373f0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
37400 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 75 63 63         bool succ
37410 65 73 73 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ess = false;....
37420 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
37430 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
37440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37450 70 56 74 61 62 20 3d 20 41 6c 6c 6f 63 61 74 65  pVtab = Allocate
37460 54 61 62 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  Table();....    
37470 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
37480 70 56 74 61 62 20 21 3d 20 49 6e 74 50 74 72 2e  pVtab != IntPtr.
37490 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
374a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
374b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5a 65                Ze
374c0 72 6f 54 61 62 6c 65 28 70 56 74 61 62 29 3b 0d  roTable(pVtab);.
374d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
374e0 20 20 20 20 20 74 61 62 6c 65 2e 4e 61 74 69 76       table.Nativ
374f0 65 48 61 6e 64 6c 65 20 3d 20 70 56 74 61 62 3b  eHandle = pVtab;
37500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37510 20 20 20 20 20 20 74 61 62 6c 65 73 2e 41 64 64        tables.Add
37520 28 70 56 74 61 62 2c 20 74 61 62 6c 65 29 3b 0d  (pVtab, table);.
37530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37540 20 20 20 20 20 73 75 63 63 65 73 73 20 3d 20 74       success = t
37550 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
37560 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
37570 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
37580 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
37590 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
375a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
375b0 21 73 75 63 63 65 73 73 20 26 26 20 28 70 56 74  !success && (pVt
375c0 61 62 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ab != IntPtr.Zer
375d0 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  o))..           
375e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
375f0 20 20 20 20 20 20 20 20 20 20 20 20 46 72 65 65              Free
37600 54 61 62 6c 65 28 70 56 74 61 62 29 3b 0d 0a 20  Table(pVtab);.. 
37610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37620 20 20 20 70 56 74 61 62 20 3d 20 49 6e 74 50 74     pVtab = IntPt
37630 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
37640 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
37650 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
37660 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37670 70 56 74 61 62 3b 0d 0a 20 20 20 20 20 20 20 20  pVtab;..        
37680 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
37690 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
376a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
376b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
376c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
376d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
376e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
376f0 20 20 20 20 23 72 65 67 69 6f 6e 20 43 75 72 73      #region Curs
37700 6f 72 20 4c 6f 6f 6b 75 70 20 4d 65 74 68 6f 64  or Lookup Method
37710 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
37720 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
37730 20 20 2f 2f 2f 20 4c 6f 6f 6b 73 20 75 70 20 61    /// Looks up a
37740 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c  nd returns the <
37750 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
37760 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
37770 6f 72 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  or" />..        
37780 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  /// object insta
37790 6e 63 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65  nce based on the
377a0 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
377b0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
377c0 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /// sqlite3_vtab
377d0 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20  _cursor derived 
377e0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
377f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
37800 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
37810 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
37820 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
37830 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
37840 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
37850 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
37860 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
37870 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
37880 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
37890 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
378a0 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
378b0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
378c0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
378d0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
378e0 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
378f0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
37900 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
37910 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
37920 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
37930 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
37940 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
37950 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ursor" /> object
37960 20 69 6e 73 74 61 6e 63 65 20 6f 72 20 6e 75 6c   instance or nul
37970 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  l..        /// i
37980 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
37990 69 6e 67 20 6f 6e 65 20 63 61 6e 6e 6f 74 20 62  ing one cannot b
379a0 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20  e found...      
379b0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
379c0 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
379d0 74 65 64 20 76 69 72 74 75 61 6c 20 53 51 4c 69  ted virtual SQLi
379e0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
379f0 72 73 6f 72 20 43 75 72 73 6f 72 46 72 6f 6d 49  rsor CursorFromI
37a00 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
37a10 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
37a20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
37a30 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
37a40 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
37a50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37a60 20 20 20 20 20 69 66 20 28 70 43 75 72 73 6f 72       if (pCursor
37a70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
37a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
37a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37aa0 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70   SetTableError(p
37ab0 56 74 61 62 2c 20 22 69 6e 76 61 6c 69 64 20 6e  Vtab, "invalid n
37ac0 61 74 69 76 65 20 63 75 72 73 6f 72 22 29 3b 0d  ative cursor");.
37ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37ae0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
37af0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
37b00 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
37b10 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
37b20 72 73 6f 72 20 63 75 72 73 6f 72 3b 0d 0a 0d 0a  rsor cursor;....
37b30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
37b40 28 63 75 72 73 6f 72 73 20 21 3d 20 6e 75 6c 6c  (cursors != null
37b50 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
37b60 20 20 20 20 20 20 63 75 72 73 6f 72 73 2e 54 72        cursors.Tr
37b70 79 47 65 74 56 61 6c 75 65 28 70 43 75 72 73 6f  yGetValue(pCurso
37b80 72 2c 20 6f 75 74 20 63 75 72 73 6f 72 29 29 0d  r, out cursor)).
37b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
37ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bb0 72 65 74 75 72 6e 20 63 75 72 73 6f 72 3b 0d 0a  return cursor;..
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
37bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74  .            Set
37be0 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
37bf0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
37c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37c10 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
37c20 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
37c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
37c40 6d 61 6e 61 67 65 64 20 63 75 72 73 6f 72 20 66  managed cursor f
37c50 6f 72 20 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e 64  or {0} not found
37c60 22 2c 20 70 43 75 72 73 6f 72 29 29 3b 0d 0a 0d  ", pCursor));...
37c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
37c80 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
37c90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
37ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37ce0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
37cf0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <su