System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 63e8909c77f773dcb1b06b93fda8250a7633ca0a:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 4a 6f   * Written by Jo
0080: 65 20 4d 69 73 74 61 63 68 6b 69 6e 20 28 6a 6f  e Mistachkin (jo
0090: 65 40 6d 69 73 74 61 63 68 6b 69 6e 2e 63 6f 6d  e@mistachkin.com
00a0: 29 0d 0a 20 2a 0d 0a 20 2a 20 52 65 6c 65 61 73  ).. *.. * Releas
00b0: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00c0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at 
00d0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00e0: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 75 73  *********/....us
0120: 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65  ing System.Colle
0130: 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d  ctions.Generic;.
0140: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c  .using System.Gl
0150: 6f 62 61 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 75 73  obalization;..us
0160: 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69  ing System.Runti
0170: 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63  me.InteropServic
0180: 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  es;..using Syste
0190: 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 6e 61 6d 65 73  m.Text;....names
01a0: 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61  pace System.Data
01b0: 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20  .SQLite..{..    
01c0: 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 43 6f  #region SQLiteCo
01d0: 6e 74 65 78 74 20 48 65 6c 70 65 72 20 43 6c 61  ntext Helper Cla
01e0: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
01f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
0200: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
0210: 65 6e 74 73 20 61 20 63 6f 6e 74 65 78 74 20 66  ents a context f
0220: 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63  rom the SQLite c
0230: 6f 72 65 20 6c 69 62 72 61 72 79 20 74 68 61 74  ore library that
0240: 20 63 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 62 65   can..    /// be
0250: 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
0260: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 2a 28  qlite3_result_*(
0270: 29 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64  ) and associated
0280: 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20   functions...   
0290: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
02a0: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c  .    public seal
02b0: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 43  ed class SQLiteC
02c0: 6f 6e 74 65 78 74 20 3a 20 49 53 51 4c 69 74 65  ontext : ISQLite
02d0: 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20  NativeHandle..  
02e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
02f0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
0300: 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  a..        /// <
0310: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
0320: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
0330: 20 63 6f 6e 74 65 78 74 20 68 61 6e 64 6c 65 2e   context handle.
0340: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
0350: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
0360: 20 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72    private IntPtr
0370: 20 70 43 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20   pContext;..    
0380: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0390: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
03a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
03f0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
0400: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
0410: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0420: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
0430: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
0440: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
0450: 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65  ss using the spe
0460: 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20  cified native.. 
0470: 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 65         /// conte
0480: 78 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  xt handle...    
0490: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
04a0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
04b0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6f  <param name="pCo
04c0: 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20  ntext">..       
04d0: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
04e0: 63 6f 6e 74 65 78 74 20 68 61 6e 64 6c 65 20 74  context handle t
04f0: 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  o use...        
0500: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0510: 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53        internal S
0520: 51 4c 69 74 65 43 6f 6e 74 65 78 74 28 49 6e 74  QLiteContext(Int
0530: 50 74 72 20 70 43 6f 6e 74 65 78 74 29 0d 0a 20  Ptr pContext).. 
0540: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0550: 20 20 20 20 20 20 74 68 69 73 2e 70 43 6f 6e 74        this.pCont
0560: 65 78 74 20 3d 20 70 43 6f 6e 74 65 78 74 3b 0d  ext = pContext;.
0570: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
0580: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0590: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
05a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
05f0: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
0600: 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72 73  veHandle Members
0610: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
0620: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
0630: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
0640: 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69   underlying SQLi
0650: 74 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65  te native handle
0660: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
0670: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
0680: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
0690: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
06a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
06b0: 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 74 50       public IntP
06c0: 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d  tr NativeHandle.
06d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
06e0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
06f0: 74 75 72 6e 20 70 43 6f 6e 74 65 78 74 3b 20 7d  turn pContext; }
0700: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
0710: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
0720: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
0730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0770: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
0780: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74  egion Public Met
0790: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
07a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
07b0: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
07c0: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
07d0: 20 74 6f 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20   to NULL...     
07e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
07f0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
0800: 63 20 76 6f 69 64 20 53 65 74 4e 75 6c 6c 28 29  c void SetNull()
0810: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
0820: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
0830: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
0840: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
0850: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
0860: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
0870: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
0880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
0890: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
08a0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
08b0: 6e 75 6c 6c 28 70 43 6f 6e 74 65 78 74 29 3b 0d  null(pContext);.
08c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
08d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
08e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0920: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
0930: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
0940: 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e  /// Sets the con
0950: 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74  text result to t
0960: 68 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65  he specified <se
0970: 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20  e cref="Double" 
0980: 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
0990: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...        
09a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
09b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
09c0: 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e  am name="value">
09d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
09e0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75  e <see cref="Dou
09f0: 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  ble" /> value to
0a00: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
0a10: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
0a20: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
0a30: 20 53 65 74 44 6f 75 62 6c 65 28 64 6f 75 62 6c   SetDouble(doubl
0a40: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  e value)..      
0a50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0a60: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
0a70: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
0a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0a90: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
0aa0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
0ab0: 6f 6e 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  on();....#if !PL
0ac0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
0ad0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
0ae0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
0af0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
0b00: 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 70  _result_double(p
0b10: 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  Context, value);
0b20: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
0b30: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
0b40: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
0b50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
0b60: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f  3_result_double_
0b70: 69 6e 74 65 72 6f 70 28 70 43 6f 6e 74 65 78 74  interop(pContext
0b80: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
0b90: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
0ba0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
0bb0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
0bc0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
0bd0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
0be0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0c30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
0c40: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
0c50: 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74  // Sets the cont
0c60: 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68  ext result to th
0c70: 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65  e specified <see
0c80: 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
0c90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61  ..        /// va
0ca0: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
0cb0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0cc0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
0cd0: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a   name="value">..
0ce0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
0cf0: 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32  <see cref="Int32
0d00: 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75 73  " /> value to us
0d10: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
0d20: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
0d30: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
0d40: 74 49 6e 74 28 69 6e 74 20 76 61 6c 75 65 29 0d  tInt(int value).
0d50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
0d60: 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e          if (pCon
0d70: 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  text == IntPtr.Z
0d80: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
0d90: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
0da0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
0db0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a  Exception();....
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
0dd0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
0de0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
0df0: 6e 74 28 70 43 6f 6e 74 65 78 74 2c 20 76 61 6c  nt(pContext, val
0e00: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
0e10: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
0e70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0e80: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
0e90: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
0ea0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
0eb0: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  d <see cref="Int
0ec0: 36 34 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  64" />..        
0ed0: 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  /// value...    
0ee0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ef0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
0f00: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
0f10: 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ue">..        //
0f20: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
0f30: 22 49 6e 74 36 34 22 20 2f 3e 20 76 61 6c 75 65  "Int64" /> value
0f40: 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20   to use...      
0f50: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
0f60: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
0f70: 6f 69 64 20 53 65 74 49 6e 74 36 34 28 6c 6f 6e  oid SetInt64(lon
0f80: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  g value)..      
0f90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0fa0: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
0fb0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0fd0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
0fe0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
0ff0: 6f 6e 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  on();....#if !PL
1000: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
1010: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
1020: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1030: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1040: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 70 43  _result_int64(pC
1050: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
1060: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
1070: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
1080: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1090: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10a0: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e  _result_int64_in
10b0: 74 65 72 6f 70 28 70 43 6f 6e 74 65 78 74 2c 20  terop(pContext, 
10c0: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
10d0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
10e0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
10f0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
1100: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
1110: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1120: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1170: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1180: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1190: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
11a0: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
11b0: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
11c0: 72 65 66 3d 22 53 74 72 69 6e 67 22 20 2f 3e 0d  ref="String" />.
11d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c  .        /// val
11e0: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
11f0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1200: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1210: 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20  name="value">.. 
1220: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1230: 73 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67  see cref="String
1240: 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75 73  " /> value to us
1250: 65 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 77  e.  This value w
1260: 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
1270: 2f 2f 2f 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  /// converted to
1280: 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64   the UTF-8 encod
1290: 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 62 65 69  ing prior to bei
12a0: 6e 67 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20  ng used...      
12b0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
12c0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
12d0: 6f 69 64 20 53 65 74 53 74 72 69 6e 67 28 73 74  oid SetString(st
12e0: 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
12f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1300: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1310: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1330: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1340: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1350: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
1360: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
1370: 79 74 65 73 20 3d 20 53 51 4c 69 74 65 53 74 72  ytes = SQLiteStr
1380: 69 6e 67 2e 47 65 74 55 74 66 38 42 79 74 65 73  ing.GetUtf8Bytes
1390: 46 72 6f 6d 53 74 72 69 6e 67 28 76 61 6c 75 65  FromString(value
13a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13b0: 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d 20 6e    if (bytes == n
13c0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
13d0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
13e0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
13f0: 70 74 69 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d  ption("value");.
1400: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
1410: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1420: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
1430: 74 5f 74 65 78 74 28 0d 0a 20 20 20 20 20 20 20  t_text(..       
1440: 20 20 20 20 20 20 20 20 20 70 43 6f 6e 74 65 78           pContex
1450: 74 2c 20 62 79 74 65 73 2c 20 62 79 74 65 73 2e  t, bytes, bytes.
1460: 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29  Length, (IntPtr)
1470: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  (-1));..        
1480: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
14e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
14f0: 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20         /// Sets 
1500: 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75  the context resu
1510: 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  lt to the specif
1520: 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ied <see cref="S
1530: 74 72 69 6e 67 22 20 2f 3e 0d 0a 20 20 20 20 20  tring" />..     
1540: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 63 6f 6e     /// value con
1550: 74 61 69 6e 69 6e 67 20 61 6e 20 65 72 72 6f 72  taining an error
1560: 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20   message...     
1570: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1580: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1590: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
15a0: 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
15b0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
15c0: 53 74 72 69 6e 67 22 20 2f 3e 20 76 61 6c 75 65  String" /> value
15d0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15e0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65  error message te
15f0: 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  xt...        ///
1600: 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
1610: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f   be converted to
1620: 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64   the UTF-8 encod
1630: 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 62 65 69  ing prior to bei
1640: 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
1650: 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
1660: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1670: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
1680: 20 53 65 74 45 72 72 6f 72 28 73 74 72 69 6e 67   SetError(string
1690: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20   value)..       
16a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16b0: 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20  if (pContext == 
16c0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
16e0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
16f0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
1700: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
1710: 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73      byte[] bytes
1720: 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
1730: 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d  GetUtf8BytesFrom
1740: 53 74 72 69 6e 67 28 76 61 6c 75 65 29 3b 0d 0a  String(value);..
1750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1760: 20 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29   (bytes == null)
1770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1780: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
1790: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
17a0: 6e 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  n("value");.... 
17b0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
17c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17d0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
17e0: 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ror(..          
17f0: 20 20 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20        pContext, 
1800: 62 79 74 65 73 2c 20 62 79 74 65 73 2e 4c 65 6e  bytes, bytes.Len
1810: 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  gth);..        }
1820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1880: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1890: 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74        /// Sets t
18a0: 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c  he context resul
18b0: 74 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  t to the specifi
18c0: 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
18d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 22 20 2f  LiteErrorCode" /
18e0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  >..        /// v
18f0: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
1900: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1910: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1920: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
1930: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1940: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1950: 74 65 45 72 72 6f 72 43 6f 64 65 22 20 2f 3e 20  teErrorCode" /> 
1960: 76 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20  value to use... 
1970: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1980: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
1990: 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72 72 6f  lic void SetErro
19a0: 72 43 6f 64 65 28 53 51 4c 69 74 65 45 72 72 6f  rCode(SQLiteErro
19b0: 72 43 6f 64 65 20 76 61 6c 75 65 29 0d 0a 20 20  rCode value)..  
19c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19d0: 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78       if (pContex
19e0: 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  t == IntPtr.Zero
19f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a00: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
1a10: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
1a20: 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20  eption();....   
1a30: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
1a40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1a50: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
1a60: 72 5f 63 6f 64 65 28 70 43 6f 6e 74 65 78 74 2c  r_code(pContext,
1a70: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
1a80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ae0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1af0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74  .        /// Set
1b00: 73 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65  s the context re
1b10: 73 75 6c 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20  sult to contain 
1b20: 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 53  the error code S
1b30: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 2e 0d 0a 20  QLITE_TOOBIG... 
1b40: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1b50: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
1b60: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72  ublic void SetEr
1b70: 72 6f 72 54 6f 6f 42 69 67 28 29 0d 0a 20 20 20  rorTooBig()..   
1b80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b90: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1ba0: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bc0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1bd0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1be0: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
1bf0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
1c00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1c10: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
1c20: 5f 74 6f 6f 62 69 67 28 70 43 6f 6e 74 65 78 74  _toobig(pContext
1c30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
1c40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1ca0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1cb0: 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20     /// Sets the 
1cc0: 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74  context result t
1cd0: 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 65 72  o contain the er
1ce0: 72 6f 72 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  ror code SQLITE_
1cf0: 4e 4f 4d 45 4d 2e 0d 0a 20 20 20 20 20 20 20 20  NOMEM...        
1d00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1d10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
1d20: 6f 69 64 20 53 65 74 45 72 72 6f 72 4e 6f 4d 65  oid SetErrorNoMe
1d30: 6d 6f 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20  mory()..        
1d40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1d50: 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49  f (pContext == I
1d60: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
1d80: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
1d90: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
1da0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1db0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
1dc0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
1dd0: 65 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d 65  esult_error_nome
1de0: 6d 28 70 43 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  m(pContext);..  
1df0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e50: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1e60: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1e70: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
1e80: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
1e90: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
1ea0: 72 65 66 3d 22 42 79 74 65 22 20 2f 3e 20 61 72  ref="Byte" /> ar
1eb0: 72 61 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ray..        ///
1ec0: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
1ed0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1ee0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1ef0: 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
1f00: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1f10: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 42 79  he <see cref="By
1f20: 74 65 22 20 2f 3e 20 61 72 72 61 79 20 76 61 6c  te" /> array val
1f30: 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20  ue to use...    
1f40: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1f50: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
1f60: 20 76 6f 69 64 20 53 65 74 42 6c 6f 62 28 62 79   void SetBlob(by
1f70: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
1f80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f90: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1fa0: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fc0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1fd0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1fe0: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
1ff0: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
2000: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2010: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2020: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
2030: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 76 61 6c  llException("val
2040: 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
2050: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
2060: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2070: 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 0d 0a 20  _result_blob(.. 
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2090: 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20  Context, value, 
20a0: 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49  value.Length, (I
20b0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
20c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2120: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2130: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
2140: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
2150: 74 20 72 65 73 75 6c 74 20 74 6f 20 61 20 42 4c  t result to a BL
2160: 4f 42 20 6f 66 20 7a 65 72 6f 73 20 6f 66 20 74  OB of zeros of t
2170: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 69 7a  he specified siz
2180: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
2190: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
21a0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
21b0: 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20  ame="value">..  
21c0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75        /// The nu
21d0: 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
21e0: 65 73 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68  es to use for th
21f0: 65 20 42 4c 4f 42 20 63 6f 6e 74 65 78 74 20 72  e BLOB context r
2200: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20  esult...        
2210: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2220: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
2230: 64 20 53 65 74 5a 65 72 6f 42 6c 6f 62 28 69 6e  d SetZeroBlob(in
2240: 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  t value)..      
2250: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2260: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
2270: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2290: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
22a0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
22b0: 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  on();....       
22c0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
22d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
22e0: 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62  _result_zeroblob
22f0: 28 70 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  (pContext, value
2300: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
2310: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
2370: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2380: 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20     /// Sets the 
2390: 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74  context result t
23a0: 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified 
23b0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
23c0: 65 56 61 6c 75 65 22 20 2f 3e 2e 0d 0a 20 20 20  eValue" />...   
23d0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
23e0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
23f0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
2400: 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  lue">..        /
2410: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
2420: 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f  ="SQLiteValue" /
2430: 3e 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  > to use...     
2440: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2450: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2460: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 53 51  void SetValue(SQ
2470: 4c 69 74 65 56 61 6c 75 65 20 76 61 6c 75 65 29  LiteValue value)
2480: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2490: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
24a0: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
24b0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
24c0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
24d0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
24e0: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
24f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2500: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
2510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2520: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
2530: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
2540: 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  ("value");....  
2550: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
2560: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2570: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c  lite3_result_val
2580: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2590: 20 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20 76       pContext, v
25a0: 61 6c 75 65 2e 4e 61 74 69 76 65 48 61 6e 64 6c  alue.NativeHandl
25b0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
25c0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
25d0: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
25e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
25f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2640: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
2650: 74 65 56 61 6c 75 65 20 48 65 6c 70 65 72 20 43  teValue Helper C
2660: 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
2670: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2680: 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72   This class repr
2690: 65 73 65 6e 74 73 20 61 20 76 61 6c 75 65 20 66  esents a value f
26a0: 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63  rom the SQLite c
26b0: 6f 72 65 20 6c 69 62 72 61 72 79 20 74 68 61 74  ore library that
26c0: 20 63 61 6e 20 62 65 0d 0a 20 20 20 20 2f 2f 2f   can be..    ///
26d0: 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
26e0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29  qlite3_value_*()
26f0: 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64 20   and associated 
2700: 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  functions...    
2710: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2720: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
2730: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 56 61  d class SQLiteVa
2740: 6c 75 65 20 3a 20 49 53 51 4c 69 74 65 4e 61 74  lue : ISQLiteNat
2750: 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b  iveHandle..    {
2760: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2770: 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a  n Private Data..
2780: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2790: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
27a0: 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 76 61  // The native va
27b0: 6c 75 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20  lue handle...   
27c0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
27d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
27e0: 76 61 74 65 20 49 6e 74 50 74 72 20 70 56 61 6c  vate IntPtr pVal
27f0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ue;..        #en
2800: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2810: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2860: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
2870: 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f  ivate Constructo
2880: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
2890: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
28a0: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
28b0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
28c0: 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e   this class usin
28d0: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
28e0: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
28f0: 2f 2f 2f 20 76 61 6c 75 65 20 68 61 6e 64 6c 65  /// value handle
2900: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2910: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2920: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2930: 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20  me="pValue">..  
2940: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
2950: 74 69 76 65 20 76 61 6c 75 65 20 68 61 6e 64 6c  tive value handl
2960: 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  e to use...     
2970: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2980: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2990: 20 53 51 4c 69 74 65 56 61 6c 75 65 28 49 6e 74   SQLiteValue(Int
29a0: 50 74 72 20 70 56 61 6c 75 65 29 0d 0a 20 20 20  Ptr pValue)..   
29b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29c0: 20 20 20 20 74 68 69 73 2e 70 56 61 6c 75 65 20      this.pValue 
29d0: 3d 20 70 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  = pValue;..     
29e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
29f0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2a00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2a50: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2a60: 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a  rivate Methods..
2a70: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2a80: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2a90: 2f 2f 20 49 6e 76 61 6c 69 64 61 74 65 73 20 74  // Invalidates t
2aa0: 68 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20  he native value 
2ab0: 68 61 6e 64 6c 65 2c 20 74 68 65 72 65 62 79 20  handle, thereby 
2ac0: 70 72 65 76 65 6e 74 69 6e 67 20 66 75 72 74 68  preventing furth
2ad0: 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  er..        /// 
2ae0: 61 63 63 65 73 73 20 74 6f 20 69 74 20 66 72 6f  access to it fro
2af0: 6d 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  m this object in
2b00: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
2b10: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2b20: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2b30: 20 76 6f 69 64 20 50 72 65 76 65 6e 74 4e 61 74   void PreventNat
2b40: 69 76 65 41 63 63 65 73 73 28 29 0d 0a 20 20 20  iveAccess()..   
2b50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b60: 20 20 20 20 70 56 61 6c 75 65 20 3d 20 49 6e 74      pValue = Int
2b70: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
2b80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2b90: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2ba0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2bf0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
2c00: 6e 74 65 72 6e 61 6c 20 4d 61 72 73 68 61 6c 20  nternal Marshal 
2c10: 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
2c20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2c30: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2c40: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6c 6f  // Converts a lo
2c50: 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20 6e  gical array of n
2c60: 61 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74  ative pointers t
2c70: 6f 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  o native sqlite3
2c80: 5f 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20  _value..        
2c90: 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20 69  /// structures i
2ca0: 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 61 72  nto a managed ar
2cb0: 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72 65 66  ray of <see cref
2cc0: 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f  ="SQLiteValue" /
2cd0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  >..        /// o
2ce0: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 2e  bject instances.
2cf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2d00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2d10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2d20: 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20  e="argc">..     
2d30: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
2d40: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
2d50: 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 61 72 72   the logical arr
2d60: 61 79 20 6f 66 20 6e 61 74 69 76 65 20 73 71 6c  ay of native sql
2d70: 69 74 65 33 5f 76 61 6c 75 65 0d 0a 20 20 20 20  ite3_value..    
2d80: 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72      /// structur
2d90: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  es...        ///
2da0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2db0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2dc0: 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
2dd0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
2de0: 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
2df0: 65 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20  e logical array 
2e00: 6f 66 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  of native sqlite
2e10: 33 5f 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  3_value..       
2e20: 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20   /// structures 
2e30: 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
2e40: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2e50: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
2e60: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2e70: 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65    /// The manage
2e80: 64 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20  d array of <see 
2e90: 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75  cref="SQLiteValu
2ea0: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
2eb0: 74 61 6e 63 65 73 20 6f 72 0d 0a 20 20 20 20 20  tances or..     
2ec0: 20 20 20 2f 2f 2f 20 6e 75 6c 6c 20 75 70 6f 6e     /// null upon
2ed0: 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
2ee0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
2ef0: 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  >..        inter
2f00: 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
2f10: 65 56 61 6c 75 65 5b 5d 20 41 72 72 61 79 46 72  eValue[] ArrayFr
2f20: 6f 6d 53 69 7a 65 41 6e 64 49 6e 74 50 74 72 28  omSizeAndIntPtr(
2f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
2f40: 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20  t argc,..       
2f50: 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76       IntPtr argv
2f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2f70: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2f80: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67 63          if (argc
2f90: 20 3c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   < 0)..         
2fa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
2fb0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
2fc0: 20 20 20 69 66 20 28 61 72 67 76 20 3d 3d 20 49     if (argv == I
2fd0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ff0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
3000: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
3010: 61 6c 75 65 5b 5d 20 72 65 73 75 6c 74 20 3d 20  alue[] result = 
3020: 6e 65 77 20 53 51 4c 69 74 65 56 61 6c 75 65 5b  new SQLiteValue[
3030: 61 72 67 63 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  argc];....      
3040: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
3050: 6e 64 65 78 20 3d 20 30 2c 20 6f 66 66 73 65 74  ndex = 0, offset
3060: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
3070: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
3080: 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68   < result.Length
3090: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30a0: 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 2c 20         index++, 
30b0: 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72  offset += IntPtr
30c0: 2e 53 69 7a 65 29 0d 0a 20 20 20 20 20 20 20 20  .Size)..        
30d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30e0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 41         IntPtr pA
30f0: 72 67 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68  rg = SQLiteMarsh
3100: 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 61 72  al.ReadIntPtr(ar
3110: 67 76 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  gv, offset);....
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3130: 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20  result[index] = 
3140: 28 70 41 72 67 20 21 3d 20 49 6e 74 50 74 72 2e  (pArg != IntPtr.
3150: 5a 65 72 6f 29 20 3f 0d 0a 20 20 20 20 20 20 20  Zero) ?..       
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
3170: 20 53 51 4c 69 74 65 56 61 6c 75 65 28 70 41 72   SQLiteValue(pAr
3180: 67 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  g) : null;..    
3190: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
31b0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
31c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
31d0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
31e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3230: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51       #region ISQ
3240: 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65  LiteNativeHandle
3250: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
3260: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3270: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74  .        /// Ret
3280: 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79  urns the underly
3290: 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76  ing SQLite nativ
32a0: 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61  e handle associa
32b0: 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20  ted with this.. 
32c0: 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63         /// objec
32d0: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
32e0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
32f0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
3300: 6c 69 63 20 49 6e 74 50 74 72 20 4e 61 74 69 76  lic IntPtr Nativ
3310: 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20  eHandle..       
3320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3330: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 56 61  get { return pVa
3340: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
3350: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
3360: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
3370: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
33c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
33d0: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
33e0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
33f0: 6f 6f 6c 20 70 65 72 73 69 73 74 65 64 3b 0d 0a  ool persisted;..
3400: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
3410: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
3420: 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  // Returns non-z
3430: 65 72 6f 20 69 66 20 74 68 65 20 6e 61 74 69 76  ero if the nativ
3440: 65 20 53 51 4c 69 74 65 20 76 61 6c 75 65 20 68  e SQLite value h
3450: 61 73 20 62 65 65 6e 20 73 75 63 63 65 73 73 66  as been successf
3460: 75 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ully..        //
3470: 2f 20 70 65 72 73 69 73 74 65 64 20 61 73 20 61  / persisted as a
3480: 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 20 77   managed value w
3490: 69 74 68 69 6e 20 74 68 69 73 20 6f 62 6a 65 63  ithin this objec
34a0: 74 20 69 6e 73 74 61 6e 63 65 20 28 69 2e 65 2e  t instance (i.e.
34b0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
34c0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 56 61 6c  / <see cref="Val
34d0: 75 65 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20  ue" /> property 
34e0: 6d 61 79 20 74 68 65 6e 20 62 65 20 72 65 61 64  may then be read
34f0: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 29 2e 0d   successfully)..
3500: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
3510: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
3520: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72   public bool Per
3530: 73 69 73 74 65 64 0d 0a 20 20 20 20 20 20 20 20  sisted..        
3540: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
3550: 65 74 20 7b 20 72 65 74 75 72 6e 20 70 65 72 73  et { return pers
3560: 69 73 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20  isted; }..      
3570: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
35d0: 20 20 70 72 69 76 61 74 65 20 6f 62 6a 65 63 74    private object
35e0: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20   value;..       
35f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3600: 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74          /// If t
3610: 68 65 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65  he managed value
3620: 20 66 6f 72 20 74 68 69 73 20 6f 62 6a 65 63 74   for this object
3630: 20 69 6e 73 74 61 6e 63 65 20 69 73 20 61 76 61   instance is ava
3640: 69 6c 61 62 6c 65 20 28 69 2e 65 2e 20 69 74 0d  ilable (i.e. it.
3650: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 73  .        /// has
3660: 20 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79   been previously
3670: 20 70 65 72 73 69 73 74 65 64 20 76 69 61 20 74   persisted via t
3680: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 50 65  he <see cref="Pe
3690: 72 73 69 73 74 22 20 2f 3e 29 20 6d 65 74 68 6f  rsist" />) metho
36a0: 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d,..        /// 
36b0: 74 68 61 74 20 76 61 6c 75 65 20 69 73 20 72 65  that value is re
36c0: 74 75 72 6e 65 64 3b 20 6f 74 68 65 72 77 69 73  turned; otherwis
36d0: 65 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  e, an exception 
36e0: 69 73 20 74 68 72 6f 77 6e 2e 20 20 54 68 65 0d  is thrown.  The.
36f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 74  .        /// ret
3700: 75 72 6e 65 64 20 76 61 6c 75 65 20 6d 61 79 20  urned value may 
3710: 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  be null...      
3720: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3730: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
3740: 20 6f 62 6a 65 63 74 20 56 61 6c 75 65 0d 0a 20   object Value.. 
3750: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3760: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
3770: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3780: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 70            if (!p
3790: 65 72 73 69 73 74 65 64 29 0d 0a 20 20 20 20 20  ersisted)..     
37a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
37d0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
37e0: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3800: 22 76 61 6c 75 65 20 77 61 73 20 6e 6f 74 20 70  "value was not p
3810: 65 72 73 69 73 74 65 64 22 29 3b 0d 0a 20 20 20  ersisted");..   
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3840: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
3850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3860: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3870: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
3880: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
3890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
38e0: 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
38f0: 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
3900: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
3910: 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64 20     /// Gets and 
3920: 72 65 74 75 72 6e 73 20 74 68 65 20 74 79 70 65  returns the type
3930: 20 61 66 66 69 6e 69 74 79 20 61 73 73 6f 63 69   affinity associ
3940: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76  ated with this v
3950: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
3960: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3970: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
3980: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
3990: 2f 20 54 68 65 20 74 79 70 65 20 61 66 66 69 6e  / The type affin
39a0: 69 74 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ity associated w
39b0: 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e 0d  ith this value..
39c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
39d0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
39e0: 20 70 75 62 6c 69 63 20 54 79 70 65 41 66 66 69   public TypeAffi
39f0: 6e 69 74 79 20 47 65 74 54 79 70 65 41 66 66 69  nity GetTypeAffi
3a00: 6e 69 74 79 28 29 0d 0a 20 20 20 20 20 20 20 20  nity()..        
3a10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
3a20: 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74  f (pValue == Int
3a30: 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e  Ptr.Zero) return
3a40: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 6f   TypeAffinity.No
3a50: 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne;..           
3a60: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
3a70: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3a80: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
3a90: 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  Value);..       
3aa0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
3ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3af0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3b00: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3b10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73          /// Gets
3b20: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
3b30: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
3b40: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3b50: 20 74 68 69 73 20 76 61 6c 75 65 2c 20 69 66 0d   this value, if.
3b60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 74 20  .        /// it 
3b70: 72 65 66 65 72 73 20 74 6f 20 61 20 55 54 46 2d  refers to a UTF-
3b80: 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67  8 encoded string
3b90: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
3ba0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
3bb0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3bc0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
3bd0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
3be0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
3bf0: 68 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20 54  h this value.  T
3c00: 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75  he returned valu
3c10: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  e..        /// m
3c20: 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a 20 20 20  ay be zero...   
3c30: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
3c40: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
3c50: 6c 69 63 20 69 6e 74 20 47 65 74 42 79 74 65 73  lic int GetBytes
3c60: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
3c70: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
3c80: 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e  Value == IntPtr.
3c90: 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 30 3b 0d  Zero) return 0;.
3ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3cb0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
3cc0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3cd0: 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c  value_bytes(pVal
3ce0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
3cf0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
3d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d40: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
3d50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3d60: 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e       /// Gets an
3d70: 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73  d returns the <s
3d80: 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20  ee cref="Int32" 
3d90: 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  /> associated wi
3da0: 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  th this..       
3db0: 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20   /// value...   
3dc0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
3dd0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
3de0: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
3df0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
3e00: 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
3e10: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3e20: 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20   this value...  
3e30: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
3e40: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
3e50: 62 6c 69 63 20 69 6e 74 20 47 65 74 49 6e 74 28  blic int GetInt(
3e60: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
3e70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56            if (pV
3e80: 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  alue == IntPtr.Z
3e90: 65 72 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61  ero) return defa
3ea0: 75 6c 74 28 69 6e 74 29 3b 0d 0a 20 20 20 20 20  ult(int);..     
3eb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
3ec0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3ed0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
3ee0: 69 6e 74 28 70 56 61 6c 75 65 29 3b 0d 0a 20 20  int(pValue);..  
3ef0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3f00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3f50: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
3f60: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
3f70: 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e   Gets and return
3f80: 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  s the <see cref=
3f90: 22 49 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f 63  "Int64" /> assoc
3fa0: 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20  iated with..    
3fb0: 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 76 61 6c      /// this val
3fc0: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
3fd0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3fe0: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
3ff0: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
4000: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
4010: 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f 63 69 61  nt64" /> associa
4020: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61  ted with this va
4030: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
4040: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
4050: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6c 6f 6e        public lon
4060: 67 20 47 65 74 49 6e 74 36 34 28 29 0d 0a 20 20  g GetInt64()..  
4070: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4080: 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65 20       if (pValue 
4090: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  == IntPtr.Zero) 
40a0: 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 28 6c  return default(l
40b0: 6f 6e 67 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  ong);....#if !PL
40c0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
40d0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
40e0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
40f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4100: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
4110: 74 36 34 28 70 56 61 6c 75 65 29 3b 0d 0a 23 65  t64(pValue);..#e
4120: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
4130: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
4140: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 20    long value;.. 
4150: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
4160: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4170: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
4180: 36 34 5f 69 6e 74 65 72 6f 70 28 70 56 61 6c 75  64_interop(pValu
4190: 65 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a  e, out value);..
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
41b0: 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65  rn value;..#else
41c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
41d0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
41e0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
41f0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
4200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4210: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4250: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4260: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4270: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47  >..        /// G
4280: 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ets and returns 
4290: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44  the <see cref="D
42a0: 6f 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63 69  ouble" /> associ
42b0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a  ated with this..
42c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75          /// valu
42d0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
42e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
42f0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4300: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
4310: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f  he <see cref="Do
4320: 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63 69 61  uble" /> associa
4330: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61  ted with this va
4340: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
4350: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
4360: 20 20 20 20 20 20 70 75 62 6c 69 63 20 64 6f 75        public dou
4370: 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 29 0d  ble GetDouble().
4380: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4390: 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
43a0: 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
43b0: 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  o) return defaul
43c0: 74 28 64 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 23 69  t(double);....#i
43d0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
43e0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
43f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4400: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4410: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
4420: 75 65 5f 64 6f 75 62 6c 65 28 70 56 61 6c 75 65  ue_double(pValue
4430: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
4440: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
4450: 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76          double v
4460: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
4470: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
4480: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
4490: 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  alue_double_inte
44a0: 72 6f 70 28 70 56 61 6c 75 65 2c 20 6f 75 74 20  rop(pValue, out 
44b0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
44c0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
44d0: 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  e;..#else..     
44e0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
44f0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
4500: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
4510: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
4520: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
4530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4570: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
4580: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
4590: 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64      /// Gets and
45a0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73 65   returns the <se
45b0: 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22 20  e cref="String" 
45c0: 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  /> associated wi
45d0: 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  th this..       
45e0: 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20   /// value...   
45f0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
4600: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
4610: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
4620: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
4630: 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22 20 2f   cref="String" /
4640: 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  > associated wit
4650: 68 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20 54  h this value.  T
4660: 68 65 20 76 61 6c 75 65 20 69 73 0d 0a 20 20 20  he value is..   
4670: 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 74       /// convert
4680: 65 64 20 66 72 6f 6d 20 74 68 65 20 55 54 46 2d  ed from the UTF-
4690: 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f 72  8 encoding prior
46a0: 20 74 6f 20 62 65 69 6e 67 20 72 65 74 75 72 6e   to being return
46b0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
46c0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
46d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
46e0: 6e 67 20 47 65 74 53 74 72 69 6e 67 28 29 0d 0a  ng GetString()..
46f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4700: 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75         if (pValu
4710: 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e == IntPtr.Zero
4720: 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a  ) return null;..
4730: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4740: 72 6e 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e  rn SQLiteString.
4750: 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
4760: 74 50 74 72 28 70 56 61 6c 75 65 2c 20 47 65 74  tPtr(pValue, Get
4770: 42 79 74 65 73 28 29 29 3b 0d 0a 20 20 20 20 20  Bytes());..     
4780: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
47e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
47f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65  ..        /// Ge
4800: 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  ts and returns t
4810: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 42 79  he <see cref="By
4820: 74 65 22 20 2f 3e 20 61 72 72 61 79 20 61 73 73  te" /> array ass
4830: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
4840: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  s..        /// v
4850: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
4860: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
4870: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
4880: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
4890: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
48a0: 22 42 79 74 65 22 20 2f 3e 20 61 72 72 61 79 20  "Byte" /> array 
48b0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
48c0: 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20  this value...   
48d0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
48e0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
48f0: 6c 69 63 20 62 79 74 65 5b 5d 20 47 65 74 42 6c  lic byte[] GetBl
4900: 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ob()..        {.
4910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4920: 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74  (pValue == IntPt
4930: 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 6e  r.Zero) return n
4940: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
4950: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42    return SQLiteB
4960: 79 74 65 73 2e 46 72 6f 6d 49 6e 74 50 74 72 28  ytes.FromIntPtr(
4970: 70 56 61 6c 75 65 2c 20 47 65 74 42 79 74 65 73  pValue, GetBytes
4980: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
4990: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
49a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
49f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4a00: 20 20 20 20 20 2f 2f 2f 20 55 73 65 73 20 74 68       /// Uses th
4a10: 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20 68  e native value h
4a20: 61 6e 64 6c 65 20 74 6f 20 6f 62 74 61 69 6e 20  andle to obtain 
4a30: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 6d 61  and store the ma
4a40: 6e 61 67 65 64 20 76 61 6c 75 65 0d 0a 20 20 20  naged value..   
4a50: 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 74 68 69       /// for thi
4a60: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
4a70: 65 2c 20 74 68 75 73 20 73 61 76 69 6e 67 20 69  e, thus saving i
4a80: 74 20 66 6f 72 20 6c 61 74 65 72 20 75 73 65 2e  t for later use.
4a90: 20 20 54 68 65 20 74 79 70 65 0d 0a 20 20 20 20    The type..    
4aa0: 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20 6d      /// of the m
4ab0: 61 6e 61 67 65 64 20 76 61 6c 75 65 20 69 73 20  anaged value is 
4ac0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
4ad0: 65 20 74 79 70 65 20 61 66 66 69 6e 69 74 79 20  e type affinity 
4ae0: 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
4af0: 2f 2f 2f 20 6e 61 74 69 76 65 20 76 61 6c 75 65  /// native value
4b00: 2e 20 20 49 66 20 74 68 65 20 74 79 70 65 20 61  .  If the type a
4b10: 66 66 69 6e 69 74 79 20 69 73 20 6e 6f 74 20 72  ffinity is not r
4b20: 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 74 68 69  ecognized by thi
4b30: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  s..        /// m
4b40: 65 74 68 6f 64 2c 20 6e 6f 20 77 6f 72 6b 20 69  ethod, no work i
4b50: 73 20 64 6f 6e 65 20 61 6e 64 20 66 61 6c 73 65  s done and false
4b60: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20   is returned... 
4b70: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
4b80: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
4b90: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
4ba0: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
4bb0: 72 6f 20 69 66 20 74 68 65 20 6e 61 74 69 76 65  ro if the native
4bc0: 20 76 61 6c 75 65 20 77 61 73 20 70 65 72 73 69   value was persi
4bd0: 73 74 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c  sted successfull
4be0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
4bf0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4c00: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
4c10: 50 65 72 73 69 73 74 28 29 0d 0a 20 20 20 20 20  Persist()..     
4c20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4c30: 20 20 73 77 69 74 63 68 20 28 47 65 74 54 79 70    switch (GetTyp
4c40: 65 41 66 66 69 6e 69 74 79 28 29 29 0d 0a 20 20  eAffinity())..  
4c50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
4c70: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 55  e TypeAffinity.U
4c80: 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3a 0d 0a 20  ninitialized:.. 
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ca0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
4cc0: 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  lue = null;..   
4cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ce0: 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69       PreventNati
4cf0: 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20  veAccess();..   
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d10: 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72       return (per
4d20: 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d  sisted = true);.
4d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4d50: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
4d60: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a  eAffinity.Int64:
4d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4da0: 20 76 61 6c 75 65 20 3d 20 47 65 74 49 6e 74 36   value = GetInt6
4db0: 34 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  4();..          
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
4dd0: 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73  eventNativeAcces
4de0: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4e00: 74 75 72 6e 20 28 70 65 72 73 69 73 74 65 64 20  turn (persisted 
4e10: 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  = true);..      
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4e40: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
4e50: 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20  ty.Double:..    
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4e80: 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65             value
4e90: 20 3d 20 47 65 74 44 6f 75 62 6c 65 28 29 3b 0d   = GetDouble();.
4ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4eb0: 20 20 20 20 20 20 20 20 20 50 72 65 76 65 6e 74           Prevent
4ec0: 4e 61 74 69 76 65 41 63 63 65 73 73 28 29 3b 0d  NativeAccess();.
4ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ee0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4ef0: 28 70 65 72 73 69 73 74 65 64 20 3d 20 74 72 75  (persisted = tru
4f00: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
4f10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
4f30: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65   TypeAffinity.Te
4f40: 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt:..           
4f50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f70: 20 20 20 20 76 61 6c 75 65 20 3d 20 47 65 74 53      value = GetS
4f80: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fa0: 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76 65 41    PreventNativeA
4fb0: 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20  ccess();..      
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fd0: 20 20 72 65 74 75 72 6e 20 28 70 65 72 73 69 73    return (persis
4fe0: 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20  ted = true);..  
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5000: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
5010: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
5020: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5050: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c               val
5060: 75 65 20 3d 20 47 65 74 42 79 74 65 73 28 29 3b  ue = GetBytes();
5070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5080: 20 20 20 20 20 20 20 20 20 20 50 72 65 76 65 6e            Preven
5090: 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29 3b  tNativeAccess();
50a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
50b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
50c0: 20 28 70 65 72 73 69 73 74 65 64 20 3d 20 74 72   (persisted = tr
50d0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
50e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
5100: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  e TypeAffinity.N
5110: 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ull:..          
5120: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5140: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 44 42 4e       value = DBN
5150: 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20  ull.Value;..    
5160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5170: 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76      PreventNativ
5180: 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20  eAccess();..    
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51a0: 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72 73      return (pers
51b0: 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a  isted = true);..
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
51e0: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d         default:.
51f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5200: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5220: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5240: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5250: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
5260: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5270: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
5280: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
5290: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
52a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
52e0: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
52f0: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
5300: 74 4f 70 20 45 6e 75 6d 65 72 61 74 69 6f 6e 0d  tOp Enumeration.
5310: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
5320: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 73  y>..    /// Thes
5330: 65 20 61 72 65 20 74 68 65 20 61 6c 6c 6f 77 65  e are the allowe
5340: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
5350: 20 6f 70 65 72 61 74 6f 72 73 20 74 68 61 74 20   operators that 
5360: 61 72 65 20 70 61 72 74 20 6f 66 20 61 0d 0a 20  are part of a.. 
5370: 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 61 69 6e     /// constrain
5380: 74 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57 48  t term in the WH
5390: 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ERE clause of a 
53a0: 71 75 65 72 79 20 74 68 61 74 20 75 73 65 73 20  query that uses 
53b0: 61 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 2f  a virtual..    /
53c0: 2f 2f 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  // table...    /
53d0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
53e0: 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 53     public enum S
53f0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
5400: 61 69 6e 74 4f 70 20 3a 20 62 79 74 65 0d 0a 20  aintOp : byte.. 
5410: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
5420: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5430: 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61       /// This va
5440: 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 74  lue represents t
5450: 68 65 20 65 71 75 61 6c 69 74 79 20 6f 70 65 72  he equality oper
5460: 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ator...        /
5470: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5480: 20 20 20 20 20 20 20 45 71 75 61 6c 54 6f 20 3d         EqualTo =
5490: 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   2,....        /
54a0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
54b0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76        /// This v
54c0: 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20  alue represents 
54d0: 74 68 65 20 67 72 65 61 74 65 72 20 74 68 61 6e  the greater than
54e0: 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20   operator...    
54f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5500: 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72 65 61  y>..        Grea
5510: 74 65 72 54 68 61 6e 20 3d 20 34 2c 0d 0a 0d 0a  terThan = 4,....
5520: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
5530: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
5540: 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72 65  // This value re
5550: 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 65 73  presents the les
5560: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
5570: 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20  to operator...  
5580: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
5590: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 4c 65  ary>..        Le
55a0: 73 73 54 68 61 6e 4f 72 45 71 75 61 6c 54 6f 20  ssThanOrEqualTo 
55b0: 3d 20 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 8,....        
55c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
55d0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
55e0: 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73  value represents
55f0: 20 74 68 65 20 6c 65 73 73 20 74 68 61 6e 20 6f   the less than o
5600: 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20  perator...      
5610: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5620: 0d 0a 20 20 20 20 20 20 20 20 4c 65 73 73 54 68  ..        LessTh
5630: 61 6e 20 3d 20 31 36 2c 0d 0a 0d 0a 20 20 20 20  an = 16,....    
5640: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5650: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
5660: 68 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73  his value repres
5670: 65 6e 74 73 20 74 68 65 20 67 72 65 61 74 65 72  ents the greater
5680: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
5690: 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20  o operator...   
56a0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
56b0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72 65  ry>..        Gre
56c0: 61 74 65 72 54 68 61 6e 4f 72 45 71 75 61 6c 54  aterThanOrEqualT
56d0: 6f 20 3d 20 33 32 2c 0d 0a 0d 0a 20 20 20 20 20  o = 32,....     
56e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
56f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
5700: 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73 65  is value represe
5710: 6e 74 73 20 74 68 65 20 4d 41 54 43 48 20 6f 70  nts the MATCH op
5720: 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20  erator...       
5730: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5740: 0a 20 20 20 20 20 20 20 20 4d 61 74 63 68 20 3d  .        Match =
5750: 20 36 34 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20   64..    }..    
5760: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5770: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
57c0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
57d0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
57e0: 6e 74 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d  nt Helper Class.
57f0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
5800: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
5810: 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74   class represent
5820: 73 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  s the native sql
5830: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
5840: 72 61 69 6e 74 20 73 74 72 75 63 74 75 72 65 0d  raint structure.
5850: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
5860: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
5870: 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  brary...    /// 
5880: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5890: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
58a0: 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78 43  ass SQLiteIndexC
58b0: 6f 6e 73 74 72 61 69 6e 74 0d 0a 20 20 20 20 7b  onstraint..    {
58c0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
58d0: 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74  n Internal Const
58e0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
58f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5900: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
5910: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
5920: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
5930: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
5940: 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20 20 20  fied native..   
5950: 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
5960: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
5970: 74 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  t structure...  
5980: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
5990: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
59a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
59b0: 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20  onstraint">..   
59c0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
59d0: 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  ive sqlite3_inde
59e0: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 73 74 72  x_constraint str
59f0: 75 63 74 75 72 65 20 74 6f 20 75 73 65 2e 0d 0a  ucture to use...
5a00: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
5a10: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  ram>..        in
5a20: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64  ternal SQLiteInd
5a30: 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 0d 0a 20  exConstraint(.. 
5a40: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
5a50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5a60: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
5a70: 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69  straint constrai
5a80: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
5a90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 3a  )..            :
5aa0: 20 74 68 69 73 28 63 6f 6e 73 74 72 61 69 6e 74   this(constraint
5ab0: 2e 69 43 6f 6c 75 6d 6e 2c 20 63 6f 6e 73 74 72  .iColumn, constr
5ac0: 61 69 6e 74 2e 6f 70 2c 20 63 6f 6e 73 74 72 61  aint.op, constra
5ad0: 69 6e 74 2e 75 73 61 62 6c 65 2c 0d 0a 20 20 20  int.usable,..   
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5af0: 63 6f 6e 73 74 72 61 69 6e 74 2e 69 54 65 72 6d  constraint.iTerm
5b00: 4f 66 66 73 65 74 29 0d 0a 20 20 20 20 20 20 20  Offset)..       
5b10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5b20: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
5b30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5b40: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
5b50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
5b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5ba0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
5bb0: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
5bc0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
5bd0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5be0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
5bf0: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
5c00: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
5c10: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
5c20: 66 69 65 64 20 66 69 65 6c 64 0d 0a 20 20 20 20  fied field..    
5c30: 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d      /// values..
5c40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
5c50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
5c60: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5c70: 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20 20 20  ="iColumn">..   
5c80: 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20       /// Column 
5c90: 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64  on left-hand sid
5ca0: 65 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e 74 2e  e of constraint.
5cb0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5cc0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
5cd0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5ce0: 22 6f 70 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  "op">..        /
5cf0: 2f 2f 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70  // Constraint op
5d00: 65 72 61 74 6f 72 20 28 3c 73 65 65 20 63 72 65  erator (<see cre
5d10: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  f="SQLiteIndexCo
5d20: 6e 73 74 72 61 69 6e 74 4f 70 22 20 2f 3e 29 2e  nstraintOp" />).
5d30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5d40: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
5d50: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5d60: 22 75 73 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  "usable">..     
5d70: 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74     /// True if t
5d80: 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  his constraint i
5d90: 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20 20 20 20  s usable...     
5da0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
5db0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
5dc0: 72 61 6d 20 6e 61 6d 65 3d 22 69 54 65 72 6d 4f  ram name="iTermO
5dd0: 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20  ffset">..       
5de0: 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e   /// Used intern
5df0: 61 6c 6c 79 20 2d 20 3c 73 65 65 20 63 72 65 66  ally - <see cref
5e00: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
5e10: 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78  Module.BestIndex
5e20: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  " />..        //
5e30: 2f 20 73 68 6f 75 6c 64 20 69 67 6e 6f 72 65 2e  / should ignore.
5e40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5e50: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
5e60: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e  private SQLiteIn
5e70: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 0d 0a  dexConstraint(..
5e80: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
5e90: 69 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20  iColumn,..      
5ea0: 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65        SQLiteInde
5eb0: 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20 6f 70  xConstraintOp op
5ec0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
5ed0: 79 74 65 20 75 73 61 62 6c 65 2c 0d 0a 20 20 20  yte usable,..   
5ee0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 54 65           int iTe
5ef0: 72 6d 4f 66 66 73 65 74 0d 0a 20 20 20 20 20 20  rmOffset..      
5f00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
5f10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5f20: 74 68 69 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20 69  this.iColumn = i
5f30: 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20 20 20 20  Column;..       
5f40: 20 20 20 20 20 74 68 69 73 2e 6f 70 20 3d 20 6f       this.op = o
5f50: 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p;..            
5f60: 74 68 69 73 2e 75 73 61 62 6c 65 20 3d 20 75 73  this.usable = us
5f70: 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  able;..         
5f80: 20 20 20 74 68 69 73 2e 69 54 65 72 6d 4f 66 66     this.iTermOff
5f90: 73 65 74 20 3d 20 69 54 65 72 6d 4f 66 66 73 65  set = iTermOffse
5fa0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
5fb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5fc0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
5fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6010: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
6020: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69  region Public Fi
6030: 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  elds..        //
6040: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6050: 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20       /// Column 
6060: 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64  on left-hand sid
6070: 65 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e 74 2e  e of constraint.
6080: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
6090: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
60a0: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 69 43 6f    public int iCo
60b0: 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lumn;....       
60c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6100: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6110: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6120: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
6130: 6e 73 74 72 61 69 6e 74 20 6f 70 65 72 61 74 6f  nstraint operato
6140: 72 20 28 3c 73 65 65 20 63 72 65 66 3d 22 53 51  r (<see cref="SQ
6150: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
6160: 69 6e 74 4f 70 22 20 2f 3e 29 2e 0d 0a 20 20 20  intOp" />)...   
6170: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
6180: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
6190: 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65 78 43  lic SQLiteIndexC
61a0: 6f 6e 73 74 72 61 69 6e 74 4f 70 20 6f 70 3b 0d  onstraintOp op;.
61b0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
61c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6200: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
6210: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
6220: 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20      /// True if 
6230: 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 20  this constraint 
6240: 69 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20 20 20  is usable...    
6250: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6260: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
6270: 69 63 20 62 79 74 65 20 75 73 61 62 6c 65 3b 0d  ic byte usable;.
6280: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
6290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
62e0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
62f0: 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74      /// Used int
6300: 65 72 6e 61 6c 6c 79 20 2d 20 3c 73 65 65 20 63  ernally - <see c
6310: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
6320: 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e  gedModule.BestIn
6330: 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20  dex" />..       
6340: 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 69 67 6e 6f   /// should igno
6350: 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
6360: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
6370: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
6380: 69 54 65 72 6d 4f 66 66 73 65 74 3b 0d 0a 20 20  iTermOffset;..  
6390: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
63a0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
63b0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6410: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
6420: 49 6e 64 65 78 4f 72 64 65 72 42 79 20 48 65 6c  IndexOrderBy Hel
6430: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f  per Class..    /
6440: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6450: 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
6460: 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
6470: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
6480: 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 73 74 72  ndex_orderby str
6490: 75 63 74 75 72 65 20 66 72 6f 6d 0d 0a 20 20 20  ucture from..   
64a0: 20 2f 2f 2f 20 74 68 65 20 53 51 4c 69 74 65 20   /// the SQLite 
64b0: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
64c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
64d0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65  >..    public se
64e0: 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74  aled class SQLit
64f0: 65 49 6e 64 65 78 4f 72 64 65 72 42 79 0d 0a 20  eIndexOrderBy.. 
6500: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
6510: 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43  egion Internal C
6520: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
6530: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
6540: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6550: 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e  Constructs an in
6560: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
6570: 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73  lass using the s
6580: 70 65 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d  pecified native.
6590: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
65a0: 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72  ite3_index_order
65b0: 62 79 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  by structure... 
65c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
65d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
65e0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
65f0: 6f 72 64 65 72 42 79 22 3e 0d 0a 20 20 20 20 20  orderBy">..     
6600: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
6610: 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
6620: 6f 72 64 65 72 62 79 20 73 74 72 75 63 74 75 72  orderby structur
6630: 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  e to use...     
6640: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6650: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
6660: 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  l SQLiteIndexOrd
6670: 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20 20  erBy(..         
6680: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
6690: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
66a0: 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f 72 64  ndex_orderby ord
66b0: 65 72 42 79 0d 0a 20 20 20 20 20 20 20 20 20 20  erBy..          
66c0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
66d0: 20 3a 20 74 68 69 73 28 6f 72 64 65 72 42 79 2e   : this(orderBy.
66e0: 69 43 6f 6c 75 6d 6e 2c 20 6f 72 64 65 72 42 79  iColumn, orderBy
66f0: 2e 64 65 73 63 29 0d 0a 20 20 20 20 20 20 20 20  .desc)..        
6700: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
6710: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
6720: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6730: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6740: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6790: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
67a0: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 72  n Private Constr
67b0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
67c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
67d0: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
67e0: 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
67f0: 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20  e of this class 
6800: 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66  using the specif
6810: 69 65 64 20 66 69 65 6c 64 0d 0a 20 20 20 20 20  ied field..     
6820: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a     /// values...
6830: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
6840: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
6850: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6860: 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20 20 20 20  "iColumn">..    
6870: 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20 6e      /// Column n
6880: 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  umber...        
6890: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
68a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
68b0: 20 6e 61 6d 65 3d 22 64 65 73 63 22 3e 0d 0a 20   name="desc">.. 
68c0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20         /// True 
68d0: 66 6f 72 20 44 45 53 43 2e 20 20 46 61 6c 73 65  for DESC.  False
68e0: 20 66 6f 72 20 41 53 43 2e 0d 0a 20 20 20 20 20   for ASC...     
68f0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6900: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
6910: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65   SQLiteIndexOrde
6920: 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rBy(..          
6930: 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 2c 0d 0a    int iColumn,..
6940: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
6950: 20 64 65 73 63 0d 0a 20 20 20 20 20 20 20 20 20   desc..         
6960: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
6970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
6980: 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20 69 43 6f 6c  s.iColumn = iCol
6990: 75 6d 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  umn;..          
69a0: 20 20 74 68 69 73 2e 64 65 73 63 20 3d 20 64 65    this.desc = de
69b0: 73 63 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  sc;..        }..
69c0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
69d0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
69e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6a30: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46  #region Public F
6a40: 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  ields..        /
6a50: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6a60: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e        /// Column
6a70: 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20   number...      
6a80: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6a90: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
6aa0: 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 0d   int iColumn;...
6ab0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
6ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6b00: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
6b10: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
6b20: 20 20 2f 2f 2f 20 54 72 75 65 20 66 6f 72 20 44    /// True for D
6b30: 45 53 43 2e 20 20 46 61 6c 73 65 20 66 6f 72 20  ESC.  False for 
6b40: 41 53 43 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ASC...        //
6b50: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6b60: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 79 74        public byt
6b70: 65 20 64 65 73 63 3b 0d 0a 20 20 20 20 20 20 20  e desc;..       
6b80: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
6b90: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
6ba0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
6bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bf0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
6c00: 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78  gion SQLiteIndex
6c10: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20  ConstraintUsage 
6c20: 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20  Helper Class..  
6c30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6c40: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
6c50: 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74  ass represents t
6c60: 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
6c70: 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69  3_index_constrai
6c80: 6e 74 5f 75 73 61 67 65 0d 0a 20 20 20 20 2f 2f  nt_usage..    //
6c90: 2f 20 73 74 72 75 63 74 75 72 65 20 66 72 6f 6d  / structure from
6ca0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
6cb0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
6cc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6cd0: 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64     public sealed
6ce0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64   class SQLiteInd
6cf0: 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  exConstraintUsag
6d00: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
6d10: 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e    #region Intern
6d20: 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  al Constructors.
6d30: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
6d40: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
6d50: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
6d60: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
6d70: 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  is class using t
6d80: 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 74  he specified nat
6d90: 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ive..        ///
6da0: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63   sqlite3_index_c
6db0: 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20  onstraint_usage 
6dc0: 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
6dd0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6de0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6df0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
6e00: 73 74 72 61 69 6e 74 55 73 61 67 65 22 3e 0d 0a  straintUsage">..
6e10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
6e20: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
6e30: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f  ndex_constraint_
6e40: 75 73 61 67 65 20 73 74 72 75 63 74 75 72 65 20  usage structure 
6e50: 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20  to use...       
6e60: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
6e70: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
6e80: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
6e90: 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20 20 20  raintUsage(..   
6ea0: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
6eb0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6ec0: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
6ed0: 72 61 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e 73  raint_usage cons
6ee0: 74 72 61 69 6e 74 55 73 61 67 65 0d 0a 20 20 20  traintUsage..   
6ef0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
6f00: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 63          : this(c
6f10: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2e 61  onstraintUsage.a
6f20: 72 67 76 49 6e 64 65 78 2c 20 63 6f 6e 73 74 72  rgvIndex, constr
6f30: 61 69 6e 74 55 73 61 67 65 2e 6f 6d 69 74 29 0d  aintUsage.omit).
6f40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6f50: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
6f60: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
6f70: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
6f80: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6f90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fd0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6fe0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
6ff0: 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  te Constructors.
7000: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
7010: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7020: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
7030: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
7040: 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  is class using t
7050: 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69 65  he specified fie
7060: 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ld..        /// 
7070: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20 20 20  values...       
7080: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7090: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
70a0: 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 49 6e  ram name="argvIn
70b0: 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  dex">..        /
70c0: 2f 2f 20 49 66 20 67 72 65 61 74 65 72 20 74 68  // If greater th
70d0: 61 6e 20 30 2c 20 63 6f 6e 73 74 72 61 69 6e 74  an 0, constraint
70e0: 20 69 73 20 70 61 72 74 20 6f 66 20 61 72 67 76   is part of argv
70f0: 20 74 6f 20 78 46 69 6c 74 65 72 2e 0d 0a 20 20   to xFilter...  
7100: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
7110: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
7120: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 6d 69  <param name="omi
7130: 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
7140: 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20 74   Do not code a t
7150: 65 73 74 20 66 6f 72 20 74 68 69 73 20 63 6f 6e  est for this con
7160: 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20  straint...      
7170: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
7180: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7190: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
71a0: 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20 20 20  raintUsage(..   
71b0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
71c0: 76 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20  vIndex,..       
71d0: 20 20 20 20 20 62 79 74 65 20 6f 6d 69 74 0d 0a       byte omit..
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
71f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7200: 20 20 20 20 20 20 74 68 69 73 2e 61 72 67 76 49        this.argvI
7210: 6e 64 65 78 20 3d 20 61 72 67 76 49 6e 64 65 78  ndex = argvIndex
7220: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
7230: 68 69 73 2e 6f 6d 69 74 20 3d 20 6f 6d 69 74 3b  his.omit = omit;
7240: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7250: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
7260: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
7270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72b0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
72c0: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65  egion Public Fie
72d0: 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  lds..        ///
72e0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
72f0: 20 20 20 20 2f 2f 2f 20 49 66 20 67 72 65 61 74      /// If great
7300: 65 72 20 74 68 61 6e 20 30 2c 20 63 6f 6e 73 74  er than 0, const
7310: 72 61 69 6e 74 20 69 73 20 70 61 72 74 20 6f 66  raint is part of
7320: 20 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72   argv to xFilter
7330: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7340: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7350: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 61 72     public int ar
7360: 67 76 49 6e 64 65 78 3b 0d 0a 0d 0a 20 20 20 20  gvIndex;....    
7370: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
73c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
73d0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
73e0: 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20  / Do not code a 
73f0: 74 65 73 74 20 66 6f 72 20 74 68 69 73 20 63 6f  test for this co
7400: 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20  nstraint...     
7410: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7420: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
7430: 63 20 62 79 74 65 20 6f 6d 69 74 3b 0d 0a 20 20  c byte omit;..  
7440: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7450: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
7460: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
7470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
74c0: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
74d0: 49 6e 64 65 78 49 6e 70 75 74 73 20 48 65 6c 70  IndexInputs Help
74e0: 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  er Class..    //
74f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7500: 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
7510: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 76  represents the v
7520: 61 72 69 6f 75 73 20 69 6e 70 75 74 73 20 70 72  arious inputs pr
7530: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 53 51  ovided by the SQ
7540: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 2f  Lite core..    /
7550: 2f 2f 20 6c 69 62 72 61 72 79 20 74 6f 20 74 68  // library to th
7560: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
7570: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
7580: 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20  e.BestIndex" /> 
7590: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f  method...    ///
75a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
75b0: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
75c0: 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78  lass SQLiteIndex
75d0: 49 6e 70 75 74 73 0d 0a 20 20 20 20 7b 0d 0a 20  Inputs..    {.. 
75e0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
75f0: 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63  nternal Construc
7600: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tors..        //
7610: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7620: 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75       /// Constru
7630: 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  cts an instance 
7640: 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a  of this class...
7650: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
7660: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7670: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7680: 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a  "nConstraint">..
7690: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
76a0: 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20 63  number of <see c
76b0: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
76c0: 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e 20 69  Constraint" /> i
76d0: 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20  nstances to..   
76e0: 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c       /// pre-all
76f0: 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e  ocate space for.
7700: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
7710: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
7720: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7730: 22 6e 4f 72 64 65 72 42 79 22 3e 0d 0a 20 20 20  "nOrderBy">..   
7740: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d       /// The num
7750: 62 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66  ber of <see cref
7760: 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  ="SQLiteIndexOrd
7770: 65 72 42 79 22 20 2f 3e 20 69 6e 73 74 61 6e 63  erBy" /> instanc
7780: 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  es to..        /
7790: 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20  // pre-allocate 
77a0: 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20  space for...    
77b0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
77c0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
77d0: 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e  al SQLiteIndexIn
77e0: 70 75 74 73 28 69 6e 74 20 6e 43 6f 6e 73 74 72  puts(int nConstr
77f0: 61 69 6e 74 2c 20 69 6e 74 20 6e 4f 72 64 65 72  aint, int nOrder
7800: 42 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  By)..        {..
7810: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
7820: 74 72 61 69 6e 74 73 20 3d 20 6e 65 77 20 53 51  traints = new SQ
7830: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
7840: 69 6e 74 5b 6e 43 6f 6e 73 74 72 61 69 6e 74 5d  int[nConstraint]
7850: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ;..            o
7860: 72 64 65 72 42 79 73 20 3d 20 6e 65 77 20 53 51  rderBys = new SQ
7870: 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79  LiteIndexOrderBy
7880: 5b 6e 4f 72 64 65 72 42 79 5d 3b 0d 0a 20 20 20  [nOrderBy];..   
7890: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
78a0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
78b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7900: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
7910: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
7920: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
7930: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 43  ate SQLiteIndexC
7940: 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 63 6f 6e 73  onstraint[] cons
7950: 74 72 61 69 6e 74 73 3b 0d 0a 20 20 20 20 20 20  traints;..      
7960: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
7970: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20  .        /// An 
7980: 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72  array of <see cr
7990: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43  ef="SQLiteIndexC
79a0: 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e 20 6f 62  onstraint" /> ob
79b0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 2c 0d  ject instances,.
79c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 61 63  .        /// eac
79d0: 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6e 66  h containing inf
79e0: 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70 6c 69 65  ormation supplie
79f0: 64 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20  d by the SQLite 
7a00: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
7a10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
7a20: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
7a30: 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65  ublic SQLiteInde
7a40: 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 43 6f  xConstraint[] Co
7a50: 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 20 20  nstraints..     
7a60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7a70: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63    get { return c
7a80: 6f 6e 73 74 72 61 69 6e 74 73 3b 20 7d 0d 0a 20  onstraints; }.. 
7a90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7aa0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7af0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
7b00: 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42  QLiteIndexOrderB
7b10: 79 5b 5d 20 6f 72 64 65 72 42 79 73 3b 0d 0a 20  y[] orderBys;.. 
7b20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
7b30: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
7b40: 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20 3c 73  / An array of <s
7b50: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
7b60: 6e 64 65 78 4f 72 64 65 72 42 79 22 20 2f 3e 20  ndexOrderBy" /> 
7b70: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73  object instances
7b80: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65  ,..        /// e
7b90: 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69  ach containing i
7ba0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70 6c  nformation suppl
7bb0: 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  ied by the SQLit
7bc0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
7bd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
7be0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7bf0: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e   public SQLiteIn
7c00: 64 65 78 4f 72 64 65 72 42 79 5b 5d 20 4f 72 64  dexOrderBy[] Ord
7c10: 65 72 42 79 73 0d 0a 20 20 20 20 20 20 20 20 7b  erBys..        {
7c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
7c30: 74 20 7b 20 72 65 74 75 72 6e 20 6f 72 64 65 72  t { return order
7c40: 42 79 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  Bys; }..        
7c50: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
7c60: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
7c70: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
7c80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7cd0: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
7ce0: 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74  QLiteIndexOutput
7cf0: 73 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a  s Helper Class..
7d00: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7d10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
7d20: 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
7d30: 20 74 68 65 20 76 61 72 69 6f 75 73 20 6f 75 74   the various out
7d40: 70 75 74 73 20 70 72 6f 76 69 64 65 64 20 74 6f  puts provided to
7d50: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
7d60: 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72  ..    /// librar
7d70: 79 20 62 79 20 74 68 65 20 3c 73 65 65 20 63 72  y by the <see cr
7d80: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
7d90: 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64  edModule.BestInd
7da0: 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  ex" /> method...
7db0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7dc0: 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  y>..    public s
7dd0: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
7de0: 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73 0d 0a  teIndexOutputs..
7df0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
7e00: 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20  region Internal 
7e10: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
7e20: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
7e30: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
7e40: 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
7e50: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
7e60: 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
7e70: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7e80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
7e90: 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e 73 74 72  am name="nConstr
7ea0: 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  aint">..        
7eb0: 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
7ec0: 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
7ed0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
7ee0: 6e 74 55 73 61 67 65 22 20 2f 3e 20 69 6e 73 74  ntUsage" /> inst
7ef0: 61 6e 63 65 73 0d 0a 20 20 20 20 20 20 20 20 2f  ances..        /
7f00: 2f 2f 20 74 6f 20 70 72 65 2d 61 6c 6c 6f 63 61  // to pre-alloca
7f10: 74 65 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20  te space for... 
7f20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
7f30: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  am>..        int
7f40: 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65  ernal SQLiteInde
7f50: 78 4f 75 74 70 75 74 73 28 69 6e 74 20 6e 43 6f  xOutputs(int nCo
7f60: 6e 73 74 72 61 69 6e 74 29 0d 0a 20 20 20 20 20  nstraint)..     
7f70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7f80: 20 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67    constraintUsag
7f90: 65 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49  es = new SQLiteI
7fa0: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73  ndexConstraintUs
7fb0: 61 67 65 5b 6e 43 6f 6e 73 74 72 61 69 6e 74 5d  age[nConstraint]
7fc0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
7fd0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7fe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
7ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8030: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
8040: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
8050: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
8060: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
8070: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
8080: 73 61 67 65 5b 5d 20 63 6f 6e 73 74 72 61 69 6e  sage[] constrain
8090: 74 55 73 61 67 65 73 3b 0d 0a 20 20 20 20 20 20  tUsages;..      
80a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
80b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20  .        /// An 
80c0: 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72  array of <see cr
80d0: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43  ef="SQLiteIndexC
80e0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22 20  onstraintUsage" 
80f0: 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20  /> object..     
8100: 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 73     /// instances
8110: 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e  , each containin
8120: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f  g information to
8130: 20 62 65 20 73 75 70 70 6c 69 65 64 20 74 6f 20   be supplied to 
8140: 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20  the SQLite..    
8150: 20 20 20 20 2f 2f 2f 20 63 6f 72 65 20 6c 69 62      /// core lib
8160: 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
8170: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8180: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
8190: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
81a0: 69 6e 74 55 73 61 67 65 5b 5d 20 43 6f 6e 73 74  intUsage[] Const
81b0: 72 61 69 6e 74 55 73 61 67 65 73 0d 0a 20 20 20  raintUsages..   
81c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
81d0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
81e0: 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65   constraintUsage
81f0: 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  s; }..        }.
8200: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
8210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8250: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
8260: 69 76 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e  ivate int indexN
8270: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
8280: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8290: 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65         /// Numbe
82a0: 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  r used to help i
82b0: 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
82c0: 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54 68 69  cted index.  Thi
82d0: 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20  s value will..  
82e0: 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74 65 72 20        /// later 
82f0: 62 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74  be provided to t
8300: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
8310: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
8320: 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e 0d 0a 20  le.Filter" />.. 
8330: 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
8340: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
8350: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8360: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 49      public int I
8370: 6e 64 65 78 4e 75 6d 62 65 72 0d 0a 20 20 20 20  ndexNumber..    
8380: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8390: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
83a0: 69 6e 64 65 78 4e 75 6d 62 65 72 3b 20 7d 0d 0a  indexNumber; }..
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
83c0: 7b 20 69 6e 64 65 78 4e 75 6d 62 65 72 20 3d 20  { indexNumber = 
83d0: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
83e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
83f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8430: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8440: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
8450: 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a 20   indexString;.. 
8460: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
8470: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
8480: 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20 74 6f  / String used to
8490: 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74   help identify t
84a0: 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65  he selected inde
84b0: 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 77  x.  This value w
84c0: 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ill..        ///
84d0: 20 6c 61 74 65 72 20 62 65 20 70 72 6f 76 69 64   later be provid
84e0: 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63  ed to the <see c
84f0: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
8500: 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72  gedModule.Filter
8510: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  " />..        //
8520: 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  / method...     
8530: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8540: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
8550: 63 20 73 74 72 69 6e 67 20 49 6e 64 65 78 53 74  c string IndexSt
8560: 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ring..        {.
8570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
8580: 20 7b 20 72 65 74 75 72 6e 20 69 6e 64 65 78 53   { return indexS
8590: 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20  tring; }..      
85a0: 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 64 65        set { inde
85b0: 78 53 74 72 69 6e 67 20 3d 20 76 61 6c 75 65 3b  xString = value;
85c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
85d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
85e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
8630: 61 74 65 20 69 6e 74 20 6e 65 65 64 54 6f 46 72  ate int needToFr
8640: 65 65 49 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a  eeIndexString;..
8650: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
8660: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
8670: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
8680: 68 65 20 69 6e 64 65 78 20 73 74 72 69 6e 67 20  he index string 
8690: 6d 75 73 74 20 62 65 20 66 72 65 65 64 20 62 79  must be freed by
86a0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
86b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69  ..        /// li
86c0: 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  brary...        
86d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
86e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69          public i
86f0: 6e 74 20 4e 65 65 64 54 6f 46 72 65 65 49 6e 64  nt NeedToFreeInd
8700: 65 78 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20  exString..      
8710: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8720: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 65   get { return ne
8730: 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72  edToFreeIndexStr
8740: 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ing; }..        
8750: 20 20 20 20 73 65 74 20 7b 20 6e 65 65 64 54 6f      set { needTo
8760: 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 20  FreeIndexString 
8770: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
8780: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8790: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
87a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
87e0: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
87f0: 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 3b  orderByConsumed;
8800: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
8810: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
8820: 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 6f 75 74   /// True if out
8830: 70 75 74 20 69 73 20 61 6c 72 65 61 64 79 20 6f  put is already o
8840: 72 64 65 72 65 64 2e 0d 0a 20 20 20 20 20 20 20  rdered...       
8850: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8860: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
8870: 69 6e 74 20 4f 72 64 65 72 42 79 43 6f 6e 73 75  int OrderByConsu
8880: 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  med..        {..
8890: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
88a0: 7b 20 72 65 74 75 72 6e 20 6f 72 64 65 72 42 79  { return orderBy
88b0: 43 6f 6e 73 75 6d 65 64 3b 20 7d 0d 0a 20 20 20  Consumed; }..   
88c0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6f           set { o
88d0: 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20 3d  rderByConsumed =
88e0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
88f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8940: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8950: 20 20 20 70 72 69 76 61 74 65 20 64 6f 75 62 6c     private doubl
8960: 65 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74 3b  e estimatedCost;
8970: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
8980: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
8990: 20 2f 2f 2f 20 45 73 74 69 6d 61 74 65 64 20 63   /// Estimated c
89a0: 6f 73 74 20 6f 66 20 75 73 69 6e 67 20 74 68 69  ost of using thi
89b0: 73 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20  s index...      
89c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
89d0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
89e0: 20 64 6f 75 62 6c 65 20 45 73 74 69 6d 61 74 65   double Estimate
89f0: 64 43 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 7b  dCost..        {
8a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
8a10: 74 20 7b 20 72 65 74 75 72 6e 20 65 73 74 69 6d  t { return estim
8a20: 61 74 65 64 43 6f 73 74 3b 20 7d 0d 0a 20 20 20  atedCost; }..   
8a30: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 65           set { e
8a40: 73 74 69 6d 61 74 65 64 43 6f 73 74 20 3d 20 76  stimatedCost = v
8a50: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
8a60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
8a70: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
8a80: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
8a90: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
8aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ae0: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
8af0: 53 51 4c 69 74 65 49 6e 64 65 78 20 48 65 6c 70  SQLiteIndex Help
8b00: 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  er Class..    //
8b10: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8b20: 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
8b30: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 76  represents the v
8b40: 61 72 69 6f 75 73 20 69 6e 70 75 74 73 20 61 6e  arious inputs an
8b50: 64 20 6f 75 74 70 75 74 73 20 75 73 65 64 20 77  d outputs used w
8b60: 69 74 68 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  ith the..    ///
8b70: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
8b80: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
8b90: 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d  .BestIndex" /> m
8ba0: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ethod...    /// 
8bb0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8bc0: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
8bd0: 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78 0d  ass SQLiteIndex.
8be0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
8bf0: 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c  #region Internal
8c00: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
8c10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
8c20: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
8c30: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
8c40: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
8c50: 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20   class...       
8c60: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8c70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
8c80: 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e 73 74  ram name="nConst
8c90: 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20  raint">..       
8ca0: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
8cb0: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
8cc0: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
8cd0: 69 6e 74 22 20 2f 3e 20 28 61 6e 64 0d 0a 20 20  int" /> (and..  
8ce0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
8cf0: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
8d00: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22  ConstraintUsage"
8d10: 20 2f 3e 29 20 69 6e 73 74 61 6e 63 65 73 20 74   />) instances t
8d20: 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  o..        /// p
8d30: 72 65 2d 61 6c 6c 6f 63 61 74 65 20 73 70 61 63  re-allocate spac
8d40: 65 20 66 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  e for...        
8d50: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
8d60: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
8d70: 20 6e 61 6d 65 3d 22 6e 4f 72 64 65 72 42 79 22   name="nOrderBy"
8d80: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
8d90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65  he number of <se
8da0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
8db0: 64 65 78 4f 72 64 65 72 42 79 22 20 2f 3e 20 69  dexOrderBy" /> i
8dc0: 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20  nstances to..   
8dd0: 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c       /// pre-all
8de0: 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e  ocate space for.
8df0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
8e00: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
8e10: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49  internal SQLiteI
8e20: 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
8e30: 20 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69     int nConstrai
8e40: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
8e50: 20 69 6e 74 20 6e 4f 72 64 65 72 42 79 0d 0a 20   int nOrderBy.. 
8e60: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8e70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8e80: 20 20 20 20 20 69 6e 70 75 74 73 20 3d 20 6e 65       inputs = ne
8e90: 77 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70  w SQLiteIndexInp
8ea0: 75 74 73 28 6e 43 6f 6e 73 74 72 61 69 6e 74 2c  uts(nConstraint,
8eb0: 20 6e 4f 72 64 65 72 42 79 29 3b 0d 0a 20 20 20   nOrderBy);..   
8ec0: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 73           outputs
8ed0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64   = new SQLiteInd
8ee0: 65 78 4f 75 74 70 75 74 73 28 6e 43 6f 6e 73 74  exOutputs(nConst
8ef0: 72 61 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  raint);..       
8f00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
8f10: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
8f20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8f70: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74       #region Int
8f80: 65 72 6e 61 6c 20 4d 61 72 73 68 61 6c 20 48 65  ernal Marshal He
8f90: 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
8fa0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
8fb0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
8fc0: 20 43 6f 6e 76 65 72 74 73 20 61 20 6e 61 74 69   Converts a nati
8fd0: 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20  ve pointer to a 
8fe0: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
8ff0: 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74  ndex_info struct
9000: 75 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ure..        ///
9010: 20 69 6e 74 6f 20 61 20 6e 65 77 20 3c 73 65 65   into a new <see
9020: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
9030: 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ex" /> object in
9040: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
9050: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
9060: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
9070: 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65 78  ram name="pIndex
9080: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
9090: 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
90a0: 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65  er to the native
90b0: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
90c0: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 6f  nfo structure to
90d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
90e0: 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20  nvert...        
90f0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
9100: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
9110: 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a   name="index">..
9120: 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
9130: 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70   success, this p
9140: 61 72 61 6d 65 74 65 72 20 77 69 6c 6c 20 62 65  arameter will be
9150: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e   modified to con
9160: 74 61 69 6e 20 74 68 65 20 6e 65 77 6c 79 0d 0a  tain the newly..
9170: 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61          /// crea
9180: 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ted <see cref="S
9190: 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f  QLiteIndex" /> o
91a0: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
91b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
91c0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69  aram>..        i
91d0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76  nternal static v
91e0: 6f 69 64 20 46 72 6f 6d 49 6e 74 50 74 72 28 0d  oid FromIntPtr(.
91f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
9200: 50 74 72 20 70 49 6e 64 65 78 2c 0d 0a 20 20 20  Ptr pIndex,..   
9210: 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
9220: 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a  iteIndex index..
9230: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9240: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9250: 20 20 20 20 20 20 69 66 20 28 70 49 6e 64 65 78        if (pIndex
9260: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
9270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9280: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
9290: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
92a0: 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  set = 0;....    
92b0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e          int nCon
92c0: 73 74 72 61 69 6e 74 20 3d 20 53 51 4c 69 74 65  straint = SQLite
92d0: 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33  Marshal.ReadInt3
92e0: 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  2(pIndex, offset
92f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9300: 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74    offset = SQLit
9310: 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66  eMarshal.NextOff
9320: 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69  setOf(offset, si
9330: 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20  zeof(int),..    
9340: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
9350: 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20  tr.Size);....   
9360: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
9370: 70 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 53 51  pConstraint = SQ
9380: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64  LiteMarshal.Read
9390: 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f  IntPtr(pIndex, o
93a0: 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
93b0: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20         offset = 
93c0: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65  SQLiteMarshal.Ne
93d0: 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65  xtOffsetOf(offse
93e0: 74 2c 20 49 6e 74 50 74 72 2e 53 69 7a 65 2c 0d  t, IntPtr.Size,.
93f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9400: 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d 0a   sizeof(int));..
9410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
9420: 74 20 6e 4f 72 64 65 72 42 79 20 3d 20 53 51 4c  t nOrderBy = SQL
9430: 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  iteMarshal.ReadI
9440: 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66  nt32(pIndex, off
9450: 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  set);....       
9460: 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51       offset = SQ
9470: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74  LiteMarshal.Next
9480: 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c  OffsetOf(offset,
9490: 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20   sizeof(int),.. 
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
94b0: 6e 74 50 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a  ntPtr.Size);....
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
94d0: 74 72 20 70 4f 72 64 65 72 42 79 20 3d 20 53 51  tr pOrderBy = SQ
94e0: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64  LiteMarshal.Read
94f0: 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f  IntPtr(pIndex, o
9500: 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
9510: 20 20 20 20 20 20 20 69 6e 64 65 78 20 3d 20 6e         index = n
9520: 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 28 6e  ew SQLiteIndex(n
9530: 43 6f 6e 73 74 72 61 69 6e 74 2c 20 6e 4f 72 64  Constraint, nOrd
9540: 65 72 42 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  erBy);....      
9550: 20 20 20 20 20 20 54 79 70 65 20 69 6e 64 65 78        Type index
9560: 43 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 20 3d  ConstraintType =
9570: 20 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20   typeof(..      
9580: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
9590: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
95a0: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
95b0: 74 72 61 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  traint);....    
95c0: 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65          int size
95d0: 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54 79 70 65  OfConstraintType
95e0: 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f   = Marshal.SizeO
95f0: 66 28 69 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  f(indexConstrain
9600: 74 54 79 70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  tType);....     
9610: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
9620: 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b  iConstraint = 0;
9630: 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e   iConstraint < n
9640: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e  Constraint; iCon
9650: 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20  straint++)..    
9660: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9670: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
9680: 72 20 70 4f 66 66 73 65 74 20 3d 20 53 51 4c 69  r pOffset = SQLi
9690: 74 65 4d 61 72 73 68 61 6c 2e 49 6e 74 50 74 72  teMarshal.IntPtr
96a0: 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20 20 20  ForOffset(..    
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96c0: 70 43 6f 6e 73 74 72 61 69 6e 74 2c 20 69 43 6f  pConstraint, iCo
96d0: 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a 65 4f  nstraint * sizeO
96e0: 66 43 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 29  fConstraintType)
96f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9700: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
9710: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9720: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
9730: 74 20 63 6f 6e 73 74 72 61 69 6e 74 20 3d 0d 0a  t constraint =..
9740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9750: 20 20 20 20 28 55 6e 73 61 66 65 4e 61 74 69 76      (UnsafeNativ
9760: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9770: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
9780: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
9790: 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
97a0: 68 61 6c 2e 50 74 72 54 6f 53 74 72 75 63 74 75  hal.PtrToStructu
97b0: 72 65 28 70 4f 66 66 73 65 74 2c 20 69 6e 64 65  re(pOffset, inde
97c0: 78 43 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 29  xConstraintType)
97d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
97e0: 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74       index.Input
97f0: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 5b 69 43  s.Constraints[iC
9800: 6f 6e 73 74 72 61 69 6e 74 5d 20 3d 0d 0a 20 20  onstraint] =..  
9810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9820: 20 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65    new SQLiteInde
9830: 78 43 6f 6e 73 74 72 61 69 6e 74 28 63 6f 6e 73  xConstraint(cons
9840: 74 72 61 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20  traint);..      
9850: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9860: 20 20 20 20 20 20 20 54 79 70 65 20 69 6e 64 65         Type inde
9870: 78 4f 72 64 65 72 42 79 54 79 70 65 20 3d 20 74  xOrderByType = t
9880: 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20  ypeof(..        
9890: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
98a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
98b0: 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62  te3_index_orderb
98c0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
98d0: 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 4f 72 64     int sizeOfOrd
98e0: 65 72 42 79 54 79 70 65 20 3d 20 4d 61 72 73 68  erByType = Marsh
98f0: 61 6c 2e 53 69 7a 65 4f 66 28 69 6e 64 65 78 4f  al.SizeOf(indexO
9900: 72 64 65 72 42 79 54 79 70 65 29 3b 0d 0a 0d 0a  rderByType);....
9910: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
9920: 28 69 6e 74 20 69 4f 72 64 65 72 42 79 20 3d 20  (int iOrderBy = 
9930: 30 3b 20 69 4f 72 64 65 72 42 79 20 3c 20 6e 4f  0; iOrderBy < nO
9940: 72 64 65 72 42 79 3b 20 69 4f 72 64 65 72 42 79  rderBy; iOrderBy
9950: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
9960: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9970: 20 20 20 20 49 6e 74 50 74 72 20 70 4f 66 66 73      IntPtr pOffs
9980: 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68  et = SQLiteMarsh
9990: 61 6c 2e 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  al.IntPtrForOffs
99a0: 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et(..           
99b0: 20 20 20 20 20 20 20 20 20 70 4f 72 64 65 72 42           pOrderB
99c0: 79 2c 20 69 4f 72 64 65 72 42 79 20 2a 20 73 69  y, iOrderBy * si
99d0: 7a 65 4f 66 4f 72 64 65 72 42 79 54 79 70 65 29  zeOfOrderByType)
99e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
99f0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
9a00: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9a10: 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f  _index_orderby o
9a20: 72 64 65 72 42 79 20 3d 0d 0a 20 20 20 20 20 20  rderBy =..      
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 55                (U
9a40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9a50: 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
9a60: 5f 6f 72 64 65 72 62 79 29 0d 0a 20 20 20 20 20  _orderby)..     
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 20 20 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f     Marshal.PtrTo
9a90: 53 74 72 75 63 74 75 72 65 28 70 4f 66 66 73 65  Structure(pOffse
9aa0: 74 2c 20 69 6e 64 65 78 4f 72 64 65 72 42 79 54  t, indexOrderByT
9ab0: 79 70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ype);....       
9ac0: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 49           index.I
9ad0: 6e 70 75 74 73 2e 4f 72 64 65 72 42 79 73 5b 69  nputs.OrderBys[i
9ae0: 4f 72 64 65 72 42 79 5d 20 3d 0d 0a 20 20 20 20  OrderBy] =..    
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 4f  new SQLiteIndexO
9b10: 72 64 65 72 42 79 28 6f 72 64 65 72 42 79 29 3b  rderBy(orderBy);
9b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9b30: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9b40: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9b90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
9ba0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
9bb0: 2f 2f 2f 20 50 6f 70 75 6c 61 74 65 73 20 74 68  /// Populates th
9bc0: 65 20 6f 75 74 70 75 74 73 20 6f 66 20 61 20 70  e outputs of a p
9bd0: 72 65 2d 61 6c 6c 6f 63 61 74 65 64 20 6e 61 74  re-allocated nat
9be0: 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  ive sqlite3_inde
9bf0: 78 5f 69 6e 66 6f 0d 0a 20 20 20 20 20 20 20 20  x_info..        
9c00: 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20 75 73  /// structure us
9c10: 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ing an existing 
9c20: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
9c30: 65 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63  eIndex" /> objec
9c40: 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  t..        /// i
9c50: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
9c60: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9c70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
9c80: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78  aram name="index
9c90: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
9ca0: 54 68 65 20 65 78 69 73 74 69 6e 67 20 3c 73 65  The existing <se
9cb0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
9cc0: 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  dex" /> object i
9cd0: 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69  nstance containi
9ce0: 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
9cf0: 74 68 65 20 6f 75 74 70 75 74 20 64 61 74 61 20  the output data 
9d00: 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20  to use...       
9d10: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
9d20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
9d30: 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65 78 22 3e  m name="pIndex">
9d40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
9d50: 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
9d60: 20 74 6f 20 74 68 65 20 70 72 65 2d 61 6c 6c 6f   to the pre-allo
9d70: 63 61 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c  cated native sql
9d80: 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 0d  ite3_index_info.
9d90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72  .        /// str
9da0: 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
9db0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
9dc0: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
9dd0: 73 74 61 74 69 63 20 76 6f 69 64 20 54 6f 49 6e  static void ToIn
9de0: 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
9df0: 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69     SQLiteIndex i
9e00: 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndex,..         
9e10: 20 20 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78     IntPtr pIndex
9e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
9e30: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9e40: 20 20 20 20 20 20 20 20 69 66 20 28 28 69 6e 64          if ((ind
9e50: 65 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  ex == null) || (
9e60: 69 6e 64 65 78 2e 49 6e 70 75 74 73 20 3d 3d 20  index.Inputs == 
9e70: 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20  null) ||..      
9e80: 20 20 20 20 20 20 20 20 20 20 28 69 6e 64 65 78            (index
9e90: 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69  .Inputs.Constrai
9ea0: 6e 74 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d  nts == null) ||.
9eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ec0: 20 28 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 20   (index.Outputs 
9ed0: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20  == null) ||..   
9ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
9ef0: 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73  dex.Outputs.Cons
9f00: 74 72 61 69 6e 74 55 73 61 67 65 73 20 3d 3d 20  traintUsages == 
9f10: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
9f20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9f30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
9f60: 28 70 49 6e 64 65 78 20 3d 3d 20 49 6e 74 50 74  (pIndex == IntPt
9f70: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
9f80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
9f90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9fa0: 69 6e 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d  int offset = 0;.
9fb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
9fc0: 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 3d  nt nConstraint =
9fd0: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52   SQLiteMarshal.R
9fe0: 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c  eadInt32(pIndex,
9ff0: 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
a000: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 43 6f           if (nCo
a010: 6e 73 74 72 61 69 6e 74 20 21 3d 20 69 6e 64 65  nstraint != inde
a020: 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61  x.Inputs.Constra
a030: 69 6e 74 73 2e 4c 65 6e 67 74 68 29 0d 0a 20 20  ints.Length)..  
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
a050: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
a060: 20 20 20 20 20 69 66 20 28 6e 43 6f 6e 73 74 72       if (nConstr
a070: 61 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e 4f 75  aint != index.Ou
a080: 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
a090: 55 73 61 67 65 73 2e 4c 65 6e 67 74 68 29 0d 0a  Usages.Length)..
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0b0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
a0c0: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20         offset = 
a0d0: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65  SQLiteMarshal.Ne
a0e0: 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65  xtOffsetOf(offse
a0f0: 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d  t, sizeof(int),.
a100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a110: 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 3b 0d 0a   IntPtr.Size);..
a120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
a130: 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72  fset = SQLiteMar
a140: 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f  shal.NextOffsetO
a150: 66 28 6f 66 66 73 65 74 2c 20 49 6e 74 50 74 72  f(offset, IntPtr
a160: 2e 53 69 7a 65 2c 0d 0a 20 20 20 20 20 20 20 20  .Size,..        
a170: 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 69          sizeof(i
a180: 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt));....       
a190: 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51       offset = SQ
a1a0: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74  LiteMarshal.Next
a1b0: 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c  OffsetOf(offset,
a1c0: 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20   sizeof(int),.. 
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
a1e0: 6e 74 50 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a  ntPtr.Size);....
a1f0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
a200: 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68  et = SQLiteMarsh
a210: 61 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f 66 28  al.NextOffsetOf(
a220: 6f 66 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 53  offset, IntPtr.S
a230: 69 7a 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ize,..          
a240: 20 20 20 20 20 20 73 69 7a 65 6f 66 28 69 6e 74        sizeof(int
a250: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
a260: 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 73 74     IntPtr pConst
a270: 72 61 69 6e 74 55 73 61 67 65 20 3d 20 53 51 4c  raintUsage = SQL
a280: 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  iteMarshal.ReadI
a290: 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66  ntPtr(pIndex, of
a2a0: 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
a2b0: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66        int sizeOf
a2c0: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 54  ConstraintUsageT
a2d0: 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69  ype = Marshal.Si
a2e0: 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20  zeOf(typeof(..  
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
a300: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a310: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
a320: 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65  constraint_usage
a330: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
a340: 20 20 20 66 6f 72 20 28 69 6e 74 20 69 43 6f 6e     for (int iCon
a350: 73 74 72 61 69 6e 74 20 3d 20 30 3b 20 69 43 6f  straint = 0; iCo
a360: 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43 6f 6e 73  nstraint < nCons
a370: 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73 74 72 61  traint; iConstra
a380: 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  int++)..        
a390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a3a0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
a3b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a3c0: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
a3d0: 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e 73 74 72  int_usage constr
a3e0: 61 69 6e 74 55 73 61 67 65 20 3d 0d 0a 20 20 20  aintUsage =..   
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a400: 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
a410: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a420: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
a430: 74 5f 75 73 61 67 65 28 0d 0a 20 20 20 20 20 20  t_usage(..      
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a450: 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e    index.Outputs.
a460: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
a470: 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 29 3b 0d  [iConstraint]);.
a480: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a490: 20 20 20 4d 61 72 73 68 61 6c 2e 53 74 72 75 63     Marshal.Struc
a4a0: 74 75 72 65 54 6f 50 74 72 28 0d 0a 20 20 20 20  tureToPtr(..    
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4c0: 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2c  constraintUsage,
a4d0: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49   SQLiteMarshal.I
a4e0: 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 0d  ntPtrForOffset(.
a4f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a500: 20 20 20 20 20 70 43 6f 6e 73 74 72 61 69 6e 74       pConstraint
a510: 55 73 61 67 65 2c 20 69 43 6f 6e 73 74 72 61 69  Usage, iConstrai
a520: 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73 74  nt * sizeOfConst
a530: 72 61 69 6e 74 55 73 61 67 65 54 79 70 65 29 2c  raintUsageType),
a540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a550: 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20        false);.. 
a560: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
a570: 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
a580: 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68  et = SQLiteMarsh
a590: 61 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f 66 28  al.NextOffsetOf(
a5a0: 6f 66 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 53  offset, IntPtr.S
a5b0: 69 7a 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ize,..          
a5c0: 20 20 20 20 20 20 73 69 7a 65 6f 66 28 69 6e 74        sizeof(int
a5d0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
a5e0: 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c     SQLiteMarshal
a5f0: 2e 57 72 69 74 65 49 6e 74 33 32 28 70 49 6e 64  .WriteInt32(pInd
a600: 65 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20  ex, offset,..   
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
a620: 65 78 2e 4f 75 74 70 75 74 73 2e 49 6e 64 65 78  ex.Outputs.Index
a630: 4e 75 6d 62 65 72 29 3b 0d 0a 0d 0a 20 20 20 20  Number);....    
a640: 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d          offset =
a650: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e   SQLiteMarshal.N
a660: 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73  extOffsetOf(offs
a670: 65 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c  et, sizeof(int),
a680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a690: 20 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 3b 0d    IntPtr.Size);.
a6a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
a6b0: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69  QLiteMarshal.Wri
a6c0: 74 65 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c  teIntPtr(pIndex,
a6d0: 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20   offset,..      
a6e0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
a6f0: 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
a700: 72 46 72 6f 6d 53 74 72 69 6e 67 28 69 6e 64 65  rFromString(inde
a710: 78 2e 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 53  x.Outputs.IndexS
a720: 74 72 69 6e 67 29 29 3b 0d 0a 0d 0a 20 20 20 20  tring));....    
a730: 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d          offset =
a740: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e   SQLiteMarshal.N
a750: 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73  extOffsetOf(offs
a760: 65 74 2c 20 49 6e 74 50 74 72 2e 53 69 7a 65 2c  et, IntPtr.Size,
a770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a780: 20 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d    sizeof(int));.
a790: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a7a0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
a7b0: 2f 20 4e 4f 54 45 3a 20 57 65 20 6a 75 73 74 20  / NOTE: We just 
a7c0: 61 6c 6c 6f 63 61 74 65 64 20 74 68 65 20 49 6e  allocated the In
a7d0: 64 65 78 53 74 72 69 6e 67 20 66 69 65 6c 64 3b  dexString field;
a7e0: 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65 0d 0a   therefore, we..
a7f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
a800: 20 20 20 20 20 6e 65 65 64 20 74 6f 20 73 65 74       need to set
a810: 20 74 68 65 20 4e 65 65 64 54 6f 46 72 65 65 49   the NeedToFreeI
a820: 6e 64 65 78 53 74 72 69 6e 67 20 66 69 65 6c 64  ndexString field
a830: 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 0d 0a 20   to non-zero... 
a840: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
a850: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
a860: 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e  eMarshal.WriteIn
a870: 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  t32(pIndex, offs
a880: 65 74 2c 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20  et, 1);....     
a890: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20         offset = 
a8a0: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65  SQLiteMarshal.Ne
a8b0: 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65  xtOffsetOf(offse
a8c0: 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d  t, sizeof(int),.
a8d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a8e0: 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d 0a   sizeof(int));..
a8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
a900: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74  LiteMarshal.Writ
a910: 65 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f  eInt32(pIndex, o
a920: 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
a930: 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75          index.Ou
a940: 74 70 75 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e  tputs.OrderByCon
a950: 73 75 6d 65 64 29 3b 0d 0a 0d 0a 20 20 20 20 20  sumed);....     
a960: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20         offset = 
a970: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65  SQLiteMarshal.Ne
a980: 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65  xtOffsetOf(offse
a990: 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d  t, sizeof(int),.
a9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a9b0: 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 29   sizeof(double))
a9c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a9d0: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57   SQLiteMarshal.W
a9e0: 72 69 74 65 44 6f 75 62 6c 65 28 70 49 6e 64 65  riteDouble(pInde
a9f0: 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20  x, offset,..    
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
aa10: 78 2e 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61  x.Outputs.Estima
aa20: 74 65 64 43 6f 73 74 29 3b 0d 0a 20 20 20 20 20  tedCost);..     
aa30: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
aa40: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
aa50: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
aa60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
aaa0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
aab0: 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
aac0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
aad0: 65 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70  e SQLiteIndexInp
aae0: 75 74 73 20 69 6e 70 75 74 73 3b 0d 0a 20 20 20  uts inputs;..   
aaf0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
ab00: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
ab10: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
ab20: 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73  QLiteIndexInputs
ab30: 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
ab40: 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d  ance containing.
ab50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
ab60: 20 69 6e 70 75 74 73 20 74 6f 20 74 68 65 20 3c   inputs to the <
ab70: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
ab80: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42  eManagedModule.B
ab90: 65 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a 20 20  estIndex" />..  
aba0: 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
abb0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
abc0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
abd0: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
abe0: 49 6e 64 65 78 49 6e 70 75 74 73 20 49 6e 70 75  IndexInputs Inpu
abf0: 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ts..        {.. 
ac00: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
ac10: 20 72 65 74 75 72 6e 20 69 6e 70 75 74 73 3b 20   return inputs; 
ac20: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
ac30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ac40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ac80: 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
ac90: 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75  te SQLiteIndexOu
aca0: 74 70 75 74 73 20 6f 75 74 70 75 74 73 3b 0d 0a  tputs outputs;..
acb0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
acc0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
acd0: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
ace0: 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74  ="SQLiteIndexOut
acf0: 70 75 74 73 22 20 2f 3e 20 6f 62 6a 65 63 74 20  puts" /> object 
ad00: 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e  instance contain
ad10: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ing..        ///
ad20: 20 74 68 65 20 6f 75 74 70 75 74 73 20 66 72 6f   the outputs fro
ad30: 6d 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  m the <see cref=
ad40: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
ad50: 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22  odule.BestIndex"
ad60: 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   />..        ///
ad70: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
ad80: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
ad90: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
ada0: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70   SQLiteIndexOutp
adb0: 75 74 73 20 4f 75 74 70 75 74 73 0d 0a 20 20 20  uts Outputs..   
adc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
add0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
ade0: 20 6f 75 74 70 75 74 73 3b 20 7d 0d 0a 20 20 20   outputs; }..   
adf0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ae00: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
ae10: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
ae20: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
ae30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
ae80: 69 6f 6e 20 53 51 4c 69 74 65 56 69 72 74 75 61  ion SQLiteVirtua
ae90: 6c 54 61 62 6c 65 20 42 61 73 65 20 43 6c 61 73  lTable Base Clas
aea0: 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  s..    /// <summ
aeb0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
aec0: 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65  is class represe
aed0: 6e 74 73 20 61 20 6d 61 6e 61 67 65 64 20 76 69  nts a managed vi
aee0: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
aef0: 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20  ementation.  It 
af00: 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e 6f 74 20  is..    /// not 
af10: 73 65 61 6c 65 64 20 61 6e 64 20 73 68 6f 75 6c  sealed and shoul
af20: 64 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  d be used as the
af30: 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f 72 20   base class for 
af40: 61 6e 79 20 75 73 65 72 2d 64 65 66 69 6e 65 64  any user-defined
af50: 0d 0a 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61  ..    /// virtua
af60: 6c 20 74 61 62 6c 65 20 63 6c 61 73 73 65 73 20  l table classes 
af70: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e 20 6d  implemented in m
af80: 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20 20  anaged code...  
af90: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
afa0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 63 6c 61  ..    public cla
afb0: 73 73 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ss SQLiteVirtual
afc0: 54 61 62 6c 65 20 3a 0d 0a 20 20 20 20 20 20 20  Table :..       
afd0: 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69       ISQLiteNati
afe0: 76 65 48 61 6e 64 6c 65 2c 20 49 44 69 73 70 6f  veHandle, IDispo
aff0: 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41  sable /* NOT SEA
b000: 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20  LED */..    {.. 
b010: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
b020: 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73  rivate Constants
b030: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b040: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
b050: 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20 77   /// The index w
b060: 69 74 68 69 6e 20 74 68 65 20 61 72 72 61 79 20  ithin the array 
b070: 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69  of strings provi
b080: 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ded to the..    
b090: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
b0a0: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
b0b0: 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20  dModule.Create" 
b0c0: 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  /> and..        
b0d0: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
b0e0: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
b0f0: 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  ule.Connect" /> 
b100: 6d 65 74 68 6f 64 73 20 63 6f 6e 74 61 69 6e 69  methods containi
b110: 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ng the..        
b120: 2f 2f 2f 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  /// name of the 
b130: 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
b140: 69 6e 67 20 74 68 69 73 20 76 69 72 74 75 61 6c  ing this virtual
b150: 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
b160: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
b170: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
b180: 20 63 6f 6e 73 74 20 69 6e 74 20 4d 6f 64 75 6c   const int Modul
b190: 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 30 3b 0d  eNameIndex = 0;.
b1a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
b1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
b200: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
b210: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64       /// The ind
b220: 65 78 20 77 69 74 68 69 6e 20 74 68 65 20 61 72  ex within the ar
b230: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 70  ray of strings p
b240: 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a  rovided to the..
b250: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
b260: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
b270: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61  nagedModule.Crea
b280: 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20  te" /> and..    
b290: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
b2a0: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
b2b0: 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22  dModule.Connect"
b2c0: 20 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f 6e 74   /> methods cont
b2d0: 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  aining the..    
b2e0: 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66 20      /// name of 
b2f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
b300: 74 61 69 6e 69 6e 67 20 74 68 69 73 20 76 69 72  taining this vir
b310: 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
b320: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
b330: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
b340: 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 44  vate const int D
b350: 61 74 61 62 61 73 65 4e 61 6d 65 49 6e 64 65 78  atabaseNameIndex
b360: 20 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   = 1;....       
b370: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b3c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
b3d0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
b3e0: 68 65 20 69 6e 64 65 78 20 77 69 74 68 69 6e 20  he index within 
b3f0: 74 68 65 20 61 72 72 61 79 20 6f 66 20 73 74 72  the array of str
b400: 69 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74 6f  ings provided to
b410: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
b420: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
b430: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
b440: 65 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e 64  e.Create" /> and
b450: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b460: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
b470: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f  ManagedModule.Co
b480: 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
b490: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  s containing the
b4a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61  ..        /// na
b4b0: 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  me of the virtua
b4c0: 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
b4d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
b4e0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
b4f0: 65 20 63 6f 6e 73 74 20 69 6e 74 20 54 61 62 6c  e const int Tabl
b500: 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 32 3b 0d  eNameIndex = 2;.
b510: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
b520: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
b530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b570: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b580: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
b590: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
b5a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
b5b0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
b5c0: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
b5d0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
b5e0: 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20   class...       
b5f0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
b600: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
b610: 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65  ram name="argume
b620: 6e 74 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  nts">..        /
b630: 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  // The original 
b640: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73  array of strings
b650: 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65   provided to the
b660: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b670: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
b680: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72  ManagedModule.Cr
b690: 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20  eate" /> and..  
b6a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
b6b0: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
b6c0: 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63  gedModule.Connec
b6d0: 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73 2e 0d 0a  t" /> methods...
b6e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
b6f0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
b700: 62 6c 69 63 20 53 51 4c 69 74 65 56 69 72 74 75  blic SQLiteVirtu
b710: 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  alTable(..      
b720: 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
b730: 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20  rguments..      
b740: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b750: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b760: 74 68 69 73 2e 61 72 67 75 6d 65 6e 74 73 20 3d  this.arguments =
b770: 20 61 72 67 75 6d 65 6e 74 73 3b 0d 0a 20 20 20   arguments;..   
b780: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b790: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b7a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b7f0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
b800: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
b810: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
b820: 61 74 65 20 73 74 72 69 6e 67 5b 5d 20 61 72 67  ate string[] arg
b830: 75 6d 65 6e 74 73 3b 0d 0a 20 20 20 20 20 20 20  uments;..       
b840: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
b850: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
b860: 6f 72 69 67 69 6e 61 6c 20 61 72 72 61 79 20 6f  original array o
b870: 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69 64  f strings provid
b880: 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ed to the..     
b890: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
b8a0: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
b8b0: 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f  Module.Create" /
b8c0: 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f  > and..        /
b8d0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
b8e0: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
b8f0: 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  le.Connect" /> m
b900: 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20 20  ethods...       
b910: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
b920: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
b930: 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 5b 5d  virtual string[]
b940: 20 41 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20   Arguments..    
b950: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b960: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
b970: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
b980: 20 61 72 67 75 6d 65 6e 74 73 3b 20 7d 0d 0a 20   arguments; }.. 
b990: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b9a0: 20 20 20 20 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 2f  ////////////////
b9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b9f0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
ba00: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
ba10: 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
ba20: 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
ba30: 6e 74 69 6e 67 20 74 68 69 73 20 76 69 72 74 75  nting this virtu
ba40: 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
ba50: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
ba60: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
ba70: 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67  c virtual string
ba80: 20 4d 6f 64 75 6c 65 4e 61 6d 65 0d 0a 20 20 20   ModuleName..   
ba90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
baa0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
bab0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
bac0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
bad0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
baf0: 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20 3d  ng[] arguments =
bb00: 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20   Arguments;.... 
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
bb20: 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21 3d  f ((arguments !=
bb30: 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20   null) &&..     
bb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
bb50: 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68  arguments.Length
bb60: 20 3e 20 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64   > ModuleNameInd
bb70: 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ex))..          
bb80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
bba0: 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 4d 6f  urn arguments[Mo
bbb0: 64 75 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d  duleNameIndex];.
bbc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bbd0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bbe0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
bbf0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc10: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
bc30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bc40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
bc50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
bc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
bca0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
bcb0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
bcc0: 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
bcd0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
bce0: 74 61 69 6e 69 6e 67 20 74 68 69 73 20 76 69 72  taining this vir
bcf0: 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
bd00: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
bd10: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
bd20: 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69  lic virtual stri
bd30: 6e 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65 0d  ng DatabaseName.
bd40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
bd50: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
bd60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
bd80: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
bd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bda0: 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e  string[] argumen
bdb0: 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d  ts = Arguments;.
bdc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bdd0: 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74     if ((argument
bde0: 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20  s != null) &&.. 
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be00: 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65     (arguments.Le
be10: 6e 67 74 68 20 3e 20 44 61 74 61 62 61 73 65 4e  ngth > DatabaseN
be20: 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20  ameIndex))..    
be30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
be40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be50: 20 20 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65     return argume
be60: 6e 74 73 5b 44 61 74 61 62 61 73 65 4e 61 6d 65  nts[DatabaseName
be70: 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20  Index];..       
be80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
be90: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
bea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
beb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
bed0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
bee0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
bef0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
bf00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
bf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bf60: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
bf70: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
bf80: 6e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74  name of the virt
bf90: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
bfa0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
bfb0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
bfc0: 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e  ic virtual strin
bfd0: 67 20 54 61 62 6c 65 4e 61 6d 65 0d 0a 20 20 20  g TableName..   
bfe0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
bff0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
c000: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c010: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
c020: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
c030: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
c040: 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20 3d  ng[] arguments =
c050: 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20   Arguments;.... 
c060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
c070: 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21 3d  f ((arguments !=
c080: 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20   null) &&..     
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
c0a0: 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68  arguments.Length
c0b0: 20 3e 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65   > TableNameInde
c0c0: 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x))..           
c0d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c0e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c0f0: 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 54 61 62  rn arguments[Tab
c100: 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a 20  leNameIndex];.. 
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
c120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c130: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
c140: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c160: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
c180: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c190: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c1a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
c1b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
c200: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
c210: 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
c220: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
c230: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
c240: 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74    /// Attempts t
c250: 6f 20 72 65 63 6f 72 64 20 74 68 65 20 72 65 6e  o record the ren
c260: 61 6d 69 6e 67 20 6f 66 20 74 68 65 20 76 69 72  aming of the vir
c270: 74 75 61 6c 20 74 61 62 6c 65 20 61 73 73 6f 63  tual table assoc
c280: 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  iated..        /
c290: 2f 2f 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a  // with this obj
c2a0: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
c2b0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
c2c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
c2d0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
c2e0: 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  name">..        
c2f0: 2f 2f 2f 20 54 68 65 20 6e 65 77 20 6e 61 6d 65  /// The new name
c300: 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c   for the virtual
c310: 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
c320: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
c330: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
c340: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
c350: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20  / Non-zero upon 
c360: 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  success...      
c370: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
c380: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
c390: 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 52 65   virtual bool Re
c3a0: 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  name(..         
c3b0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a     string name..
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
c3d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c3e0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
c3f0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
c400: 20 20 20 20 20 20 69 66 20 28 28 61 72 67 75 6d        if ((argum
c410: 65 6e 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26  ents != null) &&
c420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c430: 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e    (arguments.Len
c440: 67 74 68 20 3e 20 54 61 62 6c 65 4e 61 6d 65 49  gth > TableNameI
c450: 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20  ndex))..        
c460: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c470: 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 73         arguments
c480: 5b 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 5d  [TableNameIndex]
c490: 20 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20   = name;..      
c4a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c4b0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
c4c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c4d0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
c4e0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
c4f0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
c500: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
c510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c550: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c560: 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e  #region ISQLiteN
c570: 61 74 69 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62  ativeHandle Memb
c580: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ers..        pri
c590: 76 61 74 65 20 49 6e 74 50 74 72 20 6e 61 74 69  vate IntPtr nati
c5a0: 76 65 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20  veHandle;..     
c5b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
c5c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65  ..        /// Re
c5d0: 74 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c  turns the underl
c5e0: 79 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69  ying SQLite nati
c5f0: 76 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69  ve handle associ
c600: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a  ated with this..
c610: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65          /// obje
c620: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
c630: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
c640: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
c650: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 49 6e 74  blic virtual Int
c660: 50 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65  Ptr NativeHandle
c670: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
c680: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
c690: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
c6a0: 72 65 74 75 72 6e 20 6e 61 74 69 76 65 48 61 6e  return nativeHan
c6b0: 64 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  dle; }..        
c6c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 74      internal set
c6d0: 20 7b 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 20   { nativeHandle 
c6e0: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
c6f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
c700: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
c710: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
c720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c760: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
c770: 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62  IDisposable Memb
c780: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ers..        ///
c790: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
c7a0: 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73      /// Disposes
c7b0: 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
c7c0: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
c7d0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
c7e0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
c7f0: 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29  c void Dispose()
c800: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
c810: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
c820: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
c830: 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73       GC.Suppress
c840: 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d  Finalize(this);.
c850: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
c860: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
c870: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
c880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
c8d0: 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
c8e0: 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65   "Pattern" Membe
c8f0: 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  rs..        priv
c900: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
c910: 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d;..        /// 
c920: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
c930: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e     /// Throws an
c940: 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62 6a 65   <see cref="Obje
c950: 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74  ctDisposedExcept
c960: 69 6f 6e 22 20 2f 3e 20 69 66 20 74 68 69 73 20  ion" /> if this 
c970: 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
c980: 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 68 61 73  /// instance has
c990: 20 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d   been disposed..
c9a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
c9b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
c9c0: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
c9d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
c9e0: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
c9f0: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
ca00: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
ca10: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
ca20: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
ca30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ca40: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
ca50: 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45   ObjectDisposedE
ca60: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
ca80: 79 70 65 6f 66 28 53 51 4c 69 74 65 56 69 72 74  ypeof(SQLiteVirt
ca90: 75 61 6c 54 61 62 6c 65 29 2e 4e 61 6d 65 29 3b  ualTable).Name);
caa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
cab0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
cac0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
cad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
caf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
cb20: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
cb30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70          /// Disp
cb40: 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a  oses of this obj
cb50: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
cb60: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
cb70: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
cb80: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
cb90: 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20  disposing">..   
cba0: 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
cbb0: 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64  o if this method
cbc0: 20 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64   is being called
cbd0: 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20   from the..     
cbe0: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
cbf0: 3d 22 44 69 73 70 6f 73 65 28 29 22 20 2f 3e 20  ="Dispose()" /> 
cc00: 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20 69 66  method.  Zero if
cc10: 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   this method is 
cc20: 62 65 69 6e 67 20 63 61 6c 6c 65 64 0d 0a 20 20  being called..  
cc30: 20 20 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74        /// from t
cc40: 68 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a 20  he finalizer... 
cc50: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
cc60: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  am>..        pro
cc70: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76  tected virtual v
cc80: 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c  oid Dispose(bool
cc90: 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20   disposing)..   
cca0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ccb0: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
ccc0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
ccd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
cce0: 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69     //if (disposi
ccf0: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
cd00: 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
cd10: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
cd20: 2f 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 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
cd50: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64        //    // d
cd60: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
cd70: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
cd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd90: 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f    //    ////////
cda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
cdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
cdd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
cde0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ce20: 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65  release unmanage
ce30: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
ce40: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
ce50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ce60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
ce90: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
cea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ceb0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
cec0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
ced0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
cee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cef0: 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
cf30: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
cf40: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
cf50: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
cf60: 2f 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68 69  // Finalizes thi
cf70: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
cf80: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
cf90: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
cfa0: 20 20 20 20 7e 53 51 4c 69 74 65 56 69 72 74 75      ~SQLiteVirtu
cfb0: 61 6c 54 61 62 6c 65 28 29 0d 0a 20 20 20 20 20  alTable()..     
cfc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cfd0: 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29    Dispose(false)
cfe0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
cff0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
d000: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
d010: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
d020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d070: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
d080: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
d090: 6f 72 20 42 61 73 65 20 43 6c 61 73 73 0d 0a 20  or Base Class.. 
d0a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
d0b0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63  ..    /// This c
d0c0: 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20  lass represents 
d0d0: 61 20 6d 61 6e 61 67 65 64 20 76 69 72 74 75 61  a managed virtua
d0e0: 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69  l table cursor i
d0f0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a  mplementation...
d100: 20 20 20 20 2f 2f 2f 20 49 74 20 69 73 20 6e 6f      /// It is no
d110: 74 20 73 65 61 6c 65 64 20 61 6e 64 20 73 68 6f  t sealed and sho
d120: 75 6c 64 20 62 65 20 75 73 65 64 20 61 73 20 74  uld be used as t
d130: 68 65 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f  he base class fo
d140: 72 20 61 6e 79 0d 0a 20 20 20 20 2f 2f 2f 20 75  r any..    /// u
d150: 73 65 72 2d 64 65 66 69 6e 65 64 20 76 69 72 74  ser-defined virt
d160: 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
d170: 20 63 6c 61 73 73 65 73 20 69 6d 70 6c 65 6d 65   classes impleme
d180: 6e 74 65 64 20 69 6e 20 6d 61 6e 61 67 65 64 20  nted in managed 
d190: 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
d1a0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
d1b0: 75 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c 69  ublic class SQLi
d1c0: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
d1d0: 72 73 6f 72 20 3a 0d 0a 20 20 20 20 20 20 20 20  rsor :..        
d1e0: 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76      ISQLiteNativ
d1f0: 65 48 61 6e 64 6c 65 2c 20 49 44 69 73 70 6f 73  eHandle, IDispos
d200: 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c  able /* NOT SEAL
d210: 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20  ED */..    {..  
d220: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
d230: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
d240: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
d250: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
d260: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
d270: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
d280: 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
d290: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
d2a0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
d2b0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61   <param name="ta
d2c0: 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
d2d0: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
d2e0: 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
d2f0: 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
d300: 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
d310: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
d320: 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63   with this objec
d330: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
d340: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
d350: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
d360: 63 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  c SQLiteVirtualT
d370: 61 62 6c 65 43 75 72 73 6f 72 28 0d 0a 20 20 20  ableCursor(..   
d380: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
d390: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
d3a0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
d3b0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
d3c0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 61           this.ta
d3d0: 62 6c 65 20 3d 20 74 61 62 6c 65 3b 0d 0a 20 20  ble = table;..  
d3e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d3f0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
d400: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
d410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d450: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
d460: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
d470: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ies..        pri
d480: 76 61 74 65 20 53 51 4c 69 74 65 56 69 72 74 75  vate SQLiteVirtu
d490: 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 3b 0d 0a  alTable table;..
d4a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
d4b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
d4c0: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
d4d0: 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
d4e0: 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
d4f0: 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
d500: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
d510: 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63   with this objec
d520: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
d530: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
d540: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
d550: 6c 69 63 20 76 69 72 74 75 61 6c 20 53 51 4c 69  lic virtual SQLi
d560: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 54  teVirtualTable T
d570: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  able..        {.
d580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
d590: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
d5a0: 28 29 3b 20 72 65 74 75 72 6e 20 74 61 62 6c 65  (); return table
d5b0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
d5c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
d5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d610: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
d620: 76 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e 75  vate int indexNu
d630: 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 2f  mber;..        /
d640: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
d650: 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72        /// Number
d660: 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64   used to help id
d670: 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63  entify the selec
d680: 74 65 64 20 69 6e 64 65 78 2e 20 20 54 68 69 73  ted index.  This
d690: 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20 20   value will..   
d6a0: 20 20 20 20 20 2f 2f 2f 20 62 65 20 73 65 74 20       /// be set 
d6b0: 76 69 61 20 74 68 65 20 3c 73 65 65 20 63 72 65  via the <see cre
d6c0: 66 3d 22 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  f="Filter" /> me
d6d0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
d6e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
d6f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69         public vi
d700: 72 74 75 61 6c 20 69 6e 74 20 49 6e 64 65 78 4e  rtual int IndexN
d710: 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 20 7b  umber..        {
d720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
d730: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
d740: 64 28 29 3b 20 72 65 74 75 72 6e 20 69 6e 64 65  d(); return inde
d750: 78 4e 75 6d 62 65 72 3b 20 7d 0d 0a 20 20 20 20  xNumber; }..    
d760: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d770: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d7c0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
d7d0: 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d  ng indexString;.
d7e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
d7f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
d800: 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20  /// String used 
d810: 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79  to help identify
d820: 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e   the selected in
d830: 64 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65  dex.  This value
d840: 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   will..        /
d850: 2f 2f 20 62 65 20 73 65 74 20 76 69 61 20 74 68  // be set via th
d860: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 46 69 6c  e <see cref="Fil
d870: 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ter" /> method..
d880: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
d890: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
d8a0: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
d8b0: 73 74 72 69 6e 67 20 49 6e 64 65 78 53 74 72 69  string IndexStri
d8c0: 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ng..        {.. 
d8d0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
d8e0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
d8f0: 3b 20 72 65 74 75 72 6e 20 69 6e 64 65 78 53 74  ; return indexSt
d900: 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ring; }..       
d910: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
d920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d960: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d970: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 56   private SQLiteV
d980: 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73 3b 0d 0a  alue[] values;..
d990: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
d9a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
d9b0: 2f 2f 20 54 68 65 20 76 61 6c 75 65 73 20 75 73  // The values us
d9c0: 65 64 20 74 6f 20 66 69 6c 74 65 72 20 74 68 65  ed to filter the
d9d0: 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 76   rows returned v
d9e0: 69 61 20 74 68 69 73 20 63 75 72 73 6f 72 20 6f  ia this cursor o
d9f0: 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f  bject..        /
da00: 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68  // instance.  Th
da10: 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  is value will be
da20: 20 73 65 74 20 76 69 61 20 74 68 65 20 3c 73 65   set via the <se
da30: 65 20 63 72 65 66 3d 22 46 69 6c 74 65 72 22 20  e cref="Filter" 
da40: 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
da50: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
da60: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
da70: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
da80: 76 69 72 74 75 61 6c 20 53 51 4c 69 74 65 56 61  virtual SQLiteVa
da90: 6c 75 65 5b 5d 20 56 61 6c 75 65 73 0d 0a 20 20  lue[] Values..  
daa0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dab0: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
dac0: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
dad0: 72 6e 20 76 61 6c 75 65 73 3b 20 7d 0d 0a 20 20  rn values; }..  
dae0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
daf0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
db00: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
db10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
db50: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
db60: 6e 20 50 72 6f 74 65 63 74 65 64 20 4d 65 74 68  n Protected Meth
db70: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
db80: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
db90: 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73      /// Attempts
dba0: 20 74 6f 20 70 65 72 73 69 73 74 20 74 68 65 20   to persist the 
dbb0: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
dbc0: 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65  ref="SQLiteValue
dbd0: 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20  " /> object..   
dbe0: 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63       /// instanc
dbf0: 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d  es in order to m
dc00: 61 6b 65 20 74 68 65 6d 20 61 76 61 69 6c 61 62  ake them availab
dc10: 6c 65 20 61 66 74 65 72 20 74 68 65 0d 0a 20 20  le after the..  
dc20: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
dc30: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
dc40: 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72  gedModule.Filter
dc50: 22 20 2f 3e 20 6d 65 74 68 6f 64 20 72 65 74 75  " /> method retu
dc60: 72 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns...        //
dc70: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
dc80: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
dc90: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d   name="values">.
dca0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
dcb0: 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63   array of <see c
dcc0: 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65  ref="SQLiteValue
dcd0: 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
dce0: 61 6e 63 65 73 20 74 6f 20 62 65 0d 0a 20 20 20  ances to be..   
dcf0: 20 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73 74       /// persist
dd00: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
dd10: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
dd20: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
dd30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
dd40: 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65  e number of <see
dd50: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c   cref="SQLiteVal
dd60: 75 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ue" /> object in
dd70: 73 74 61 6e 63 65 73 20 74 68 61 74 20 77 65 72  stances that wer
dd80: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
dd90: 75 63 63 65 73 73 66 75 6c 6c 79 20 70 65 72 73  uccessfully pers
dda0: 69 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  isted...        
ddb0: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
ddc0: 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
ddd0: 64 20 76 69 72 74 75 61 6c 20 69 6e 74 20 54 72  d virtual int Tr
dde0: 79 50 65 72 73 69 73 74 56 61 6c 75 65 73 28 0d  yPersistValues(.
ddf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
de00: 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65  iteValue[] value
de10: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  s..            )
de20: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
de30: 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73           int res
de40: 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ult = 0;....    
de50: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
de60: 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es != null)..   
de70: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
de80: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
de90: 61 63 68 20 28 53 51 4c 69 74 65 56 61 6c 75 65  ach (SQLiteValue
dea0: 20 76 61 6c 75 65 20 69 6e 20 76 61 6c 75 65 73   value in values
deb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dec0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ded0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
dee0: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
df10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
df20: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
df30: 2e 50 65 72 73 69 73 74 28 29 29 0d 0a 20 20 20  .Persist())..   
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b 0d 0a       result++;..
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
df80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
df90: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
dfa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
dfb0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
dfc0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
dfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e020: 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
e030: 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
e040: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
e050: 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
e060: 6f 64 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c  od should normal
e070: 6c 79 20 62 65 20 75 73 65 64 20 62 79 20 74 68  ly be used by th
e080: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
e090: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
e0a0: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46  eManagedModule.F
e0b0: 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64  ilter" /> method
e0c0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0d 0a 20 20   in order to..  
e0d0: 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 66 6f 72        /// perfor
e0e0: 6d 20 66 69 6c 74 65 72 69 6e 67 20 6f 66 20 74  m filtering of t
e0f0: 68 65 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61  he result rows a
e100: 6e 64 2f 6f 72 20 74 6f 20 72 65 63 6f 72 64 20  nd/or to record 
e110: 74 68 65 20 66 69 6c 74 65 72 69 6e 67 0d 0a 20  the filtering.. 
e120: 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 69 74 65         /// crite
e130: 72 69 61 20 70 72 6f 76 69 64 65 64 20 62 79 20  ria provided by 
e140: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
e150: 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20  library...      
e160: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e170: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
e180: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78  aram name="index
e190: 4e 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20 20 20  Number">..      
e1a0: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65    /// Number use
e1b0: 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69  d to help identi
e1c0: 66 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  fy the selected 
e1d0: 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
e1e0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
e1f0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
e200: 20 6e 61 6d 65 3d 22 69 6e 64 65 78 53 74 72 69   name="indexStri
e210: 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ng">..        //
e220: 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20 74 6f  / String used to
e230: 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74   help identify t
e240: 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65  he selected inde
e250: 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  x...        /// 
e260: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
e270: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
e280: 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20  e="values">..   
e290: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c       /// The val
e2a0: 75 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ues correspondin
e2b0: 67 20 74 6f 20 65 61 63 68 20 63 6f 6c 75 6d 6e  g to each column
e2c0: 20 69 6e 20 74 68 65 20 73 65 6c 65 63 74 65 64   in the selected
e2d0: 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20   index...       
e2e0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
e2f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69         public vi
e300: 72 74 75 61 6c 20 76 6f 69 64 20 46 69 6c 74 65  rtual void Filte
e310: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
e320: 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72 2c  int indexNumber,
e330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
e340: 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67  ring indexString
e350: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ,..            S
e360: 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c  QLiteValue[] val
e370: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ues..           
e380: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
e390: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
e3a0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
e3b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
e3c0: 76 61 6c 75 65 73 20 21 3d 20 6e 75 6c 6c 29 20  values != null) 
e3d0: 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
e3e0: 20 20 20 20 28 54 72 79 50 65 72 73 69 73 74 56      (TryPersistV
e3f0: 61 6c 75 65 73 28 76 61 6c 75 65 73 29 20 21 3d  alues(values) !=
e400: 20 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 29 29   values.Length))
e410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e430: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
e440: 65 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  eException(..   
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e460: 20 22 66 61 69 6c 65 64 20 74 6f 20 70 65 72 73   "failed to pers
e470: 69 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ist one or more 
e480: 76 61 6c 75 65 73 22 29 3b 0d 0a 20 20 20 20 20  values");..     
e490: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e4a0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64          this.ind
e4b0: 65 78 4e 75 6d 62 65 72 20 3d 20 69 6e 64 65 78  exNumber = index
e4c0: 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20  Number;..       
e4d0: 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 53       this.indexS
e4e0: 74 72 69 6e 67 20 3d 20 69 6e 64 65 78 53 74 72  tring = indexStr
e4f0: 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ing;..          
e500: 20 20 74 68 69 73 2e 76 61 6c 75 65 73 20 3d 20    this.values = 
e510: 76 61 6c 75 65 73 3b 0d 0a 20 20 20 20 20 20 20  values;..       
e520: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
e530: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
e540: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
e550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e590: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51       #region ISQ
e5a0: 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65  LiteNativeHandle
e5b0: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
e5c0: 20 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72    private IntPtr
e5d0: 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a   nativeHandle;..
e5e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
e5f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
e600: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 75  // Returns the u
e610: 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65  nderlying SQLite
e620: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 61   native handle a
e630: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
e640: 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
e650: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
e660: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
e670: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
e680: 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61     public virtua
e690: 6c 20 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48  l IntPtr NativeH
e6a0: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b  andle..        {
e6b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
e6c0: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
e6d0: 64 28 29 3b 20 72 65 74 75 72 6e 20 6e 61 74 69  d(); return nati
e6e0: 76 65 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20  veHandle; }..   
e6f0: 20 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61           interna
e700: 6c 20 73 65 74 20 7b 20 6e 61 74 69 76 65 48 61  l set { nativeHa
e710: 6e 64 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ndle = value; }.
e720: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
e730: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e740: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
e750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e790: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
e7a0: 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
e7b0: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
e7c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
e7d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73  .        /// Dis
e7e0: 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62  poses of this ob
e7f0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
e800: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
e810: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
e820: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
e830: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ose()..        {
e840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69  ..            Di
e850: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
e860: 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
e870: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
e880: 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  is);..        }.
e890: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
e8a0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e900: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
e910: 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
e920: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
e930: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
e940: 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20  sposed;..       
e950: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e960: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f          /// Thro
e970: 77 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d  ws an <see cref=
e980: 22 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45  "ObjectDisposedE
e990: 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20  xception" /> if 
e9a0: 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20  this object..   
e9b0: 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63       /// instanc
e9c0: 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f  e has been dispo
e9d0: 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
e9e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
e9f0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
ea00: 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  id CheckDisposed
ea10: 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  () /* throw */..
ea20: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54          {..#if T
ea30: 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44  HROW_ON_DISPOSED
ea40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
ea50: 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20   (disposed)..   
ea60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
ea80: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
ea90: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a  osedException(..
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eab0: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
eac0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
ead0: 73 6f 72 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20  sor).Name);..   
eae0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
eaf0: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  if..        }...
eb00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
eb60: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
eb70: 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20     /// Disposes 
eb80: 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  of this object i
eb90: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
eba0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
ebb0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
ebc0: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f  aram name="dispo
ebd0: 73 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20  sing">..        
ebe0: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
ebf0: 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62  this method is b
ec00: 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
ec10: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
ec20: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44 69 73  / <see cref="Dis
ec30: 70 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74 68 6f  pose()" /> metho
ec40: 64 2e 20 20 5a 65 72 6f 20 69 66 20 74 68 69 73  d.  Zero if this
ec50: 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67   method is being
ec60: 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20   called..       
ec70: 20 2f 2f 2f 20 66 72 6f 6d 20 74 68 65 20 66 69   /// from the fi
ec80: 6e 61 6c 69 7a 65 72 2e 0d 0a 20 20 20 20 20 20  nalizer...      
ec90: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
eca0: 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
ecb0: 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 44  d virtual void D
ecc0: 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70  ispose(bool disp
ecd0: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
ece0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
ecf0: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
ed00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ed20: 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a  if (disposing)..
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed40: 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  //{..           
ed50: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f       //    /////
ed60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ed80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ed90: 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73   //    // dispos
eda0: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
edb0: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
edd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
ee00: 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a           //}....
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee40: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
ee50: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
ee60: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
ee70: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
ee80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
eec0: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
eed0: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
eee0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
eef0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
ef00: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
ef10: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ef20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ef60: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
ef70: 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
ef80: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
ef90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 69  ..        /// Fi
efa0: 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a  nalizes this obj
efb0: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
efc0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
efd0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 7e  mary>..        ~
efe0: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
eff0: 6c 65 43 75 72 73 6f 72 28 29 0d 0a 20 20 20 20  leCursor()..    
f000: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f010: 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65     Dispose(false
f020: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
f030: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
f040: 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
f050: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
f060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
f0b0: 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69     #region ISQLi
f0c0: 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 49  teNativeHandle I
f0d0: 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f  nterface..    //
f0e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
f0f0: 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66   /// This interf
f100: 61 63 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ace represents a
f110: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 70   native handle p
f120: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 53  rovided by the S
f130: 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20  QLite core..    
f140: 2f 2f 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  /// library...  
f150: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f160: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74  ..    public int
f170: 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 4e 61  erface ISQLiteNa
f180: 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20  tiveHandle..    
f190: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  {..        /// <
f1a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
f1b0: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
f1c0: 20 68 61 6e 64 6c 65 20 76 61 6c 75 65 2e 0d 0a   handle value...
f1d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
f1e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
f1f0: 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e  IntPtr NativeHan
f200: 64 6c 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20  dle { get; }..  
f210: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
f220: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
f230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
f280: 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74  egion ISQLiteNat
f290: 69 76 65 4d 6f 64 75 6c 65 20 49 6e 74 65 72 66  iveModule Interf
f2a0: 61 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ace..    /// <su
f2b0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
f2c0: 54 68 69 73 20 69 6e 74 65 72 66 61 63 65 20 72  This interface r
f2d0: 65 70 72 65 73 65 6e 74 73 20 61 20 76 69 72 74  epresents a virt
f2e0: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
f2f0: 65 6e 74 61 74 69 6f 6e 20 77 72 69 74 74 65 6e  entation written
f300: 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74   in..    /// nat
f310: 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f  ive code...    /
f320: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
f330: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66     public interf
f340: 61 63 65 20 49 53 51 4c 69 74 65 4e 61 74 69 76  ace ISQLiteNativ
f350: 65 4d 6f 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a  eModule..    {..
f360: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
f370: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
f380: 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
f390: 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
f3a0: 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  od is called to 
f3b0: 63 72 65 61 74 65 20 61 20 6e 65 77 20 69 6e 73  create a new ins
f3c0: 74 61 6e 63 65 20 6f 66 20 61 20 76 69 72 74 75  tance of a virtu
f3d0: 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
f3e0: 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73    /// in respons
f3f0: 65 20 74 6f 20 61 20 43 52 45 41 54 45 20 56 49  e to a CREATE VI
f400: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
f410: 65 6d 65 6e 74 2e 20 54 68 65 20 64 62 20 70 61  ement. The db pa
f420: 72 61 6d 65 74 65 72 0d 0a 20 20 20 20 20 20 20  rameter..       
f430: 20 2f 2f 2f 20 69 73 20 61 20 70 6f 69 6e 74 65   /// is a pointe
f440: 72 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20  r to the SQLite 
f450: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f460: 69 6f 6e 20 74 68 61 74 20 69 73 20 65 78 65 63  ion that is exec
f470: 75 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f  uting..        /
f480: 2f 2f 20 74 68 65 20 43 52 45 41 54 45 20 56 49  // the CREATE VI
f490: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
f4a0: 65 6d 65 6e 74 2e 20 54 68 65 20 70 41 75 78 20  ement. The pAux 
f4b0: 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20  argument is the 
f4c0: 63 6f 70 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  copy..        //
f4d0: 2f 20 6f 66 20 74 68 65 20 63 6c 69 65 6e 74 20  / of the client 
f4e0: 64 61 74 61 20 70 6f 69 6e 74 65 72 20 74 68 61  data pointer tha
f4f0: 74 20 77 61 73 20 74 68 65 20 66 6f 75 72 74 68  t was the fourth
f500: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
f510: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
f520: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
f530: 75 6c 65 28 29 20 6f 72 20 73 71 6c 69 74 65 33  ule() or sqlite3
f540: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76  _create_module_v
f550: 32 28 29 20 63 61 6c 6c 20 74 68 61 74 0d 0a 20  2() call that.. 
f560: 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 67 69 73         /// regis
f570: 74 65 72 65 64 20 74 68 65 20 76 69 72 74 75 61  tered the virtua
f580: 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 20  l table module. 
f590: 54 68 65 20 61 72 67 76 20 70 61 72 61 6d 65 74  The argv paramet
f5a0: 65 72 20 69 73 20 61 6e 0d 0a 20 20 20 20 20 20  er is an..      
f5b0: 20 20 2f 2f 2f 20 61 72 72 61 79 20 6f 66 20 61    /// array of a
f5c0: 72 67 63 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  rgc pointers to 
f5d0: 6e 75 6c 6c 20 74 65 72 6d 69 6e 61 74 65 64 20  null terminated 
f5e0: 73 74 72 69 6e 67 73 2e 20 54 68 65 20 66 69 72  strings. The fir
f5f0: 73 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  st..        /// 
f600: 73 74 72 69 6e 67 2c 20 61 72 67 76 5b 30 5d 2c  string, argv[0],
f610: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
f620: 74 68 65 20 6d 6f 64 75 6c 65 20 62 65 69 6e 67  the module being
f630: 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 0d 0a 20   invoked. The.. 
f640: 20 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c         /// modul
f650: 65 20 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61  e name is the na
f660: 6d 65 20 70 72 6f 76 69 64 65 64 20 61 73 20 74  me provided as t
f670: 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65  he second argume
f680: 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  nt to..        /
f690: 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  // sqlite3_creat
f6a0: 65 5f 6d 6f 64 75 6c 65 28 29 20 61 6e 64 20 61  e_module() and a
f6b0: 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
f6c0: 6f 20 74 68 65 20 55 53 49 4e 47 20 63 6c 61 75  o the USING clau
f6d0: 73 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f  se of..        /
f6e0: 2f 2f 20 74 68 65 20 43 52 45 41 54 45 20 56 49  // the CREATE VI
f6f0: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
f700: 65 6d 65 6e 74 20 74 68 61 74 20 69 73 20 72 75  ement that is ru
f710: 6e 6e 69 6e 67 2e 20 54 68 65 20 73 65 63 6f 6e  nning. The secon
f720: 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d,..        /// 
f730: 61 72 67 76 5b 31 5d 2c 20 69 73 20 74 68 65 20  argv[1], is the 
f740: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
f750: 62 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68  base in which th
f760: 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61  e new virtual ta
f770: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
f780: 20 69 73 20 62 65 69 6e 67 20 63 72 65 61 74 65   is being create
f790: 64 2e 20 54 68 65 20 64 61 74 61 62 61 73 65 20  d. The database 
f7a0: 6e 61 6d 65 20 69 73 20 22 6d 61 69 6e 22 20 66  name is "main" f
f7b0: 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79 0d 0a  or the primary..
f7c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61          /// data
f7d0: 62 61 73 65 2c 20 6f 72 20 22 74 65 6d 70 22 20  base, or "temp" 
f7e0: 66 6f 72 20 54 45 4d 50 20 64 61 74 61 62 61 73  for TEMP databas
f7f0: 65 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 67  e, or the name g
f800: 69 76 65 6e 20 61 74 20 74 68 65 0d 0a 20 20 20  iven at the..   
f810: 20 20 20 20 20 2f 2f 2f 20 65 6e 64 20 6f 66 20       /// end of 
f820: 74 68 65 20 41 54 54 41 43 48 20 73 74 61 74 65  the ATTACH state
f830: 6d 65 6e 74 20 66 6f 72 20 61 74 74 61 63 68 65  ment for attache
f840: 64 20 64 61 74 61 62 61 73 65 73 2e 20 54 68 65  d databases. The
f850: 20 74 68 69 72 64 0d 0a 20 20 20 20 20 20 20 20   third..        
f860: 2f 2f 2f 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  /// element of t
f870: 68 65 20 61 72 72 61 79 2c 20 61 72 67 76 5b 32  he array, argv[2
f880: 5d 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  ], is the name o
f890: 66 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  f the new virtua
f8a0: 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  l..        /// t
f8b0: 61 62 6c 65 2c 20 61 73 20 73 70 65 63 69 66 69  able, as specifi
f8c0: 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ed following the
f8d0: 20 54 41 42 4c 45 20 6b 65 79 77 6f 72 64 20 69   TABLE keyword i
f8e0: 6e 20 74 68 65 20 43 52 45 41 54 45 0d 0a 20 20  n the CREATE..  
f8f0: 20 20 20 20 20 20 2f 2f 2f 20 56 49 52 54 55 41        /// VIRTUA
f900: 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
f910: 74 2e 20 49 66 20 70 72 65 73 65 6e 74 2c 20 74  t. If present, t
f920: 68 65 20 66 6f 75 72 74 68 20 61 6e 64 20 73 75  he fourth and su
f930: 62 73 65 71 75 65 6e 74 0d 0a 20 20 20 20 20 20  bsequent..      
f940: 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20 69 6e    /// strings in
f950: 20 74 68 65 20 61 72 67 76 5b 5d 20 61 72 72 61   the argv[] arra
f960: 79 20 72 65 70 6f 72 74 20 74 68 65 20 61 72 67  y report the arg
f970: 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
f980: 64 75 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20  dule name..     
f990: 20 20 20 2f 2f 2f 20 69 6e 20 74 68 65 20 43 52     /// in the CR
f9a0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
f9b0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  LE statement... 
f9c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
f9d0: 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
f9e0: 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
f9f0: 2f 2f 2f 20 54 68 65 20 6a 6f 62 20 6f 66 20 74  /// The job of t
fa00: 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 74 6f  his method is to
fa10: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6e   construct the n
fa20: 65 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ew virtual table
fa30: 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20   object..       
fa40: 20 2f 2f 2f 20 28 61 6e 20 73 71 6c 69 74 65 33   /// (an sqlite3
fa50: 5f 76 74 61 62 20 6f 62 6a 65 63 74 29 20 61 6e  _vtab object) an
fa60: 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74  d return a point
fa70: 65 72 20 74 6f 20 69 74 20 69 6e 20 2a 70 70 56  er to it in *ppV
fa80: 54 61 62 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  Tab...        //
fa90: 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
faa0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
fab0: 20 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 70 61         /// As pa
fac0: 72 74 20 6f 66 20 74 68 65 20 74 61 73 6b 20 6f  rt of the task o
fad0: 66 20 63 72 65 61 74 69 6e 67 20 61 20 6e 65 77  f creating a new
fae0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
faf0: 72 75 63 74 75 72 65 2c 20 74 68 69 73 0d 0a 20  ructure, this.. 
fb00: 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
fb10: 64 20 6d 75 73 74 20 69 6e 76 6f 6b 65 20 73 71  d must invoke sq
fb20: 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
fb30: 61 62 28 29 20 74 6f 20 74 65 6c 6c 20 74 68 65  ab() to tell the
fb40: 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20   SQLite core..  
fb50: 20 20 20 20 20 20 2f 2f 2f 20 61 62 6f 75 74 20        /// about 
fb60: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20  the columns and 
fb70: 64 61 74 61 74 79 70 65 73 20 69 6e 20 74 68 65  datatypes in the
fb80: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
fb90: 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  The..        ///
fba0: 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
fbb0: 5f 76 74 61 62 28 29 20 41 50 49 20 68 61 73 20  _vtab() API has 
fbc0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72  the following pr
fbd0: 6f 74 6f 74 79 70 65 3a 0d 0a 20 20 20 20 20 20  ototype:..      
fbe0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
fbf0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
fc00: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
fc10: 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
fc20: 2f 2f 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 64  // int sqlite3_d
fc30: 65 63 6c 61 72 65 5f 76 74 61 62 28 73 71 6c 69  eclare_vtab(sqli
fc40: 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63  te3 *db, const c
fc50: 68 61 72 20 2a 7a 43 72 65 61 74 65 54 61 62 6c  har *zCreateTabl
fc60: 65 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e)..        /// 
fc70: 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20  </code>..       
fc80: 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
fc90: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
fca0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
fcb0: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
fcc0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 64 65 63 6c   to sqlite3_decl
fcd0: 61 72 65 5f 76 74 61 62 28 29 20 6d 75 73 74 20  are_vtab() must 
fce0: 62 65 20 74 68 65 20 73 61 6d 65 0d 0a 20 20 20  be the same..   
fcf0: 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73       /// databas
fd00: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  e connection poi
fd10: 6e 74 65 72 20 61 73 20 74 68 65 20 66 69 72 73  nter as the firs
fd20: 74 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74  t parameter to t
fd30: 68 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  his method...   
fd40: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 65 63       /// The sec
fd50: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ond argument to 
fd60: 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
fd70: 76 74 61 62 28 29 20 6d 75 73 74 20 61 0d 0a 20  vtab() must a.. 
fd80: 20 20 20 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 2d         /// zero-
fd90: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
fda0: 20 73 74 72 69 6e 67 20 74 68 61 74 20 63 6f 6e   string that con
fdb0: 74 61 69 6e 73 20 61 20 77 65 6c 6c 2d 66 6f 72  tains a well-for
fdc0: 6d 65 64 20 43 52 45 41 54 45 0d 0a 20 20 20 20  med CREATE..    
fdd0: 20 20 20 20 2f 2f 2f 20 54 41 42 4c 45 20 73 74      /// TABLE st
fde0: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64 65 66  atement that def
fdf0: 69 6e 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 73  ines the columns
fe00: 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   in the virtual 
fe10: 74 61 62 6c 65 20 61 6e 64 0d 0a 20 20 20 20 20  table and..     
fe20: 20 20 20 2f 2f 2f 20 74 68 65 69 72 20 64 61 74     /// their dat
fe30: 61 20 74 79 70 65 73 2e 20 54 68 65 20 6e 61 6d  a types. The nam
fe40: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  e of the table i
fe50: 6e 20 74 68 69 73 20 43 52 45 41 54 45 20 54 41  n this CREATE TA
fe60: 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  BLE..        ///
fe70: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 67   statement is ig
fe80: 6e 6f 72 65 64 2c 20 61 73 20 61 72 65 20 61 6c  nored, as are al
fe90: 6c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 4f  l constraints. O
fea0: 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e  nly the column n
feb0: 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ames..        //
fec0: 2f 20 61 6e 64 20 64 61 74 61 74 79 70 65 73 20  / and datatypes 
fed0: 6d 61 74 74 65 72 2e 20 54 68 65 20 43 52 45 41  matter. The CREA
fee0: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
fef0: 6e 74 20 73 74 72 69 6e 67 20 6e 65 65 64 20 6e  nt string need n
ff00: 6f 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  ot to..        /
ff10: 2f 2f 20 62 65 20 68 65 6c 64 20 69 6e 20 70 65  // be held in pe
ff20: 72 73 69 73 74 65 6e 74 20 6d 65 6d 6f 72 79 2e  rsistent memory.
ff30: 20 54 68 65 20 73 74 72 69 6e 67 20 63 61 6e 20   The string can 
ff40: 62 65 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 61  be deallocated a
ff50: 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  nd/or..        /
ff60: 2f 2f 20 72 65 75 73 65 64 20 61 73 20 73 6f 6f  // reused as soo
ff70: 6e 20 61 73 20 74 68 65 20 73 71 6c 69 74 65 33  n as the sqlite3
ff80: 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
ff90: 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 2e  routine returns.
ffa0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
ffb0: 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
ffc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
ffd0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
ffe0: 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20  m name="pDb">.. 
fff0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
10000 61 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63  ative database c
10010 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
10020 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
10030 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
10040 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
10050 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20  ="pAux">..      
10060 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e    /// The origin
10070 61 6c 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  al native pointe
10080 72 20 76 61 6c 75 65 20 74 68 61 74 20 77 61 73  r value that was
10090 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65   provided to the
100a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
100b0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
100c0 75 6c 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 63  ule(), sqlite3_c
100d0 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28  reate_module_v2(
100e0 29 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ) or..        //
100f0 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  / sqlite3_create
10100 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75  _disposable_modu
10110 6c 65 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d  le() functions..
10120 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
10130 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
10140 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
10150 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
10160 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
10170 66 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  f arguments from
10180 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54   the CREATE VIRT
10190 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d  UAL TABLE statem
101a0 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ent...        //
101b0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
101c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
101d0 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20  ame="argv">..   
101e0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72       /// The arr
101f0 61 79 20 6f 66 20 73 74 72 69 6e 67 20 61 72 67  ay of string arg
10200 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  uments from the 
10210 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
10220 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ABLE..        //
10230 2f 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  / statement...  
10240 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
10250 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
10260 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
10270 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
10280 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
10290 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
102a0 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
102b0 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
102c0 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f  newly..        /
102d0 2f 2f 20 63 72 65 61 74 65 64 20 6e 61 74 69 76  // created nativ
102e0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
102f0 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
10300 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
10310 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
10320 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
10330 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20  ="pError">..    
10340 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69      /// Upon fai
10350 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d  lure, this param
10360 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
10370 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74  ified to point t
10380 6f 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20  o the error..   
10390 20 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65       /// message
103a0 2c 20 77 69 74 68 20 74 68 65 20 75 6e 64 65 72  , with the under
103b0 6c 79 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76  lying memory hav
103c0 69 6e 67 20 62 65 65 6e 20 6f 62 74 61 69 6e 65  ing been obtaine
103d0 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20  d from the..    
103e0 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
103f0 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f  malloc() functio
10400 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
10410 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
10420 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
10430 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
10440 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
10450 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
10460 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
10470 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
10480 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 72  iteErrorCode xCr
10490 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
104a0 20 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a     IntPtr pDb,..
104b0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
104c0 74 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20  tr pAux,..      
104d0 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d        int argc,.
104e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
104f0 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20  Ptr argv,..     
10500 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
10510 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
10520 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
10530 20 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20   pError..       
10540 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
10550 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
10560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
105a0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
105b0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
105c0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
105d0 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63   /// The xConnec
105e0 74 20 6d 65 74 68 6f 64 20 69 73 20 76 65 72 79  t method is very
105f0 20 73 69 6d 69 6c 61 72 20 74 6f 20 78 43 72 65   similar to xCre
10600 61 74 65 2e 20 49 74 20 68 61 73 20 74 68 65 20  ate. It has the 
10610 73 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  same..        //
10620 2f 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64  / parameters and
10630 20 63 6f 6e 73 74 72 75 63 74 73 20 61 20 6e 65   constructs a ne
10640 77 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  w sqlite3_vtab s
10650 74 72 75 63 74 75 72 65 20 6a 75 73 74 20 6c 69  tructure just li
10660 6b 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ke..        /// 
10670 78 43 72 65 61 74 65 2e 20 41 6e 64 20 69 74 20  xCreate. And it 
10680 6d 75 73 74 20 61 6c 73 6f 20 63 61 6c 6c 20 73  must also call s
10690 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
106a0 74 61 62 28 29 20 6c 69 6b 65 20 78 43 72 65 61  tab() like xCrea
106b0 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  te...        ///
106c0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
106d0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
106e0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 69        /// The di
106f0 66 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74  fference is that
10700 20 78 43 6f 6e 6e 65 63 74 20 69 73 20 63 61 6c   xConnect is cal
10710 6c 65 64 20 74 6f 20 65 73 74 61 62 6c 69 73 68  led to establish
10720 20 61 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20   a new..        
10730 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  /// connection t
10740 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 76 69  o an existing vi
10750 72 74 75 61 6c 20 74 61 62 6c 65 20 77 68 65 72  rtual table wher
10760 65 61 73 20 78 43 72 65 61 74 65 20 69 73 20 63  eas xCreate is c
10770 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  alled..        /
10780 2f 2f 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  // to create a n
10790 65 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ew virtual table
107a0 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0d 0a   from scratch...
107b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
107c0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
107d0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
107e0 20 2f 2f 2f 20 54 68 65 20 78 43 72 65 61 74 65   /// The xCreate
107f0 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20 6d 65   and xConnect me
10800 74 68 6f 64 73 20 61 72 65 20 6f 6e 6c 79 20 64  thods are only d
10810 69 66 66 65 72 65 6e 74 20 77 68 65 6e 20 74 68  ifferent when th
10820 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
10830 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
10840 20 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 62 61   some kind of ba
10850 63 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61 74  cking store that
10860 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20   must be..      
10870 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65    /// initialize
10880 64 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  d the first time
10890 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
108a0 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 54  le is created. T
108b0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
108c0 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 63  xCreate method c
108d0 72 65 61 74 65 73 20 61 6e 64 20 69 6e 69 74 69  reates and initi
108e0 61 6c 69 7a 65 73 20 74 68 65 20 62 61 63 6b 69  alizes the backi
108f0 6e 67 20 73 74 6f 72 65 2e 20 54 68 65 0d 0a 20  ng store. The.. 
10900 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e         /// xConn
10910 65 63 74 20 6d 65 74 68 6f 64 20 6a 75 73 74 20  ect method just 
10920 63 6f 6e 6e 65 63 74 73 20 74 6f 20 61 6e 20 65  connects to an e
10930 78 69 73 74 69 6e 67 20 62 61 63 6b 69 6e 67 20  xisting backing 
10940 73 74 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  store...        
10950 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
10960 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
10970 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 73 20  .        /// As 
10980 61 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e 73  an example, cons
10990 69 64 65 72 20 61 20 76 69 72 74 75 61 6c 20 74  ider a virtual t
109a0 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
109b0 69 6f 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20  ion that..      
109c0 20 20 2f 2f 2f 20 70 72 6f 76 69 64 65 73 20 72    /// provides r
109d0 65 61 64 2d 6f 6e 6c 79 20 61 63 63 65 73 73 20  ead-only access 
109e0 74 6f 20 65 78 69 73 74 69 6e 67 20 63 6f 6d 6d  to existing comm
109f0 61 2d 73 65 70 61 72 61 74 65 64 2d 76 61 6c 75  a-separated-valu
10a00 65 20 28 43 53 56 29 0d 0a 20 20 20 20 20 20 20  e (CSV)..       
10a10 20 2f 2f 2f 20 66 69 6c 65 73 20 6f 6e 20 64 69   /// files on di
10a20 73 6b 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  sk. There is no 
10a30 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 74 68  backing store th
10a40 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 63  at needs to be c
10a50 72 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  reated..        
10a60 2f 2f 2f 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a  /// or initializ
10a70 65 64 20 66 6f 72 20 73 75 63 68 20 61 20 76 69  ed for such a vi
10a80 72 74 75 61 6c 20 74 61 62 6c 65 20 28 73 69 6e  rtual table (sin
10a90 63 65 20 74 68 65 20 43 53 56 20 66 69 6c 65 73  ce the CSV files
10aa0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c  ..        /// al
10ab0 72 65 61 64 79 20 65 78 69 73 74 20 6f 6e 20 64  ready exist on d
10ac0 69 73 6b 29 20 73 6f 20 74 68 65 20 78 43 72 65  isk) so the xCre
10ad0 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74  ate and xConnect
10ae0 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 20 62 65   methods will be
10af0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 64  ..        /// id
10b00 65 6e 74 69 63 61 6c 20 66 6f 72 20 74 68 61 74  entical for that
10b10 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 20 20   module...      
10b20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
10b30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
10b40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
10b50 6e 6f 74 68 65 72 20 65 78 61 6d 70 6c 65 20 69  nother example i
10b60 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
10b70 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  e that implement
10b80 73 20 61 20 66 75 6c 6c 2d 74 65 78 74 0d 0a 20  s a full-text.. 
10b90 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 65 78         /// index
10ba0 2e 20 54 68 65 20 78 43 72 65 61 74 65 20 6d 65  . The xCreate me
10bb0 74 68 6f 64 20 6d 75 73 74 20 63 72 65 61 74 65  thod must create
10bc0 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
10bd0 64 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f  data..        //
10be0 2f 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  / structures to 
10bf0 68 6f 6c 64 20 74 68 65 20 64 69 63 74 69 6f 6e  hold the diction
10c00 61 72 79 20 61 6e 64 20 70 6f 73 74 69 6e 67 20  ary and posting 
10c10 6c 69 73 74 73 20 66 6f 72 20 74 68 61 74 20 69  lists for that i
10c20 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
10c30 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74 20  // The xConnect 
10c40 6d 65 74 68 6f 64 2c 20 6f 6e 20 74 68 65 20 6f  method, on the o
10c50 74 68 65 72 20 68 61 6e 64 2c 20 6f 6e 6c 79 20  ther hand, only 
10c60 68 61 73 20 74 6f 20 6c 6f 63 61 74 65 20 61 6e  has to locate an
10c70 64 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20 2f  d use..        /
10c80 2f 2f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  // an existing d
10c90 69 63 74 69 6f 6e 61 72 79 20 61 6e 64 20 70 6f  ictionary and po
10ca0 73 74 69 6e 67 20 6c 69 73 74 73 20 74 68 61 74  sting lists that
10cb0 20 77 65 72 65 20 63 72 65 61 74 65 64 20 62 79   were created by
10cc0 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   a..        /// 
10cd0 70 72 69 6f 72 20 78 43 72 65 61 74 65 20 63 61  prior xCreate ca
10ce0 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ll...        ///
10cf0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
10d00 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
10d10 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43        /// The xC
10d20 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 6d 75  onnect method mu
10d30 73 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  st return SQLITE
10d40 5f 4f 4b 20 69 66 20 69 74 20 69 73 20 73 75 63  _OK if it is suc
10d50 63 65 73 73 66 75 6c 20 69 6e 0d 0a 20 20 20 20  cessful in..    
10d60 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 69 6e 67      /// creating
10d70 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
10d80 20 74 61 62 6c 65 2c 20 6f 72 20 53 51 4c 49 54   table, or SQLIT
10d90 45 5f 45 52 52 4f 52 20 69 66 20 69 74 20 69 73  E_ERROR if it is
10da0 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f   not..        //
10db0 2f 20 73 75 63 63 65 73 73 66 75 6c 2e 20 49 66  / successful. If
10dc0 20 6e 6f 74 20 73 75 63 63 65 73 73 66 75 6c 2c   not successful,
10dd0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
10de0 62 20 73 74 72 75 63 74 75 72 65 20 6d 75 73 74  b structure must
10df0 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f   not..        //
10e00 2f 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e 20  / be allocated. 
10e10 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
10e20 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20   may optionally 
10e30 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 2a  be returned in *
10e40 70 7a 45 72 72 0d 0a 20 20 20 20 20 20 20 20 2f  pzErr..        /
10e50 2f 2f 20 69 66 20 75 6e 73 75 63 63 65 73 73 66  // if unsuccessf
10e60 75 6c 2e 20 53 70 61 63 65 20 74 6f 20 68 6f 6c  ul. Space to hol
10e70 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  d the error mess
10e80 61 67 65 20 73 74 72 69 6e 67 20 6d 75 73 74 20  age string must 
10e90 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
10ea0 61 6c 6c 6f 63 61 74 65 64 20 75 73 69 6e 67 20  allocated using 
10eb0 61 6e 20 53 51 4c 69 74 65 20 6d 65 6d 6f 72 79  an SQLite memory
10ec0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 75 6e 63   allocation func
10ed0 74 69 6f 6e 20 6c 69 6b 65 0d 0a 20 20 20 20 20  tion like..     
10ee0 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d     /// sqlite3_m
10ef0 61 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69 74  alloc() or sqlit
10f00 65 33 5f 6d 70 72 69 6e 74 66 28 29 20 61 73 20  e3_mprintf() as 
10f10 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
10f20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  will..        //
10f30 2f 20 61 74 74 65 6d 70 74 20 74 6f 20 66 72 65  / attempt to fre
10f40 65 20 74 68 65 20 73 70 61 63 65 20 75 73 69 6e  e the space usin
10f50 67 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 29  g sqlite3_free()
10f60 20 61 66 74 65 72 20 74 68 65 20 65 72 72 6f 72   after the error
10f70 20 68 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f   has..        //
10f80 2f 20 62 65 65 6e 20 72 65 70 6f 72 74 65 64 20  / been reported 
10f90 75 70 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63  up to the applic
10fa0 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
10fb0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
10fc0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
10fd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
10fe0 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64   xConnect method
10ff0 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
11000 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
11010 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
11020 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
11030 2c 20 74 68 6f 75 67 68 20 74 68 65 20 78 43 72  , though the xCr
11040 65 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63  eate and xConnec
11050 74 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 74 68  t pointers of th
11060 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
11070 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6f 62  qlite3_module ob
11080 6a 65 63 74 20 6d 61 79 20 70 6f 69 6e 74 20 74  ject may point t
11090 6f 20 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74  o the same funct
110a0 69 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 0d  ion the virtual.
110b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62  .        /// tab
110c0 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6e 65 65 64  le does not need
110d0 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 62   to initialize b
110e0 61 63 6b 69 6e 67 20 73 74 6f 72 65 2e 0d 0a 20  acking store... 
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 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
11120 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
11130 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20  ame="pDb">..    
11140 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
11150 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ve database conn
11160 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a  ection handle...
11170 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
11180 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
11190 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
111a0 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  Aux">..        /
111b0 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  // The original 
111c0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 76  native pointer v
111d0 61 6c 75 65 20 74 68 61 74 20 77 61 73 20 70 72  alue that was pr
111e0 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20  ovided to the.. 
111f0 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
11200 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
11210 28 29 2c 20 73 71 6c 69 74 65 33 5f 63 72 65 61  (), sqlite3_crea
11220 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 20 6f  te_module_v2() o
11230 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  r..        /// s
11240 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69  qlite3_create_di
11250 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28  sposable_module(
11260 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20  ) functions...  
11270 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
11280 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
11290 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
112a0 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  c">..        ///
112b0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   The number of a
112c0 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68  rguments from th
112d0 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
112e0 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
112f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
11300 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
11310 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
11320 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20  ="argv">..      
11330 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
11340 6f 66 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65  of string argume
11350 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52 45  nts from the CRE
11360 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
11370 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  E..        /// s
11380 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20  tatement...     
11390 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
113a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
113b0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
113c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
113d0 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
113e0 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
113f0 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
11400 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e 65 77  point to the new
11410 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ly..        /// 
11420 63 72 65 61 74 65 64 20 6e 61 74 69 76 65 20 73  created native s
11430 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
11440 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
11450 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
11460 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
11470 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
11480 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  Error">..       
11490 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72   /// Upon failur
114a0 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  e, this paramete
114b0 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
114c0 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  ed to point to t
114d0 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  he error..      
114e0 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c 20 77    /// message, w
114f0 69 74 68 20 74 68 65 20 75 6e 64 65 72 6c 79 69  ith the underlyi
11500 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76 69 6e 67  ng memory having
11510 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 66   been obtained f
11520 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20  rom the..       
11530 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61 6c   /// sqlite3_mal
11540 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0d  loc() function..
11550 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
11560 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
11570 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
11580 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
11590 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
115a0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
115b0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
115c0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
115d0 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e 6e 65  ErrorCode xConne
115e0 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
115f0 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20 20   IntPtr pDb,..  
11600 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
11610 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20   pAux,..        
11620 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
11630 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
11640 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20  r argv,..       
11650 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
11660 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
11670 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
11680 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  Error..         
11690 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
116a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
116b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
116c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
116d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
116e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
116f0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
11700 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
11710 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
11720 2f 2f 20 53 51 4c 69 74 65 20 75 73 65 73 20 74  // SQLite uses t
11730 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
11740 74 68 6f 64 20 6f 66 20 61 20 76 69 72 74 75 61  thod of a virtua
11750 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74  l table module t
11760 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  o..        /// d
11770 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73  etermine the bes
11780 74 20 77 61 79 20 74 6f 20 61 63 63 65 73 73 20  t way to access 
11790 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
117a0 65 2e 20 54 68 65 20 78 42 65 73 74 49 6e 64 65  e. The xBestInde
117b0 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  x..        /// m
117c0 65 74 68 6f 64 20 68 61 73 20 61 20 70 72 6f 74  ethod has a prot
117d0 6f 74 79 70 65 20 6c 69 6b 65 20 74 68 69 73 3a  otype like this:
117e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
117f0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
11800 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20  // <code>..     
11810 20 20 20 2f 2f 2f 20 69 6e 74 20 28 2a 78 42 65     /// int (*xBe
11820 73 74 49 6e 64 65 78 29 28 73 71 6c 69 74 65 33  stIndex)(sqlite3
11830 5f 76 74 61 62 20 2a 70 56 54 61 62 2c 20 73 71  _vtab *pVTab, sq
11840 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
11850 2a 29 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  *);..        ///
11860 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20   </code>..      
11870 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
11880 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51        /// The SQ
11890 4c 69 74 65 20 63 6f 72 65 20 63 6f 6d 6d 75 6e  Lite core commun
118a0 69 63 61 74 65 73 20 77 69 74 68 20 74 68 65 20  icates with the 
118b0 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f  xBestIndex metho
118c0 64 20 62 79 20 66 69 6c 6c 69 6e 67 0d 0a 20 20  d by filling..  
118d0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 20 63 65 72        /// in cer
118e0 74 61 69 6e 20 66 69 65 6c 64 73 20 6f 66 20 74  tain fields of t
118f0 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  he sqlite3_index
11900 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  _info structure 
11910 61 6e 64 20 70 61 73 73 69 6e 67 20 61 0d 0a 20  and passing a.. 
11920 20 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74         /// point
11930 65 72 20 74 6f 20 74 68 61 74 20 73 74 72 75 63  er to that struc
11940 74 75 72 65 20 69 6e 74 6f 20 78 42 65 73 74 49  ture into xBestI
11950 6e 64 65 78 20 61 73 20 74 68 65 20 73 65 63 6f  ndex as the seco
11960 6e 64 20 70 61 72 61 6d 65 74 65 72 2e 0d 0a 20  nd parameter... 
11970 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
11980 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
11990 20 66 69 6c 6c 73 20 6f 75 74 20 6f 74 68 65 72   fills out other
119a0 20 66 69 65 6c 64 73 20 6f 66 20 74 68 69 73 20   fields of this 
119b0 73 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20 20  structure..     
119c0 20 20 20 2f 2f 2f 20 77 68 69 63 68 20 66 6f 72     /// which for
119d0 6d 73 20 74 68 65 20 72 65 70 6c 79 2e 20 54 68  ms the reply. Th
119e0 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
119f0 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 6c  info structure l
11a00 6f 6f 6b 73 20 6c 69 6b 65 0d 0a 20 20 20 20 20  ooks like..     
11a10 20 20 20 2f 2f 2f 20 74 68 69 73 3a 0d 0a 20 20     /// this:..  
11a20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
11a30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
11a40 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
11a50 2f 2f 20 20 73 74 72 75 63 74 20 73 71 6c 69 74  //  struct sqlit
11a60 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 7b 0d  e3_index_info {.
11a70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11a80 2f 2a 20 49 6e 70 75 74 73 20 2a 2f 0d 0a 20 20  /* Inputs */..  
11a90 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e        ///    con
11aa0 73 74 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69  st int nConstrai
11ab0 6e 74 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  nt;   /* Number 
11ac0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  of entries in aC
11ad0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0d 0a 20 20  onstraint */..  
11ae0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e        ///    con
11af0 73 74 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  st struct sqlite
11b00 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69  3_index_constrai
11b10 6e 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nt {..        //
11b20 2f 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c  /       int iCol
11b30 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
11b40 20 43 6f 6c 75 6d 6e 20 6f 6e 20 6c 65 66 74 2d   Column on left-
11b50 68 61 6e 64 20 73 69 64 65 20 6f 66 0d 0a 20 20  hand side of..  
11b60 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61         * constra
11b90 69 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  int */..        
11ba0 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e  ///       unsign
11bb0 65 64 20 63 68 61 72 20 6f 70 3b 20 20 20 20 20  ed char op;     
11bc0 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70  /* Constraint op
11bd0 65 72 61 74 6f 72 20 2a 2f 0d 0a 20 20 20 20 20  erator */..     
11be0 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73     ///       uns
11bf0 69 67 6e 65 64 20 63 68 61 72 20 75 73 61 62 6c  igned char usabl
11c00 65 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68  e; /* True if th
11c10 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  is constraint is
11c20 20 75 73 61 62 6c 65 20 2a 2f 0d 0a 20 20 20 20   usable */..    
11c30 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e      ///       in
11c40 74 20 69 54 65 72 6d 4f 66 66 73 65 74 3b 20 20  t iTermOffset;  
11c50 20 20 20 20 2f 2a 20 55 73 65 64 20 69 6e 74 65      /* Used inte
11c60 72 6e 61 6c 6c 79 20 2d 20 78 42 65 73 74 49 6e  rnally - xBestIn
11c70 64 65 78 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20  dex should..    
11c80 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ca0 20 20 20 20 20 2a 20 69 67 6e 6f 72 65 20 2a 2f       * ignore */
11cb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
11cc0 20 7d 20 2a 63 6f 6e 73 74 20 61 43 6f 6e 73 74   } *const aConst
11cd0 72 61 69 6e 74 3b 20 20 20 20 2f 2a 20 54 61 62  raint;    /* Tab
11ce0 6c 65 20 6f 66 20 57 48 45 52 45 20 63 6c 61 75  le of WHERE clau
11cf0 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  se constraints *
11d00 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  /..        ///  
11d10 20 20 63 6f 6e 73 74 20 69 6e 74 20 6e 4f 72 64    const int nOrd
11d20 65 72 42 79 3b 20 20 20 20 20 20 2f 2a 20 4e 75  erBy;      /* Nu
11d30 6d 62 65 72 20 6f 66 20 74 65 72 6d 73 20 69 6e  mber of terms in
11d40 20 74 68 65 20 4f 52 44 45 52 20 42 59 0d 0a 20   the ORDER BY.. 
11d50 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
11d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d70 20 20 20 20 20 20 20 20 2a 20 63 6c 61 75 73 65          * clause
11d80 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
11d90 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74      const struct
11da0 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f   sqlite3_index_o
11db0 72 64 65 72 62 79 20 7b 0d 0a 20 20 20 20 20 20  rderby {..      
11dc0 20 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74 20    ///       int 
11dd0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
11de0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
11df0 65 72 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  er */..        /
11e00 2f 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65  //       unsigne
11e10 64 20 63 68 61 72 20 64 65 73 63 3b 20 20 20 2f  d char desc;   /
11e20 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 2e  * True for DESC.
11e30 20 20 46 61 6c 73 65 20 66 6f 72 20 41 53 43 2e    False for ASC.
11e40 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
11e50 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 4f 72      } *const aOr
11e60 64 65 72 42 79 3b 20 20 20 20 20 20 20 2f 2a 20  derBy;       /* 
11e70 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
11e80 75 73 65 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  use */..        
11e90 2f 2f 2f 20 20 20 20 2f 2a 20 4f 75 74 70 75 74  ///    /* Output
11ea0 73 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s */..        //
11eb0 2f 20 20 20 20 73 74 72 75 63 74 20 73 71 6c 69  /    struct sqli
11ec0 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
11ed0 61 69 6e 74 5f 75 73 61 67 65 20 7b 0d 0a 20 20  aint_usage {..  
11ee0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 69        ///      i
11ef0 6e 74 20 61 72 67 76 49 6e 64 65 78 3b 20 20 20  nt argvIndex;   
11f00 20 20 20 20 20 20 2f 2a 20 69 66 20 67 72 65 61        /* if grea
11f10 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 63  ter than zero, c
11f20 6f 6e 73 74 72 61 69 6e 74 20 69 73 0d 0a 20 20  onstraint is..  
11f30 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 20 20 20 20 20 20 2a 20 70 61 72 74 20 6f 66         * part of
11f60 20 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72   argv to xFilter
11f70 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
11f80 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63        unsigned c
11f90 68 61 72 20 6f 6d 69 74 3b 20 20 20 20 2f 2a 20  har omit;    /* 
11fa0 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20 74 65  Do not code a te
11fb0 73 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20  st for this..   
11fc0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fe0 20 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61 69        * constrai
11ff0 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  nt */..        /
12000 2f 2f 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61  //    } *const a
12010 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 3b  ConstraintUsage;
12020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
12030 20 69 6e 74 20 69 64 78 4e 75 6d 3b 20 20 20 20   int idxNum;    
12040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12050 62 65 72 20 75 73 65 64 20 74 6f 20 69 64 65 6e  ber used to iden
12060 74 69 66 79 20 74 68 65 20 69 6e 64 65 78 20 2a  tify the index *
12070 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  /..        ///  
12080 20 20 63 68 61 72 20 2a 69 64 78 53 74 72 3b 20    char *idxStr; 
12090 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
120a0 72 69 6e 67 2c 20 70 6f 73 73 69 62 6c 79 20 6f  ring, possibly o
120b0 62 74 61 69 6e 65 64 20 66 72 6f 6d 0d 0a 20 20  btained from..  
120c0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
120d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120e0 20 20 20 20 20 20 20 2a 20 73 71 6c 69 74 65 33         * sqlite3
120f0 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0d 0a 20 20  _malloc() */..  
12100 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 69 6e 74        ///    int
12110 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53 74   needToFreeIdxSt
12120 72 3b 20 20 20 20 2f 2a 20 46 72 65 65 20 69 64  r;    /* Free id
12130 78 53 74 72 20 75 73 69 6e 67 20 73 71 6c 69 74  xStr using sqlit
12140 65 33 5f 66 72 65 65 28 29 20 69 66 0d 0a 20 20  e3_free() if..  
12150 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
12160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12170 20 20 20 20 20 20 20 2a 20 74 72 75 65 20 2a 2f         * true */
12180 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
12190 20 69 6e 74 20 6f 72 64 65 72 42 79 43 6f 6e 73   int orderByCons
121a0 75 6d 65 64 3b 20 20 20 20 20 2f 2a 20 54 72 75  umed;     /* Tru
121b0 65 20 69 66 20 6f 75 74 70 75 74 20 69 73 20 61  e if output is a
121c0 6c 72 65 61 64 79 20 6f 72 64 65 72 65 64 20 2a  lready ordered *
121d0 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  /..        ///  
121e0 20 20 64 6f 75 62 6c 65 20 65 73 74 69 6d 61 74    double estimat
121f0 65 64 43 6f 73 74 3b 20 20 20 20 2f 2a 20 45 73  edCost;    /* Es
12200 74 69 6d 61 74 65 64 20 63 6f 73 74 20 6f 66 20  timated cost of 
12210 75 73 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  using this index
12220 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
12230 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f    };..        //
12240 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20  / </code>..     
12250 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
12260 20 20 20 20 20 20 20 2f 2f 2f 20 49 6e 20 61 64         /// In ad
12270 64 69 74 69 6f 6e 2c 20 74 68 65 72 65 20 61 72  dition, there ar
12280 65 20 73 6f 6d 65 20 64 65 66 69 6e 65 64 20 63  e some defined c
12290 6f 6e 73 74 61 6e 74 73 3a 0d 0a 20 20 20 20 20  onstants:..     
122a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
122b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64          /// <cod
122c0 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
122d0 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
122e0 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54  INDEX_CONSTRAINT
122f0 5f 45 51 20 20 20 20 32 0d 0a 20 20 20 20 20 20  _EQ    2..      
12300 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20 53    ///  #define S
12310 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53  QLITE_INDEX_CONS
12320 54 52 41 49 4e 54 5f 47 54 20 20 20 20 34 0d 0a  TRAINT_GT    4..
12330 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64 65          ///  #de
12340 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44 45  fine SQLITE_INDE
12350 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 4c 45 20  X_CONSTRAINT_LE 
12360 20 20 20 38 0d 0a 20 20 20 20 20 20 20 20 2f 2f     8..        //
12370 2f 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  /  #define SQLIT
12380 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49  E_INDEX_CONSTRAI
12390 4e 54 5f 4c 54 20 20 20 20 31 36 0d 0a 20 20 20  NT_LT    16..   
123a0 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e       ///  #defin
123b0 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43  e SQLITE_INDEX_C
123c0 4f 4e 53 54 52 41 49 4e 54 5f 47 45 20 20 20 20  ONSTRAINT_GE    
123d0 33 32 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  32..        /// 
123e0 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
123f0 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54  INDEX_CONSTRAINT
12400 5f 4d 41 54 43 48 20 36 34 0d 0a 20 20 20 20 20  _MATCH 64..     
12410 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a     /// </code>..
12420 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
12430 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
12440 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  The SQLite core 
12450 63 61 6c 6c 73 20 74 68 65 20 78 42 65 73 74 49  calls the xBestI
12460 6e 64 65 78 20 6d 65 74 68 6f 64 20 77 68 65 6e  ndex method when
12470 20 69 74 20 69 73 20 63 6f 6d 70 69 6c 69 6e 67   it is compiling
12480 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   a..        /// 
12490 71 75 65 72 79 20 74 68 61 74 20 69 6e 76 6f 6c  query that invol
124a0 76 65 73 20 61 20 76 69 72 74 75 61 6c 20 74 61  ves a virtual ta
124b0 62 6c 65 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f  ble. In other wo
124c0 72 64 73 2c 20 53 51 4c 69 74 65 20 63 61 6c 6c  rds, SQLite call
124d0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  s..        /// t
124e0 68 69 73 20 6d 65 74 68 6f 64 20 77 68 65 6e 20  his method when 
124f0 69 74 20 69 73 20 72 75 6e 6e 69 6e 67 20 73 71  it is running sq
12500 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
12510 6f 72 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  or the equivalen
12520 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
12530 42 79 20 63 61 6c 6c 69 6e 67 20 74 68 69 73 20  By calling this 
12540 6d 65 74 68 6f 64 2c 20 74 68 65 20 53 51 4c 69  method, the SQLi
12550 74 65 20 63 6f 72 65 20 69 73 20 73 61 79 69 6e  te core is sayin
12560 67 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c  g to the virtual
12570 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61  ..        /// ta
12580 62 6c 65 20 74 68 61 74 20 69 74 20 6e 65 65 64  ble that it need
12590 73 20 74 6f 20 61 63 63 65 73 73 20 73 6f 6d 65  s to access some
125a0 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 72   subset of the r
125b0 6f 77 73 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ows in the..    
125c0 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
125d0 74 61 62 6c 65 20 61 6e 64 20 69 74 20 77 61 6e  table and it wan
125e0 74 73 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 6d  ts to know the m
125f0 6f 73 74 20 65 66 66 69 63 69 65 6e 74 20 77 61  ost efficient wa
12600 79 20 74 6f 20 64 6f 0d 0a 20 20 20 20 20 20 20  y to do..       
12610 20 2f 2f 2f 20 74 68 61 74 20 61 63 63 65 73 73   /// that access
12620 2e 20 54 68 65 20 78 42 65 73 74 49 6e 64 65 78  . The xBestIndex
12630 20 6d 65 74 68 6f 64 20 72 65 70 6c 69 65 73 20   method replies 
12640 77 69 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  with information
12650 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f   that..        /
12660 2f 2f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  // the SQLite co
12670 72 65 20 63 61 6e 20 74 68 65 6e 20 75 73 65 20  re can then use 
12680 74 6f 20 63 6f 6e 64 75 63 74 20 61 6e 20 65 66  to conduct an ef
12690 66 69 63 69 65 6e 74 20 73 65 61 72 63 68 20 6f  ficient search o
126a0 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
126b0 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
126c0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
126d0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
126e0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
126f0 20 20 20 20 2f 2f 2f 20 57 68 69 6c 65 20 63 6f      /// While co
12700 6d 70 69 6c 69 6e 67 20 61 20 73 69 6e 67 6c 65  mpiling a single
12710 20 53 51 4c 20 71 75 65 72 79 2c 20 74 68 65 20   SQL query, the 
12720 53 51 4c 69 74 65 20 63 6f 72 65 20 6d 69 67 68  SQLite core migh
12730 74 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  t call..        
12740 2f 2f 2f 20 78 42 65 73 74 49 6e 64 65 78 20 6d  /// xBestIndex m
12750 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 77 69  ultiple times wi
12760 74 68 20 64 69 66 66 65 72 65 6e 74 20 73 65 74  th different set
12770 74 69 6e 67 73 20 69 6e 0d 0a 20 20 20 20 20 20  tings in..      
12780 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e    /// sqlite3_in
12790 64 65 78 5f 69 6e 66 6f 2e 20 54 68 65 20 53 51  dex_info. The SQ
127a0 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 74  Lite core will t
127b0 68 65 6e 20 73 65 6c 65 63 74 20 74 68 65 0d 0a  hen select the..
127c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 62          /// comb
127d0 69 6e 61 74 69 6f 6e 20 74 68 61 74 20 61 70 70  ination that app
127e0 65 61 72 73 20 74 6f 20 67 69 76 65 20 74 68 65  ears to give the
127f0 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63   best performanc
12800 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
12810 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
12820 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
12830 20 20 20 20 20 2f 2f 2f 20 42 65 66 6f 72 65 20       /// Before 
12840 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65 74  calling this met
12850 68 6f 64 2c 20 74 68 65 20 53 51 4c 69 74 65 20  hod, the SQLite 
12860 63 6f 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 73  core initializes
12870 20 61 6e 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20   an instance..  
12880 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65        /// of the
12890 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
128a0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 77 69  nfo structure wi
128b0 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  th information a
128c0 62 6f 75 74 20 74 68 65 0d 0a 20 20 20 20 20 20  bout the..      
128d0 20 20 2f 2f 2f 20 71 75 65 72 79 20 74 68 61 74    /// query that
128e0 20 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79   it is currently
128f0 20 74 72 79 69 6e 67 20 74 6f 20 70 72 6f 63 65   trying to proce
12900 73 73 2e 20 54 68 69 73 20 69 6e 66 6f 72 6d 61  ss. This informa
12910 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tion..        //
12920 2f 20 64 65 72 69 76 65 73 20 6d 61 69 6e 6c 79  / derives mainly
12930 20 66 72 6f 6d 20 74 68 65 20 57 48 45 52 45 20   from the WHERE 
12940 63 6c 61 75 73 65 20 61 6e 64 20 4f 52 44 45 52  clause and ORDER
12950 20 42 59 20 6f 72 20 47 52 4f 55 50 20 42 59 0d   BY or GROUP BY.
12960 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6c 61  .        /// cla
12970 75 73 65 73 20 6f 66 20 74 68 65 20 71 75 65 72  uses of the quer
12980 79 2c 20 62 75 74 20 61 6c 73 6f 20 66 72 6f 6d  y, but also from
12990 20 61 6e 79 20 4f 4e 20 6f 72 20 55 53 49 4e 47   any ON or USING
129a0 20 63 6c 61 75 73 65 73 20 69 66 20 74 68 65 0d   clauses if the.
129b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 71 75 65  .        /// que
129c0 72 79 20 69 73 20 61 20 6a 6f 69 6e 2e 20 54 68  ry is a join. Th
129d0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
129e0 61 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  at the SQLite co
129f0 72 65 20 70 72 6f 76 69 64 65 73 20 74 6f 0d 0a  re provides to..
12a00 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
12a10 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f  xBestIndex metho
12a20 64 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65  d is held in the
12a30 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
12a40 75 63 74 75 72 65 20 74 68 61 74 20 69 73 0d 0a  ucture that is..
12a50 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 61 72 6b          /// mark
12a60 65 64 20 61 73 20 22 49 6e 70 75 74 73 22 2e 20  ed as "Inputs". 
12a70 54 68 65 20 22 4f 75 74 70 75 74 73 22 20 73 65  The "Outputs" se
12a80 63 74 69 6f 6e 20 69 73 20 69 6e 69 74 69 61 6c  ction is initial
12a90 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 0d 0a 20  ized to zero... 
12aa0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
12ab0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
12ac0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
12ad0 2f 2f 2f 20 54 68 65 20 69 6e 66 6f 72 6d 61 74  /// The informat
12ae0 69 6f 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74  ion in the sqlit
12af0 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74  e3_index_info st
12b00 72 75 63 74 75 72 65 20 69 73 20 65 70 68 65 6d  ructure is ephem
12b10 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  eral..        //
12b20 2f 20 61 6e 64 20 6d 61 79 20 62 65 20 6f 76 65  / and may be ove
12b30 72 77 72 69 74 74 65 6e 20 6f 72 20 64 65 61 6c  rwritten or deal
12b40 6c 6f 63 61 74 65 64 20 61 73 20 73 6f 6f 6e 20  located as soon 
12b50 61 73 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  as the xBestInde
12b60 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  x..        /// m
12b70 65 74 68 6f 64 20 72 65 74 75 72 6e 73 2e 20 49  ethod returns. I
12b80 66 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  f the xBestIndex
12b90 20 6d 65 74 68 6f 64 20 6e 65 65 64 73 20 74 6f   method needs to
12ba0 20 72 65 6d 65 6d 62 65 72 20 61 6e 79 20 70 61   remember any pa
12bb0 72 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rt..        /// 
12bc0 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69  of the sqlite3_i
12bd0 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74  ndex_info struct
12be0 75 72 65 2c 20 69 74 20 73 68 6f 75 6c 64 20 6d  ure, it should m
12bf0 61 6b 65 20 61 20 63 6f 70 79 2e 20 43 61 72 65  ake a copy. Care
12c00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 75  ..        /// mu
12c10 73 74 20 62 65 20 74 61 6b 65 20 74 6f 20 73 74  st be take to st
12c20 6f 72 65 20 74 68 65 20 63 6f 70 79 20 69 6e 20  ore the copy in 
12c30 61 20 70 6c 61 63 65 20 77 68 65 72 65 20 69 74  a place where it
12c40 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..      
12c50 20 20 2f 2f 2f 20 64 65 61 6c 6c 6f 63 61 74 65    /// deallocate
12c60 64 2c 20 73 75 63 68 20 61 73 20 69 6e 20 74 68  d, such as in th
12c70 65 20 69 64 78 53 74 72 20 66 69 65 6c 64 20 77  e idxStr field w
12c80 69 74 68 20 6e 65 65 64 54 6f 46 72 65 65 49 64  ith needToFreeId
12c90 78 53 74 72 20 73 65 74 0d 0a 20 20 20 20 20 20  xStr set..      
12ca0 20 20 2f 2f 2f 20 74 6f 20 31 2e 0d 0a 20 20 20    /// to 1...   
12cb0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
12cc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
12cd0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
12ce0 2f 20 4e 6f 74 65 20 74 68 61 74 20 78 42 65 73  / Note that xBes
12cf0 74 49 6e 64 65 78 20 77 69 6c 6c 20 61 6c 77 61  tIndex will alwa
12d00 79 73 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66  ys be called bef
12d10 6f 72 65 20 78 46 69 6c 74 65 72 2c 20 73 69 6e  ore xFilter, sin
12d20 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
12d30 74 68 65 20 69 64 78 4e 75 6d 20 61 6e 64 20 69  the idxNum and i
12d40 64 78 53 74 72 20 6f 75 74 70 75 74 73 20 66 72  dxStr outputs fr
12d50 6f 6d 20 78 42 65 73 74 49 6e 64 65 78 20 61 72  om xBestIndex ar
12d60 65 20 72 65 71 75 69 72 65 64 20 69 6e 70 75 74  e required input
12d70 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  s..        /// t
12d80 6f 20 78 46 69 6c 74 65 72 2e 20 48 6f 77 65 76  o xFilter. Howev
12d90 65 72 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  er, there is no 
12da0 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 78  guarantee that x
12db0 46 69 6c 74 65 72 20 77 69 6c 6c 20 62 65 0d 0a  Filter will be..
12dc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c          /// call
12dd0 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ed following a s
12de0 75 63 63 65 73 73 66 75 6c 20 78 42 65 73 74 49  uccessful xBestI
12df0 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
12e00 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
12e10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
12e20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
12e30 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f  xBestIndex metho
12e40 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  d is required fo
12e50 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20  r every virtual 
12e60 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
12e70 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
12e80 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
12e90 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
12ea0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
12eb0 20 20 20 20 20 2f 2f 2f 20 32 2e 33 2e 31 20 49       /// 2.3.1 I
12ec0 6e 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  nputs..        /
12ed0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
12ee0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
12ef0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
12f00 6d 61 69 6e 20 74 68 69 6e 67 20 74 68 61 74 20  main thing that 
12f10 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
12f20 69 73 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 6d  is trying to com
12f30 6d 75 6e 69 63 61 74 65 20 74 6f 20 74 68 65 0d  municate to the.
12f40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72  .        /// vir
12f50 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 74 68  tual table is th
12f60 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  e constraints th
12f70 61 74 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  at are available
12f80 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 0d 0a 20   to limit the.. 
12f90 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65         /// numbe
12fa0 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20 6e  r of rows that n
12fb0 65 65 64 20 74 6f 20 62 65 20 73 65 61 72 63 68  eed to be search
12fc0 65 64 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61  ed. The aConstra
12fd0 69 6e 74 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20  int[] array..   
12fe0 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e       /// contain
12ff0 73 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  s one entry for 
13000 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 2e  each constraint.
13010 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 65   There will be e
13020 78 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20  xactly..        
13030 2f 2f 2f 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20  /// nConstraint 
13040 65 6e 74 72 69 65 73 20 69 6e 20 74 68 61 74 20  entries in that 
13050 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 20 20  array...        
13060 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
13070 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
13080 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 61 63  .        /// Eac
13090 68 20 63 6f 6e 73 74 72 61 69 6e 74 20 77 69 6c  h constraint wil
130a0 6c 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  l correspond to 
130b0 61 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57 48  a term in the WH
130c0 45 52 45 20 63 6c 61 75 73 65 20 6f 72 20 69 6e  ERE clause or in
130d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 20  ..        /// a 
130e0 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75  USING or ON clau
130f0 73 65 20 74 68 61 74 20 69 73 20 6f 66 20 74 68  se that is of th
13100 65 20 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20  e form..        
13110 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
13120 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d       /// <code>.
13130 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
13140 20 63 6f 6c 75 6d 6e 20 4f 50 20 45 58 50 52 0d   column OP EXPR.
13150 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63  .        /// </c
13160 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
13170 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
13180 20 20 2f 2f 2f 20 57 68 65 72 65 20 22 63 6f 6c    /// Where "col
13190 75 6d 6e 22 20 69 73 20 61 20 63 6f 6c 75 6d 6e  umn" is a column
131a0 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   in the virtual 
131b0 74 61 62 6c 65 2c 20 4f 50 20 69 73 20 61 6e 20  table, OP is an 
131c0 6f 70 65 72 61 74 6f 72 0d 0a 20 20 20 20 20 20  operator..      
131d0 20 20 2f 2f 2f 20 6c 69 6b 65 20 22 3d 22 20 6f    /// like "=" o
131e0 72 20 22 26 6c 74 3b 22 2c 20 61 6e 64 20 45 58  r "&lt;", and EX
131f0 50 52 20 69 73 20 61 6e 20 61 72 62 69 74 72 61  PR is an arbitra
13200 72 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 53  ry expression. S
13210 6f 2c 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  o, for..        
13220 2f 2f 2f 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  /// example, if 
13230 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
13240 20 63 6f 6e 74 61 69 6e 65 64 20 61 20 74 65 72   contained a ter
13250 6d 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20  m like this:..  
13260 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
13270 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
13280 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
13290 2f 2f 20 20 20 20 20 20 20 20 20 20 61 20 3d 20  //          a = 
132a0 35 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  5..        /// <
132b0 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
132c0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
132d0 20 20 20 20 2f 2f 2f 20 54 68 65 6e 20 6f 6e 65      /// Then one
132e0 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
132f0 6e 74 73 20 77 6f 75 6c 64 20 62 65 20 6f 6e 20  nts would be on 
13300 74 68 65 20 22 61 22 20 63 6f 6c 75 6d 6e 20 77  the "a" column w
13310 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ith..        ///
13320 20 6f 70 65 72 61 74 6f 72 20 22 3d 22 20 61 6e   operator "=" an
13330 64 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  d an expression 
13340 6f 66 20 22 35 22 2e 20 43 6f 6e 73 74 72 61 69  of "5". Constrai
13350 6e 74 73 20 6e 65 65 64 20 6e 6f 74 20 68 61 76  nts need not hav
13360 65 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e a..        ///
13370 20 6c 69 74 65 72 61 6c 20 72 65 70 72 65 73 65   literal represe
13380 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 57  ntation of the W
13390 48 45 52 45 20 63 6c 61 75 73 65 2e 20 54 68 65  HERE clause. The
133a0 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
133b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 69  ..        /// mi
133c0 67 68 74 20 6d 61 6b 65 20 74 72 61 6e 73 66 6f  ght make transfo
133d0 72 6d 61 74 69 6f 6e 73 20 74 6f 20 74 68 65 20  rmations to the 
133e0 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 6e 20  WHERE clause in 
133f0 6f 72 64 65 72 20 74 6f 20 65 78 74 72 61 63 74  order to extract
13400 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73  ..        /// as
13410 20 6d 61 6e 79 20 63 6f 6e 73 74 72 61 69 6e 74   many constraint
13420 73 20 61 73 20 69 74 20 63 61 6e 2e 20 53 6f 2c  s as it can. So,
13430 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66   for example, if
13440 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
13450 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
13460 6f 6e 74 61 69 6e 65 64 20 73 6f 6d 65 74 68 69  ontained somethi
13470 6e 67 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20  ng like this:.. 
13480 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
13490 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
134a0 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  <code>..        
134b0 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20 42  ///          x B
134c0 45 54 57 45 45 4e 20 31 30 20 41 4e 44 20 31 30  ETWEEN 10 AND 10
134d0 30 20 41 4e 44 20 39 39 39 26 67 74 3b 79 0d 0a  0 AND 999&gt;y..
134e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f          /// </co
134f0 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
13500 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
13510 20 2f 2f 2f 20 54 68 65 20 71 75 65 72 79 20 6f   /// The query o
13520 70 74 69 6d 69 7a 65 72 20 6d 69 67 68 74 20 74  ptimizer might t
13530 72 61 6e 73 6c 61 74 65 20 74 68 69 73 20 69 6e  ranslate this in
13540 74 6f 20 74 68 72 65 65 20 73 65 70 61 72 61 74  to three separat
13550 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
13560 6f 6e 73 74 72 61 69 6e 74 73 3a 0d 0a 20 20 20  onstraints:..   
13570 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
13580 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
13590 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
135a0 2f 20 20 20 20 20 20 20 20 20 20 78 20 26 67 74  /          x &gt
135b0 3b 3d 20 31 30 0d 0a 20 20 20 20 20 20 20 20 2f  ;= 10..        /
135c0 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20 26 6c  //          x &l
135d0 74 3b 3d 20 31 30 30 0d 0a 20 20 20 20 20 20 20  t;= 100..       
135e0 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 79 20   ///          y 
135f0 26 6c 74 3b 20 39 39 39 0d 0a 20 20 20 20 20 20  &lt; 999..      
13600 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20    /// </code>.. 
13610 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
13620 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46  >..        /// F
13630 6f 72 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69  or each constrai
13640 6e 74 2c 20 74 68 65 20 61 43 6f 6e 73 74 72 61  nt, the aConstra
13650 69 6e 74 5b 5d 2e 69 43 6f 6c 75 6d 6e 20 66 69  int[].iColumn fi
13660 65 6c 64 20 69 6e 64 69 63 61 74 65 73 0d 0a 20  eld indicates.. 
13670 20 20 20 20 20 20 20 2f 2f 2f 20 77 68 69 63 68         /// which
13680 20 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20   column appears 
13690 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  on the left-hand
136a0 20 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6e   side of the con
136b0 73 74 72 61 69 6e 74 2e 20 54 68 65 0d 0a 20 20  straint. The..  
136c0 20 20 20 20 20 20 2f 2f 2f 20 66 69 72 73 74 20        /// first 
136d0 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 76 69  column of the vi
136e0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 63  rtual table is c
136f0 6f 6c 75 6d 6e 20 30 2e 20 54 68 65 20 72 6f 77  olumn 0. The row
13700 69 64 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  id of the..     
13710 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
13720 61 62 6c 65 20 69 73 20 63 6f 6c 75 6d 6e 20 2d  able is column -
13730 31 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69  1. The aConstrai
13740 6e 74 5b 5d 2e 6f 70 20 66 69 65 6c 64 20 69 6e  nt[].op field in
13750 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20  dicates..       
13760 20 2f 2f 2f 20 77 68 69 63 68 20 6f 70 65 72 61   /// which opera
13770 74 6f 72 20 69 73 20 75 73 65 64 2e 20 54 68 65  tor is used. The
13780 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f   SQLITE_INDEX_CO
13790 4e 53 54 52 41 49 4e 54 5f 2a 20 63 6f 6e 73 74  NSTRAINT_* const
137a0 61 6e 74 73 20 6d 61 70 0d 0a 20 20 20 20 20 20  ants map..      
137b0 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 63 6f    /// integer co
137c0 6e 73 74 61 6e 74 73 20 69 6e 74 6f 20 6f 70 65  nstants into ope
137d0 72 61 74 6f 72 20 76 61 6c 75 65 73 2e 20 43 6f  rator values. Co
137e0 6c 75 6d 6e 73 20 6f 63 63 75 72 20 69 6e 20 74  lumns occur in t
137f0 68 65 20 6f 72 64 65 72 0d 0a 20 20 20 20 20 20  he order..      
13800 20 20 2f 2f 2f 20 74 68 65 79 20 77 65 72 65 20    /// they were 
13810 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 63  defined by the c
13820 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 64  all to sqlite3_d
13830 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 69 6e  eclare_vtab() in
13840 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
13850 2f 20 78 43 72 65 61 74 65 20 6f 72 20 78 43 6f  / xCreate or xCo
13860 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2e 20 48 69  nnect method. Hi
13870 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 61 72 65  dden columns are
13880 20 63 6f 75 6e 74 65 64 20 77 68 65 6e 0d 0a 20   counted when.. 
13890 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 74 65 72         /// deter
138a0 6d 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  mining the colum
138b0 6e 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20  n index...      
138c0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
138d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
138e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
138f0 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d  he aConstraint[]
13900 20 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 73 20   array contains 
13910 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
13920 74 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e 74  t all constraint
13930 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  s..        /// t
13940 68 61 74 20 61 70 70 6c 79 20 74 6f 20 74 68 65  hat apply to the
13950 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
13960 42 75 74 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  But some of the 
13970 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 69 67 68  constraints migh
13980 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  t..        /// n
13990 6f 74 20 62 65 20 75 73 61 62 6c 65 20 62 65 63  ot be usable bec
139a0 61 75 73 65 20 6f 66 20 74 68 65 20 77 61 79 20  ause of the way 
139b0 74 61 62 6c 65 73 20 61 72 65 20 6f 72 64 65 72  tables are order
139c0 65 64 20 69 6e 20 61 20 6a 6f 69 6e 2e 20 54 68  ed in a join. Th
139d0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
139e0 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
139f0 20 6d 75 73 74 20 74 68 65 72 65 66 6f 72 65 20   must therefore 
13a00 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 20 63 6f  only consider co
13a10 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74 0d 0a  nstraints that..
13a20 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 76 65          /// have
13a30 20 61 6e 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b   an aConstraint[
13a40 5d 2e 75 73 61 62 6c 65 20 66 6c 61 67 20 77 68  ].usable flag wh
13a50 69 63 68 20 69 73 20 74 72 75 65 2e 0d 0a 20 20  ich is true...  
13a60 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
13a70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
13a80 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
13a90 2f 2f 20 49 6e 20 61 64 64 69 74 69 6f 6e 20 74  // In addition t
13aa0 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  o WHERE clause c
13ab0 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74 68 65 20  onstraints, the 
13ac0 53 51 4c 69 74 65 20 63 6f 72 65 20 61 6c 73 6f  SQLite core also
13ad0 20 74 65 6c 6c 73 0d 0a 20 20 20 20 20 20 20 20   tells..        
13ae0 2f 2f 2f 20 74 68 65 20 78 42 65 73 74 49 6e 64  /// the xBestInd
13af0 65 78 20 6d 65 74 68 6f 64 20 61 62 6f 75 74 20  ex method about 
13b00 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
13b10 75 73 65 2e 20 28 49 6e 20 61 6e 20 61 67 67 72  use. (In an aggr
13b20 65 67 61 74 65 0d 0a 20 20 20 20 20 20 20 20 2f  egate..        /
13b30 2f 2f 20 71 75 65 72 79 2c 20 74 68 65 20 53 51  // query, the SQ
13b40 4c 69 74 65 20 63 6f 72 65 20 6d 69 67 68 74 20  Lite core might 
13b50 70 75 74 20 69 6e 20 47 52 4f 55 50 20 42 59 20  put in GROUP BY 
13b60 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69  clause informati
13b70 6f 6e 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f  on in..        /
13b80 2f 2f 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20  // place of the 
13b90 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
13ba0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 62 75 74  information, but
13bb0 20 74 68 69 73 20 66 61 63 74 20 73 68 6f 75 6c   this fact shoul
13bc0 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f  d not..        /
13bd0 2f 2f 20 6d 61 6b 65 20 61 6e 79 20 64 69 66 66  // make any diff
13be0 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 78 42  erence to the xB
13bf0 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 2e  estIndex method.
13c00 29 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f  ) If all terms o
13c10 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
13c20 2f 2f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  // ORDER BY clau
13c30 73 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69  se are columns i
13c40 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
13c50 62 6c 65 2c 20 74 68 65 6e 20 6e 4f 72 64 65 72  ble, then nOrder
13c60 42 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  By..        /// 
13c70 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d 62  will be the numb
13c80 65 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20 74  er of terms in t
13c90 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
13ca0 73 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 20  se and the..    
13cb0 20 20 20 20 2f 2f 2f 20 61 4f 72 64 65 72 42 79      /// aOrderBy
13cc0 5b 5d 20 61 72 72 61 79 20 77 69 6c 6c 20 69 64  [] array will id
13cd0 65 6e 74 69 66 79 20 74 68 65 20 63 6f 6c 75 6d  entify the colum
13ce0 6e 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  n for each term 
13cf0 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..        
13d00 2f 2f 2f 20 6f 72 64 65 72 20 62 79 20 63 6c 61  /// order by cla
13d10 75 73 65 20 61 6e 64 20 77 68 65 74 68 65 72 20  use and whether 
13d20 6f 72 20 6e 6f 74 20 74 68 61 74 20 63 6f 6c 75  or not that colu
13d30 6d 6e 20 69 73 20 41 53 43 20 6f 72 20 44 45 53  mn is ASC or DES
13d40 43 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  C...        /// 
13d50 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
13d60 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
13d70 20 20 20 20 20 2f 2f 2f 20 32 2e 33 2e 32 20 4f       /// 2.3.2 O
13d80 75 74 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20  utputs..        
13d90 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
13da0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
13db0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 69 76  .        /// Giv
13dc0 65 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20 69 6e  en all of the in
13dd0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 2c  formation above,
13de0 20 74 68 65 20 6a 6f 62 20 6f 66 20 74 68 65 20   the job of the 
13df0 78 42 65 73 74 49 6e 64 65 78 0d 0a 20 20 20 20  xBestIndex..    
13e00 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 69      /// method i
13e10 74 20 74 6f 20 66 69 67 75 72 65 20 6f 75 74 20  t to figure out 
13e20 74 68 65 20 62 65 73 74 20 77 61 79 20 74 6f 20  the best way to 
13e30 73 65 61 72 63 68 20 74 68 65 20 76 69 72 74 75  search the virtu
13e40 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
13e50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
13e60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
13e70 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
13e80 54 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d  The xBestIndex m
13e90 65 74 68 6f 64 20 66 69 6c 6c 73 20 74 68 65 20  ethod fills the 
13ea0 69 64 78 4e 75 6d 20 61 6e 64 20 69 64 78 53 74  idxNum and idxSt
13eb0 72 20 66 69 65 6c 64 73 20 77 69 74 68 0d 0a 20  r fields with.. 
13ec0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 66 6f 72         /// infor
13ed0 6d 61 74 69 6f 6e 20 74 68 61 74 20 63 6f 6d 6d  mation that comm
13ee0 75 6e 69 63 61 74 65 73 20 61 6e 20 69 6e 64 65  unicates an inde
13ef0 78 69 6e 67 20 73 74 72 61 74 65 67 79 20 74 6f  xing strategy to
13f00 20 74 68 65 20 78 46 69 6c 74 65 72 0d 0a 20 20   the xFilter..  
13f10 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
13f20 2e 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  . The informatio
13f30 6e 20 69 6e 20 69 64 78 4e 75 6d 20 61 6e 64 20  n in idxNum and 
13f40 69 64 78 53 74 72 20 69 73 20 61 72 62 69 74 72  idxStr is arbitr
13f50 61 72 79 20 61 73 20 66 61 72 20 61 73 0d 0a 20  ary as far as.. 
13f60 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 53         /// the S
13f70 51 4c 69 74 65 20 63 6f 72 65 20 69 73 20 63 6f  QLite core is co
13f80 6e 63 65 72 6e 65 64 2e 20 54 68 65 20 53 51 4c  ncerned. The SQL
13f90 69 74 65 20 63 6f 72 65 20 6a 75 73 74 20 63 6f  ite core just co
13fa0 70 69 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20  pies the..      
13fb0 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61 74 69 6f    /// informatio
13fc0 6e 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  n through to the
13fd0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
13fe0 20 41 6e 79 20 64 65 73 69 72 65 64 20 6d 65 61   Any desired mea
13ff0 6e 69 6e 67 20 63 61 6e 0d 0a 20 20 20 20 20 20  ning can..      
14000 20 20 2f 2f 2f 20 62 65 20 61 73 73 69 67 6e 65    /// be assigne
14010 64 20 74 6f 20 69 64 78 4e 75 6d 20 61 6e 64 20  d to idxNum and 
14020 69 64 78 53 74 72 20 61 73 20 6c 6f 6e 67 20 61  idxStr as long a
14030 73 20 78 42 65 73 74 49 6e 64 65 78 20 61 6e 64  s xBestIndex and
14040 20 78 46 69 6c 74 65 72 0d 0a 20 20 20 20 20 20   xFilter..      
14050 20 20 2f 2f 2f 20 61 67 72 65 65 20 6f 6e 20 77    /// agree on w
14060 68 61 74 20 74 68 61 74 20 6d 65 61 6e 69 6e 67  hat that meaning
14070 20 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f   is...        //
14080 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
14090 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
140a0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69         /// The i
140b0 64 78 53 74 72 20 76 61 6c 75 65 20 6d 61 79 20  dxStr value may 
140c0 62 65 20 61 20 73 74 72 69 6e 67 20 6f 62 74 61  be a string obta
140d0 69 6e 65 64 20 66 72 6f 6d 20 61 6e 20 53 51 4c  ined from an SQL
140e0 69 74 65 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20  ite memory..    
140f0 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 69      /// allocati
14100 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 73 75 63 68  on function such
14110 20 61 73 20 73 71 6c 69 74 65 33 5f 6d 70 72 69   as sqlite3_mpri
14120 6e 74 66 28 29 2e 20 49 66 20 74 68 69 73 20 69  ntf(). If this i
14130 73 20 74 68 65 20 63 61 73 65 2c 0d 0a 20 20 20  s the case,..   
14140 20 20 20 20 20 2f 2f 2f 20 74 68 65 6e 20 74 68       /// then th
14150 65 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53  e needToFreeIdxS
14160 74 72 20 66 6c 61 67 20 6d 75 73 74 20 62 65 20  tr flag must be 
14170 73 65 74 20 74 6f 20 74 72 75 65 20 73 6f 20 74  set to true so t
14180 68 61 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20  hat the..       
14190 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72 65   /// SQLite core
141a0 20 77 69 6c 6c 20 6b 6e 6f 77 20 74 6f 20 63 61   will know to ca
141b0 6c 6c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  ll sqlite3_free(
141c0 29 20 6f 6e 20 74 68 61 74 20 73 74 72 69 6e 67  ) on that string
141d0 20 77 68 65 6e 20 69 74 0d 0a 20 20 20 20 20 20   when it..      
141e0 20 20 2f 2f 2f 20 68 61 73 20 66 69 6e 69 73 68    /// has finish
141f0 65 64 20 77 69 74 68 20 69 74 2c 20 61 6e 64 20  ed with it, and 
14200 74 68 75 73 20 61 76 6f 69 64 20 61 20 6d 65 6d  thus avoid a mem
14210 6f 72 79 20 6c 65 61 6b 2e 0d 0a 20 20 20 20 20  ory leak...     
14220 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
14230 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
14240 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14250 49 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  If the virtual t
14260 61 62 6c 65 20 77 69 6c 6c 20 6f 75 74 70 75 74  able will output
14270 20 72 6f 77 73 20 69 6e 20 74 68 65 20 6f 72 64   rows in the ord
14280 65 72 20 73 70 65 63 69 66 69 65 64 20 62 79 20  er specified by 
14290 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
142a0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
142b0 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72  , then the order
142c0 42 79 43 6f 6e 73 75 6d 65 64 20 66 6c 61 67 20  ByConsumed flag 
142d0 6d 61 79 20 62 65 20 73 65 74 20 74 6f 20 74 72  may be set to tr
142e0 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
142f0 20 49 66 20 74 68 65 20 6f 75 74 70 75 74 20 69   If the output i
14300 73 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61  s not automatica
14310 6c 6c 79 20 69 6e 20 74 68 65 20 63 6f 72 72 65  lly in the corre
14320 63 74 20 6f 72 64 65 72 20 74 68 65 6e 0d 0a 20  ct order then.. 
14330 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72 64 65 72         /// order
14340 42 79 43 6f 6e 73 75 6d 65 64 20 6d 75 73 74 20  ByConsumed must 
14350 62 65 20 6c 65 66 74 20 69 6e 20 69 74 73 20 64  be left in its d
14360 65 66 61 75 6c 74 20 66 61 6c 73 65 20 73 65 74  efault false set
14370 74 69 6e 67 2e 20 54 68 69 73 0d 0a 20 20 20 20  ting. This..    
14380 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 69 6e 64      /// will ind
14390 69 63 61 74 65 20 74 6f 20 74 68 65 20 53 51 4c  icate to the SQL
143a0 69 74 65 20 63 6f 72 65 20 74 68 61 74 20 69 74  ite core that it
143b0 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 64 6f   will need to do
143c0 20 61 20 73 65 70 61 72 61 74 65 0d 0a 20 20 20   a separate..   
143d0 20 20 20 20 20 2f 2f 2f 20 73 6f 72 74 69 6e 67       /// sorting
143e0 20 70 61 73 73 20 6f 76 65 72 20 74 68 65 20 64   pass over the d
143f0 61 74 61 20 61 66 74 65 72 20 69 74 20 63 6f 6d  ata after it com
14400 65 73 20 6f 75 74 20 6f 66 20 74 68 65 20 76 69  es out of the vi
14410 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
14420 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
14430 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
14440 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
14450 2f 2f 20 54 68 65 20 65 73 74 69 6d 61 74 65 64  // The estimated
14460 43 6f 73 74 20 66 69 65 6c 64 20 73 68 6f 75 6c  Cost field shoul
14470 64 20 62 65 20 73 65 74 20 74 6f 20 74 68 65 20  d be set to the 
14480 65 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  estimated number
14490 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   of..        ///
144a0 20 64 69 73 6b 20 61 63 63 65 73 73 20 6f 70 65   disk access ope
144b0 72 61 74 69 6f 6e 73 20 72 65 71 75 69 72 65 64  rations required
144c0 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 69 73   to execute this
144d0 20 71 75 65 72 79 20 61 67 61 69 6e 73 74 20 74   query against t
144e0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
144f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54  virtual table. T
14500 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77  he SQLite core w
14510 69 6c 6c 20 6f 66 74 65 6e 20 63 61 6c 6c 20 78  ill often call x
14520 42 65 73 74 49 6e 64 65 78 20 6d 75 6c 74 69 70  BestIndex multip
14530 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
14540 74 69 6d 65 73 20 77 69 74 68 20 64 69 66 66 65  times with diffe
14550 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  rent constraints
14560 2c 20 6f 62 74 61 69 6e 20 6d 75 6c 74 69 70 6c  , obtain multipl
14570 65 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73  e cost estimates
14580 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  ,..        /// t
14590 68 65 6e 20 63 68 6f 6f 73 65 20 74 68 65 20 71  hen choose the q
145a0 75 65 72 79 20 70 6c 61 6e 20 74 68 61 74 20 67  uery plan that g
145b0 69 76 65 73 20 74 68 65 20 6c 6f 77 65 73 74 20  ives the lowest 
145c0 65 73 74 69 6d 61 74 65 2e 0d 0a 20 20 20 20 20  estimate...     
145d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
145e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
145f0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14600 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 55  The aConstraintU
14610 73 61 67 65 5b 5d 20 61 72 72 61 79 20 63 6f 6e  sage[] array con
14620 74 61 69 6e 73 20 6f 6e 65 20 65 6c 65 6d 65 6e  tains one elemen
14630 74 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  t for each of th
14640 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
14650 43 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73 74  Constraint const
14660 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 69 6e  raints in the in
14670 70 75 74 73 20 73 65 63 74 69 6f 6e 20 6f 66 20  puts section of 
14680 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
14690 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
146a0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 20 54  nfo structure. T
146b0 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73  he aConstraintUs
146c0 61 67 65 5b 5d 20 61 72 72 61 79 20 69 73 20 75  age[] array is u
146d0 73 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  sed..        ///
146e0 20 62 79 20 78 42 65 73 74 49 6e 64 65 78 20 74   by xBestIndex t
146f0 6f 20 74 65 6c 6c 20 74 68 65 20 63 6f 72 65 20  o tell the core 
14700 68 6f 77 20 69 74 20 69 73 20 75 73 69 6e 67 20  how it is using 
14710 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  the constraints.
14720 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
14730 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
14740 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
14750 20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65 73 74     /// The xBest
14760 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 6d 61 79  Index method may
14770 20 73 65 74 20 61 43 6f 6e 73 74 72 61 69 6e 74   set aConstraint
14780 55 73 61 67 65 5b 5d 2e 61 72 67 76 49 6e 64 65  Usage[].argvInde
14790 78 20 65 6e 74 72 69 65 73 0d 0a 20 20 20 20 20  x entries..     
147a0 20 20 20 2f 2f 2f 20 74 6f 20 76 61 6c 75 65 73     /// to values
147b0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 6e   greater than on
147c0 65 2e 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 65  e. Exactly one e
147d0 6e 74 72 79 20 73 68 6f 75 6c 64 20 62 65 20 73  ntry should be s
147e0 65 74 20 74 6f 20 31 2c 0d 0a 20 20 20 20 20 20  et to 1,..      
147f0 20 20 2f 2f 2f 20 61 6e 6f 74 68 65 72 20 74 6f    /// another to
14800 20 32 2c 20 61 6e 6f 74 68 65 72 20 74 6f 20 33   2, another to 3
14810 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 75  , and so forth u
14820 70 20 74 6f 20 61 73 20 6d 61 6e 79 20 6f 72 20  p to as many or 
14830 61 73 20 66 65 77 20 61 73 0d 0a 20 20 20 20 20  as few as..     
14840 20 20 20 2f 2f 2f 20 74 68 65 20 78 42 65 73 74     /// the xBest
14850 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 77 61 6e  Index method wan
14860 74 73 2e 20 54 68 65 20 45 58 50 52 20 6f 66 20  ts. The EXPR of 
14870 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
14880 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  g..        /// c
14890 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 6c 6c 20  onstraints will 
148a0 74 68 65 6e 20 62 65 20 70 61 73 73 65 64 20 69  then be passed i
148b0 6e 20 61 73 20 74 68 65 20 61 72 67 76 5b 5d 20  n as the argv[] 
148c0 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0d 0a 20  parameters to.. 
148d0 20 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74         /// xFilt
148e0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  er...        ///
148f0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
14900 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
14910 20 20 20 20 20 20 2f 2f 2f 20 46 6f 72 20 65 78        /// For ex
14920 61 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 61 43  ample, if the aC
14930 6f 6e 73 74 72 61 69 6e 74 5b 33 5d 2e 61 72 67  onstraint[3].arg
14940 76 49 6e 64 65 78 20 69 73 20 73 65 74 20 74 6f  vIndex is set to
14950 20 31 2c 20 74 68 65 6e 20 77 68 65 6e 0d 0a 20   1, then when.. 
14960 20 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74         /// xFilt
14970 65 72 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68  er is called, th
14980 65 20 61 72 67 76 5b 30 5d 20 70 61 73 73 65 64  e argv[0] passed
14990 20 74 6f 20 78 46 69 6c 74 65 72 20 77 69 6c 6c   to xFilter will
149a0 20 68 61 76 65 20 74 68 65 20 45 58 50 52 0d 0a   have the EXPR..
149b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75          /// valu
149c0 65 20 6f 66 20 74 68 65 20 61 43 6f 6e 73 74 72  e of the aConstr
149d0 61 69 6e 74 5b 33 5d 20 63 6f 6e 73 74 72 61 69  aint[3] constrai
149e0 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
149f0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
14a00 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
14a10 20 20 20 20 20 20 2f 2f 2f 20 42 79 20 64 65 66        /// By def
14a20 61 75 6c 74 2c 20 74 68 65 20 53 51 4c 69 74 65  ault, the SQLite
14a30 20 63 6f 72 65 20 64 6f 75 62 6c 65 20 63 68 65   core double che
14a40 63 6b 73 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69  cks all constrai
14a50 6e 74 73 20 6f 6e 20 65 61 63 68 0d 0a 20 20 20  nts on each..   
14a60 20 20 20 20 20 2f 2f 2f 20 72 6f 77 20 6f 66 20       /// row of 
14a70 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
14a80 65 20 74 68 61 74 20 69 74 20 72 65 63 65 69 76  e that it receiv
14a90 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 63 68  es. If such a ch
14aa0 65 63 6b 20 69 73 0d 0a 20 20 20 20 20 20 20 20  eck is..        
14ab0 2f 2f 2f 20 72 65 64 75 6e 64 61 6e 74 2c 20 74  /// redundant, t
14ac0 68 65 20 78 42 65 73 74 46 69 6c 74 65 72 20 6d  he xBestFilter m
14ad0 65 74 68 6f 64 20 63 61 6e 20 73 75 70 70 72 65  ethod can suppre
14ae0 73 73 20 74 68 61 74 20 64 6f 75 62 6c 65 2d 63  ss that double-c
14af0 68 65 63 6b 20 62 79 0d 0a 20 20 20 20 20 20 20  heck by..       
14b00 20 2f 2f 2f 20 73 65 74 74 69 6e 67 20 61 43 6f   /// setting aCo
14b10 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e  nstraintUsage[].
14b20 6f 6d 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  omit...        /
14b30 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
14b40 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
14b50 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
14b60 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
14b70 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
14b80 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
14b90 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
14ba0 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
14bb0 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
14bc0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
14bd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
14be0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64  param name="pInd
14bf0 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ex">..        //
14c00 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
14c10 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
14c20 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73  te3_index_info s
14c30 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
14c40 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
14c50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
14c60 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
14c70 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
14c80 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
14c90 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
14ca0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
14cb0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
14cc0 6f 64 65 20 78 42 65 73 74 49 6e 64 65 78 28 0d  ode xBestIndex(.
14cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
14ce0 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
14cf0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
14d00 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20  Index..         
14d10 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
14d20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
14d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
14d70 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
14d80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
14d90 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
14da0 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 72  // This method r
14db0 65 6c 65 61 73 65 73 20 61 20 63 6f 6e 6e 65 63  eleases a connec
14dc0 74 69 6f 6e 20 74 6f 20 61 20 76 69 72 74 75 61  tion to a virtua
14dd0 6c 20 74 61 62 6c 65 2e 20 4f 6e 6c 79 20 74 68  l table. Only th
14de0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
14df0 71 6c 69 74 65 33 5f 76 74 61 62 20 6f 62 6a 65  qlite3_vtab obje
14e00 63 74 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  ct is destroyed.
14e10 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   The virtual tab
14e20 6c 65 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20  le is not..     
14e30 20 20 20 2f 2f 2f 20 64 65 73 74 72 6f 79 65 64     /// destroyed
14e40 20 61 6e 64 20 61 6e 79 20 62 61 63 6b 69 6e 67   and any backing
14e50 20 73 74 6f 72 65 20 61 73 73 6f 63 69 61 74 65   store associate
14e60 64 20 77 69 74 68 20 74 68 65 20 76 69 72 74 75  d with the virtu
14e70 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
14e80 20 20 2f 2f 2f 20 70 65 72 73 69 73 74 73 2e 20    /// persists. 
14e90 54 68 69 73 20 6d 65 74 68 6f 64 20 75 6e 64 6f  This method undo
14ea0 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 78  es the work of x
14eb0 43 6f 6e 6e 65 63 74 2e 0d 0a 20 20 20 20 20 20  Connect...      
14ec0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
14ed0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
14ee0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
14ef0 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 61 20  his method is a 
14f00 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61  destructor for a
14f10 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
14f20 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
14f30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  ...        /// C
14f40 6f 6e 74 72 61 73 74 20 74 68 69 73 20 6d 65 74  ontrast this met
14f50 68 6f 64 20 77 69 74 68 20 78 44 65 73 74 72 6f  hod with xDestro
14f60 79 2e 20 54 68 65 20 78 44 65 73 74 72 6f 79 20  y. The xDestroy 
14f70 69 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 0d  is a destructor.
14f80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72  .        /// for
14f90 20 74 68 65 20 65 6e 74 69 72 65 20 76 69 72 74   the entire virt
14fa0 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
14fb0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
14fc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
14fd0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
14fe0 20 54 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74   The xDisconnect
14ff0 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69   method is requi
15000 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69  red for every vi
15010 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
15020 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
15030 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75 67 68 20  ntation, though 
15040 69 74 20 69 73 20 61 63 63 65 70 74 61 62 6c 65  it is acceptable
15050 20 66 6f 72 20 74 68 65 20 78 44 69 73 63 6f 6e   for the xDiscon
15060 6e 65 63 74 20 61 6e 64 0d 0a 20 20 20 20 20 20  nect and..      
15070 20 20 2f 2f 2f 20 78 44 65 73 74 72 6f 79 20 6d    /// xDestroy m
15080 65 74 68 6f 64 73 20 74 6f 20 62 65 20 74 68 65  ethods to be the
15090 20 73 61 6d 65 20 66 75 6e 63 74 69 6f 6e 20 69   same function i
150a0 66 20 74 68 61 74 20 6d 61 6b 65 73 20 73 65 6e  f that makes sen
150b0 73 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  se for..        
150c0 2f 2f 2f 20 74 68 65 20 70 61 72 74 69 63 75 6c  /// the particul
150d0 61 72 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ar virtual table
150e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
150f0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
15100 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
15110 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
15120 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
15130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
15140 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
15150 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
15160 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
15170 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
15180 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
15190 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
151a0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
151b0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
151c0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
151d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
151e0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
151f0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
15200 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a  e xDisconnect(..
15210 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
15220 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
15230 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
15240 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
15250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
15290 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
152a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
152b0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
152c0 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
152d0 64 20 72 65 6c 65 61 73 65 73 20 61 20 63 6f 6e  d releases a con
152e0 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 76 69 72  nection to a vir
152f0 74 75 61 6c 20 74 61 62 6c 65 2c 20 6a 75 73 74  tual table, just
15300 20 6c 69 6b 65 20 74 68 65 0d 0a 20 20 20 20 20   like the..     
15310 20 20 20 2f 2f 2f 20 78 44 69 73 63 6f 6e 6e 65     /// xDisconne
15320 63 74 20 6d 65 74 68 6f 64 2c 20 61 6e 64 20 69  ct method, and i
15330 74 20 61 6c 73 6f 20 64 65 73 74 72 6f 79 73 20  t also destroys 
15340 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 74  the underlying t
15350 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
15360 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
15370 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20 75 6e  . This method un
15380 64 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66  does the work of
15390 20 78 43 72 65 61 74 65 2e 0d 0a 20 20 20 20 20   xCreate...     
153a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
153b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
153c0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
153d0 54 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 20  The xDisconnect 
153e0 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
153f0 20 77 68 65 6e 65 76 65 72 20 61 20 64 61 74 61   whenever a data
15400 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  base connection.
15410 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61  .        /// tha
15420 74 20 75 73 65 73 20 61 20 76 69 72 74 75 61 6c  t uses a virtual
15430 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
15440 2e 20 54 68 65 20 78 44 65 73 74 72 6f 79 20 6d  . The xDestroy m
15450 65 74 68 6f 64 20 69 73 20 6f 6e 6c 79 0d 0a 20  ethod is only.. 
15460 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65         /// calle
15470 64 20 77 68 65 6e 20 61 20 44 52 4f 50 20 54 41  d when a DROP TA
15480 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  BLE statement is
15490 20 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 73   executed agains
154a0 74 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20  t the virtual.. 
154b0 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65         /// table
154c0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
154d0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
154e0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
154f0 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 44 65 73      /// The xDes
15500 74 72 6f 79 20 6d 65 74 68 6f 64 20 69 73 20 72  troy method is r
15510 65 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72  equired for ever
15520 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  y virtual table.
15530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70  .        /// imp
15540 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f  lementation, tho
15550 75 67 68 20 69 74 20 69 73 20 61 63 63 65 70 74  ugh it is accept
15560 61 62 6c 65 20 66 6f 72 20 74 68 65 20 78 44 69  able for the xDi
15570 73 63 6f 6e 6e 65 63 74 20 61 6e 64 0d 0a 20 20  sconnect and..  
15580 20 20 20 20 20 20 2f 2f 2f 20 78 44 65 73 74 72        /// xDestr
15590 6f 79 20 6d 65 74 68 6f 64 73 20 74 6f 20 62 65  oy methods to be
155a0 20 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74 69   the same functi
155b0 6f 6e 20 69 66 20 74 68 61 74 20 6d 61 6b 65 73  on if that makes
155c0 20 73 65 6e 73 65 20 66 6f 72 0d 0a 20 20 20 20   sense for..    
155d0 20 20 20 20 2f 2f 2f 20 74 68 65 20 70 61 72 74      /// the part
155e0 69 63 75 6c 61 72 20 76 69 72 74 75 61 6c 20 74  icular virtual t
155f0 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
15600 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
15610 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
15620 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
15630 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
15640 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
15650 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
15660 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
15670 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
15680 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
15690 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
156a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
156b0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
156c0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
156d0 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
156e0 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
156f0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
15700 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
15710 72 43 6f 64 65 20 78 44 65 73 74 72 6f 79 28 0d  rCode xDestroy(.
15720 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
15730 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
15740 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
15750 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
15760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
157a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
157b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
157c0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
157d0 20 20 20 2f 2f 2f 20 54 68 65 20 78 4f 70 65 6e     /// The xOpen
157e0 20 6d 65 74 68 6f 64 20 63 72 65 61 74 65 73 20   method creates 
157f0 61 20 6e 65 77 20 63 75 72 73 6f 72 20 75 73 65  a new cursor use
15800 64 20 66 6f 72 20 61 63 63 65 73 73 69 6e 67 20  d for accessing 
15810 28 72 65 61 64 0d 0a 20 20 20 20 20 20 20 20 2f  (read..        /
15820 2f 2f 20 61 6e 64 2f 6f 72 20 77 72 69 74 69 6e  // and/or writin
15830 67 29 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  g) a virtual tab
15840 6c 65 2e 20 41 20 73 75 63 63 65 73 73 66 75 6c  le. A successful
15850 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
15860 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
15870 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 61 6c 6c   method will all
15880 6f 63 61 74 65 20 74 68 65 20 6d 65 6d 6f 72 79  ocate the memory
15890 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
158a0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 28 6f 72  _vtab_cursor (or
158b0 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   a..        /// 
158c0 73 75 62 63 6c 61 73 73 29 2c 20 69 6e 69 74 69  subclass), initi
158d0 61 6c 69 7a 65 20 74 68 65 20 6e 65 77 20 6f 62  alize the new ob
158e0 6a 65 63 74 2c 20 61 6e 64 20 6d 61 6b 65 20 2a  ject, and make *
158f0 70 70 43 75 72 73 6f 72 20 70 6f 69 6e 74 20 74  ppCursor point t
15900 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  o..        /// t
15910 68 65 20 6e 65 77 20 6f 62 6a 65 63 74 2e 20 54  he new object. T
15920 68 65 20 73 75 63 63 65 73 73 66 75 6c 20 63 61  he successful ca
15930 6c 6c 20 74 68 65 6e 20 72 65 74 75 72 6e 73 20  ll then returns 
15940 53 51 4c 49 54 45 5f 4f 4b 2e 0d 0a 20 20 20 20  SQLITE_OK...    
15950 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
15960 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
15970 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
15980 20 46 6f 72 20 65 76 65 72 79 20 73 75 63 63 65   For every succe
15990 73 73 66 75 6c 20 63 61 6c 6c 20 74 6f 20 74 68  ssful call to th
159a0 69 73 20 6d 65 74 68 6f 64 2c 20 74 68 65 20 53  is method, the S
159b0 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 0d  QLite core will.
159c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74  .        /// lat
159d0 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 43  er invoke the xC
159e0 6c 6f 73 65 20 6d 65 74 68 6f 64 20 74 6f 20 64  lose method to d
159f0 65 73 74 72 6f 79 20 74 68 65 20 61 6c 6c 6f 63  estroy the alloc
15a00 61 74 65 64 20 63 75 72 73 6f 72 2e 0d 0a 20 20  ated cursor...  
15a10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
15a20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15a30 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15a40 2f 2f 20 54 68 65 20 78 4f 70 65 6e 20 6d 65 74  // The xOpen met
15a50 68 6f 64 20 6e 65 65 64 20 6e 6f 74 20 69 6e 69  hod need not ini
15a60 74 69 61 6c 69 7a 65 20 74 68 65 20 70 56 74 61  tialize the pVta
15a70 62 20 66 69 65 6c 64 20 6f 66 20 74 68 65 0d 0a  b field of the..
15a80 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
15a90 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
15aa0 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 20 53  structure. The S
15ab0 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20  QLite core will 
15ac0 74 61 6b 65 20 63 61 72 65 20 6f 66 0d 0a 20 20  take care of..  
15ad0 20 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 63        /// that c
15ae0 68 6f 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c  hore automatical
15af0 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ly...        ///
15b00 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
15b10 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
15b20 20 20 20 20 20 20 2f 2f 2f 20 41 20 76 69 72 74        /// A virt
15b30 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
15b40 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 62 65  entation must be
15b50 20 61 62 6c 65 20 74 6f 20 73 75 70 70 6f 72 74   able to support
15b60 20 61 6e 20 61 72 62 69 74 72 61 72 79 0d 0a 20   an arbitrary.. 
15b70 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65         /// numbe
15b80 72 20 6f 66 20 73 69 6d 75 6c 74 61 6e 65 6f 75  r of simultaneou
15b90 73 6c 79 20 6f 70 65 6e 20 63 75 72 73 6f 72 73  sly open cursors
15ba0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15bb0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
15bc0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
15bd0 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 69 6e 69      /// When ini
15be0 74 69 61 6c 6c 79 20 6f 70 65 6e 65 64 2c 20 74  tially opened, t
15bf0 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 20  he cursor is in 
15c00 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61  an undefined sta
15c10 74 65 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20  te. The..       
15c20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72 65   /// SQLite core
15c30 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65   will invoke the
15c40 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
15c50 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 70 72  on the cursor pr
15c60 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ior to..        
15c70 2f 2f 2f 20 61 6e 79 20 61 74 74 65 6d 70 74 20  /// any attempt 
15c80 74 6f 20 70 6f 73 69 74 69 6f 6e 20 6f 72 20 72  to position or r
15c90 65 61 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ead from the cur
15ca0 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sor...        //
15cb0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
15cc0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
15cd0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
15ce0 4f 70 65 6e 20 6d 65 74 68 6f 64 20 69 73 20 72  Open method is r
15cf0 65 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72  equired for ever
15d00 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  y virtual table.
15d10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70  .        /// imp
15d20 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20  lementation...  
15d30 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
15d40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15d50 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
15d60 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
15d70 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
15d80 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
15d90 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
15da0 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
15db0 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
15dc0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
15dd0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
15de0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
15df0 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20  e="pCursor">..  
15e00 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73        /// Upon s
15e10 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72  uccess, this par
15e20 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d  ameter must be m
15e30 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74  odified to point
15e40 20 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a 20   to the newly.. 
15e50 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74         /// creat
15e60 65 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  ed native sqlite
15e70 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65  3_vtab_cursor de
15e80 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
15e90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15ea0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
15eb0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
15ec0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
15ed0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
15ee0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
15ef0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
15f00 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
15f10 65 45 72 72 6f 72 43 6f 64 65 20 78 4f 70 65 6e  eErrorCode xOpen
15f20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
15f30 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
15f40 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
15f50 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20  tPtr pCursor..  
15f60 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
15f70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
15f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
15fc0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15fd0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
15fe0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
15ff0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43        /// The xC
16000 6c 6f 73 65 20 6d 65 74 68 6f 64 20 63 6c 6f 73  lose method clos
16010 65 73 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  es a cursor prev
16020 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 62 79  iously opened by
16030 20 78 4f 70 65 6e 2e 20 54 68 65 0d 0a 20 20 20   xOpen. The..   
16040 20 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20       /// SQLite 
16050 63 6f 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  core will always
16060 20 63 61 6c 6c 20 78 43 6c 6f 73 65 20 6f 6e 63   call xClose onc
16070 65 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  e for each curso
16080 72 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20  r opened..      
16090 20 20 2f 2f 2f 20 75 73 69 6e 67 20 78 4f 70 65    /// using xOpe
160a0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
160b0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
160c0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
160d0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
160e0 74 68 6f 64 20 6d 75 73 74 20 72 65 6c 65 61 73  thod must releas
160f0 65 20 61 6c 6c 20 72 65 73 6f 75 72 63 65 73 20  e all resources 
16100 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 68 65  allocated by the
16110 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
16120 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 4f 70 65  rresponding xOpe
16130 6e 20 63 61 6c 6c 2e 20 54 68 65 20 72 6f 75 74  n call. The rout
16140 69 6e 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  ine will not be 
16150 63 61 6c 6c 65 64 20 61 67 61 69 6e 20 65 76 65  called again eve
16160 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  n..        /// i
16170 66 20 69 74 20 72 65 74 75 72 6e 73 20 61 6e 20  f it returns an 
16180 65 72 72 6f 72 2e 20 54 68 65 20 53 51 4c 69 74  error. The SQLit
16190 65 20 63 6f 72 65 20 77 69 6c 6c 20 6e 6f 74 20  e core will not 
161a0 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  use the..       
161b0 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61   /// sqlite3_vta
161c0 62 5f 63 75 72 73 6f 72 20 61 67 61 69 6e 20 61  b_cursor again a
161d0 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65 6e  fter it has been
161e0 20 63 6c 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20   closed...      
161f0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
16200 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
16210 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
16220 68 65 20 78 43 6c 6f 73 65 20 6d 65 74 68 6f 64  he xClose method
16230 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
16240 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
16250 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
16260 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
16270 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16280 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
16290 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
162a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
162b0 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
162c0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
162d0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
162e0 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
162f0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65  3_vtab_cursor de
16300 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
16310 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
16320 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
16330 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
16340 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
16350 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
16360 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
16370 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
16380 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
16390 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73  eErrorCode xClos
163a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
163b0 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
163c0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
163d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
163e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
163f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16420 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
16430 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
16440 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
16450 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
16460 20 6d 65 74 68 6f 64 20 62 65 67 69 6e 73 20 61   method begins a
16470 20 73 65 61 72 63 68 20 6f 66 20 61 20 76 69 72   search of a vir
16480 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 65 20  tual table. The 
16490 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 0d 0a  first argument..
164a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 61          /// is a
164b0 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 62   cursor opened b
164c0 79 20 78 4f 70 65 6e 2e 20 54 68 65 20 6e 65 78  y xOpen. The nex
164d0 74 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 20 64  t two argument d
164e0 65 66 69 6e 65 20 61 0d 0a 20 20 20 20 20 20 20  efine a..       
164f0 20 2f 2f 2f 20 70 61 72 74 69 63 75 6c 61 72 20   /// particular 
16500 73 65 61 72 63 68 20 69 6e 64 65 78 20 70 72 65  search index pre
16510 76 69 6f 75 73 6c 79 20 63 68 6f 73 65 6e 20 62  viously chosen b
16520 79 20 78 42 65 73 74 49 6e 64 65 78 2e 20 54 68  y xBestIndex. Th
16530 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
16540 70 65 63 69 66 69 63 20 6d 65 61 6e 69 6e 67 73  pecific meanings
16550 20 6f 66 20 69 64 78 4e 75 6d 20 61 6e 64 20 69   of idxNum and i
16560 64 78 53 74 72 20 61 72 65 20 75 6e 69 6d 70 6f  dxStr are unimpo
16570 72 74 61 6e 74 20 61 73 20 6c 6f 6e 67 20 61 73  rtant as long as
16580 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 46  ..        /// xF
16590 69 6c 74 65 72 20 61 6e 64 20 78 42 65 73 74 49  ilter and xBestI
165a0 6e 64 65 78 20 61 67 72 65 65 20 6f 6e 20 77 68  ndex agree on wh
165b0 61 74 20 74 68 61 74 20 6d 65 61 6e 69 6e 67 20  at that meaning 
165c0 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  is...        ///
165d0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
165e0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
165f0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42        /// The xB
16600 65 73 74 49 6e 64 65 78 20 66 75 6e 63 74 69 6f  estIndex functio
16610 6e 20 6d 61 79 20 68 61 76 65 20 72 65 71 75 65  n may have reque
16620 73 74 65 64 20 74 68 65 20 76 61 6c 75 65 73 20  sted the values 
16630 6f 66 20 63 65 72 74 61 69 6e 0d 0a 20 20 20 20  of certain..    
16640 20 20 20 20 2f 2f 2f 20 65 78 70 72 65 73 73 69      /// expressi
16650 6f 6e 73 20 75 73 69 6e 67 20 74 68 65 20 61 43  ons using the aC
16660 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d  onstraintUsage[]
16670 2e 61 72 67 76 49 6e 64 65 78 20 76 61 6c 75 65  .argvIndex value
16680 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  s of the..      
16690 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e    /// sqlite3_in
166a0 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75  dex_info structu
166b0 72 65 2e 20 54 68 6f 73 65 20 76 61 6c 75 65 73  re. Those values
166c0 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 20 78   are passed to x
166d0 46 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20 20  Filter..        
166e0 2f 2f 2f 20 75 73 69 6e 67 20 74 68 65 20 61 72  /// using the ar
166f0 67 63 20 61 6e 64 20 61 72 67 76 20 70 61 72 61  gc and argv para
16700 6d 65 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  meters...       
16710 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
16720 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
16730 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66  ..        /// If
16740 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
16750 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  le contains one 
16760 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 74 68 61  or more rows tha
16770 74 20 6d 61 74 63 68 20 74 68 65 0d 0a 20 20 20  t match the..   
16780 20 20 20 20 20 2f 2f 2f 20 73 65 61 72 63 68 20       /// search 
16790 63 72 69 74 65 72 69 61 2c 20 74 68 65 6e 20 74  criteria, then t
167a0 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  he cursor must b
167b0 65 20 6c 65 66 74 20 70 6f 69 6e 74 20 61 74 20  e left point at 
167c0 74 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20 20  the first..     
167d0 20 20 20 2f 2f 2f 20 72 6f 77 2e 20 53 75 62 73     /// row. Subs
167e0 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20  equent calls to 
167f0 78 45 6f 66 20 6d 75 73 74 20 72 65 74 75 72 6e  xEof must return
16800 20 66 61 6c 73 65 20 28 7a 65 72 6f 29 2e 20 49   false (zero). I
16810 66 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20  f there..       
16820 20 2f 2f 2f 20 61 72 65 20 6e 6f 20 72 6f 77 73   /// are no rows
16830 20 6d 61 74 63 68 2c 20 74 68 65 6e 20 74 68 65   match, then the
16840 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
16850 6c 65 66 74 20 69 6e 20 61 20 73 74 61 74 65 20  left in a state 
16860 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  that..        //
16870 2f 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65  / will cause the
16880 20 78 45 6f 66 20 74 6f 20 72 65 74 75 72 6e 20   xEof to return 
16890 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 2e  true (non-zero).
168a0 20 54 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   The SQLite engi
168b0 6e 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ne..        /// 
168c0 77 69 6c 6c 20 75 73 65 20 74 68 65 20 78 43 6f  will use the xCo
168d0 6c 75 6d 6e 20 61 6e 64 20 78 52 6f 77 69 64 20  lumn and xRowid 
168e0 6d 65 74 68 6f 64 73 20 74 6f 20 61 63 63 65 73  methods to acces
168f0 73 20 74 68 61 74 20 72 6f 77 20 63 6f 6e 74 65  s that row conte
16900 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
16910 20 54 68 65 20 78 4e 65 78 74 20 6d 65 74 68 6f   The xNext metho
16920 64 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  d will be used t
16930 6f 20 61 64 76 61 6e 63 65 20 74 6f 20 74 68 65  o advance to the
16940 20 6e 65 78 74 20 72 6f 77 2e 0d 0a 20 20 20 20   next row...    
16950 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
16960 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
16970 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
16980 20 54 68 69 73 20 6d 65 74 68 6f 64 20 6d 75 73   This method mus
16990 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  t return SQLITE_
169a0 4f 4b 20 69 66 20 73 75 63 63 65 73 73 66 75 6c  OK if successful
169b0 2c 20 6f 72 20 61 6e 20 73 71 6c 69 74 65 20 65  , or an sqlite e
169c0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rror..        //
169d0 2f 20 63 6f 64 65 20 69 66 20 61 6e 20 65 72 72  / code if an err
169e0 6f 72 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  or occurs...    
169f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
16a00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
16a10 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
16a20 20 54 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   The xFilter met
16a30 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
16a40 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
16a50 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
16a60 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
16a70 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
16a80 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
16a90 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
16aa0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16ab0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
16ac0 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
16ad0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
16ae0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
16af0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
16b00 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
16b10 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
16b20 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
16b30 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
16b40 6d 65 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20 20  me="idxNum">..  
16b50 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72        /// Number
16b60 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64   used to help id
16b70 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63  entify the selec
16b80 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20  ted index...    
16b90 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
16ba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
16bb0 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78 53 74  aram name="idxSt
16bc0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
16bd0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
16be0 74 65 72 20 74 6f 20 74 68 65 20 55 54 46 2d 38  ter to the UTF-8
16bf0 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 20   encoded string 
16c00 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a  containing the..
16c10 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 69          /// stri
16c20 6e 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  ng used to help 
16c30 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c  identify the sel
16c40 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20  ected index...  
16c50 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
16c60 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
16c70 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
16c80 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  c">..        ///
16c90 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   The number of n
16ca0 61 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74  ative pointers t
16cb0 6f 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  o sqlite3_value 
16cc0 73 74 72 75 63 74 75 72 65 73 20 73 70 65 63 69  structures speci
16cd0 66 69 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  fied..        //
16ce0 2f 20 69 6e 20 3c 70 61 72 61 6d 72 65 66 20 6e  / in <paramref n
16cf0 61 6d 65 3d 22 61 72 67 76 22 20 2f 3e 2e 0d 0a  ame="argv" />...
16d00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
16d10 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
16d20 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
16d30 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rgv">..        /
16d40 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20 6e  // An array of n
16d50 61 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74  ative pointers t
16d60 6f 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  o sqlite3_value 
16d70 73 74 72 75 63 74 75 72 65 73 20 63 6f 6e 74 61  structures conta
16d80 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f  ining..        /
16d90 2f 2f 20 66 69 6c 74 65 72 69 6e 67 20 63 72 69  // filtering cri
16da0 74 65 72 69 61 20 66 6f 72 20 74 68 65 20 73 65  teria for the se
16db0 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20  lected index... 
16dc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
16dd0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
16de0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
16df0 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
16e00 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
16e10 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
16e20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
16e30 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
16e40 72 6f 72 43 6f 64 65 20 78 46 69 6c 74 65 72 28  rorCode xFilter(
16e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
16e60 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20  tPtr pCursor,.. 
16e70 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
16e80 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  dxNum,..        
16e90 20 20 20 20 49 6e 74 50 74 72 20 69 64 78 53 74      IntPtr idxSt
16ea0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
16eb0 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20  int argc,..     
16ec0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61 72         IntPtr ar
16ed0 67 76 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  gv..            
16ee0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
16ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16f40 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
16f50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
16f60 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16f70 54 68 65 20 78 4e 65 78 74 20 6d 65 74 68 6f 64  The xNext method
16f80 20 61 64 76 61 6e 63 65 73 20 61 20 76 69 72 74   advances a virt
16f90 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
16fa0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77   to the next row
16fb0 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   of..        ///
16fc0 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 69 6e   a result set in
16fd0 69 74 69 61 74 65 64 20 62 79 20 78 46 69 6c 74  itiated by xFilt
16fe0 65 72 2e 20 49 66 20 74 68 65 20 63 75 72 73 6f  er. If the curso
16ff0 72 20 69 73 20 61 6c 72 65 61 64 79 0d 0a 20 20  r is already..  
17000 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 69        /// pointi
17010 6e 67 20 61 74 20 74 68 65 20 6c 61 73 74 20 72  ng at the last r
17020 6f 77 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75  ow when this rou
17030 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2c 20  tine is called, 
17040 74 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  then the..      
17050 20 20 2f 2f 2f 20 63 75 72 73 6f 72 20 6e 6f 20    /// cursor no 
17060 6c 6f 6e 67 65 72 20 70 6f 69 6e 74 73 20 74 6f  longer points to
17070 20 76 61 6c 69 64 20 64 61 74 61 20 61 6e 64 20   valid data and 
17080 61 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  a subsequent cal
17090 6c 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  l to the..      
170a0 20 20 2f 2f 2f 20 78 45 6f 66 20 6d 65 74 68 6f    /// xEof metho
170b0 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74 72  d must return tr
170c0 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 2e 20 49  ue (non-zero). I
170d0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0d  f the cursor is.
170e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 63  .        /// suc
170f0 63 65 73 73 66 75 6c 6c 79 20 61 64 76 61 6e 63  cessfully advanc
17100 65 64 20 74 6f 20 61 6e 6f 74 68 65 72 20 72 6f  ed to another ro
17110 77 20 6f 66 20 63 6f 6e 74 65 6e 74 2c 20 74 68  w of content, th
17120 65 6e 20 73 75 62 73 65 71 75 65 6e 74 0d 0a 20  en subsequent.. 
17130 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 73         /// calls
17140 20 74 6f 20 78 45 6f 66 20 6d 75 73 74 20 72 65   to xEof must re
17150 74 75 72 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f  turn false (zero
17160 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  )...        /// 
17170 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
17180 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
17190 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
171a0 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e  thod must return
171b0 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 73 75   SQLITE_OK if su
171c0 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 61 6e 20  ccessful, or an 
171d0 73 71 6c 69 74 65 20 65 72 72 6f 72 0d 0a 20 20  sqlite error..  
171e0 20 20 20 20 20 20 2f 2f 2f 20 63 6f 64 65 20 69        /// code i
171f0 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
17200 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
17210 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
17220 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
17230 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4e 65       /// The xNe
17240 78 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71  xt method is req
17250 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20  uired for every 
17260 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
17270 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
17280 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
17290 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
172a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
172b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
172c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
172d0 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
172e0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
172f0 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
17300 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  he sqlite3_vtab_
17310 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73  cursor derived s
17320 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
17330 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
17340 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
17350 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
17360 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
17370 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
17380 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
17390 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
173a0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
173b0 6f 64 65 20 78 4e 65 78 74 28 0d 0a 20 20 20 20  ode xNext(..    
173c0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
173d0 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  Cursor..        
173e0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
173f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
17400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17430 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17440 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
17450 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
17460 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
17470 2f 2f 2f 20 54 68 65 20 78 45 6f 66 20 6d 65 74  /// The xEof met
17480 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20  hod must return 
17490 66 61 6c 73 65 20 28 7a 65 72 6f 29 20 69 66 20  false (zero) if 
174a0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 75  the specified cu
174b0 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rsor..        //
174c0 2f 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  / currently poin
174d0 74 73 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ts to a valid ro
174e0 77 20 6f 66 20 64 61 74 61 2c 20 6f 72 20 74 72  w of data, or tr
174f0 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 0d 0a 20  ue (non-zero).. 
17500 20 20 20 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72         /// other
17510 77 69 73 65 2e 20 54 68 69 73 20 6d 65 74 68 6f  wise. This metho
17520 64 20 69 73 20 63 61 6c 6c 65 64 20 62 79 20 74  d is called by t
17530 68 65 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 6d  he SQL engine im
17540 6d 65 64 69 61 74 65 6c 79 0d 0a 20 20 20 20 20  mediately..     
17550 20 20 20 2f 2f 2f 20 61 66 74 65 72 20 65 61 63     /// after eac
17560 68 20 78 46 69 6c 74 65 72 20 61 6e 64 20 78 4e  h xFilter and xN
17570 65 78 74 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0d  ext invocation..
17580 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
17590 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
175a0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
175b0 20 20 2f 2f 2f 20 54 68 65 20 78 45 6f 66 20 6d    /// The xEof m
175c0 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65  ethod is require
175d0 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74  d for every virt
175e0 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
175f0 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
17600 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
17610 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
17620 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
17630 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
17640 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
17650 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
17660 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
17670 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
17680 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
17690 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
176a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
176b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
176c0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
176d0 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 6e  // Non-zero if n
176e0 6f 20 6d 6f 72 65 20 72 6f 77 73 20 61 72 65 20  o more rows are 
176f0 61 76 61 69 6c 61 62 6c 65 3b 20 7a 65 72 6f 20  available; zero 
17700 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20  otherwise...    
17710 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
17720 73 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  s>..        int 
17730 78 45 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20  xEof(..         
17740 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f     IntPtr pCurso
17750 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
17760 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
17770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
177a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
177b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
177c0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
177d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
177e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
177f0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69  he SQLite core i
17800 6e 76 6f 6b 65 73 20 74 68 69 73 20 6d 65 74 68  nvokes this meth
17810 6f 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66  od in order to f
17820 69 6e 64 20 74 68 65 20 76 61 6c 75 65 20 66 6f  ind the value fo
17830 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  r..        /// t
17840 68 65 20 4e 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he N-th column o
17850 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
17860 77 2e 20 4e 20 69 73 20 7a 65 72 6f 2d 62 61 73  w. N is zero-bas
17870 65 64 20 73 6f 20 74 68 65 20 66 69 72 73 74 0d  ed so the first.
17880 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6c  .        /// col
17890 75 6d 6e 20 69 73 20 6e 75 6d 62 65 72 65 64 20  umn is numbered 
178a0 30 2e 20 54 68 65 20 78 43 6f 6c 75 6d 6e 20 6d  0. The xColumn m
178b0 65 74 68 6f 64 20 6d 61 79 20 72 65 74 75 72 6e  ethod may return
178c0 20 69 74 73 20 72 65 73 75 6c 74 20 62 61 63 6b   its result back
178d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f  ..        /// to
178e0 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20 6f 6e   SQLite using on
178f0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
17900 6e 67 20 69 6e 74 65 72 66 61 63 65 3a 0d 0a 20  ng interface:.. 
17910 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17920 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17930 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  <code>..        
17940 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ///     sqlite3_
17950 72 65 73 75 6c 74 5f 62 6c 6f 62 28 29 0d 0a 20  result_blob().. 
17960 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73         ///     s
17970 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
17980 75 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20  uble()..        
17990 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ///     sqlite3_
179a0 72 65 73 75 6c 74 5f 69 6e 74 28 29 0d 0a 20 20  result_int()..  
179b0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71        ///     sq
179c0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
179d0 36 34 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  64()..        //
179e0 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  /     sqlite3_re
179f0 73 75 6c 74 5f 6e 75 6c 6c 28 29 0d 0a 20 20 20  sult_null()..   
17a00 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c       ///     sql
17a10 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
17a20 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ()..        /// 
17a30 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
17a40 6c 74 5f 74 65 78 74 31 36 28 29 0d 0a 20 20 20  lt_text16()..   
17a50 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c       ///     sql
17a60 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
17a70 31 36 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20  16le()..        
17a80 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ///     sqlite3_
17a90 72 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65 28  result_text16be(
17aa0 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  )..        ///  
17ab0 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
17ac0 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 0d 0a 20 20  t_zeroblob()..  
17ad0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65        /// </code
17ae0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17af0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
17b00 2f 2f 20 49 66 20 74 68 65 20 78 43 6f 6c 75 6d  // If the xColum
17b10 6e 20 6d 65 74 68 6f 64 20 69 6d 70 6c 65 6d 65  n method impleme
17b20 6e 74 61 74 69 6f 6e 20 63 61 6c 6c 73 20 6e 6f  ntation calls no
17b30 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
17b40 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ons..        ///
17b50 20 61 62 6f 76 65 2c 20 74 68 65 6e 20 74 68 65   above, then the
17b60 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
17b70 6c 75 6d 6e 20 64 65 66 61 75 6c 74 73 20 74 6f  lumn defaults to
17b80 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e 0d 0a 20   an SQL NULL... 
17b90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17ba0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17bb0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
17bc0 2f 2f 2f 20 54 6f 20 72 61 69 73 65 20 61 6e 20  /// To raise an 
17bd0 65 72 72 6f 72 2c 20 74 68 65 20 78 43 6f 6c 75  error, the xColu
17be0 6d 6e 20 6d 65 74 68 6f 64 20 73 68 6f 75 6c 64  mn method should
17bf0 20 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 0d   use one of the.
17c00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 73  .        /// res
17c10 75 6c 74 5f 74 65 78 74 28 29 20 6d 65 74 68 6f  ult_text() metho
17c20 64 73 20 74 6f 20 73 65 74 20 74 68 65 20 65 72  ds to set the er
17c30 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65 78 74  ror message text
17c40 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20 61 6e  , then return an
17c50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 70  ..        /// ap
17c60 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20  propriate error 
17c70 63 6f 64 65 2e 20 54 68 65 20 78 43 6f 6c 75 6d  code. The xColum
17c80 6e 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65  n method must re
17c90 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 6f  turn SQLITE_OK o
17ca0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  n..        /// s
17cb0 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  uccess...       
17cc0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
17cd0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
17ce0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
17cf0 65 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64  e xColumn method
17d00 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
17d10 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
17d20 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
17d30 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
17d40 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17d50 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
17d60 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
17d70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
17d80 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
17d90 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
17da0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
17db0 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
17dc0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65  3_vtab_cursor de
17dd0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
17de0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17df0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
17e00 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
17e10 22 70 43 6f 6e 74 65 78 74 22 3e 0d 0a 20 20 20  "pContext">..   
17e20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
17e30 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
17e40 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  he sqlite3_conte
17e50 78 74 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  xt structure to 
17e60 62 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20  be used..       
17e70 20 2f 2f 2f 20 66 6f 72 20 72 65 74 75 72 6e 69   /// for returni
17e80 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ng the specified
17e90 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f   column value to
17ea0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
17eb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69  ..        /// li
17ec0 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  brary...        
17ed0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
17ee0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
17ef0 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a   name="index">..
17f00 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
17f10 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78  zero-based index
17f20 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
17f30 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e  o the column con
17f40 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20  taining the..   
17f50 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 74       /// value t
17f60 6f 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a  o be returned...
17f70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
17f80 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
17f90 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
17fa0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
17fb0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
17fc0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
17fd0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
17fe0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
17ff0 72 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75 6d 6e  rrorCode xColumn
18000 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
18010 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a  ntPtr pCursor,..
18020 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
18030 74 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20  tr pContext,..  
18040 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e            int in
18050 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dex..           
18060 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
18070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
180a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
180b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
180c0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
180d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
180e0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
180f0 20 41 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e   A successful in
18100 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
18110 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 63 61 75   method will cau
18120 73 65 20 2a 70 52 6f 77 69 64 20 74 6f 20 62 65  se *pRowid to be
18130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 69  ..        /// fi
18140 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 72 6f  lled with the ro
18150 77 69 64 20 6f 66 20 72 6f 77 20 74 68 61 74 20  wid of row that 
18160 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
18170 65 20 63 75 72 73 6f 72 20 70 43 75 72 20 69 73  e cursor pCur is
18180 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 75  ..        /// cu
18190 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
181a0 20 61 74 2e 20 54 68 69 73 20 6d 65 74 68 6f 64   at. This method
181b0 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
181c0 4f 4b 20 6f 6e 20 73 75 63 63 65 73 73 2e 20 49  OK on success. I
181d0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  t..        /// r
181e0 65 74 75 72 6e 73 20 61 6e 20 61 70 70 72 6f 70  eturns an approp
181f0 72 69 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65  riate error code
18200 20 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20   on failure...  
18210 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
18220 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18230 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18240 2f 2f 20 54 68 65 20 78 52 6f 77 69 64 20 6d 65  // The xRowid me
18250 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
18260 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
18270 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
18280 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
18290 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
182a0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
182b0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
182c0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
182d0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75  <param name="pCu
182e0 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rsor">..        
182f0 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
18300 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
18310 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
18320 72 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  r derived struct
18330 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
18340 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
18350 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
18360 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20  ame="rowId">..  
18370 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73        /// Upon s
18380 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72  uccess, this par
18390 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d  ameter must be m
183a0 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61  odified to conta
183b0 69 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20  in the unique.. 
183c0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67         /// integ
183d0 65 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65  er row identifie
183e0 72 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  r for the curren
183f0 74 20 72 6f 77 20 66 6f 72 20 74 68 65 20 73 70  t row for the sp
18400 65 63 69 66 69 65 64 20 63 75 72 73 6f 72 2e 0d  ecified cursor..
18410 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
18420 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
18430 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
18440 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
18450 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
18460 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
18470 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
18480 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
18490 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 77 49 64  ErrorCode xRowId
184a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
184b0 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a  ntPtr pCursor,..
184c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
184d0 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20  long rowId..    
184e0 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
184f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
18500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
18540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
18550 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
18560 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
18570 20 20 20 20 2f 2f 2f 20 41 6c 6c 20 63 68 61 6e      /// All chan
18580 67 65 73 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ges to a virtual
18590 20 74 61 62 6c 65 20 61 72 65 20 6d 61 64 65 20   table are made 
185a0 75 73 69 6e 67 20 74 68 65 20 78 55 70 64 61 74  using the xUpdat
185b0 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  e method...     
185c0 20 20 20 2f 2f 2f 20 54 68 69 73 20 6f 6e 65 20     /// This one 
185d0 6d 65 74 68 6f 64 20 63 61 6e 20 62 65 20 75 73  method can be us
185e0 65 64 20 74 6f 20 69 6e 73 65 72 74 2c 20 64 65  ed to insert, de
185f0 6c 65 74 65 2c 20 6f 72 20 75 70 64 61 74 65 2e  lete, or update.
18600 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18610 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18620 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
18630 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 63 20     /// The argc 
18640 70 61 72 61 6d 65 74 65 72 20 73 70 65 63 69 66  parameter specif
18650 69 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ies the number o
18660 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  f entries in the
18670 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 2f   argv..        /
18680 2f 2f 20 61 72 72 61 79 2e 20 54 68 65 20 76 61  // array. The va
18690 6c 75 65 20 6f 66 20 61 72 67 63 20 77 69 6c 6c  lue of argc will
186a0 20 62 65 20 31 20 66 6f 72 20 61 20 70 75 72 65   be 1 for a pure
186b0 20 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69 6f   delete operatio
186c0 6e 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n or..        //
186d0 2f 20 4e 2b 32 20 66 6f 72 20 61 6e 20 69 6e 73  / N+2 for an ins
186e0 65 72 74 20 6f 72 20 72 65 70 6c 61 63 65 20 6f  ert or replace o
186f0 72 20 75 70 64 61 74 65 20 77 68 65 72 65 20 4e  r update where N
18700 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
18710 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  f..        /// c
18720 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
18730 62 6c 65 2e 20 49 6e 20 74 68 65 20 70 72 65 76  ble. In the prev
18740 69 6f 75 73 20 73 65 6e 74 65 6e 63 65 2c 20 4e  ious sentence, N
18750 20 69 6e 63 6c 75 64 65 73 20 61 6e 79 0d 0a 20   includes any.. 
18760 20 20 20 20 20 20 20 2f 2f 2f 20 68 69 64 64 65         /// hidde
18770 6e 20 63 6f 6c 75 6d 6e 73 2e 0d 0a 20 20 20 20  n columns...    
18780 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
18790 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
187a0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
187b0 20 45 76 65 72 79 20 61 72 67 76 20 65 6e 74 72   Every argv entr
187c0 79 20 77 69 6c 6c 20 68 61 76 65 20 61 20 6e 6f  y will have a no
187d0 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20  n-NULL value in 
187e0 43 20 62 75 74 20 6d 61 79 20 63 6f 6e 74 61 69  C but may contai
187f0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  n..        /// t
18800 68 65 20 53 51 4c 20 76 61 6c 75 65 20 4e 55 4c  he SQL value NUL
18810 4c 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  L. In other word
18820 73 2c 20 69 74 20 69 73 20 61 6c 77 61 79 73 20  s, it is always 
18830 74 72 75 65 20 74 68 61 74 0d 0a 20 20 20 20 20  true that..     
18840 20 20 20 2f 2f 2f 20 61 72 67 76 5b 69 5d 21 3d     /// argv[i]!=
18850 30 20 66 6f 72 20 69 20 62 65 74 77 65 65 6e 20  0 for i between 
18860 30 20 61 6e 64 20 61 72 67 63 2d 31 2e 20 48 6f  0 and argc-1. Ho
18870 77 65 76 65 72 2c 20 69 74 20 6d 69 67 68 74 20  wever, it might 
18880 62 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  be the..        
18890 2f 2f 2f 20 63 61 73 65 20 74 68 61 74 20 73 71  /// case that sq
188a0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
188b0 28 61 72 67 76 5b 69 5d 29 3d 3d 53 51 4c 49 54  (argv[i])==SQLIT
188c0 45 5f 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20  E_NULL...       
188d0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
188e0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
188f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
18900 65 20 61 72 67 76 5b 30 5d 20 70 61 72 61 6d 65  e argv[0] parame
18910 74 65 72 20 69 73 20 74 68 65 20 72 6f 77 69 64  ter is the rowid
18920 20 6f 66 20 61 20 72 6f 77 20 69 6e 20 74 68 65   of a row in the
18930 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
18940 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 62          /// to b
18950 65 20 64 65 6c 65 74 65 64 2e 20 49 66 20 61 72  e deleted. If ar
18960 67 76 5b 30 5d 20 69 73 20 61 6e 20 53 51 4c 20  gv[0] is an SQL 
18970 4e 55 4c 4c 2c 20 74 68 65 6e 20 6e 6f 20 64 65  NULL, then no de
18980 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 0d 0a  letion occurs...
18990 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
189a0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
189b0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
189c0 20 2f 2f 2f 20 54 68 65 20 61 72 67 76 5b 31 5d   /// The argv[1]
189d0 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 74 68   parameter is th
189e0 65 20 72 6f 77 69 64 20 6f 66 20 61 20 6e 65 77  e rowid of a new
189f0 20 72 6f 77 20 74 6f 20 62 65 20 69 6e 73 65 72   row to be inser
18a00 74 65 64 20 69 6e 74 6f 0d 0a 20 20 20 20 20 20  ted into..      
18a10 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61    /// the virtua
18a20 6c 20 74 61 62 6c 65 2e 20 49 66 20 61 72 67 76  l table. If argv
18a30 5b 31 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e 55  [1] is an SQL NU
18a40 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20 20  LL, then the..  
18a50 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
18a60 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 63 68  entation must ch
18a70 6f 6f 73 65 20 61 20 72 6f 77 69 64 20 66 6f 72  oose a rowid for
18a80 20 74 68 65 20 6e 65 77 6c 79 20 69 6e 73 65 72   the newly inser
18a90 74 65 64 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20  ted row...      
18aa0 20 20 2f 2f 2f 20 53 75 62 73 65 71 75 65 6e 74    /// Subsequent
18ab0 20 61 72 67 76 5b 5d 20 65 6e 74 72 69 65 73 20   argv[] entries 
18ac0 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 6f  contain values o
18ad0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  f the columns of
18ae0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
18af0 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c  / virtual table,
18b00 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
18b10 61 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 77  at the columns w
18b20 65 72 65 20 64 65 63 6c 61 72 65 64 2e 20 54 68  ere declared. Th
18b30 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
18b40 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
18b50 20 77 69 6c 6c 20 6d 61 74 63 68 20 74 68 65 20   will match the 
18b60 74 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  table declaratio
18b70 6e 20 74 68 61 74 20 74 68 65 0d 0a 20 20 20 20  n that the..    
18b80 20 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e 65 63 74      /// xConnect
18b90 20 6f 72 20 78 43 72 65 61 74 65 20 6d 65 74 68   or xCreate meth
18ba0 6f 64 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  od made using th
18bb0 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
18bc0 65 5f 76 74 61 62 28 29 0d 0a 20 20 20 20 20 20  e_vtab()..      
18bd0 20 20 2f 2f 2f 20 63 61 6c 6c 2e 20 41 6c 6c 20    /// call. All 
18be0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 61  hidden columns a
18bf0 72 65 20 69 6e 63 6c 75 64 65 64 2e 0d 0a 20 20  re included...  
18c00 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
18c10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18c20 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18c30 2f 2f 20 57 68 65 6e 20 64 6f 69 6e 67 20 61 6e  // When doing an
18c40 20 69 6e 73 65 72 74 20 77 69 74 68 6f 75 74 20   insert without 
18c50 61 20 72 6f 77 69 64 20 28 61 72 67 63 3e 31 2c  a rowid (argc>1,
18c60 20 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20 53   argv[1] is an S
18c70 51 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  QL..        /// 
18c80 4e 55 4c 4c 29 2c 20 74 68 65 20 69 6d 70 6c 65  NULL), the imple
18c90 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 73  mentation must s
18ca0 65 74 20 2a 70 52 6f 77 69 64 20 74 6f 20 74 68  et *pRowid to th
18cb0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0d 0a  e rowid of the..
18cc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 65 77 6c          /// newl
18cd0 79 20 69 6e 73 65 72 74 65 64 20 72 6f 77 3b 20  y inserted row; 
18ce0 74 68 69 73 20 77 69 6c 6c 20 62 65 63 6f 6d 65  this will become
18cf0 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   the value retur
18d00 6e 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ned by the..    
18d10 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
18d20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
18d30 64 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65  d() function. Se
18d40 74 74 69 6e 67 20 74 68 69 73 20 76 61 6c 75 65  tting this value
18d50 20 69 6e 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20   in all the..   
18d60 20 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 20 63       /// other c
18d70 61 73 65 73 20 69 73 20 61 20 68 61 72 6d 6c 65  ases is a harmle
18d80 73 73 20 6e 6f 2d 6f 70 3b 20 74 68 65 20 53 51  ss no-op; the SQ
18d90 4c 69 74 65 20 65 6e 67 69 6e 65 20 69 67 6e 6f  Lite engine igno
18da0 72 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 20  res the..       
18db0 20 2f 2f 2f 20 2a 70 52 6f 77 69 64 20 72 65 74   /// *pRowid ret
18dc0 75 72 6e 20 76 61 6c 75 65 20 69 66 20 61 72 67  urn value if arg
18dd0 63 3d 3d 31 20 6f 72 20 61 72 67 76 5b 31 5d 20  c==1 or argv[1] 
18de0 69 73 20 6e 6f 74 20 61 6e 20 53 51 4c 20 4e 55  is not an SQL NU
18df0 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  LL...        ///
18e00 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
18e10 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
18e20 20 20 20 20 20 20 2f 2f 2f 20 45 61 63 68 20 63        /// Each c
18e30 61 6c 6c 20 74 6f 20 78 55 70 64 61 74 65 20 77  all to xUpdate w
18e40 69 6c 6c 20 66 61 6c 6c 20 69 6e 74 6f 20 6f 6e  ill fall into on
18e50 65 20 6f 66 20 63 61 73 65 73 20 73 68 6f 77 6e  e of cases shown
18e60 20 62 65 6c 6f 77 2e 20 4e 6f 74 65 0d 0a 20 20   below. Note..  
18e70 20 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 72        /// that r
18e80 65 66 65 72 65 6e 63 65 73 20 74 6f 20 61 72 67  eferences to arg
18e90 76 5b 69 5d 20 6d 65 61 6e 20 74 68 65 20 53 51  v[i] mean the SQ
18ea0 4c 20 76 61 6c 75 65 20 68 65 6c 64 20 77 69 74  L value held wit
18eb0 68 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  hin the..       
18ec0 20 2f 2f 2f 20 61 72 67 76 5b 69 5d 20 6f 62 6a   /// argv[i] obj
18ed0 65 63 74 2c 20 6e 6f 74 20 74 68 65 20 61 72 67  ect, not the arg
18ee0 76 5b 69 5d 20 6f 62 6a 65 63 74 20 69 74 73 65  v[i] object itse
18ef0 6c 66 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  lf...        ///
18f00 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
18f10 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20    /// <code>..  
18f20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72        ///     ar
18f30 67 63 20 3d 20 31 0d 0a 20 20 20 20 20 20 20 20  gc = 1..        
18f40 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20  /// </code>..   
18f50 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
18f60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
18f70 20 20 20 20 20 54 68 65 20 73 69 6e 67 6c 65 20       The single 
18f80 72 6f 77 20 77 69 74 68 20 72 6f 77 69 64 20 65  row with rowid e
18f90 71 75 61 6c 20 74 6f 20 61 72 67 76 5b 30 5d 20  qual to argv[0] 
18fa0 69 73 20 64 65 6c 65 74 65 64 2e 20 4e 6f 0d 0a  is deleted. No..
18fb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
18fc0 20 20 20 20 69 6e 73 65 72 74 20 6f 63 63 75 72      insert occur
18fd0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
18fe0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
18ff0 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20   /// <code>..   
19000 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67       ///     arg
19010 63 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20 2f  c > 1..        /
19020 2f 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3d  //     argv[0] =
19030 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f   NULL..        /
19040 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20  // </code>..    
19050 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
19060 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
19070 20 20 20 20 41 20 6e 65 77 20 72 6f 77 20 69 73      A new row is
19080 20 69 6e 73 65 72 74 65 64 20 77 69 74 68 20 61   inserted with a
19090 20 72 6f 77 69 64 20 61 72 67 76 5b 31 5d 20 61   rowid argv[1] a
190a0 6e 64 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20  nd column..     
190b0 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 76     ///         v
190c0 61 6c 75 65 73 20 69 6e 20 61 72 67 76 5b 32 5d  alues in argv[2]
190d0 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20   and following. 
190e0 49 66 20 61 72 67 76 5b 31 5d 20 69 73 20 61 6e  If argv[1] is an
190f0 20 53 51 4c 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20   SQL NULL,..    
19100 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
19110 74 68 65 20 61 20 6e 65 77 20 75 6e 69 71 75 65  the a new unique
19120 20 72 6f 77 69 64 20 69 73 20 67 65 6e 65 72 61   rowid is genera
19130 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
19140 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
19150 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
19160 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20   /// <code>..   
19170 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67       ///     arg
19180 63 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20 2f  c > 1..        /
19190 2f 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3f  //     argv[0] ?
191a0 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f   NULL..        /
191b0 2f 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3d  //     argv[0] =
191c0 20 61 72 67 76 5b 31 5d 0d 0a 20 20 20 20 20 20   argv[1]..      
191d0 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20    /// </code>.. 
191e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
191f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  >..        ///  
19200 20 20 20 20 20 20 20 54 68 65 20 72 6f 77 20 77         The row w
19210 69 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b 30  ith rowid argv[0
19220 5d 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  ] is updated wit
19230 68 20 6e 65 77 20 76 61 6c 75 65 73 20 69 6e 0d  h new values in.
19240 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
19250 20 20 20 20 20 61 72 67 76 5b 32 5d 20 61 6e 64       argv[2] and
19260 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 72 61 6d   following param
19270 65 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  eters...        
19280 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
19290 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d       /// <code>.
192a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
192b0 20 61 72 67 63 20 3e 20 31 0d 0a 20 20 20 20 20   argc > 1..     
192c0 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b     ///     argv[
192d0 30 5d 20 3f 20 4e 55 4c 4c 0d 0a 20 20 20 20 20  0] ? NULL..     
192e0 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b     ///     argv[
192f0 30 5d 20 3f 20 61 72 67 76 5b 31 5d 0d 0a 20 20  0] ? argv[1]..  
19300 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65        /// </code
19310 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
19320 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
19330 2f 2f 20 20 20 20 20 20 20 20 20 54 68 65 20 72  //         The r
19340 6f 77 20 77 69 74 68 20 72 6f 77 69 64 20 61 72  ow with rowid ar
19350 67 76 5b 30 5d 20 69 73 20 75 70 64 61 74 65 64  gv[0] is updated
19360 20 77 69 74 68 20 72 6f 77 69 64 20 61 72 67 76   with rowid argv
19370 5b 31 5d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  [1]..        ///
19380 20 20 20 20 20 20 20 20 20 61 6e 64 20 6e 65 77           and new
19390 20 76 61 6c 75 65 73 20 69 6e 20 61 72 67 76 5b   values in argv[
193a0 32 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67  2] and following
193b0 20 70 61 72 61 6d 65 74 65 72 73 2e 20 54 68 69   parameters. Thi
193c0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  s..        ///  
193d0 20 20 20 20 20 20 20 77 69 6c 6c 20 6f 63 63 75         will occu
193e0 72 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74  r when an SQL st
193f0 61 74 65 6d 65 6e 74 20 75 70 64 61 74 65 73 20  atement updates 
19400 61 20 72 6f 77 69 64 2c 20 61 73 20 69 6e 0d 0a  a rowid, as in..
19410 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
19420 20 20 20 20 74 68 65 20 73 74 61 74 65 6d 65 6e      the statemen
19430 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t:..        /// 
19440 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
19450 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20   /// <code>..   
19460 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
19470 20 20 20 20 20 55 50 44 41 54 45 20 74 61 62 6c       UPDATE tabl
19480 65 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77 69  e SET rowid=rowi
19490 64 2b 31 20 57 48 45 52 45 20 2e 2e 2e 3b 0d 0a  d+1 WHERE ...;..
194a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f          /// </co
194b0 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
194c0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
194d0 20 2f 2f 2f 20 54 68 65 20 78 55 70 64 61 74 65   /// The xUpdate
194e0 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74   method must ret
194f0 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66  urn SQLITE_OK if
19500 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 69 74 20   and only if it 
19510 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
19520 73 75 63 63 65 73 73 66 75 6c 2e 20 49 66 20 61  successful. If a
19530 20 66 61 69 6c 75 72 65 20 6f 63 63 75 72 73 2c   failure occurs,
19540 20 74 68 65 20 78 55 70 64 61 74 65 20 6d 75 73   the xUpdate mus
19550 74 20 72 65 74 75 72 6e 20 61 6e 0d 0a 20 20 20  t return an..   
19560 20 20 20 20 20 2f 2f 2f 20 61 70 70 72 6f 70 72       /// appropr
19570 69 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e  iate error code.
19580 20 4f 6e 20 61 20 66 61 69 6c 75 72 65 2c 20 74   On a failure, t
19590 68 65 20 70 56 54 61 62 2d 3e 7a 45 72 72 4d 73  he pVTab->zErrMs
195a0 67 20 65 6c 65 6d 65 6e 74 0d 0a 20 20 20 20 20  g element..     
195b0 20 20 20 2f 2f 2f 20 6d 61 79 20 6f 70 74 69 6f     /// may optio
195c0 6e 61 6c 6c 79 20 62 65 20 72 65 70 6c 61 63 65  nally be replace
195d0 64 20 77 69 74 68 20 65 72 72 6f 72 20 6d 65 73  d with error mes
195e0 73 61 67 65 20 74 65 78 74 20 73 74 6f 72 65 64  sage text stored
195f0 20 69 6e 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20   in memory..    
19600 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 65      /// allocate
19610 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 75 73  d from SQLite us
19620 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 73 75  ing functions su
19630 63 68 20 61 73 20 73 71 6c 69 74 65 33 5f 6d 70  ch as sqlite3_mp
19640 72 69 6e 74 66 28 29 20 6f 72 0d 0a 20 20 20 20  rintf() or..    
19650 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
19660 6d 61 6c 6c 6f 63 28 29 2e 0d 0a 20 20 20 20 20  malloc()...     
19670 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
19680 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
19690 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
196a0 49 66 20 74 68 65 20 78 55 70 64 61 74 65 20 6d  If the xUpdate m
196b0 65 74 68 6f 64 20 76 69 6f 6c 61 74 65 73 20 73  ethod violates s
196c0 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f  ome constraint o
196d0 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
196e0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
196f0 20 28 69 6e 63 6c 75 64 69 6e 67 2c 20 62 75 74   (including, but
19700 20 6e 6f 74 20 6c 69 6d 69 74 65 64 20 74 6f 2c   not limited to,
19710 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73   attempting to s
19720 74 6f 72 65 20 61 20 76 61 6c 75 65 20 6f 66 20  tore a value of 
19730 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
19740 20 77 72 6f 6e 67 20 64 61 74 61 74 79 70 65 2c   wrong datatype,
19750 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73   attempting to s
19760 74 6f 72 65 20 61 20 76 61 6c 75 65 20 74 68 61  tore a value tha
19770 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 6f  t is too large o
19780 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  r..        /// t
19790 6f 6f 20 73 6d 61 6c 6c 2c 20 6f 72 20 61 74 74  oo small, or att
197a0 65 6d 70 74 69 6e 67 20 74 6f 20 63 68 61 6e 67  empting to chang
197b0 65 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76 61  e a read-only va
197c0 6c 75 65 29 20 74 68 65 6e 20 74 68 65 0d 0a 20  lue) then the.. 
197d0 20 20 20 20 20 20 20 2f 2f 2f 20 78 55 70 64 61         /// xUpda
197e0 74 65 20 6d 75 73 74 20 66 61 69 6c 20 77 69 74  te must fail wit
197f0 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  h an appropriate
19800 20 65 72 72 6f 72 20 63 6f 64 65 2e 0d 0a 20 20   error code...  
19810 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
19820 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
19830 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
19840 2f 2f 20 54 68 65 72 65 20 6d 69 67 68 74 20 62  // There might b
19850 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 71  e one or more sq
19860 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
19870 72 20 6f 62 6a 65 63 74 73 20 6f 70 65 6e 20 61  r objects open a
19880 6e 64 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f  nd in..        /
19890 2f 2f 20 75 73 65 20 6f 6e 20 74 68 65 20 76 69  // use on the vi
198a0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 73 74  rtual table inst
198b0 61 6e 63 65 20 61 6e 64 20 70 65 72 68 61 70 73  ance and perhaps
198c0 20 65 76 65 6e 20 6f 6e 20 74 68 65 20 72 6f 77   even on the row
198d0 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   of..        ///
198e0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
198f0 6c 65 20 77 68 65 6e 20 74 68 65 20 78 55 70 64  le when the xUpd
19900 61 74 65 20 6d 65 74 68 6f 64 20 69 73 20 69 6e  ate method is in
19910 76 6f 6b 65 64 2e 20 54 68 65 0d 0a 20 20 20 20  voked. The..    
19920 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e      /// implemen
19930 74 61 74 69 6f 6e 20 6f 66 20 78 55 70 64 61 74  tation of xUpdat
19940 65 20 6d 75 73 74 20 62 65 20 70 72 65 70 61 72  e must be prepar
19950 65 64 20 66 6f 72 20 61 74 74 65 6d 70 74 73 20  ed for attempts 
19960 74 6f 20 64 65 6c 65 74 65 0d 0a 20 20 20 20 20  to delete..     
19970 20 20 20 2f 2f 2f 20 6f 72 20 6d 6f 64 69 66 79     /// or modify
19980 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62   rows of the tab
19990 6c 65 20 6f 75 74 20 66 72 6f 6d 20 6f 74 68 65  le out from othe
199a0 72 20 65 78 69 73 74 69 6e 67 20 63 75 72 73 6f  r existing curso
199b0 72 73 2e 20 49 66 20 74 68 65 0d 0a 20 20 20 20  rs. If the..    
199c0 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
199d0 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 61 63 63  table cannot acc
199e0 6f 6d 6d 6f 64 61 74 65 20 73 75 63 68 20 63 68  ommodate such ch
199f0 61 6e 67 65 73 2c 20 74 68 65 20 78 55 70 64 61  anges, the xUpda
19a00 74 65 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20  te method..     
19a10 20 20 20 2f 2f 2f 20 6d 75 73 74 20 72 65 74 75     /// must retu
19a20 72 6e 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  rn an error code
19a30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
19a40 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
19a50 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
19a60 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 55 70 64      /// The xUpd
19a70 61 74 65 20 6d 65 74 68 6f 64 20 69 73 20 6f 70  ate method is op
19a80 74 69 6f 6e 61 6c 2e 20 49 66 20 74 68 65 20 78  tional. If the x
19a90 55 70 64 61 74 65 20 70 6f 69 6e 74 65 72 20 69  Update pointer i
19aa0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
19ab0 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  // sqlite3_modul
19ac0 65 20 66 6f 72 20 61 20 76 69 72 74 75 61 6c 20  e for a virtual 
19ad0 74 61 62 6c 65 20 69 73 20 61 20 4e 55 4c 4c 20  table is a NULL 
19ae0 70 6f 69 6e 74 65 72 2c 20 74 68 65 6e 20 74 68  pointer, then th
19af0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
19b00 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20  irtual table is 
19b10 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20  read-only...    
19b20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
19b30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
19b40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
19b50 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
19b60 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
19b70 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
19b80 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
19b90 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
19ba0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
19bb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
19bc0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
19bd0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
19be0 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20  "argc">..       
19bf0 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
19c00 6f 66 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66 69  of new or modifi
19c10 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ed column values
19c20 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 0d 0a 20   contained in.. 
19c30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
19c40 6d 72 65 66 20 6e 61 6d 65 3d 22 61 72 67 76 22  mref name="argv"
19c50 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f   />...        //
19c60 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
19c70 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
19c80 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20  ame="argv">..   
19c90 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72       /// The arr
19ca0 61 79 20 6f 66 20 6e 61 74 69 76 65 20 70 6f 69  ay of native poi
19cb0 6e 74 65 72 73 20 74 6f 20 73 71 6c 69 74 65 33  nters to sqlite3
19cc0 5f 76 61 6c 75 65 20 73 74 72 75 63 74 75 72 65  _value structure
19cd0 73 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20  s containing..  
19ce0 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6e 65        /// the ne
19cf0 77 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 63 6f  w or modified co
19d00 6c 75 6d 6e 20 76 61 6c 75 65 73 2c 20 69 66 20  lumn values, if 
19d10 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  any...        //
19d20 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
19d30 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
19d40 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20  ame="rowId">..  
19d50 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73        /// Upon s
19d60 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72  uccess, this par
19d70 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d  ameter must be m
19d80 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61  odified to conta
19d90 69 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20  in the unique.. 
19da0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67         /// integ
19db0 65 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65  er row identifie
19dc0 72 20 66 6f 72 20 74 68 65 20 72 6f 77 20 74 68  r for the row th
19dd0 61 74 20 77 61 73 20 69 6e 73 65 72 74 65 64 2c  at was inserted,
19de0 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20   if any...      
19df0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
19e00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
19e10 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
19e20 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
19e30 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
19e40 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
19e50 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
19e60 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
19e70 64 65 20 78 55 70 64 61 74 65 28 0d 0a 20 20 20  de xUpdate(..   
19e80 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
19e90 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
19ea0 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
19eb0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
19ec0 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20  r argv,..       
19ed0 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f       ref long ro
19ee0 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  wId..           
19ef0 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
19f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
19f50 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
19f60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
19f70 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
19f80 20 54 68 69 73 20 6d 65 74 68 6f 64 20 62 65 67   This method beg
19f90 69 6e 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ins a transactio
19fa0 6e 20 6f 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n on a virtual t
19fb0 61 62 6c 65 2e 20 54 68 69 73 20 69 73 20 6d 65  able. This is me
19fc0 74 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  thod..        //
19fd0 2f 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54  / is optional. T
19fe0 68 65 20 78 42 65 67 69 6e 20 70 6f 69 6e 74 65  he xBegin pointe
19ff0 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d 6f 64  r of sqlite3_mod
1a000 75 6c 65 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  ule may be NULL.
1a010 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1a020 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1a030 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1a040 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1a050 6f 64 20 69 73 20 61 6c 77 61 79 73 20 66 6f 6c  od is always fol
1a060 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 63 61 6c  lowed by one cal
1a070 6c 20 74 6f 20 65 69 74 68 65 72 20 74 68 65 20  l to either the 
1a080 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20 20 20 20  xCommit or..    
1a090 20 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c 62 61 63      /// xRollbac
1a0a0 6b 20 6d 65 74 68 6f 64 2e 20 56 69 72 74 75 61  k method. Virtua
1a0b0 6c 20 74 61 62 6c 65 20 74 72 61 6e 73 61 63 74  l table transact
1a0c0 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74  ions do not nest
1a0d0 2c 20 73 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  , so the..      
1a0e0 20 20 2f 2f 2f 20 78 42 65 67 69 6e 20 6d 65 74    /// xBegin met
1a0f0 68 6f 64 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  hod will not be 
1a100 69 6e 76 6f 6b 65 64 20 6d 6f 72 65 20 74 68 61  invoked more tha
1a110 6e 20 6f 6e 63 65 20 6f 6e 20 61 20 73 69 6e 67  n once on a sing
1a120 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
1a130 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 69  virtual table wi
1a140 74 68 6f 75 74 20 61 6e 20 69 6e 74 65 72 76 65  thout an interve
1a150 6e 69 6e 67 20 63 61 6c 6c 20 74 6f 20 65 69 74  ning call to eit
1a160 68 65 72 20 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a  her xCommit or..
1a170 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 52 6f 6c          /// xRol
1a180 6c 62 61 63 6b 2e 20 4d 75 6c 74 69 70 6c 65 20  lback. Multiple 
1a190 63 61 6c 6c 73 20 74 6f 20 6f 74 68 65 72 20 6d  calls to other m
1a1a0 65 74 68 6f 64 73 20 63 61 6e 20 61 6e 64 20 6c  ethods can and l
1a1b0 69 6b 65 6c 79 20 77 69 6c 6c 0d 0a 20 20 20 20  ikely will..    
1a1c0 20 20 20 20 2f 2f 2f 20 6f 63 63 75 72 20 69 6e      /// occur in
1a1d0 20 62 65 74 77 65 65 6e 20 74 68 65 20 78 42 65   between the xBe
1a1e0 67 69 6e 20 61 6e 64 20 74 68 65 20 63 6f 72 72  gin and the corr
1a1f0 65 73 70 6f 6e 64 69 6e 67 20 78 43 6f 6d 6d 69  esponding xCommi
1a200 74 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t or..        //
1a210 2f 20 78 52 6f 6c 6c 62 61 63 6b 2e 0d 0a 20 20  / xRollback...  
1a220 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1a230 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1a240 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1a250 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1a260 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
1a270 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
1a280 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
1a290 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
1a2a0 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
1a2b0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1a2c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1a2d0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1a2e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1a2f0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1a300 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1a310 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1a320 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1a330 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42 65  iteErrorCode xBe
1a340 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  gin(..          
1a350 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
1a360 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1a370 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1a380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a3c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1a3d0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1a3e0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1a3f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1a400 20 6d 65 74 68 6f 64 20 73 69 67 6e 61 6c 73 20   method signals 
1a410 74 68 65 20 73 74 61 72 74 20 6f 66 20 61 20 74  the start of a t
1a420 77 6f 2d 70 68 61 73 65 20 63 6f 6d 6d 69 74 20  wo-phase commit 
1a430 6f 6e 20 61 20 76 69 72 74 75 61 6c 0d 0a 20 20  on a virtual..  
1a440 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e        /// table.
1a450 20 54 68 69 73 20 69 73 20 6d 65 74 68 6f 64 20   This is method 
1a460 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68 65  is optional. The
1a470 20 78 53 79 6e 63 20 70 6f 69 6e 74 65 72 20 6f   xSync pointer o
1a480 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  f..        /// s
1a490 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61  qlite3_module ma
1a4a0 79 20 62 65 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20  y be NULL...    
1a4b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1a4c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1a4d0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1a4e0 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
1a4f0 6f 6e 6c 79 20 69 6e 76 6f 6b 65 64 20 61 66 74  only invoked aft
1a500 65 72 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 78  er call to the x
1a510 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 61 6e 64  Begin method and
1a520 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72  ..        /// pr
1a530 69 6f 72 20 74 6f 20 61 6e 20 78 43 6f 6d 6d 69  ior to an xCommi
1a540 74 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 2e 20  t or xRollback. 
1a550 49 6e 20 6f 72 64 65 72 20 74 6f 20 69 6d 70 6c  In order to impl
1a560 65 6d 65 6e 74 20 74 77 6f 2d 70 68 61 73 65 0d  ement two-phase.
1a570 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d  .        /// com
1a580 6d 69 74 2c 20 74 68 65 20 78 53 79 6e 63 20 6d  mit, the xSync m
1a590 65 74 68 6f 64 20 6f 6e 20 61 6c 6c 20 76 69 72  ethod on all vir
1a5a0 74 75 61 6c 20 74 61 62 6c 65 73 20 69 73 20 69  tual tables is i
1a5b0 6e 76 6f 6b 65 64 20 70 72 69 6f 72 20 74 6f 0d  nvoked prior to.
1a5c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 76  .        /// inv
1a5d0 6f 6b 69 6e 67 20 74 68 65 20 78 43 6f 6d 6d 69  oking the xCommi
1a5e0 74 20 6d 65 74 68 6f 64 20 6f 6e 20 61 6e 79 20  t method on any 
1a5f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 49  virtual table. I
1a600 66 20 61 6e 79 20 6f 66 20 74 68 65 0d 0a 20 20  f any of the..  
1a610 20 20 20 20 20 20 2f 2f 2f 20 78 53 79 6e 63 20        /// xSync 
1a620 6d 65 74 68 6f 64 73 20 66 61 69 6c 2c 20 74 68  methods fail, th
1a630 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  e entire transac
1a640 74 69 6f 6e 20 69 73 20 72 6f 6c 6c 65 64 20 62  tion is rolled b
1a650 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ack...        //
1a660 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1a670 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1a680 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1a690 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
1a6a0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
1a6b0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
1a6c0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
1a6d0 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
1a6e0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
1a6f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1a700 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1a710 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1a720 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1a730 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1a740 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1a750 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1a760 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1a770 43 6f 64 65 20 78 53 79 6e 63 28 0d 0a 20 20 20  Code xSync(..   
1a780 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1a790 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20  pVtab..         
1a7a0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
1a7b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1a7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a7f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1a800 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1a810 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1a820 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1a830 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 63  // This method c
1a840 61 75 73 65 73 20 61 20 76 69 72 74 75 61 6c 20  auses a virtual 
1a850 74 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69 6f  table transactio
1a860 6e 20 74 6f 20 63 6f 6d 6d 69 74 2e 20 54 68 69  n to commit. Thi
1a870 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s is..        //
1a880 2f 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69  / method is opti
1a890 6f 6e 61 6c 2e 20 54 68 65 20 78 43 6f 6d 6d 69  onal. The xCommi
1a8a0 74 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c  t pointer of sql
1a8b0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20  ite3_module may 
1a8c0 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1a8d0 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f  NULL...        /
1a8e0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1a8f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1a900 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 63 61          /// A ca
1a910 6c 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f  ll to this metho
1a920 64 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73  d always follows
1a930 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f   a prior call to
1a940 20 78 42 65 67 69 6e 20 61 6e 64 0d 0a 20 20 20   xBegin and..   
1a950 20 20 20 20 20 2f 2f 2f 20 78 53 79 6e 63 2e 0d       /// xSync..
1a960 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1a970 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1a980 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1a990 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1a9a0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
1a9b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1a9c0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1a9d0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
1a9e0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
1a9f0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
1aa00 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1aa10 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1aa20 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
1aa30 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
1aa40 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
1aa50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
1aa60 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1aa70 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1aa80 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20  xCommit(..      
1aa90 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
1aaa0 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
1aab0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1aac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aaf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab00 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ab10 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1ab20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1ab30 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1ab40 54 68 69 73 20 6d 65 74 68 6f 64 20 63 61 75 73  This method caus
1ab50 65 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  es a virtual tab
1ab60 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  le transaction t
1ab70 6f 20 72 6f 6c 6c 62 61 63 6b 2e 20 54 68 69 73  o rollback. This
1ab80 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   is..        ///
1ab90 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f   method is optio
1aba0 6e 61 6c 2e 20 54 68 65 20 78 52 6f 6c 6c 62 61  nal. The xRollba
1abb0 63 6b 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71  ck pointer of sq
1abc0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79  lite3_module may
1abd0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   be..        ///
1abe0 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20   NULL...        
1abf0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
1ac00 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1ac10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 63  .        /// A c
1ac20 61 6c 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68  all to this meth
1ac30 6f 64 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  od always follow
1ac40 73 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74  s a prior call t
1ac50 6f 20 78 42 65 67 69 6e 2e 0d 0a 20 20 20 20 20  o xBegin...     
1ac60 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1ac70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1ac80 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1ac90 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1aca0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
1acb0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
1acc0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1acd0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
1ace0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
1acf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1ad00 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1ad10 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1ad20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
1ad30 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
1ad40 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
1ad50 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1ad60 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1ad70 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62  ErrorCode xRollb
1ad80 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
1ad90 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1adb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1adc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1add0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ade0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1adf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1ae10 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1ae20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1ae30 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1ae40 20 6d 65 74 68 6f 64 20 70 72 6f 76 69 64 65 73   method provides
1ae50 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20 74 68   notification th
1ae60 61 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  at the virtual t
1ae70 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
1ae80 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
1ae90 20 74 68 61 74 20 74 68 65 20 76 69 72 74 75 61   that the virtua
1aea0 6c 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  l table will be 
1aeb0 67 69 76 65 6e 20 61 20 6e 65 77 20 6e 61 6d 65  given a new name
1aec0 2e 20 49 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  . If..        //
1aed0 2f 20 74 68 69 73 20 6d 65 74 68 6f 64 20 72 65  / this method re
1aee0 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 20  turns SQLITE_OK 
1aef0 74 68 65 6e 20 53 51 4c 69 74 65 20 72 65 6e 61  then SQLite rena
1af00 6d 65 73 20 74 68 65 20 74 61 62 6c 65 2e 20 49  mes the table. I
1af10 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  f..        /// t
1af20 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72  his method retur
1af30 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
1af40 20 74 68 65 6e 20 74 68 65 20 72 65 6e 61 6d 69   then the renami
1af50 6e 67 20 69 73 20 70 72 65 76 65 6e 74 65 64 2e  ng is prevented.
1af60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1af70 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1af80 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1af90 20 20 20 2f 2f 2f 20 54 68 65 20 78 52 65 6e 61     /// The xRena
1afa0 6d 65 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71  me method is req
1afb0 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20  uired for every 
1afc0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
1afd0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
1afe0 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
1aff0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1b000 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
1b010 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1b020 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1b030 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
1b040 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
1b050 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
1b060 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
1b070 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
1b080 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b090 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1b0a0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1b0b0 22 6e 41 72 67 22 3e 0d 0a 20 20 20 20 20 20 20  "nArg">..       
1b0c0 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
1b0d0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
1b0e0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69  the function bei
1b0f0 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20 20 20 20  ng sought...    
1b100 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1b110 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1b120 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d 65  aram name="zName
1b130 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1b140 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
1b150 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 73  function being s
1b160 6f 75 67 68 74 2e 0d 0a 20 20 20 20 20 20 20 20  ought...        
1b170 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1b180 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1b190 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22   name="callback"
1b1a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
1b1b0 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
1b1c0 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
1b1d0 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
1b1e0 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20  contain the..   
1b1f0 20 20 20 20 20 2f 2f 2f 20 64 65 6c 65 67 61 74       /// delegat
1b200 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  e responsible fo
1b210 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  r implementing t
1b220 68 65 20 73 70 65 63 69 66 69 65 64 20 66 75 6e  he specified fun
1b230 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ction...        
1b240 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1b250 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1b260 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61   name="pClientDa
1b270 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ta">..        //
1b280 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
1b290 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
1b2a0 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
1b2b0 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a  to contain the..
1b2c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69          /// nati
1b2d0 76 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f 69  ve user-data poi
1b2e0 6e 74 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  nter associated 
1b2f0 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  with..        //
1b300 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65  / <paramref name
1b310 3d 22 63 61 6c 6c 62 61 63 6b 22 20 2f 3e 2e 0d  ="callback" />..
1b320 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1b330 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1b340 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1b350 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
1b360 72 6f 20 69 66 20 74 68 65 20 73 70 65 63 69 66  ro if the specif
1b370 69 65 64 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  ied function was
1b380 20 66 6f 75 6e 64 3b 20 7a 65 72 6f 20 6f 74 68   found; zero oth
1b390 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 20 20 20  erwise...       
1b3a0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1b3b0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 78 46 69  .        int xFi
1b3c0 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
1b3d0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1b3e0 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
1b3f0 20 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d 0a 20      int nArg,.. 
1b400 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1b410 72 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  r zName,..      
1b420 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65        ref SQLite
1b430 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63  Callback callbac
1b440 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1b450 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65  ref IntPtr pClie
1b460 6e 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ntData..        
1b470 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1b480 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1b490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1b4d0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1b4e0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1b4f0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1b500 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1b510 70 72 6f 76 69 64 65 73 20 6e 6f 74 69 66 69 63  provides notific
1b520 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 76  ation that the v
1b530 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
1b540 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
1b550 65 6e 74 61 74 69 6f 6e 20 74 68 61 74 20 74 68  entation that th
1b560 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
1b570 77 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 61 20  will be given a 
1b580 6e 65 77 20 6e 61 6d 65 2e 20 49 66 0d 0a 20 20  new name. If..  
1b590 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d        /// this m
1b5a0 65 74 68 6f 64 20 72 65 74 75 72 6e 73 20 53 51  ethod returns SQ
1b5b0 4c 49 54 45 5f 4f 4b 20 74 68 65 6e 20 53 51 4c  LITE_OK then SQL
1b5c0 69 74 65 20 72 65 6e 61 6d 65 73 20 74 68 65 20  ite renames the 
1b5d0 74 61 62 6c 65 2e 20 49 66 0d 0a 20 20 20 20 20  table. If..     
1b5e0 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74 68     /// this meth
1b5f0 6f 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  od returns an er
1b600 72 6f 72 20 63 6f 64 65 20 74 68 65 6e 20 74 68  ror code then th
1b610 65 20 72 65 6e 61 6d 69 6e 67 20 69 73 20 70 72  e renaming is pr
1b620 65 76 65 6e 74 65 64 2e 0d 0a 20 20 20 20 20 20  evented...      
1b630 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1b640 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1b650 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1b660 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  he xRename metho
1b670 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  d is required fo
1b680 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20  r every virtual 
1b690 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
1b6a0 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
1b6b0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
1b6c0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1b6d0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1b6e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1b6f0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
1b700 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1b710 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
1b720 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
1b730 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
1b740 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
1b750 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1b760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1b770 61 6d 20 6e 61 6d 65 3d 22 7a 4e 65 77 22 3e 0d  am name="zNew">.
1b780 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1b790 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
1b7a0 74 6f 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63  to the UTF-8 enc
1b7b0 6f 64 65 64 20 73 74 72 69 6e 67 20 63 6f 6e 74  oded string cont
1b7c0 61 69 6e 69 6e 67 20 74 68 65 20 6e 65 77 0d 0a  aining the new..
1b7d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65          /// name
1b7e0 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c   for the virtual
1b7f0 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
1b800 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1b810 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1b820 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1b830 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1b840 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1b850 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b860 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1b870 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1b880 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20  e xRename(..    
1b890 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1b8a0 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
1b8b0 20 20 20 49 6e 74 50 74 72 20 7a 4e 65 77 0d 0a     IntPtr zNew..
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1b8d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1b8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b920 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1b930 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1b940 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1b950 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 73          /// Thes
1b960 65 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69 64  e methods provid
1b970 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
1b980 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
1b990 6f 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f  on an..        /
1b9a0 2f 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79 20 74  // opportunity t
1b9b0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65 73 74  o implement nest
1b9c0 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ed transactions.
1b9d0 20 54 68 65 79 20 61 72 65 20 61 6c 77 61 79 73   They are always
1b9e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70  ..        /// op
1b9f0 74 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c 6c 20  tional and will 
1ba00 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20 69  only be called i
1ba10 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  n SQLite version
1ba20 20 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74 65 72   3.7.7 and later
1ba30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ba40 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1ba50 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
1ba60 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78 53 61      /// When xSa
1ba70 76 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69 73 20  vepoint(X,N) is 
1ba80 69 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20 69 73  invoked, that is
1ba90 20 61 20 73 69 67 6e 61 6c 20 74 6f 20 74 68 65   a signal to the
1baa0 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20   virtual..      
1bab0 20 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20 74 68    /// table X th
1bac0 61 74 20 69 74 20 73 68 6f 75 6c 64 20 73 61 76  at it should sav
1bad0 65 20 69 74 73 20 63 75 72 72 65 6e 74 20 73 74  e its current st
1bae0 61 74 65 20 61 73 20 73 61 76 65 70 6f 69 6e 74  ate as savepoint
1baf0 20 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20 20 2f   N. A..        /
1bb00 2f 2f 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  // subsequent ca
1bb10 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54  ll to xRollbackT
1bb20 6f 28 58 2c 52 29 20 6d 65 61 6e 73 20 74 68 61  o(X,R) means tha
1bb30 74 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  t the state of t
1bb40 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1bb50 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 68  virtual table sh
1bb60 6f 75 6c 64 20 72 65 74 75 72 6e 20 74 6f 20 77  ould return to w
1bb70 68 61 74 20 69 74 20 77 61 73 20 77 68 65 6e 20  hat it was when 
1bb80 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 52 29 20  xSavepoint(X,R) 
1bb90 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  was..        ///
1bba0 20 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20 54 68   last called. Th
1bbb0 65 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62  e call to xRollb
1bbc0 61 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c 6c 20  ackTo(X,R) will 
1bbd0 69 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 0d 0a  invalidate all..
1bbe0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 61 76 65          /// save
1bbf0 70 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e 52 3b  points with N>R;
1bc00 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 76   none of the inv
1bc10 61 6c 69 64 65 64 20 73 61 76 65 70 6f 69 6e 74  alided savepoint
1bc20 73 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  s will be..     
1bc30 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62 61     /// rolled ba
1bc40 63 6b 20 6f 72 20 72 65 6c 65 61 73 65 64 20 77  ck or released w
1bc50 69 74 68 6f 75 74 20 66 69 72 73 74 20 62 65 69  ithout first bei
1bc60 6e 67 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 64  ng reinitialized
1bc70 20 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20 20 20   by a call..    
1bc80 20 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61 76 65      /// to xSave
1bc90 70 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c 6c 20  point(). A call 
1bca0 74 6f 20 78 52 65 6c 65 61 73 65 28 58 2c 4d 29  to xRelease(X,M)
1bcb0 20 69 6e 76 61 6c 69 64 61 74 65 73 20 61 6c 6c   invalidates all
1bcc0 20 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20 20 20   savepoints..   
1bcd0 20 20 20 20 20 2f 2f 2f 20 77 68 65 72 65 20 4e       /// where N
1bce0 3e 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  >=M...        //
1bcf0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1bd00 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1bd10 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65 20         /// None 
1bd20 6f 66 20 74 68 65 20 78 53 61 76 65 70 6f 69 6e  of the xSavepoin
1bd30 74 28 29 2c 20 78 52 65 6c 65 61 73 65 28 29 2c  t(), xRelease(),
1bd40 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28   or xRollbackTo(
1bd50 29 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 0d 0a  ) methods will..
1bd60 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65 72          /// ever
1bd70 20 62 65 20 63 61 6c 6c 65 64 20 65 78 63 65 70   be called excep
1bd80 74 20 69 6e 20 62 65 74 77 65 65 6e 20 63 61 6c  t in between cal
1bd90 6c 73 20 74 6f 20 78 42 65 67 69 6e 28 29 20 61  ls to xBegin() a
1bda0 6e 64 20 65 69 74 68 65 72 0d 0a 20 20 20 20 20  nd either..     
1bdb0 20 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28 29     /// xCommit()
1bdc0 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28 29 2e   or xRollback().
1bdd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1bde0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1bdf0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1be00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1be10 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
1be20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1be30 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
1be40 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
1be50 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
1be60 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
1be70 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1be80 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1be90 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e   name="iSavepoin
1bea0 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
1beb0 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65   This is an inte
1bec0 67 65 72 20 69 64 65 6e 74 69 66 69 65 72 20 75  ger identifier u
1bed0 6e 64 65 72 20 77 68 69 63 68 20 74 68 65 20 74  nder which the t
1bee0 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
1bef0 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   of..        ///
1bf00 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
1bf10 6c 65 20 73 68 6f 75 6c 64 20 62 65 20 73 61 76  le should be sav
1bf20 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
1bf30 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1bf40 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1bf50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
1bf60 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
1bf70 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
1bf80 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
1bf90 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
1bfa0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53  LiteErrorCode xS
1bfb0 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20  avepoint(..     
1bfc0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
1bfd0 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
1bfe0 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
1bff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1c000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1c010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c050 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1c060 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1c070 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
1c080 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1c090 65 73 65 20 6d 65 74 68 6f 64 73 20 70 72 6f 76  ese methods prov
1c0a0 69 64 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ide the virtual 
1c0b0 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
1c0c0 74 69 6f 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20  tion an..       
1c0d0 20 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79   /// opportunity
1c0e0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65   to implement ne
1c0f0 73 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  sted transaction
1c100 73 2e 20 54 68 65 79 20 61 72 65 20 61 6c 77 61  s. They are alwa
1c110 79 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ys..        /// 
1c120 6f 70 74 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c  optional and wil
1c130 6c 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64  l only be called
1c140 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69   in SQLite versi
1c150 6f 6e 20 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74  on 3.7.7 and lat
1c160 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  er...        ///
1c170 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1c180 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1c190 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78        /// When x
1c1a0 53 61 76 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69  Savepoint(X,N) i
1c1b0 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20  s invoked, that 
1c1c0 69 73 20 61 20 73 69 67 6e 61 6c 20 74 6f 20 74  is a signal to t
1c1d0 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20  he virtual..    
1c1e0 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20      /// table X 
1c1f0 74 68 61 74 20 69 74 20 73 68 6f 75 6c 64 20 73  that it should s
1c200 61 76 65 20 69 74 73 20 63 75 72 72 65 6e 74 20  ave its current 
1c210 73 74 61 74 65 20 61 73 20 73 61 76 65 70 6f 69  state as savepoi
1c220 6e 74 20 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20  nt N. A..       
1c230 20 2f 2f 2f 20 73 75 62 73 65 71 75 65 6e 74 20   /// subsequent 
1c240 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63  call to xRollbac
1c250 6b 54 6f 28 58 2c 52 29 20 6d 65 61 6e 73 20 74  kTo(X,R) means t
1c260 68 61 74 20 74 68 65 20 73 74 61 74 65 20 6f 66  hat the state of
1c270 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1c280 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  / virtual table 
1c290 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 74 6f  should return to
1c2a0 20 77 68 61 74 20 69 74 20 77 61 73 20 77 68 65   what it was whe
1c2b0 6e 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 52  n xSavepoint(X,R
1c2c0 29 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f  ) was..        /
1c2d0 2f 2f 20 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20  // last called. 
1c2e0 54 68 65 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c  The call to xRol
1c2f0 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c  lbackTo(X,R) wil
1c300 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  l invalidate all
1c310 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 61  ..        /// sa
1c320 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e  vepoints with N>
1c330 52 3b 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69  R; none of the i
1c340 6e 76 61 6c 69 64 65 64 20 73 61 76 65 70 6f 69  nvalided savepoi
1c350 6e 74 73 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  nts will be..   
1c360 20 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20       /// rolled 
1c370 62 61 63 6b 20 6f 72 20 72 65 6c 65 61 73 65 64  back or released
1c380 20 77 69 74 68 6f 75 74 20 66 69 72 73 74 20 62   without first b
1c390 65 69 6e 67 20 72 65 69 6e 69 74 69 61 6c 69 7a  eing reinitializ
1c3a0 65 64 20 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20  ed by a call..  
1c3b0 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61        /// to xSa
1c3c0 76 65 70 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c  vepoint(). A cal
1c3d0 6c 20 74 6f 20 78 52 65 6c 65 61 73 65 28 58 2c  l to xRelease(X,
1c3e0 4d 29 20 69 6e 76 61 6c 69 64 61 74 65 73 20 61  M) invalidates a
1c3f0 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20  ll savepoints.. 
1c400 20 20 20 20 20 20 20 2f 2f 2f 20 77 68 65 72 65         /// where
1c410 20 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20   N>=M...        
1c420 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
1c430 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1c440 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
1c450 65 20 6f 66 20 74 68 65 20 78 53 61 76 65 70 6f  e of the xSavepo
1c460 69 6e 74 28 29 2c 20 78 52 65 6c 65 61 73 65 28  int(), xRelease(
1c470 29 2c 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54  ), or xRollbackT
1c480 6f 28 29 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c  o() methods will
1c490 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 76  ..        /// ev
1c4a0 65 72 20 62 65 20 63 61 6c 6c 65 64 20 65 78 63  er be called exc
1c4b0 65 70 74 20 69 6e 20 62 65 74 77 65 65 6e 20 63  ept in between c
1c4c0 61 6c 6c 73 20 74 6f 20 78 42 65 67 69 6e 28 29  alls to xBegin()
1c4d0 20 61 6e 64 20 65 69 74 68 65 72 0d 0a 20 20 20   and either..   
1c4e0 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74       /// xCommit
1c4f0 28 29 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28  () or xRollback(
1c500 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  )...        /// 
1c510 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1c520 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1c530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1c540 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
1c550 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1c560 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
1c570 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
1c580 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
1c590 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
1c5a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1c5b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1c5c0 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f  am name="iSavepo
1c5d0 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  int">..        /
1c5e0 2f 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e  // This is an in
1c5f0 74 65 67 65 72 20 75 73 65 64 20 74 6f 20 69 6e  teger used to in
1c600 64 69 63 61 74 65 20 74 68 61 74 20 61 6e 79 20  dicate that any 
1c610 73 61 76 65 64 20 73 74 61 74 65 73 20 77 69 74  saved states wit
1c620 68 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  h an..        //
1c630 2f 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65  / identifier gre
1c640 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1c650 61 6c 20 74 6f 20 74 68 69 73 20 73 68 6f 75 6c  al to this shoul
1c660 64 20 62 65 20 64 65 6c 65 74 65 64 20 62 79 20  d be deleted by 
1c670 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1c680 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
1c690 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1c6a0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1c6b0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1c6c0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
1c6d0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
1c6e0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
1c6f0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1c700 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1c710 45 72 72 6f 72 43 6f 64 65 20 78 52 65 6c 65 61  ErrorCode xRelea
1c720 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
1c730 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
1c740 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
1c750 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20  iSavepoint..    
1c760 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
1c770 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1c780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1c7c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1c7d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1c7e0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
1c7f0 20 20 20 20 2f 2f 2f 20 54 68 65 73 65 20 6d 65      /// These me
1c800 74 68 6f 64 73 20 70 72 6f 76 69 64 65 20 74 68  thods provide th
1c810 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
1c820 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61  implementation a
1c830 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  n..        /// o
1c840 70 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 69 6d  pportunity to im
1c850 70 6c 65 6d 65 6e 74 20 6e 65 73 74 65 64 20 74  plement nested t
1c860 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 54 68 65  ransactions. The
1c870 79 20 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20  y are always..  
1c880 20 20 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e        /// option
1c890 61 6c 20 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79  al and will only
1c8a0 20 62 65 20 63 61 6c 6c 65 64 20 69 6e 20 53 51   be called in SQ
1c8b0 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37  Lite version 3.7
1c8c0 2e 37 20 61 6e 64 20 6c 61 74 65 72 2e 0d 0a 20  .7 and later... 
1c8d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1c8e0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1c8f0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1c900 2f 2f 2f 20 57 68 65 6e 20 78 53 61 76 65 70 6f  /// When xSavepo
1c910 69 6e 74 28 58 2c 4e 29 20 69 73 20 69 6e 76 6f  int(X,N) is invo
1c920 6b 65 64 2c 20 74 68 61 74 20 69 73 20 61 20 73  ked, that is a s
1c930 69 67 6e 61 6c 20 74 6f 20 74 68 65 20 76 69 72  ignal to the vir
1c940 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tual..        //
1c950 2f 20 74 61 62 6c 65 20 58 20 74 68 61 74 20 69  / table X that i
1c960 74 20 73 68 6f 75 6c 64 20 73 61 76 65 20 69 74  t should save it
1c970 73 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20  s current state 
1c980 61 73 20 73 61 76 65 70 6f 69 6e 74 20 4e 2e 20  as savepoint N. 
1c990 41 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  A..        /// s
1c9a0 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20 74  ubsequent call t
1c9b0 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c  o xRollbackTo(X,
1c9c0 52 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  R) means that th
1c9d0 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 0d 0a  e state of the..
1c9e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74          /// virt
1c9f0 75 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c 64  ual table should
1ca00 20 72 65 74 75 72 6e 20 74 6f 20 77 68 61 74 20   return to what 
1ca10 69 74 20 77 61 73 20 77 68 65 6e 20 78 53 61 76  it was when xSav
1ca20 65 70 6f 69 6e 74 28 58 2c 52 29 20 77 61 73 0d  epoint(X,R) was.
1ca30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 73  .        /// las
1ca40 74 20 63 61 6c 6c 65 64 2e 20 54 68 65 20 63 61  t called. The ca
1ca50 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54  ll to xRollbackT
1ca60 6f 28 58 2c 52 29 20 77 69 6c 6c 20 69 6e 76 61  o(X,R) will inva
1ca70 6c 69 64 61 74 65 20 61 6c 6c 0d 0a 20 20 20 20  lidate all..    
1ca80 20 20 20 20 2f 2f 2f 20 73 61 76 65 70 6f 69 6e      /// savepoin
1ca90 74 73 20 77 69 74 68 20 4e 3e 52 3b 20 6e 6f 6e  ts with N>R; non
1caa0 65 20 6f 66 20 74 68 65 20 69 6e 76 61 6c 69 64  e of the invalid
1cab0 65 64 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69  ed savepoints wi
1cac0 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  ll be..        /
1cad0 2f 2f 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6f  // rolled back o
1cae0 72 20 72 65 6c 65 61 73 65 64 20 77 69 74 68 6f  r released witho
1caf0 75 74 20 66 69 72 73 74 20 62 65 69 6e 67 20 72  ut first being r
1cb00 65 69 6e 69 74 69 61 6c 69 7a 65 64 20 62 79 20  einitialized by 
1cb10 61 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  a call..        
1cb20 2f 2f 2f 20 74 6f 20 78 53 61 76 65 70 6f 69 6e  /// to xSavepoin
1cb30 74 28 29 2e 20 41 20 63 61 6c 6c 20 74 6f 20 78  t(). A call to x
1cb40 52 65 6c 65 61 73 65 28 58 2c 4d 29 20 69 6e 76  Release(X,M) inv
1cb50 61 6c 69 64 61 74 65 73 20 61 6c 6c 20 73 61 76  alidates all sav
1cb60 65 70 6f 69 6e 74 73 0d 0a 20 20 20 20 20 20 20  epoints..       
1cb70 20 2f 2f 2f 20 77 68 65 72 65 20 4e 3e 3d 4d 2e   /// where N>=M.
1cb80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1cb90 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1cba0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1cbb0 20 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20 74     /// None of t
1cbc0 68 65 20 78 53 61 76 65 70 6f 69 6e 74 28 29 2c  he xSavepoint(),
1cbd0 20 78 52 65 6c 65 61 73 65 28 29 2c 20 6f 72 20   xRelease(), or 
1cbe0 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 29 20 6d 65  xRollbackTo() me
1cbf0 74 68 6f 64 73 20 77 69 6c 6c 0d 0a 20 20 20 20  thods will..    
1cc00 20 20 20 20 2f 2f 2f 20 65 76 65 72 20 62 65 20      /// ever be 
1cc10 63 61 6c 6c 65 64 20 65 78 63 65 70 74 20 69 6e  called except in
1cc20 20 62 65 74 77 65 65 6e 20 63 61 6c 6c 73 20 74   between calls t
1cc30 6f 20 78 42 65 67 69 6e 28 29 20 61 6e 64 20 65  o xBegin() and e
1cc40 69 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f  ither..        /
1cc50 2f 2f 20 78 43 6f 6d 6d 69 74 28 29 20 6f 72 20  // xCommit() or 
1cc60 78 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20 20  xRollback()...  
1cc70 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1cc80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1cc90 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1cca0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1ccb0 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
1ccc0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
1ccd0 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
1cce0 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
1ccf0 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
1cd00 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1cd10 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1cd20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1cd30 65 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d  e="iSavepoint">.
1cd40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
1cd50 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  s is an integer 
1cd60 69 64 65 6e 74 69 66 69 65 72 20 75 73 65 64 20  identifier used 
1cd70 74 6f 20 73 70 65 63 69 66 79 20 61 20 73 70 65  to specify a spe
1cd80 63 69 66 69 63 20 73 61 76 65 64 0d 0a 20 20 20  cific saved..   
1cd90 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 20 66       /// state f
1cda0 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  or the virtual t
1cdb0 61 62 6c 65 20 66 6f 72 20 69 74 20 74 6f 20 72  able for it to r
1cdc0 65 73 74 6f 72 65 20 69 74 73 65 6c 66 20 62 61  estore itself ba
1cdd0 63 6b 20 74 6f 2c 20 77 68 69 63 68 0d 0a 20 20  ck to, which..  
1cde0 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64        /// should
1cdf0 20 61 6c 73 6f 20 68 61 76 65 20 74 68 65 20 65   also have the e
1ce00 66 66 65 63 74 20 6f 66 20 64 65 6c 65 74 69 6e  ffect of deletin
1ce10 67 20 61 6c 6c 20 73 61 76 65 64 20 73 74 61 74  g all saved stat
1ce20 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20 20  es with an..    
1ce30 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20      /// integer 
1ce40 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61 74  identifier great
1ce50 65 72 20 74 68 61 6e 20 74 68 69 73 20 6f 6e 65  er than this one
1ce60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ce70 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1ce80 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1ce90 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
1cea0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
1ceb0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
1cec0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1ced0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
1cee0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c  teErrorCode xRol
1cef0 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
1cf00 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
1cf10 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
1cf20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d   int iSavepoint.
1cf30 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1cf40 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1cf50 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1cf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1cfb0 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65   #region ISQLite
1cfc0 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 20 49 6e  ManagedModule In
1cfd0 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f  terface..    ///
1cfe0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1cff0 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61  /// This interfa
1d000 63 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ce represents a 
1d010 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
1d020 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 72 69  plementation wri
1d030 74 74 65 6e 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f  tten in..    ///
1d040 20 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a   managed code...
1d050 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1d060 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69  y>..    public i
1d070 6e 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65  nterface ISQLite
1d080 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 0d 0a 20  ManagedModule.. 
1d090 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
1d0a0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1d0b0 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73       /// Returns
1d0c0 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
1d0d0 20 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   schema for the 
1d0e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61  virtual table ha
1d0f0 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 20 20  s been..        
1d100 2f 2f 2f 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  /// declared... 
1d110 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1d120 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 62  mary>..        b
1d130 6f 6f 6c 20 44 65 63 6c 61 72 65 64 20 7b 20 67  ool Declared { g
1d140 65 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20  et; }....       
1d150 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
1d1a0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1d1b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52  >..        /// R
1d1c0 65 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20  eturns the name 
1d1d0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 73  of the module as
1d1e0 20 69 74 20 77 61 73 20 72 65 67 69 73 74 65 72   it was register
1d1f0 65 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69  ed with the SQLi
1d200 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  te..        /// 
1d210 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
1d220 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1d230 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 73  mary>..        s
1d240 74 72 69 6e 67 20 4e 61 6d 65 20 7b 20 67 65 74  tring Name { get
1d250 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ; }....        /
1d260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d2b0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1d2c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
1d2d0 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
1d2e0 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
1d2f0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
1d300 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
1d310 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
1d320 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65  e.xCreate" /> me
1d330 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
1d340 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1d350 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1d360 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69  m name="connecti
1d370 6f 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on">..        //
1d380 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1d390 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  "SQLiteConnectio
1d3a0 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  n" /> object ins
1d3b0 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
1d3c0 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f   with..        /
1d3d0 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  // the virtual t
1d3e0 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
1d3f0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1d400 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1d410 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74  name="pClientDat
1d420 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  a">..        ///
1d430 20 54 68 65 20 6e 61 74 69 76 65 20 75 73 65 72   The native user
1d440 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73  -data pointer as
1d450 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1d460 69 73 20 6d 6f 64 75 6c 65 2c 20 61 73 20 69 74  is module, as it
1d470 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f   was..        //
1d480 2f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68  / provided to th
1d490 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
1d4a0 62 72 61 72 79 20 77 68 65 6e 20 74 68 65 20 6e  brary when the n
1d4b0 61 74 69 76 65 20 6d 6f 64 75 6c 65 20 69 6e 73  ative module ins
1d4c0 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  tance..        /
1d4d0 2f 2f 20 77 61 73 20 63 72 65 61 74 65 64 2e 0d  // was created..
1d4e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1d4f0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1d500 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1d510 61 72 67 75 6d 65 6e 74 73 22 3e 0d 0a 20 20 20  arguments">..   
1d520 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64       /// The mod
1d530 75 6c 65 20 6e 61 6d 65 2c 20 64 61 74 61 62 61  ule name, databa
1d540 73 65 20 6e 61 6d 65 2c 20 76 69 72 74 75 61 6c  se name, virtual
1d550 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 61 6e 64   table name, and
1d560 20 61 6c 6c 20 6f 74 68 65 72 0d 0a 20 20 20 20   all other..    
1d570 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74      /// argument
1d580 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
1d590 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
1d5a0 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d  ABLE statement..
1d5b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1d5c0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1d5d0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1d5e0 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  table">..       
1d5f0 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
1d600 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  s, this paramete
1d610 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
1d620 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
1d630 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1d640 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1d650 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e  VirtualTable" />
1d660 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1d670 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1d680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
1d690 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
1d6a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d6b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1d6c0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1d6d0 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20  "error">..      
1d6e0 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75    /// Upon failu
1d6f0 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  re, this paramet
1d700 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
1d710 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  ied to contain a
1d720 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  n error..       
1d730 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2e 0d 0a 20   /// message... 
1d740 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1d750 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1d760 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1d770 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
1d780 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
1d790 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
1d7a0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1d7b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1d7c0 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d  rorCode Create(.
1d7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1d7e0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
1d7f0 6e 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a 20 69 6e  nnection,  /* in
1d800 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1d810 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44   IntPtr pClientD
1d820 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ata,           /
1d830 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
1d840 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
1d850 67 75 6d 65 6e 74 73 2c 20 20 20 20 20 20 20 20  guments,        
1d860 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
1d870 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
1d880 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
1d890 74 61 62 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a 2f  table, /* out */
1d8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1d8b0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
1d8d0 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
1d8e0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
1d8f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1d900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d930 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1d940 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1d950 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1d960 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
1d970 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65  lled in response
1d980 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
1d990 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
1d9a0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
1d9b0 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
1d9c0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
1d9d0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1d9e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1d9f0 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65  aram name="conne
1da00 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20 20  ction">..       
1da10 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1da20 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ef="SQLiteConnec
1da30 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tion" /> object 
1da40 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
1da50 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20  ted with..      
1da60 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61    /// the virtua
1da70 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
1da80 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1da90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1daa0 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74  am name="pClient
1dab0 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20  Data">..        
1dac0 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 75  /// The native u
1dad0 73 65 72 2d 64 61 74 61 20 70 6f 69 6e 74 65 72  ser-data pointer
1dae0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1daf0 20 74 68 69 73 20 6d 6f 64 75 6c 65 2c 20 61 73   this module, as
1db00 20 69 74 20 77 61 73 0d 0a 20 20 20 20 20 20 20   it was..       
1db10 20 2f 2f 2f 20 70 72 6f 76 69 64 65 64 20 74 6f   /// provided to
1db20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
1db30 20 6c 69 62 72 61 72 79 20 77 68 65 6e 20 74 68   library when th
1db40 65 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 20  e native module 
1db50 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20  instance..      
1db60 20 20 2f 2f 2f 20 77 61 73 20 63 72 65 61 74 65    /// was create
1db70 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1db80 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1db90 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1dba0 65 3d 22 61 72 67 75 6d 65 6e 74 73 22 3e 0d 0a  e="arguments">..
1dbb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1dbc0 6d 6f 64 75 6c 65 20 6e 61 6d 65 2c 20 64 61 74  module name, dat
1dbd0 61 62 61 73 65 20 6e 61 6d 65 2c 20 76 69 72 74  abase name, virt
1dbe0 75 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20  ual table name, 
1dbf0 61 6e 64 20 61 6c 6c 20 6f 74 68 65 72 0d 0a 20  and all other.. 
1dc00 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d         /// argum
1dc10 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
1dc20 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41  he CREATE VIRTUA
1dc30 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
1dc40 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
1dc50 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1dc60 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1dc70 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
1dc80 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
1dc90 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d  cess, this param
1dca0 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
1dcb0 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  ified to contain
1dcc0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1dcd0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
1dce0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
1dcf0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
1dd00 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  nce associated w
1dd10 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ith..        ///
1dd20 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
1dd30 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
1dd40 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1dd50 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1dd60 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
1dd70 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61       /// Upon fa
1dd80 69 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72 61  ilure, this para
1dd90 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
1dda0 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
1ddb0 6e 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20  n an error..    
1ddc0 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2e      /// message.
1ddd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1dde0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1ddf0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1de00 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1de10 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1de20 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1de30 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1de40 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1de50 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6e 6e 65  eErrorCode Conne
1de60 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
1de70 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
1de80 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 20 2f  n connection,  /
1de90 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
1dea0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69       IntPtr pCli
1deb0 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20  entData,        
1dec0 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
1ded0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
1dee0 5d 20 61 72 67 75 6d 65 6e 74 73 2c 20 20 20 20  ] arguments,    
1def0 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
1df00 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1df10 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
1df20 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 6f 75  ble table, /* ou
1df30 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  t */..          
1df40 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
1df50 6f 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  or              
1df60 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  /* out */..     
1df70 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1df80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1df90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1dfd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1dfe0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1dff0 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
1e000 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
1e010 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
1e020 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
1e030 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
1e040 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64  eModule.xBestInd
1e050 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  ex" /> method...
1e060 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1e070 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1e080 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e090 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20  "table">..      
1e0a0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
1e0b0 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
1e0c0 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
1e0d0 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
1e0e0 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
1e0f0 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69  /// with this vi
1e100 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
1e110 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1e120 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1e130 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64  <param name="ind
1e140 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ex">..        //
1e150 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1e160 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e  "SQLiteIndex" />
1e170 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1e180 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20   containing all 
1e190 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1e1a0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 6e   data for the in
1e1b0 70 75 74 73 20 61 6e 64 20 6f 75 74 70 75 74 73  puts and outputs
1e1c0 20 72 65 6c 61 74 69 6e 67 20 74 6f 20 69 6e 64   relating to ind
1e1d0 65 78 20 73 65 6c 65 63 74 69 6f 6e 2e 0d 0a 20  ex selection... 
1e1e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1e1f0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1e200 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1e210 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
1e220 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
1e230 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
1e240 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1e250 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1e260 72 6f 72 43 6f 64 65 20 42 65 73 74 49 6e 64 65  rorCode BestInde
1e270 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x(..            
1e280 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1e290 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20  le table, /* in 
1e2a0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1e2b0 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65  SQLiteIndex inde
1e2c0 78 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c  x         /* in,
1e2d0 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20   out */..       
1e2e0 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
1e2f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e340 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1e350 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1e360 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
1e370 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
1e380 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
1e390 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
1e3a0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
1e3b0 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63  odule.xDisconnec
1e3c0 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
1e3d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1e3e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1e3f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1e400 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  table">..       
1e410 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1e420 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
1e430 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  lTable" /> objec
1e440 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63  t instance assoc
1e450 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  iated..        /
1e460 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72  // with this vir
1e470 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
1e480 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1e490 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1e4a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1e4b0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
1e4c0 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
1e4d0 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
1e4e0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
1e4f0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1e500 72 43 6f 64 65 20 44 69 73 63 6f 6e 6e 65 63 74  rCode Disconnect
1e510 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
1e520 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1e530 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f  e table /* in */
1e540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1e550 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1e560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1e5b0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1e5c0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1e5d0 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
1e5e0 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
1e5f0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1e600 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
1e610 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
1e620 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65 74 68  Destroy" /> meth
1e630 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
1e640 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1e650 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1e660 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20  name="table">.. 
1e670 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1e680 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1e690 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e  VirtualTable" />
1e6a0 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1e6b0 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
1e6c0 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68       /// with th
1e6d0 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  is virtual table
1e6e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1e6f0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1e700 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1e710 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
1e720 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
1e730 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
1e740 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1e750 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
1e760 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 73 74  teErrorCode Dest
1e770 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  roy(..          
1e780 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1e790 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e  able table /* in
1e7a0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1e7b0 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
1e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e800 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1e810 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1e820 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
1e830 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
1e840 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
1e850 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
1e860 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
1e870 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
1e880 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68  e.xOpen" /> meth
1e890 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
1e8a0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1e8b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1e8c0 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20  name="table">.. 
1e8d0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1e8e0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1e8f0 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e  VirtualTable" />
1e900 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1e910 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
1e920 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68       /// with th
1e930 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  is virtual table
1e940 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1e950 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1e960 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1e970 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  ="cursor">..    
1e980 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
1e990 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d  cess, this param
1e9a0 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
1e9b0 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  ified to contain
1e9c0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1e9d0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
1e9e0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
1e9f0 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ursor" /> object
1ea00 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
1ea10 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
1ea20 2f 20 77 69 74 68 20 74 68 65 20 6e 65 77 6c 79  / with the newly
1ea30 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20   opened virtual 
1ea40 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0d 0a 20  table cursor... 
1ea50 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1ea60 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1ea70 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1ea80 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
1ea90 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
1eaa0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
1eab0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1eac0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1ead0 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20  rorCode Open(.. 
1eae0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1eaf0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
1eb00 62 6c 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ble,           /
1eb10 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
1eb20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56       ref SQLiteV
1eb30 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
1eb40 72 20 63 75 72 73 6f 72 20 2f 2a 20 6f 75 74 20  r cursor /* out 
1eb50 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1eb60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1eb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebb0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ebc0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1ebd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1ebe0 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1ebf0 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1ec00 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1ec10 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1ec20 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1ec30 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68  .xClose" /> meth
1ec40 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
1ec50 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1ec60 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1ec70 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a  name="cursor">..
1ec80 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1ec90 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
1eca0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
1ecb0 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  sor" /> object i
1ecc0 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20  nstance..       
1ecd0 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
1ece0 77 69 74 68 20 74 68 65 20 70 72 65 76 69 6f 75  with the previou
1ecf0 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75  sly opened virtu
1ed00 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  al table cursor 
1ed10 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  to be..        /
1ed20 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20  // used...      
1ed30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1ed40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1ed50 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1ed60 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1ed70 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1ed80 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ed90 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1eda0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1edb0 64 65 20 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20  de Close(..     
1edc0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
1edd0 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
1ede0 63 75 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d  cursor /* in */.
1edf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1ee00 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1ee60 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1ee70 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1ee80 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
1ee90 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
1eea0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1eeb0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
1eec0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
1eed0 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64  ilter" /> method
1eee0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1eef0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1ef00 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1ef10 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20  me="cursor">..  
1ef20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1ef30 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1ef40 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
1ef50 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  r" /> object ins
1ef60 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  tance..        /
1ef70 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
1ef80 74 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c  th the previousl
1ef90 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c  y opened virtual
1efa0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f   table cursor to
1efb0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   be..        ///
1efc0 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20   used...        
1efd0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1efe0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1eff0 20 6e 61 6d 65 3d 22 69 6e 64 65 78 4e 75 6d 62   name="indexNumb
1f000 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  er">..        //
1f010 2f 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  / Number used to
1f020 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74   help identify t
1f030 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65  he selected inde
1f040 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  x...        /// 
1f050 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1f060 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1f070 65 3d 22 69 6e 64 65 78 53 74 72 69 6e 67 22 3e  e="indexString">
1f080 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 74  ..        /// St
1f090 72 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65 6c  ring used to hel
1f0a0 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73  p identify the s
1f0b0 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a  elected index...
1f0c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1f0d0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1f0e0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
1f0f0 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20  alues">..       
1f100 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 73 20   /// The values 
1f110 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1f120 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
1f130 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
1f140 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ex...        ///
1f150 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1f160 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1f170 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
1f180 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
1f190 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
1f1a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
1f1b0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
1f1c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69  LiteErrorCode Fi
1f1d0 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  lter(..         
1f1e0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
1f1f0 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
1f200 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  or, /* in */..  
1f210 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e            int in
1f220 64 65 78 4e 75 6d 62 65 72 2c 20 20 20 20 20 20  dexNumber,      
1f230 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
1f240 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1f250 20 73 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72   string indexStr
1f260 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  ing,            
1f270 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1f280 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61          SQLiteVa
1f290 6c 75 65 5b 5d 20 76 61 6c 75 65 73 20 20 20 20  lue[] values    
1f2a0 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
1f2b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
1f2c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2e0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f320 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1f330 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1f340 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
1f350 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
1f360 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1f370 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
1f380 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
1f390 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64  xNext" /> method
1f3a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1f3b0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1f3c0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1f3d0 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20  me="cursor">..  
1f3e0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1f3f0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1f400 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
1f410 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  r" /> object ins
1f420 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  tance..        /
1f430 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
1f440 74 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c  th the previousl
1f450 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c  y opened virtual
1f460 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f   table cursor to
1f470 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   be..        ///
1f480 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20   used...        
1f490 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1f4a0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1f4b0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1f4c0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1f4d0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1f4e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1f4f0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1f500 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1f510 20 4e 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20   Next(..        
1f520 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1f530 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
1f540 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  sor /* in */..  
1f550 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
1f560 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f5b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1f5c0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1f5d0 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
1f5e0 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
1f5f0 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
1f600 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
1f610 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
1f620 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22  tiveModule.xEof"
1f630 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
1f640 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
1f650 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1f660 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75   <param name="cu
1f670 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rsor">..        
1f680 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1f690 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
1f6a0 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20  TableCursor" /> 
1f6b0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d  object instance.
1f6c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73  .        /// ass
1f6d0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1f6e0 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1f6f0 65 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ed virtual table
1f700 20 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20   cursor to be.. 
1f710 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e         /// used.
1f720 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1f730 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1f740 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1f750 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
1f760 65 72 6f 20 69 66 20 6e 6f 20 6d 6f 72 65 20 72  ero if no more r
1f770 6f 77 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ows are availabl
1f780 65 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73  e; zero otherwis
1f790 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1f7a0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1f7b0 20 20 20 20 62 6f 6f 6c 20 45 6f 66 28 0d 0a 20      bool Eof(.. 
1f7c0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1f7d0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
1f7e0 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 69 6e  sor cursor /* in
1f7f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1f800 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
1f810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f850 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f860 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1f870 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
1f880 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
1f890 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
1f8a0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
1f8b0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
1f8c0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
1f8d0 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65  e.xColumn" /> me
1f8e0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
1f8f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1f900 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1f910 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e  m name="cursor">
1f920 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1f930 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
1f940 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
1f950 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ursor" /> object
1f960 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20   instance..     
1f970 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65     /// associate
1f980 64 20 77 69 74 68 20 74 68 65 20 70 72 65 76 69  d with the previ
1f990 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 72  ously opened vir
1f9a0 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
1f9b0 72 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20  r to be..       
1f9c0 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20   /// used...    
1f9d0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1f9e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1f9f0 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65  aram name="conte
1fa00 78 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  xt">..        //
1fa10 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1fa20 22 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 22 20  "SQLiteContext" 
1fa30 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1fa40 63 65 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ce to be used fo
1fa50 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  r..        /// r
1fa60 65 74 75 72 6e 69 6e 67 20 74 68 65 20 73 70 65  eturning the spe
1fa70 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61  cified column va
1fa80 6c 75 65 20 74 6f 20 74 68 65 20 53 51 4c 69 74  lue to the SQLit
1fa90 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
1faa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1fab0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1fac0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1fad0 69 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20  index">..       
1fae0 20 2f 2f 2f 20 54 68 65 20 7a 65 72 6f 2d 62 61   /// The zero-ba
1faf0 73 65 64 20 69 6e 64 65 78 20 63 6f 72 72 65 73  sed index corres
1fb00 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 63  ponding to the c
1fb10 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 69 6e 67  olumn containing
1fb20 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1fb30 2f 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65  / value to be re
1fb40 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20  turned...       
1fb50 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1fb60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1fb70 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1fb80 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1fb90 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1fba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1fbb0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1fbc0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1fbd0 65 20 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20  e Column(..     
1fbe0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
1fbf0 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
1fc00 63 75 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f  cursor, /* in */
1fc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1fc20 4c 69 74 65 43 6f 6e 74 65 78 74 20 63 6f 6e 74  LiteContext cont
1fc30 65 78 74 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ext,           /
1fc40 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
1fc50 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 20       int index  
1fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc70 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1fc90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1fca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fce0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1fcf0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1fd00 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1fd10 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
1fd20 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
1fd30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1fd40 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
1fd50 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  NativeModule.xRo
1fd60 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  wId" /> method..
1fd70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
1fd80 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1fd90 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1fda0 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  ="cursor">..    
1fdb0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
1fdc0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
1fdd0 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22  tualTableCursor"
1fde0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
1fdf0 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nce..        ///
1fe00 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1fe10 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20   the previously 
1fe20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74  opened virtual t
1fe30 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 62  able cursor to b
1fe40 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75  e..        /// u
1fe50 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
1fe60 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1fe70 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1fe80 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20  ame="rowId">..  
1fe90 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73        /// Upon s
1fea0 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72  uccess, this par
1feb0 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d  ameter must be m
1fec0 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61  odified to conta
1fed0 69 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20  in the unique.. 
1fee0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67         /// integ
1fef0 65 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65  er row identifie
1ff00 72 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  r for the curren
1ff10 74 20 72 6f 77 20 66 6f 72 20 74 68 65 20 73 70  t row for the sp
1ff20 65 63 69 66 69 65 64 20 63 75 72 73 6f 72 2e 0d  ecified cursor..
1ff30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1ff40 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1ff50 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1ff60 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
1ff70 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
1ff80 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
1ff90 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1ffa0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1ffb0 45 72 72 6f 72 43 6f 64 65 20 52 6f 77 49 64 28  ErrorCode RowId(
1ffc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1ffd0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1ffe0 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f  Cursor cursor, /
1fff0 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
20000 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f       ref long ro
20010 77 49 64 20 20 20 20 20 20 20 20 20 20 20 20 20  wId             
20020 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d        /* out */.
20030 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
20040 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
20050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20090 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
200a0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
200b0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
200c0 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
200d0 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
200e0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
200f0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
20100 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55  eNativeModule.xU
20110 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  pdate" /> method
20120 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20130 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
20140 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
20150 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
20160 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
20170 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
20180 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
20190 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
201a0 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
201b0 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
201c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
201d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
201e0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
201f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
20200 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20  values">..      
20210 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
20220 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
20230 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62  LiteValue" /> ob
20240 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20 63  ject instances c
20250 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20  ontaining..     
20260 20 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77 20 6f     /// the new o
20270 72 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c 75 6d  r modified colum
20280 6e 20 76 61 6c 75 65 73 2c 20 69 66 20 61 6e 79  n values, if any
20290 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
202a0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
202b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
202c0 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20  ="rowId">..     
202d0 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
202e0 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
202f0 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
20300 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
20310 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20 20 20  the unique..    
20320 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20      /// integer 
20330 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72 20 66  row identifier f
20340 6f 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  or the row that 
20350 77 61 73 20 69 6e 73 65 72 74 65 64 2c 20 69 66  was inserted, if
20360 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f   any...        /
20370 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
20380 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
20390 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
203a0 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
203b0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
203c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
203d0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
203e0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
203f0 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20 20  Update(..       
20400 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
20410 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f  alTable table, /
20420 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
20430 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65       SQLiteValue
20440 5b 5d 20 76 61 6c 75 65 73 2c 20 20 20 20 20 2f  [] values,     /
20450 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
20460 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f       ref long ro
20470 77 49 64 20 20 20 20 20 20 20 20 20 20 20 20 2f  wId            /
20480 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  * out */..      
20490 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
204a0 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
204f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
20500 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
20510 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
20520 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
20530 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
20540 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
20550 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
20560 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f  Module.xBegin" /
20570 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
20580 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
20590 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
205a0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
205b0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
205c0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
205d0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
205e0 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
205f0 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
20600 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
20610 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c  ith this virtual
20620 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
20630 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
20640 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
20650 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
20660 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
20670 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
20680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
20690 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
206a0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
206b0 65 20 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20  e Begin(..      
206c0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
206d0 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f  ualTable table /
206e0 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
206f0 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
20700 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20750 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
20760 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
20770 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
20780 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
20790 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
207a0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
207b0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
207c0 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20  odule.xSync" /> 
207d0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
207e0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
207f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
20800 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
20810 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
20820 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
20830 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
20840 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
20850 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
20860 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
20870 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
20880 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
20890 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
208a0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
208b0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
208c0 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
208d0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
208e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
208f0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
20900 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
20910 53 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20  Sync(..         
20920 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
20930 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69  Table table /* i
20940 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
20950 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
20960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
209b0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
209c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
209d0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
209e0 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
209f0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
20a00 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
20a10 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
20a20 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d  le.xCommit" /> m
20a30 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
20a40 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
20a50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
20a60 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
20a70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
20a80 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
20a90 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
20aa0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
20ab0 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
20ac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
20ad0 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
20ae0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
20af0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
20b00 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
20b10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
20b20 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
20b30 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
20b40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
20b50 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
20b60 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43  QLiteErrorCode C
20b70 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20  ommit(..        
20b80 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
20b90 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20  lTable table /* 
20ba0 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
20bb0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
20bc0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20c10 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
20c20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
20c30 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
20c40 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65  lled in response
20c50 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
20c60 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
20c70 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
20c80 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f  ule.xRollback" /
20c90 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
20ca0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
20cb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
20cc0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
20cd0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
20ce0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
20cf0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
20d00 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
20d10 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
20d20 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
20d30 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c  ith this virtual
20d40 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
20d50 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
20d60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
20d70 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
20d80 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
20d90 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
20da0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
20db0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
20dc0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
20dd0 65 20 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20  e Rollback(..   
20de0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
20df0 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
20e00 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  e /* in */..    
20e10 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
20e20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20e70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
20e80 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
20e90 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
20ea0 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
20eb0 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
20ec0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
20ed0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
20ee0 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  veModule.xFindFu
20ef0 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  nction" /> metho
20f00 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
20f10 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
20f20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
20f30 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
20f40 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
20f50 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
20f60 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
20f70 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
20f80 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
20f90 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
20fa0 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
20fb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
20fc0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
20fd0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
20fe0 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e  "argumentCount">
20ff0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21000 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
21010 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e  ments to the fun
21020 63 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f 75 67  ction being soug
21030 68 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ht...        ///
21040 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
21050 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
21060 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20  me="name">..    
21070 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
21080 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
21090 20 62 65 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a   being sought...
210a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
210b0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
210c0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
210d0 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20  unction">..     
210e0 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
210f0 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
21100 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
21110 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
21120 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
21130 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
21140 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6f  teFunction" /> o
21150 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72  bject instance r
21160 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 0d 0a  esponsible for..
21170 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
21180 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 73 70 65  ementing the spe
21190 63 69 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 2e  cified function.
211a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
211b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
211c0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
211d0 22 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a  "pClientData">..
211e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
211f0 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70   success, this p
21200 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65  arameter must be
21210 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e   modified to con
21220 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  tain the..      
21230 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 75 73 65    /// native use
21240 72 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61  r-data pointer a
21250 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a  ssociated with..
21260 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
21270 61 6d 72 65 66 20 6e 61 6d 65 3d 22 66 75 6e 63  amref name="func
21280 74 69 6f 6e 22 20 2f 3e 2e 0d 0a 20 20 20 20 20  tion" />...     
21290 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
212a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
212b0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
212c0 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
212d0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 75  the specified fu
212e0 6e 63 74 69 6f 6e 20 77 61 73 20 66 6f 75 6e 64  nction was found
212f0 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65  ; zero otherwise
21300 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
21310 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
21320 20 20 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63     bool FindFunc
21330 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
21340 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
21350 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20 20  Table table,    
21360 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
21370 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65        int argume
21380 6e 74 43 6f 75 6e 74 2c 20 20 20 20 20 20 20 20  ntCount,        
21390 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
213a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
213b0 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20  name,           
213c0 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
213d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
213e0 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
213f0 75 6e 63 74 69 6f 6e 2c 20 2f 2a 20 6f 75 74 20  unction, /* out 
21400 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
21410 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65  ref IntPtr pClie
21420 6e 74 44 61 74 61 20 20 20 20 20 20 20 2f 2a 20  ntData       /* 
21430 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
21440 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
21450 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21490 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
214a0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
214b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
214c0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
214d0 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
214e0 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
214f0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
21500 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
21510 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e  dule.xRename" />
21520 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
21530 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
21540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
21550 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
21560 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
21570 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
21580 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
21590 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
215a0 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
215b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
215c0 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
215d0 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
215e0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
215f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
21600 20 6e 61 6d 65 3d 22 6e 65 77 4e 61 6d 65 22 3e   name="newName">
21610 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21620 65 20 6e 65 77 20 6e 61 6d 65 20 66 6f 72 20 74  e new name for t
21630 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
21640 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
21650 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
21660 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
21670 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
21680 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
21690 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
216a0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
216b0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
216c0 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6e 61  teErrorCode Rena
216d0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
216e0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
216f0 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e  ble table, /* in
21700 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
21710 20 73 74 72 69 6e 67 20 6e 65 77 4e 61 6d 65 20   string newName 
21720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
21730 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
21740 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
21750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21790 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
217a0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
217b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
217c0 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
217d0 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
217e0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
217f0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
21800 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
21810 65 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e  e.xSavepoint" />
21820 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
21830 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
21840 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
21850 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
21860 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
21870 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
21880 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
21890 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
218a0 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
218b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
218c0 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
218d0 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
218e0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
218f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
21900 20 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74   name="savepoint
21910 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
21920 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67  This is an integ
21930 65 72 20 69 64 65 6e 74 69 66 69 65 72 20 75 6e  er identifier un
21940 64 65 72 20 77 68 69 63 68 20 74 68 65 20 74 68  der which the th
21950 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20  e current state 
21960 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
21970 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
21980 65 20 73 68 6f 75 6c 64 20 62 65 20 73 61 76 65  e should be save
21990 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
219a0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
219b0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
219c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
219d0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
219e0 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
219f0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
21a00 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
21a10 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 61 76  iteErrorCode Sav
21a20 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20  epoint(..       
21a30 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
21a40 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f  alTable table, /
21a50 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
21a60 20 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69       int savepoi
21a70 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  nt             /
21a80 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
21a90 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
21aa0 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
21ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21af0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
21b00 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
21b10 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
21b20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
21b30 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
21b40 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
21b50 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
21b60 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20  odule.xRelease" 
21b70 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
21b80 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
21b90 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
21ba0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
21bb0 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
21bc0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
21bd0 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
21be0 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
21bf0 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
21c00 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
21c10 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61  with this virtua
21c20 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
21c30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
21c40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
21c50 61 6d 20 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69  am name="savepoi
21c60 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nt">..        //
21c70 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74  / This is an int
21c80 65 67 65 72 20 75 73 65 64 20 74 6f 20 69 6e 64  eger used to ind
21c90 69 63 61 74 65 20 74 68 61 74 20 61 6e 79 20 73  icate that any s
21ca0 61 76 65 64 20 73 74 61 74 65 73 20 77 69 74 68  aved states with
21cb0 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   an..        ///
21cc0 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61   identifier grea
21cd0 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
21ce0 6c 20 74 6f 20 74 68 69 73 20 73 68 6f 75 6c 64  l to this should
21cf0 20 62 65 20 64 65 6c 65 74 65 64 20 62 79 20 74   be deleted by t
21d00 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
21d10 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
21d20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
21d30 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
21d40 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
21d50 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
21d60 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
21d70 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
21d80 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
21d90 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
21da0 72 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73 65  rrorCode Release
21db0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
21dc0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
21dd0 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a  e table, /* in *
21de0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  /..            i
21df0 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 20 20 20  nt savepoint    
21e00 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
21e10 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
21e20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
21e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21e80 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
21e90 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
21ea0 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
21eb0 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
21ec0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
21ed0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
21ee0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
21ef0 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20  xRollbackTo" /> 
21f00 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
21f10 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
21f20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
21f30 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
21f40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
21f50 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
21f60 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
21f70 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
21f80 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
21f90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
21fa0 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
21fb0 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
21fc0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
21fd0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
21fe0 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74 22  name="savepoint"
21ff0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
22000 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65  his is an intege
22010 72 20 69 64 65 6e 74 69 66 69 65 72 20 75 73 65  r identifier use
22020 64 20 74 6f 20 73 70 65 63 69 66 79 20 61 20 73  d to specify a s
22030 70 65 63 69 66 69 63 20 73 61 76 65 64 0d 0a 20  pecific saved.. 
22040 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65         /// state
22050 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c   for the virtual
22060 20 74 61 62 6c 65 20 66 6f 72 20 69 74 20 74 6f   table for it to
22070 20 72 65 73 74 6f 72 65 20 69 74 73 65 6c 66 20   restore itself 
22080 62 61 63 6b 20 74 6f 2c 20 77 68 69 63 68 0d 0a  back to, which..
22090 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75          /// shou
220a0 6c 64 20 61 6c 73 6f 20 68 61 76 65 20 74 68 65  ld also have the
220b0 20 65 66 66 65 63 74 20 6f 66 20 64 65 6c 65 74   effect of delet
220c0 69 6e 67 20 61 6c 6c 20 73 61 76 65 64 20 73 74  ing all saved st
220d0 61 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20  ates with an..  
220e0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
220f0 72 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65  r identifier gre
22100 61 74 65 72 20 74 68 61 6e 20 74 68 69 73 20 6f  ater than this o
22110 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ne...        ///
22120 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
22130 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
22140 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
22150 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
22160 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
22170 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
22180 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
22190 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 6f  LiteErrorCode Ro
221a0 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20  llbackTo(..     
221b0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
221c0 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
221d0 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
221e0 20 20 20 20 20 20 20 69 6e 74 20 73 61 76 65 70         int savep
221f0 6f 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20  oint            
22200 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
22210 20 20 20 20 20 20 20 29 3b 0d 0a 20 20 20 20 7d         );..    }
22220 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
22230 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
22240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22280 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
22290 6f 6e 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20  on SQLiteMemory 
222a0 53 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20 20  Static Class..  
222b0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
222c0 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
222d0 61 73 73 20 63 6f 6e 74 61 69 6e 73 20 73 74 61  ass contains sta
222e0 74 69 63 20 6d 65 74 68 6f 64 73 20 74 68 61 74  tic methods that
222f0 20 61 72 65 20 75 73 65 64 20 74 6f 20 61 6c 6c   are used to all
22300 6f 63 61 74 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20  ocate,..    /// 
22310 6d 61 6e 69 70 75 6c 61 74 65 2c 20 61 6e 64 20  manipulate, and 
22320 66 72 65 65 20 6e 61 74 69 76 65 20 6d 65 6d 6f  free native memo
22330 72 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  ry provided by t
22340 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
22350 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f  ibrary...    ///
22360 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
22370 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
22380 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 65 6d   class SQLiteMem
22390 6f 72 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ory..    {..    
223a0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
223b0 61 74 65 20 44 61 74 61 0d 0a 23 69 66 20 54 52  ate Data..#if TR
223c0 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53  ACK_MEMORY_BYTES
223d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
223e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
223f0 20 2f 2f 2f 20 54 68 69 73 20 6f 62 6a 65 63 74   /// This object
22400 20 69 6e 73 74 61 6e 63 65 20 69 73 20 75 73 65   instance is use
22410 64 20 74 6f 20 73 79 6e 63 68 72 6f 6e 69 7a 65  d to synchronize
22420 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 6f   access to the o
22430 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ther..        //
22440 2f 20 73 74 61 74 69 63 20 66 69 65 6c 64 73 20  / static fields 
22450 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a  of this class...
22460 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
22470 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
22480 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f  private static o
22490 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d  bject syncRoot =
224a0 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a   new object();..
224b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
224c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22500 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
22510 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
22520 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 6f 74 61      /// The tota
22530 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 73  l number of outs
22540 74 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20 62  tanding memory b
22550 79 74 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ytes allocated b
22560 79 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  y this..        
22570 2f 2f 2f 20 63 6c 61 73 73 20 75 73 69 6e 67 20  /// class using 
22580 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
22590 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20  library...      
225a0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
225b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
225c0 65 20 73 74 61 74 69 63 20 69 6e 74 20 62 79 74  e static int byt
225d0 65 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 0d 0a  esAllocated;....
225e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
225f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22630 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
22640 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
22650 20 20 2f 2f 2f 20 54 68 65 20 6d 61 78 69 6d 75    /// The maximu
22660 6d 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 73  m number of outs
22670 74 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20 62  tanding memory b
22680 79 74 65 73 20 65 76 65 72 20 61 6c 6c 6f 63 61  ytes ever alloca
22690 74 65 64 20 62 79 0d 0a 20 20 20 20 20 20 20 20  ted by..        
226a0 2f 2f 2f 20 74 68 69 73 20 63 6c 61 73 73 20 75  /// this class u
226b0 73 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20  sing the SQLite 
226c0 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
226d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
226e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
226f0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
22700 74 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c  t maximumBytesAl
22710 6c 6f 63 61 74 65 64 3b 0d 0a 23 65 6e 64 69 66  located;..#endif
22720 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
22730 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
22740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22780 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22790 20 20 20 23 72 65 67 69 6f 6e 20 4d 65 6d 6f 72     #region Memor
227a0 79 20 41 6c 6c 6f 63 61 74 69 6f 6e 20 48 65 6c  y Allocation Hel
227b0 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
227c0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
227d0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
227e0 41 6c 6c 6f 63 61 74 65 73 20 61 74 20 6c 65 61  Allocates at lea
227f0 73 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  st the specified
22800 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
22810 20 6f 66 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72   of native memor
22820 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  y..        /// v
22830 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ia the SQLite co
22840 72 65 20 6c 69 62 72 61 72 79 20 73 71 6c 69 74  re library sqlit
22850 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63  e3_malloc() func
22860 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 73  tion and returns
22870 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
22880 65 20 72 65 73 75 6c 74 69 6e 67 20 6e 61 74 69  e resulting nati
22890 76 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20  ve pointer...   
228a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
228b0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
228c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 69   <param name="si
228d0 7a 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ze">..        //
228e0 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
228f0 62 79 74 65 73 20 74 6f 20 61 6c 6c 6f 63 61 74  bytes to allocat
22900 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
22910 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
22920 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
22930 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
22940 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
22950 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
22960 20 62 6c 6f 63 6b 20 6f 66 20 6d 65 6d 6f 72 79   block of memory
22970 20 6f 66 20 61 74 20 6c 65 61 73 74 20 74 68 65   of at least the
22980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70  ..        /// sp
22990 65 63 69 66 69 65 64 20 73 69 7a 65 20 2d 4f 52  ecified size -OR
229a0 2d 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  - <see cref="Int
229b0 50 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 69 66 20  Ptr.Zero" /> if 
229c0 74 68 65 20 6d 65 6d 6f 72 79 20 63 6f 75 6c 64  the memory could
229d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f  ..        /// no
229e0 74 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e 0d  t be allocated..
229f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
22a00 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
22a10 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49   public static I
22a20 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 28 69  ntPtr Allocate(i
22a30 6e 74 20 73 69 7a 65 29 0d 0a 20 20 20 20 20 20  nt size)..      
22a40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22a50 20 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79 20   IntPtr pMemory 
22a60 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
22a70 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61  thods.sqlite3_ma
22a80 6c 6c 6f 63 28 73 69 7a 65 29 3b 0d 0a 0d 0a 23  lloc(size);....#
22a90 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f  if TRACK_MEMORY_
22aa0 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20 20  BYTES..         
22ab0 20 20 20 69 66 20 28 70 4d 65 6d 6f 72 79 20 21     if (pMemory !
22ac0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
22ad0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
22af0 6e 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20 53  nt blockSize = S
22b00 69 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d  ize(pMemory);...
22b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22b20 20 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20 3e   if (blockSize >
22b30 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
22b40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22b50 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
22b60 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22b90 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
22ba0 73 41 6c 6c 6f 63 61 74 65 64 20 2b 3d 20 62 6c  sAllocated += bl
22bb0 6f 63 6b 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20  ockSize;....    
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 20 20 20 69 66 20 28 62 79 74 65 73 41 6c 6c      if (bytesAll
22be0 6f 63 61 74 65 64 20 3e 20 6d 61 78 69 6d 75 6d  ocated > maximum
22bf0 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 29 0d  BytesAllocated).
22c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22c10 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78               max
22c20 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74  imumBytesAllocat
22c30 65 64 20 3d 20 62 79 74 65 73 41 6c 6c 6f 63 61  ed = bytesAlloca
22c40 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
22c50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22c70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
22c80 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
22c90 20 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d       return pMem
22ca0 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ory;..        }.
22cb0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
22cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
22d10 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
22d20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e       /// Gets an
22d30 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 63  d returns the ac
22d40 74 75 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65  tual size of the
22d50 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72   specified memor
22d60 79 20 62 6c 6f 63 6b 20 74 68 61 74 0d 0a 20 20  y block that..  
22d70 20 20 20 20 20 20 2f 2f 2f 20 77 61 73 20 70 72        /// was pr
22d80 65 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65  eviously obtaine
22d90 64 20 66 72 6f 6d 20 74 68 65 20 3c 73 65 65 20  d from the <see 
22da0 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65 22 20  cref="Allocate" 
22db0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
22dc0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
22dd0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
22de0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 4d 65  <param name="pMe
22df0 6d 6f 72 79 22 3e 0d 0a 20 20 20 20 20 20 20 20  mory">..        
22e00 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
22e10 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d 65  ointer to the me
22e20 6d 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65 76 69  mory block previ
22e30 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66  ously obtained f
22e40 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20  rom the..       
22e50 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
22e60 41 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74  Allocate" /> met
22e70 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
22e80 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
22e90 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
22ea0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
22eb0 68 65 20 61 63 74 75 61 6c 20 73 69 7a 65 2c 20  he actual size, 
22ec0 69 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65  in bytes, of the
22ed0 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 73 70   memory block sp
22ee0 65 63 69 66 69 65 64 20 76 69 61 20 74 68 65 0d  ecified via the.
22ef0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74  .        /// nat
22f00 69 76 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20  ive pointer...  
22f10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
22f20 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
22f30 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
22f40 53 69 7a 65 28 49 6e 74 50 74 72 20 70 4d 65 6d  Size(IntPtr pMem
22f50 6f 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ory)..        {.
22f60 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
22f70 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
22f80 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
22f90 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
22fa0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a  lite3_malloc_siz
22fb0 65 5f 69 6e 74 65 72 6f 70 28 70 4d 65 6d 6f 72  e_interop(pMemor
22fc0 79 29 3b 0d 0a 23 65 6c 69 66 20 54 52 41 43 4b  y);..#elif TRACK
22fd0 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20  _MEMORY_BYTES.. 
22fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
22ff0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
23000 43 4b 3a 20 4f 6b 2c 20 77 65 20 63 61 6e 6e 6f  CK: Ok, we canno
23010 74 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  t determine the 
23020 73 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f  size of the memo
23030 72 79 20 62 6c 6f 63 6b 3b 0d 0a 20 20 20 20 20  ry block;..     
23040 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
23050 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 20  therefore, just 
23060 74 72 61 63 6b 20 6e 75 6d 62 65 72 20 6f 66 20  track number of 
23070 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 6e 73 74  allocations inst
23080 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ead...          
23090 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
230a0 20 20 72 65 74 75 72 6e 20 28 70 4d 65 6d 6f 72    return (pMemor
230b0 79 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  y != IntPtr.Zero
230c0 29 20 3f 20 31 20 3a 20 30 3b 0d 0a 23 65 6c 73  ) ? 1 : 0;..#els
230d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
230e0 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66  eturn 0;..#endif
230f0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
23100 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23150 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
23160 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
23170 20 2f 2f 2f 20 46 72 65 65 73 20 61 20 6d 65 6d   /// Frees a mem
23180 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f  ory block previo
23190 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72  usly obtained fr
231a0 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  om the..        
231b0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 41  /// <see cref="A
231c0 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68  llocate" /> meth
231d0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
231e0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
231f0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
23200 6e 61 6d 65 3d 22 70 4d 65 6d 6f 72 79 22 3e 0d  name="pMemory">.
23210 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
23220 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
23230 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c  to the memory bl
23240 6f 63 6b 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  ock previously o
23250 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
23260 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
23270 65 65 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74  ee cref="Allocat
23280 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
23290 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
232a0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
232b0 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
232c0 46 72 65 65 28 49 6e 74 50 74 72 20 70 4d 65 6d  Free(IntPtr pMem
232d0 6f 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ory)..        {.
232e0 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52  .#if TRACK_MEMOR
232f0 59 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20  Y_BYTES..       
23300 20 20 20 20 20 69 66 20 28 70 4d 65 6d 6f 72 79       if (pMemory
23310 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
23320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23340 20 69 6e 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d   int blockSize =
23350 20 53 69 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d   Size(pMemory);.
23360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23370 20 20 20 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65     if (blockSize
23380 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
23390 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
233b0 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
233f0 74 65 73 41 6c 6c 6f 63 61 74 65 64 20 2d 3d 20  tesAllocated -= 
23400 62 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 20 20 20 20  blockSize;..    
23410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23420 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
23430 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
23440 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
23450 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
23460 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
23470 71 6c 69 74 65 33 5f 66 72 65 65 28 70 4d 65 6d  qlite3_free(pMem
23480 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ory);..        }
23490 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
234a0 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
234b0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
234c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
234d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23510 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
23520 4c 69 74 65 53 74 72 69 6e 67 20 53 74 61 74 69  LiteString Stati
23530 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f  c Class..    ///
23540 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
23550 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 63  /// This class c
23560 6f 6e 74 61 69 6e 73 20 73 74 61 74 69 63 20 6d  ontains static m
23570 65 74 68 6f 64 73 20 74 68 61 74 20 61 72 65 20  ethods that are 
23580 75 73 65 64 20 74 6f 20 64 65 61 6c 20 77 69 74  used to deal wit
23590 68 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f  h native..    //
235a0 2f 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70  / UTF-8 string p
235b0 6f 69 6e 74 65 72 73 20 74 6f 20 62 65 20 75 73  ointers to be us
235c0 65 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69  ed with the SQLi
235d0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
235e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
235f0 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
23600 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  al static class 
23610 53 51 4c 69 74 65 53 74 72 69 6e 67 0d 0a 20 20  SQLiteString..  
23620 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
23630 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
23640 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
23650 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
23660 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
23670 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  is the maximum p
23680 6f 73 73 69 62 6c 65 20 6c 65 6e 67 74 68 20 66  ossible length f
23690 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20 55 54  or the native UT
236a0 46 2d 38 20 65 6e 63 6f 64 65 64 0d 0a 20 20 20  F-8 encoded..   
236b0 20 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73       /// strings
236c0 20 75 73 65 64 20 77 69 74 68 20 74 68 65 20 53   used with the S
236d0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
236e0 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry...        ///
236f0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
23700 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
23710 74 69 63 20 69 6e 74 20 54 68 69 72 74 79 42 69  tic int ThirtyBi
23720 74 73 20 3d 20 30 78 33 66 66 66 66 66 66 66 3b  ts = 0x3fffffff;
23730 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23780 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
23790 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
237a0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
237b0 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  s the <see cref=
237c0 22 45 6e 63 6f 64 69 6e 67 22 20 2f 3e 20 6f 62  "Encoding" /> ob
237d0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 75 73  ject instance us
237e0 65 64 20 74 6f 20 68 61 6e 64 6c 65 0d 0a 20 20  ed to handle..  
237f0 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72        /// conver
23800 73 69 6f 6e 73 20 66 72 6f 6d 2f 74 6f 20 55 54  sions from/to UT
23810 46 2d 38 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  F-8...        //
23820 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
23830 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
23840 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 45 6e  atic readonly En
23850 63 6f 64 69 6e 67 20 55 74 66 38 45 6e 63 6f 64  coding Utf8Encod
23860 69 6e 67 20 3d 20 45 6e 63 6f 64 69 6e 67 2e 55  ing = Encoding.U
23870 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  TF8;..        #e
23880 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
23890 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
238a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
238e0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55         #region U
238f0 54 46 2d 38 20 45 6e 63 6f 64 69 6e 67 20 48 65  TF-8 Encoding He
23900 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
23910 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
23920 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
23930 20 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70   Converts the sp
23940 65 63 69 66 69 65 64 20 6d 61 6e 61 67 65 64 20  ecified managed 
23950 73 74 72 69 6e 67 20 69 6e 74 6f 20 74 68 65 20  string into the 
23960 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 61  UTF-8 encoding a
23970 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  nd..        /// 
23980 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 72 61  returns the arra
23990 79 20 6f 66 20 62 79 74 65 73 20 63 6f 6e 74 61  y of bytes conta
239a0 69 6e 69 6e 67 20 69 74 73 20 72 65 70 72 65 73  ining its repres
239b0 65 6e 74 61 74 69 6f 6e 20 69 6e 20 74 68 61 74  entation in that
239c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 6e  ..        /// en
239d0 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  coding...       
239e0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
239f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
23a00 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
23a10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
23a20 68 65 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e  he managed strin
23a30 67 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20  g to convert... 
23a40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
23a50 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
23a60 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
23a70 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
23a80 79 20 6f 66 20 62 79 74 65 73 20 63 6f 6e 74 61  y of bytes conta
23a90 69 6e 69 6e 67 20 74 68 65 20 72 65 70 72 65 73  ining the repres
23aa0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
23ab0 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20  managed..       
23ac0 20 2f 2f 2f 20 73 74 72 69 6e 67 20 69 6e 20 74   /// string in t
23ad0 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e  he UTF-8 encodin
23ae0 67 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66  g or null upon f
23af0 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ailure...       
23b00 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
23b10 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
23b20 73 74 61 74 69 63 20 62 79 74 65 5b 5d 20 47 65  static byte[] Ge
23b30 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74  tUtf8BytesFromSt
23b40 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ring(..         
23b50 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0d     string value.
23b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23b70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23b80 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
23b90 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
23ba0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23bb0 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
23bc0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 74         return Ut
23bd0 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 42 79  f8Encoding.GetBy
23be0 74 65 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  tes(value);..   
23bf0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23c00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23c50 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
23c60 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
23c70 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65  Converts the spe
23c80 63 69 66 69 65 64 20 61 72 72 61 79 20 6f 66 20  cified array of 
23c90 62 79 74 65 73 20 72 65 70 72 65 73 65 6e 74 69  bytes representi
23ca0 6e 67 20 61 20 73 74 72 69 6e 67 20 69 6e 20 74  ng a string in t
23cb0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
23cc0 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 61  UTF-8 encoding a
23cd0 6e 64 20 72 65 74 75 72 6e 73 20 61 20 6d 61 6e  nd returns a man
23ce0 61 67 65 64 20 73 74 72 69 6e 67 2e 0d 0a 20 20  aged string...  
23cf0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
23d00 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
23d10 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
23d20 79 74 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  ytes">..        
23d30 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66  /// The array of
23d40 20 62 79 74 65 73 20 74 6f 20 63 6f 6e 76 65 72   bytes to conver
23d50 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
23d60 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
23d70 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
23d80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
23d90 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20   managed string 
23da0 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69  or null upon fai
23db0 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lure...        /
23dc0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
23dd0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
23de0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53  atic string GetS
23df0 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 42 79 74  tringFromUtf8Byt
23e00 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
23e10 20 62 79 74 65 5b 5d 20 62 79 74 65 73 0d 0a 20   byte[] bytes.. 
23e20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
23e30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23e40 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d       if (bytes =
23e50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
23e60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23e70 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  null;....#if !PL
23e80 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
23e90 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
23ea0 20 20 20 20 20 72 65 74 75 72 6e 20 55 74 66 38       return Utf8
23eb0 45 6e 63 6f 64 69 6e 67 2e 47 65 74 53 74 72 69  Encoding.GetStri
23ec0 6e 67 28 62 79 74 65 73 29 3b 0d 0a 23 65 6c 73  ng(bytes);..#els
23ed0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
23ee0 65 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69  eturn Utf8Encodi
23ef0 6e 67 2e 47 65 74 53 74 72 69 6e 67 28 62 79 74  ng.GetString(byt
23f00 65 73 2c 20 30 2c 20 62 79 74 65 73 2e 4c 65 6e  es, 0, bytes.Len
23f10 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  gth);..#endif.. 
23f20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23f30 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
23f40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23f90 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
23fa0 6f 6e 20 55 54 46 2d 38 20 53 74 72 69 6e 67 20  on UTF-8 String 
23fb0 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
23fc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
23fd0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
23fe0 2f 2f 20 50 72 6f 62 65 73 20 61 20 6e 61 74 69  // Probes a nati
23ff0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20  ve pointer to a 
24000 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 55 54  string in the UT
24010 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72  F-8 encoding for
24020 20 69 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f   its..        //
24030 2f 20 74 65 72 6d 69 6e 61 74 69 6e 67 20 4e 55  / terminating NU
24040 4c 20 63 68 61 72 61 63 74 65 72 2c 20 77 69 74  L character, wit
24050 68 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  hin the specifie
24060 64 20 6c 65 6e 67 74 68 20 6c 69 6d 69 74 2e 0d  d length limit..
24070 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
24080 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
24090 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
240a0 3d 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20  ="pValue">..    
240b0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
240c0 76 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65  ve NUL-terminate
240d0 64 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  d string pointer
240e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
240f0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
24100 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
24110 3d 22 6c 69 6d 69 74 22 3e 0d 0a 20 20 20 20 20  ="limit">..     
24120 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 78 69 6d     /// The maxim
24130 75 6d 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  um length of the
24140 20 6e 61 74 69 76 65 20 73 74 72 69 6e 67 2c 20   native string, 
24150 69 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 20  in bytes...     
24160 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
24170 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
24180 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
24190 2f 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 20 6f  /// The length o
241a0 66 20 74 68 65 20 6e 61 74 69 76 65 20 73 74 72  f the native str
241b0 69 6e 67 2c 20 69 6e 20 62 79 74 65 73 20 2d 4f  ing, in bytes -O
241c0 52 2d 20 7a 65 72 6f 20 69 66 20 74 68 65 20 6c  R- zero if the l
241d0 65 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20 2f  ength..        /
241e0 2f 2f 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  // could not be 
241f0 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20  determined...   
24200 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
24210 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
24220 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 50  lic static int P
24230 72 6f 62 65 46 6f 72 55 74 66 38 42 79 74 65 4c  robeForUtf8ByteL
24240 65 6e 67 74 68 28 0d 0a 20 20 20 20 20 20 20 20  ength(..        
24250 20 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75      IntPtr pValu
24260 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
24270 69 6e 74 20 6c 69 6d 69 74 0d 0a 20 20 20 20 20  int limit..     
24280 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
24290 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
242a0 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 30 3b   int length = 0;
242b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
242c0 69 66 20 28 28 70 56 61 6c 75 65 20 21 3d 20 49  if ((pValue != I
242d0 6e 74 50 74 72 2e 5a 65 72 6f 29 20 26 26 20 28  ntPtr.Zero) && (
242e0 6c 69 6d 69 74 20 3e 20 30 29 29 0d 0a 20 20 20  limit > 0))..   
242f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24300 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 0d 0a              do..
24310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24330 20 20 20 20 20 20 20 69 66 20 28 4d 61 72 73 68         if (Marsh
24340 61 6c 2e 52 65 61 64 42 79 74 65 28 70 56 61 6c  al.ReadByte(pVal
24350 75 65 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30  ue, length) == 0
24360 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24370 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
24380 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24390 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e           if (len
243a0 67 74 68 20 3e 3d 20 6c 69 6d 69 74 29 0d 0a 20  gth >= limit).. 
243b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243c0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d         break;...
243d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
243e0 20 20 20 20 20 6c 65 6e 67 74 68 2b 2b 3b 0d 0a       length++;..
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24400 7d 20 77 68 69 6c 65 20 28 74 72 75 65 29 3b 0d  } while (true);.
24410 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
24430 74 75 72 6e 20 6c 65 6e 67 74 68 3b 0d 0a 20 20  turn length;..  
24440 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24450 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
244a0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
244b0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
244c0 20 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70   Converts the sp
244d0 65 63 69 66 69 65 64 20 6e 61 74 69 76 65 20 4e  ecified native N
244e0 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54  UL-terminated UT
244f0 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74  F-8 string point
24500 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  er..        /// 
24510 69 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 73  into a managed s
24520 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  tring...        
24530 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
24540 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
24550 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22  am name="pValue"
24560 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
24570 68 65 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65  he native NUL-te
24580 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
24590 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a  tring pointer...
245a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
245b0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
245c0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
245d0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e       /// The man
245e0 61 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20 6e  aged string or n
245f0 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65  ull upon failure
24600 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
24610 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
24620 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
24630 20 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46 72   string StringFr
24640 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20  omUtf8IntPtr(.. 
24650 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
24660 72 20 70 56 61 6c 75 65 0d 0a 20 20 20 20 20 20  r pValue..      
24670 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
24680 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24690 72 65 74 75 72 6e 20 53 74 72 69 6e 67 46 72 6f  return StringFro
246a0 6d 55 74 66 38 49 6e 74 50 74 72 28 70 56 61 6c  mUtf8IntPtr(pVal
246b0 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
246c0 20 20 20 20 20 50 72 6f 62 65 46 6f 72 55 74 66       ProbeForUtf
246d0 38 42 79 74 65 4c 65 6e 67 74 68 28 70 56 61 6c  8ByteLength(pVal
246e0 75 65 2c 20 54 68 69 72 74 79 42 69 74 73 29 29  ue, ThirtyBits))
246f0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
24700 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
24710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24750 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
24760 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
24770 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74    /// Converts t
24780 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 74  he specified nat
24790 69 76 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ive UTF-8 string
247a0 20 70 6f 69 6e 74 65 72 20 6f 66 20 74 68 65 20   pointer of the 
247b0 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20  specified..     
247c0 20 20 20 2f 2f 2f 20 6c 65 6e 67 74 68 20 69 6e     /// length in
247d0 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 73 74 72  to a managed str
247e0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ing...        //
247f0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
24800 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
24810 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d   name="pValue">.
24820 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
24830 20 6e 61 74 69 76 65 20 55 54 46 2d 38 20 73 74   native UTF-8 st
24840 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a 20  ring pointer... 
24850 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
24860 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
24870 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65   <param name="le
24880 6e 67 74 68 22 3e 0d 0a 20 20 20 20 20 20 20 20  ngth">..        
24890 2f 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 20 6f  /// The length o
248a0 66 20 74 68 65 20 6e 61 74 69 76 65 20 73 74 72  f the native str
248b0 69 6e 67 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a  ing, in bytes...
248c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
248d0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
248e0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
248f0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e       /// The man
24900 61 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20 6e  aged string or n
24910 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65  ull upon failure
24920 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
24930 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
24940 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
24950 20 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46 72   string StringFr
24960 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20  omUtf8IntPtr(.. 
24970 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
24980 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20  r pValue,..     
24990 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
249a0 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  h..            )
249b0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
249c0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61           if (pVa
249d0 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  lue == IntPtr.Ze
249e0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
249f0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
24a00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24a10 20 69 66 20 28 6c 65 6e 67 74 68 20 3e 20 30 29   if (length > 0)
24a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
24a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24a40 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20   byte[] bytes = 
24a50 6e 65 77 20 62 79 74 65 5b 6c 65 6e 67 74 68 5d  new byte[length]
24a60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24a70 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
24a80 79 28 70 56 61 6c 75 65 2c 20 62 79 74 65 73 2c  y(pValue, bytes,
24a90 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a   0, length);....
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 72 65 74 75 72 6e 20 47 65 74 53 74 72 69 6e 67  return GetString
24ac0 46 72 6f 6d 55 74 66 38 42 79 74 65 73 28 62 79  FromUtf8Bytes(by
24ad0 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tes);..         
24ae0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24af0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
24b00 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20  g.Empty;..      
24b10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
24b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24b70 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
24b80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
24b90 76 65 72 74 73 20 74 68 65 20 73 70 65 63 69 66  verts the specif
24ba0 69 65 64 20 6d 61 6e 61 67 65 64 20 73 74 72 69  ied managed stri
24bb0 6e 67 20 69 6e 74 6f 20 61 20 6e 61 74 69 76 65  ng into a native
24bc0 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 0d   NUL-terminated.
24bd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54 46  .        /// UTF
24be0 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  -8 string pointe
24bf0 72 20 75 73 69 6e 67 20 6d 65 6d 6f 72 79 20 6f  r using memory o
24c00 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
24c10 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20   SQLite core..  
24c20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72        /// librar
24c30 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
24c40 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
24c50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
24c60 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20  ame="value">..  
24c70 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61        /// The ma
24c80 6e 61 67 65 64 20 73 74 72 69 6e 67 20 74 6f 20  naged string to 
24c90 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20  convert...      
24ca0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
24cb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
24cc0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
24cd0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 4e 55  // The native NU
24ce0 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  L-terminated UTF
24cf0 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  -8 string pointe
24d00 72 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  r or..        //
24d10 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  / <see cref="Int
24d20 50 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 75 70 6f  Ptr.Zero" /> upo
24d30 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20  n failure...    
24d40 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
24d50 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
24d60 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72  ic static IntPtr
24d70 20 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53   Utf8IntPtrFromS
24d80 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20  tring(..        
24d90 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
24da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
24db0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
24dc0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
24dd0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
24de0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24df0 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d  rn IntPtr.Zero;.
24e00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
24e10 6e 74 50 74 72 20 72 65 73 75 6c 74 20 3d 20 49  ntPtr result = I
24e20 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
24e30 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
24e40 62 79 74 65 73 20 3d 20 47 65 74 55 74 66 38 42  bytes = GetUtf8B
24e50 79 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 76  ytesFromString(v
24e60 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue);....      
24e70 20 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20        if (bytes 
24e80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24e90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24ea0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
24eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
24ec0 20 6c 65 6e 67 74 68 20 3d 20 62 79 74 65 73 2e   length = bytes.
24ed0 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
24ee0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
24ef0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c  SQLiteMemory.All
24f00 6f 63 61 74 65 28 6c 65 6e 67 74 68 20 2b 20 31  ocate(length + 1
24f10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24f20 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20    if (result == 
24f30 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24f50 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f  turn IntPtr.Zero
24f60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24f70 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 62 79   Marshal.Copy(by
24f80 74 65 73 2c 20 30 2c 20 72 65 73 75 6c 74 2c 20  tes, 0, result, 
24f90 6c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20  length);..      
24fa0 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72        Marshal.Wr
24fb0 69 74 65 42 79 74 65 28 72 65 73 75 6c 74 2c 20  iteByte(result, 
24fc0 6c 65 6e 67 74 68 2c 20 30 29 3b 0d 0a 0d 0a 20  length, 0);.... 
24fd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24fe0 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
24ff0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
25000 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
25010 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
25020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25060 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55         #region U
25070 54 46 2d 38 20 53 74 72 69 6e 67 20 41 72 72 61  TF-8 String Arra
25080 79 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73  y Helper Methods
25090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
250a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
250b0 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20   /// Converts a 
250c0 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66  logical array of
250d0 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d   native NUL-term
250e0 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
250f0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ing..        ///
25100 20 70 6f 69 6e 74 65 72 73 20 69 6e 74 6f 20 61   pointers into a
25110 6e 20 61 72 72 61 79 20 6f 66 20 6d 61 6e 61 67  n array of manag
25120 65 64 20 73 74 72 69 6e 67 73 2e 0d 0a 20 20 20  ed strings...   
25130 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
25140 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
25150 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
25160 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gc">..        //
25170 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
25180 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
25190 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66  logical array of
251a0 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20   native..       
251b0 20 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e 61   /// NUL-termina
251c0 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
251d0 20 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20   pointers...    
251e0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
251f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
25200 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22  aram name="argv"
25210 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
25220 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
25230 72 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61 6c  r to the logical
25240 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65   array of native
25250 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 0d   NUL-terminated.
25260 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54 46  .        /// UTF
25270 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  -8 string pointe
25280 72 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a  rs to convert...
25290 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
252a0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
252b0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
252c0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72       /// The arr
252d0 61 79 20 6f 66 20 6d 61 6e 61 67 65 64 20 73 74  ay of managed st
252e0 72 69 6e 67 73 20 6f 72 20 6e 75 6c 6c 20 75 70  rings or null up
252f0 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20  on failure...   
25300 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
25310 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
25320 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
25330 67 5b 5d 20 53 74 72 69 6e 67 41 72 72 61 79 46  g[] StringArrayF
25340 72 6f 6d 55 74 66 38 53 69 7a 65 41 6e 64 49 6e  romUtf8SizeAndIn
25350 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
25360 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
25370 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
25380 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 20   argv..         
25390 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
253a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
253b0 28 61 72 67 63 20 3c 20 30 29 0d 0a 20 20 20 20  (argc < 0)..    
253c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
253d0 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
253e0 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67 76          if (argv
253f0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
25400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25410 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
25420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
25430 72 69 6e 67 5b 5d 20 72 65 73 75 6c 74 20 3d 20  ring[] result = 
25440 6e 65 77 20 73 74 72 69 6e 67 5b 61 72 67 63 5d  new string[argc]
25450 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25460 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
25470 3d 20 30 2c 20 6f 66 66 73 65 74 20 3d 20 30 3b  = 0, offset = 0;
25480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25490 20 20 20 20 20 20 69 6e 64 65 78 20 3c 20 72 65        index < re
254a0 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20  sult.Length;..  
254b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254c0 20 20 69 6e 64 65 78 2b 2b 2c 20 6f 66 66 73 65    index++, offse
254d0 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65  t += IntPtr.Size
254e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
254f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25500 20 20 49 6e 74 50 74 72 20 70 41 72 67 20 3d 20    IntPtr pArg = 
25510 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65  SQLiteMarshal.Re
25520 61 64 49 6e 74 50 74 72 28 61 72 67 76 2c 20 6f  adIntPtr(argv, o
25530 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
25540 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
25550 74 5b 69 6e 64 65 78 5d 20 3d 20 28 70 41 72 67  t[index] = (pArg
25560 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
25570 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
25580 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 46 72          StringFr
25590 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 70 41 72  omUtf8IntPtr(pAr
255a0 67 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  g) : null;..    
255b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
255c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
255d0 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
255e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
255f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25630 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25640 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
25650 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76          /// Conv
25660 65 72 74 73 20 61 6e 20 61 72 72 61 79 20 6f 66  erts an array of
25670 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 73   managed strings
25680 20 69 6e 74 6f 20 61 6e 20 61 72 72 61 79 20 6f   into an array o
25690 66 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  f native..      
256a0 20 20 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e    /// NUL-termin
256b0 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
256c0 67 20 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20  g pointers...   
256d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
256e0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
256f0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
25700 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  lues">..        
25710 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66  /// The array of
25720 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 73   managed strings
25730 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20   to convert...  
25740 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
25750 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
25760 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
25770 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79     /// The array
25780 20 6f 66 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74   of native NUL-t
25790 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
257a0 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 73 20  string pointers 
257b0 6f 72 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20  or null..       
257c0 20 2f 2f 2f 20 75 70 6f 6e 20 66 61 69 6c 75 72   /// upon failur
257d0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
257e0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
257f0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
25800 63 20 49 6e 74 50 74 72 5b 5d 20 55 74 66 38 49  c IntPtr[] Utf8I
25810 6e 74 50 74 72 41 72 72 61 79 46 72 6f 6d 53 74  ntPtrArrayFromSt
25820 72 69 6e 67 41 72 72 61 79 28 0d 0a 20 20 20 20  ringArray(..    
25830 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
25840 20 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20   values..       
25850 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
25860 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
25870 66 20 28 76 61 6c 75 65 73 20 3d 3d 20 6e 75 6c  f (values == nul
25880 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
25890 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
258a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
258b0 49 6e 74 50 74 72 5b 5d 20 72 65 73 75 6c 74 20  IntPtr[] result 
258c0 3d 20 6e 65 77 20 49 6e 74 50 74 72 5b 76 61 6c  = new IntPtr[val
258d0 75 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a  ues.Length];....
258e0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
258f0 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
25900 69 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c  index < result.L
25910 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d  ength; index++).
25920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25930 20 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d   result[index] =
25940 20 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53   Utf8IntPtrFromS
25950 74 72 69 6e 67 28 76 61 6c 75 65 73 5b 69 6e 64  tring(values[ind
25960 65 78 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ex]);....       
25970 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
25980 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
25990 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
259a0 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
259b0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
259c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
259d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25a10 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
25a20 74 65 42 79 74 65 73 20 53 74 61 74 69 63 20 43  teBytes Static C
25a30 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
25a40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
25a50 20 54 68 69 73 20 63 6c 61 73 73 20 63 6f 6e 74   This class cont
25a60 61 69 6e 73 20 73 74 61 74 69 63 20 6d 65 74 68  ains static meth
25a70 6f 64 73 20 74 68 61 74 20 61 72 65 20 75 73 65  ods that are use
25a80 64 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 6e  d to deal with n
25a90 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 70  ative..    /// p
25aa0 6f 69 6e 74 65 72 73 20 74 6f 20 6d 65 6d 6f 72  ointers to memor
25ab0 79 20 62 6c 6f 63 6b 73 20 74 68 61 74 20 6c 6f  y blocks that lo
25ac0 67 69 63 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20  gically contain 
25ad0 61 72 72 61 79 73 20 6f 66 20 62 79 74 65 73 20  arrays of bytes 
25ae0 74 6f 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20 75  to be..    /// u
25af0 73 65 64 20 77 69 74 68 20 74 68 65 20 53 51 4c  sed with the SQL
25b00 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
25b10 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
25b20 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
25b30 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73  nal static class
25b40 20 53 51 4c 69 74 65 42 79 74 65 73 0d 0a 20 20   SQLiteBytes..  
25b50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
25b60 67 69 6f 6e 20 42 79 74 65 20 41 72 72 61 79 20  gion Byte Array 
25b70 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
25b80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
25b90 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
25ba0 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6e 61  // Converts a na
25bb0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
25bc0 61 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20  a logical array 
25bd0 6f 66 20 62 79 74 65 73 20 6f 66 20 74 68 65 0d  of bytes of the.
25be0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65  .        /// spe
25bf0 63 69 66 69 65 64 20 6c 65 6e 67 74 68 20 69 6e  cified length in
25c00 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 62 79 74  to a managed byt
25c10 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20  e array...      
25c20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
25c30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
25c40 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75  aram name="pValu
25c50 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
25c60 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
25c70 74 65 72 20 74 6f 20 74 68 65 20 6c 6f 67 69 63  ter to the logic
25c80 61 6c 20 61 72 72 61 79 20 6f 66 20 62 79 74 65  al array of byte
25c90 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20  s to convert... 
25ca0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
25cb0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
25cc0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65   <param name="le
25cd0 6e 67 74 68 22 3e 0d 0a 20 20 20 20 20 20 20 20  ngth">..        
25ce0 2f 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 2c 20  /// The length, 
25cf0 69 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65  in bytes, of the
25d00 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f   logical array o
25d10 66 20 62 79 74 65 73 20 74 6f 20 63 6f 6e 76 65  f bytes to conve
25d20 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rt...        ///
25d30 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
25d40 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
25d50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
25d60 65 20 6d 61 6e 61 67 65 64 20 62 79 74 65 20 61  e managed byte a
25d70 72 72 61 79 20 6f 72 20 6e 75 6c 6c 20 75 70 6f  rray or null upo
25d80 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20  n failure...    
25d90 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
25da0 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
25db0 69 63 20 73 74 61 74 69 63 20 62 79 74 65 5b 5d  ic static byte[]
25dc0 20 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20   FromIntPtr(..  
25dd0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
25de0 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20   pValue,..      
25df0 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
25e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
25e10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
25e20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
25e30 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
25e40 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
25e50 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
25e60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25e70 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29  if (length == 0)
25e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25e90 20 20 72 65 74 75 72 6e 20 6e 65 77 20 62 79 74    return new byt
25ea0 65 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e[0];....       
25eb0 20 20 20 20 20 62 79 74 65 5b 5d 20 72 65 73 75       byte[] resu
25ec0 6c 74 20 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65  lt = new byte[le
25ed0 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ngth];....      
25ee0 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f        Marshal.Co
25ef0 70 79 28 70 56 61 6c 75 65 2c 20 72 65 73 75 6c  py(pValue, resul
25f00 74 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  t, 0, length);..
25f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
25f20 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
25f30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25f40 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25f90 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
25fa0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
25fb0 20 43 6f 6e 76 65 72 74 73 20 61 20 6d 61 6e 61   Converts a mana
25fc0 67 65 64 20 62 79 74 65 20 61 72 72 61 79 20 69  ged byte array i
25fd0 6e 74 6f 20 61 20 6e 61 74 69 76 65 20 70 6f 69  nto a native poi
25fe0 6e 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63 61  nter to a logica
25ff0 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  l..        /// a
26000 72 72 61 79 20 6f 66 20 62 79 74 65 73 2e 0d 0a  rray of bytes...
26010 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
26020 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
26030 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
26040 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20  "value">..      
26050 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65    /// The manage
26060 64 20 62 79 74 65 20 61 72 72 61 79 20 74 6f 20  d byte array to 
26070 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20  convert...      
26080 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
26090 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
260a0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
260b0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
260c0 69 6e 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63  inter to a logic
260d0 61 6c 20 62 79 74 65 20 61 72 72 61 79 20 6f 72  al byte array or
260e0 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75   null upon failu
260f0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
26100 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
26110 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
26120 69 63 20 49 6e 74 50 74 72 20 54 6f 49 6e 74 50  ic IntPtr ToIntP
26130 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
26140 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 0d 0a 20   byte[] value.. 
26150 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
26160 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26170 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
26180 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
26190 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
261a0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
261b0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
261c0 6c 65 6e 67 74 68 20 3d 20 76 61 6c 75 65 2e 4c  length = value.L
261d0 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
261e0 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68        if (length
261f0 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
26200 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
26210 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
26220 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
26230 72 20 72 65 73 75 6c 74 20 3d 20 53 51 4c 69 74  r result = SQLit
26240 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65  eMemory.Allocate
26250 28 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20  (length);....   
26260 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
26270 75 6c 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ult == IntPtr.Ze
26280 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
26290 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50       return IntP
262a0 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
262b0 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
262c0 43 6f 70 79 28 76 61 6c 75 65 2c 20 30 2c 20 72  Copy(value, 0, r
262d0 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68 29 3b 0d  esult, length);.
262e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
262f0 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
26300 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
26310 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
26320 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
26330 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
26340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26380 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
26390 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 61 72 73  egion SQLiteMars
263a0 68 61 6c 20 53 74 61 74 69 63 20 43 6c 61 73 73  hal Static Class
263b0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
263c0 74 61 74 69 63 20 63 6c 61 73 73 20 53 51 4c 69  tatic class SQLi
263d0 74 65 4d 61 72 73 68 61 6c 0d 0a 20 20 20 20 7b  teMarshal..    {
263e0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
263f0 6e 20 49 6e 74 50 74 72 20 48 65 6c 70 65 72 20  n IntPtr Helper 
26400 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
26410 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
26420 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75          /// Retu
26430 72 6e 73 20 61 20 6e 65 77 20 3c 73 65 65 20 63  rns a new <see c
26440 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20  ref="IntPtr" /> 
26450 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
26460 62 61 73 65 64 20 6f 6e 20 74 68 65 0d 0a 20 20  based on the..  
26470 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63 69 66        /// specif
26480 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49  ied <see cref="I
26490 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ntPtr" /> object
264a0 20 69 6e 73 74 61 6e 63 65 20 61 6e 64 20 61 6e   instance and an
264b0 20 69 6e 74 65 67 65 72 0d 0a 20 20 20 20 20 20   integer..      
264c0 20 20 2f 2f 2f 20 6f 66 66 73 65 74 2e 0d 0a 20    /// offset... 
264d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
264e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
264f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
26500 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20  pointer">..     
26510 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
26520 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
26530 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
26540 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
26550 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20  e base..        
26560 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  /// memory locat
26570 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
26580 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
26590 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
265a0 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20  ame="offset">.. 
265b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69         /// The i
265c0 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72  nteger offset fr
265d0 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f  om the base memo
265e0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
265f0 20 74 68 65 20 6e 65 77 0d 0a 20 20 20 20 20 20   the new..      
26600 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
26610 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65  "IntPtr" /> obje
26620 63 74 20 69 6e 73 74 61 6e 63 65 20 73 68 6f 75  ct instance shou
26630 6c 64 20 70 6f 69 6e 74 20 74 6f 2e 0d 0a 20 20  ld point to...  
26640 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
26650 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
26660 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
26670 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c     /// The new <
26680 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72  see cref="IntPtr
26690 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
266a0 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
266b0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
266c0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
266d0 61 74 69 63 20 49 6e 74 50 74 72 20 49 6e 74 50  atic IntPtr IntP
266e0 74 72 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20  trForOffset(..  
266f0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
26700 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20   pointer,..     
26710 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
26720 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
26730 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
26740 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26750 6e 65 77 20 49 6e 74 50 74 72 28 70 6f 69 6e 74  new IntPtr(point
26760 65 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6f  er.ToInt64() + o
26770 66 66 73 65 74 29 3b 0d 0a 20 20 20 20 20 20 20  ffset);..       
26780 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
26790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
267e0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
267f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 6f 75 6e          /// Roun
26800 64 73 20 75 70 20 61 6e 20 69 6e 74 65 67 65 72  ds up an integer
26810 20 73 69 7a 65 20 74 6f 20 74 68 65 20 6e 65 78   size to the nex
26820 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68  t multiple of th
26830 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0d 0a 20 20  e alignment...  
26840 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
26850 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
26860 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
26870 69 7a 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ize">..        /
26880 2f 2f 20 54 68 65 20 73 69 7a 65 2c 20 69 6e 20  // The size, in 
26890 62 79 74 65 73 2c 20 74 6f 20 62 65 20 72 6f 75  bytes, to be rou
268a0 6e 64 65 64 20 75 70 2e 0d 0a 20 20 20 20 20 20  nded up...      
268b0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
268c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
268d0 61 6d 20 6e 61 6d 65 3d 22 61 6c 69 67 6e 6d 65  am name="alignme
268e0 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nt">..        //
268f0 2f 20 54 68 65 20 72 65 71 75 69 72 65 64 20 61  / The required a
26900 6c 69 67 6e 6d 65 6e 74 20 66 6f 72 20 74 68 65  lignment for the
26910 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 0d 0a   return value...
26920 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
26930 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
26940 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
26950 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 69 7a       /// The siz
26960 65 2c 20 69 6e 20 62 79 74 65 73 2c 20 72 6f 75  e, in bytes, rou
26970 6e 64 65 64 20 75 70 20 74 6f 20 74 68 65 20 6e  nded up to the n
26980 65 78 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  ext multiple of 
26990 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
269a0 20 61 6c 69 67 6e 6d 65 6e 74 2e 20 20 54 68 69   alignment.  Thi
269b0 73 20 76 61 6c 75 65 20 6d 61 79 20 65 6e 64 20  s value may end 
269c0 75 70 20 62 65 69 6e 67 20 74 68 65 20 73 61 6d  up being the sam
269d0 65 20 61 73 20 74 68 65 20 6f 72 69 67 69 6e 61  e as the origina
269e0 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  l..        /// s
269f0 69 7a 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ize...        //
26a00 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
26a10 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
26a20 74 69 63 20 69 6e 74 20 52 6f 75 6e 64 55 70 28  tic int RoundUp(
26a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
26a40 74 20 73 69 7a 65 2c 0d 0a 20 20 20 20 20 20 20  t size,..       
26a50 20 20 20 20 20 69 6e 74 20 61 6c 69 67 6e 6d 65       int alignme
26a60 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
26a70 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
26a80 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 6c            int al
26a90 69 67 6e 6d 65 6e 74 4d 69 6e 75 73 4f 6e 65 20  ignmentMinusOne 
26aa0 3d 20 61 6c 69 67 6e 6d 65 6e 74 20 2d 20 31 3b  = alignment - 1;
26ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
26ac0 74 75 72 6e 20 28 28 73 69 7a 65 20 2b 20 61 6c  turn ((size + al
26ad0 69 67 6e 6d 65 6e 74 4d 69 6e 75 73 4f 6e 65 29  ignmentMinusOne)
26ae0 20 26 20 7e 61 6c 69 67 6e 6d 65 6e 74 4d 69 6e   & ~alignmentMin
26af0 75 73 4f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20  usOne);..       
26b00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
26b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
26b60 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
26b70 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 65 74 65          /// Dete
26b80 72 6d 69 6e 65 73 20 74 68 65 20 6f 66 66 73 65  rmines the offse
26b90 74 2c 20 69 6e 20 62 79 74 65 73 2c 20 6f 66 20  t, in bytes, of 
26ba0 74 68 65 20 6e 65 78 74 20 73 74 72 75 63 74 75  the next structu
26bb0 72 65 20 6d 65 6d 62 65 72 2e 0d 0a 20 20 20 20  re member...    
26bc0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
26bd0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
26be0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66  <param name="off
26bf0 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  set">..        /
26c00 2f 2f 20 54 68 65 20 6f 66 66 73 65 74 2c 20 69  // The offset, i
26c10 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20  n bytes, of the 
26c20 63 75 72 72 65 6e 74 20 73 74 72 75 63 74 75 72  current structur
26c30 65 20 6d 65 6d 62 65 72 2e 0d 0a 20 20 20 20 20  e member...     
26c40 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
26c50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
26c60 72 61 6d 20 6e 61 6d 65 3d 22 73 69 7a 65 22 3e  ram name="size">
26c70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
26c80 65 20 73 69 7a 65 2c 20 69 6e 20 62 79 74 65 73  e size, in bytes
26c90 2c 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  , of the current
26ca0 20 73 74 72 75 63 74 75 72 65 20 6d 65 6d 62 65   structure membe
26cb0 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
26cc0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
26cd0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
26ce0 65 3d 22 61 6c 69 67 6e 6d 65 6e 74 22 3e 0d 0a  e="alignment">..
26cf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
26d00 61 6c 69 67 6e 6d 65 6e 74 2c 20 69 6e 20 62 79  alignment, in by
26d10 74 65 73 2c 20 6f 66 20 74 68 65 20 6e 65 78 74  tes, of the next
26d20 20 73 74 72 75 63 74 75 72 65 20 6d 65 6d 62 65   structure membe
26d30 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
26d40 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
26d50 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
26d60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
26d70 20 6f 66 66 73 65 74 2c 20 69 6e 20 62 79 74 65   offset, in byte
26d80 73 2c 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73  s, of the next s
26d90 74 72 75 63 74 75 72 65 20 6d 65 6d 62 65 72 2e  tructure member.
26da0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
26db0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
26dc0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
26dd0 69 6e 74 20 4e 65 78 74 4f 66 66 73 65 74 4f 66  int NextOffsetOf
26de0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  (..            i
26df0 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20  nt offset,..    
26e00 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65          int size
26e10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
26e20 6e 74 20 61 6c 69 67 6e 6d 65 6e 74 0d 0a 20 20  nt alignment..  
26e30 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
26e40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26e50 20 20 20 20 72 65 74 75 72 6e 20 52 6f 75 6e 64      return Round
26e60 55 70 28 6f 66 66 73 65 74 20 2b 20 73 69 7a 65  Up(offset + size
26e70 2c 20 61 6c 69 67 6e 6d 65 6e 74 29 3b 0d 0a 20  , alignment);.. 
26e80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
26e90 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
26ea0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
26ef0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
26f00 6f 6e 20 4d 61 72 73 68 61 6c 20 52 65 61 64 20  on Marshal Read 
26f10 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
26f20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
26f30 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
26f40 2f 2f 20 52 65 61 64 73 20 61 20 3c 73 65 65 20  // Reads a <see 
26f50 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20  cref="Int32" /> 
26f60 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 73  value from the s
26f70 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d  pecified memory.
26f80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63  .        /// loc
26f90 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
26fa0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
26fb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
26fc0 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72  am name="pointer
26fd0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
26fe0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
26ff0 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ntPtr" /> object
27000 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73   instance repres
27010 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d  enting the base.
27020 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d  .        /// mem
27030 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20  ory location... 
27040 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
27050 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
27060 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66   <param name="of
27070 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  fset">..        
27080 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20  /// The integer 
27090 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
270a0 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61  base memory loca
270b0 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a  tion where the..
270c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
270d0 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
270e0 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65 61   value to be rea
270f0 64 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20  d is located... 
27100 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
27110 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
27120 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
27130 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
27140 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
27150 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 73 70   value at the sp
27160 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 20 6c  ecified memory l
27170 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ocation...      
27180 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
27190 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
271a0 20 73 74 61 74 69 63 20 69 6e 74 20 52 65 61 64   static int Read
271b0 49 6e 74 33 32 28 0d 0a 20 20 20 20 20 20 20 20  Int32(..        
271c0 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74      IntPtr point
271d0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
271e0 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20 20   int offset..   
271f0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
27200 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
27210 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
27220 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
27230 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61     return Marsha
27240 6c 2e 52 65 61 64 49 6e 74 33 32 28 70 6f 69 6e  l.ReadInt32(poin
27250 74 65 72 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 23  ter, offset);..#
27260 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
27270 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c    return Marshal
27280 2e 52 65 61 64 49 6e 74 33 32 28 49 6e 74 50 74  .ReadInt32(IntPt
27290 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74  rForOffset(point
272a0 65 72 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a 23  er, offset));..#
272b0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
272c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
272d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27310 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
27320 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
27330 20 20 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20        /// Reads 
27340 61 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75  a <see cref="Dou
27350 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 66 72  ble" /> value fr
27360 6f 6d 20 74 68 65 20 73 70 65 63 69 66 69 65 64  om the specified
27370 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20   memory..       
27380 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a   /// location...
27390 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
273a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
273b0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
273c0 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20  "pointer">..    
273d0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
273e0 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f   cref="IntPtr" /
273f0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
27400 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
27410 68 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20  he base..       
27420 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   /// memory loca
27430 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
27440 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
27450 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
27460 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a  name="offset">..
27470 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
27480 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20 66  integer offset f
27490 72 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d  rom the base mem
274a0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65  ory location whe
274b0 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  re the..        
274c0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44  /// <see cref="D
274d0 6f 75 62 6c 65 22 20 2f 3e 20 74 6f 20 62 65 20  ouble" /> to be 
274e0 72 65 61 64 20 69 73 20 6c 6f 63 61 74 65 64 2e  read is located.
274f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
27500 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
27510 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
27520 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
27530 73 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65  see cref="Double
27540 22 20 2f 3e 20 76 61 6c 75 65 20 61 74 20 74 68  " /> value at th
27550 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f  e specified memo
27560 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  ry location...  
27570 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
27580 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
27590 62 6c 69 63 20 73 74 61 74 69 63 20 64 6f 75 62  blic static doub
275a0 6c 65 20 52 65 61 64 44 6f 75 62 6c 65 28 0d 0a  le ReadDouble(..
275b0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
275c0 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20  tr pointer,..   
275d0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
275e0 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  set..           
275f0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23   )..        {..#
27600 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
27610 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
27620 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27630 6e 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 49  n BitConverter.I
27640 6e 74 36 34 42 69 74 73 54 6f 44 6f 75 62 6c 65  nt64BitsToDouble
27650 28 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74  (Marshal.ReadInt
27660 36 34 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64(..           
27670 20 20 20 20 20 70 6f 69 6e 74 65 72 2c 20 6f 66       pointer, of
27680 66 73 65 74 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a  fset));..#else..
27690 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
276a0 72 6e 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e  rn BitConverter.
276b0 54 6f 44 6f 75 62 6c 65 28 42 69 74 43 6f 6e 76  ToDouble(BitConv
276c0 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 0d  erter.GetBytes(.
276d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
276e0 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74   Marshal.ReadInt
276f0 36 34 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  64(IntPtrForOffs
27700 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  et(pointer, offs
27710 65 74 29 29 29 2c 20 30 29 3b 0d 0a 23 65 6e 64  et))), 0);..#end
27720 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  if..        }...
27730 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
27740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
27790 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
277a0 20 20 20 2f 2f 2f 20 52 65 61 64 73 20 61 6e 20     /// Reads an 
277b0 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74  <see cref="IntPt
277c0 72 22 20 2f 3e 20 76 61 6c 75 65 20 66 72 6f 6d  r" /> value from
277d0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d   the specified m
277e0 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f  emory..        /
277f0 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  // location...  
27800 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
27810 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
27820 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
27830 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20  ointer">..      
27840 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
27850 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20  ref="IntPtr" /> 
27860 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
27870 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
27880 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f   base..        /
27890 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  // memory locati
278a0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
278b0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
278c0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
278d0 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20  me="offset">..  
278e0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
278f0 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f  teger offset fro
27900 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72  m the base memor
27910 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65  y location where
27920 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
27930 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  / <see cref="Int
27940 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  Ptr" /> value to
27950 20 62 65 20 72 65 61 64 20 69 73 20 6c 6f 63 61   be read is loca
27960 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ted...        //
27970 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
27980 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
27990 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
279a0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  he <see cref="In
279b0 74 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 61  tPtr" /> value a
279c0 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
279d0 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e  memory location.
279e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
279f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
27a00 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
27a10 49 6e 74 50 74 72 20 52 65 61 64 49 6e 74 50 74  IntPtr ReadIntPt
27a20 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
27a30 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d  IntPtr pointer,.
27a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
27a50 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20 20 20   offset..       
27a60 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
27a70 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
27a80 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
27a90 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  K..            r
27aa0 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65  eturn Marshal.Re
27ab0 61 64 49 6e 74 50 74 72 28 70 6f 69 6e 74 65 72  adIntPtr(pointer
27ac0 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 23 65 6c 73  , offset);..#els
27ad0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
27ae0 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65  eturn Marshal.Re
27af0 61 64 49 6e 74 50 74 72 28 49 6e 74 50 74 72 46  adIntPtr(IntPtrF
27b00 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72  orOffset(pointer
27b10 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65 6e  , offset));..#en
27b20 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
27b30 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
27b40 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
27b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27ba0 20 23 72 65 67 69 6f 6e 20 4d 61 72 73 68 61 6c   #region Marshal
27bb0 20 57 72 69 74 65 20 48 65 6c 70 65 72 20 4d 65   Write Helper Me
27bc0 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
27bd0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
27be0 20 20 20 20 20 20 2f 2f 2f 20 57 72 69 74 65 73        /// Writes
27bf0 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 49   an <see cref="I
27c00 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20 74  nt32" /> value t
27c10 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified 
27c20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  memory..        
27c30 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20  /// location... 
27c40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
27c50 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
27c60 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
27c70 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20  pointer">..     
27c80 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
27c90 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
27ca0 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
27cb0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
27cc0 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20  e base..        
27cd0 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  /// memory locat
27ce0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
27cf0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
27d00 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
27d10 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20  ame="offset">.. 
27d20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69         /// The i
27d30 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72  nteger offset fr
27d40 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f  om the base memo
27d50 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72  ry location wher
27d60 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  e the..        /
27d70 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  // <see cref="In
27d80 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  t32" /> value to
27d90 20 62 65 20 77 72 69 74 74 65 6e 20 69 73 20 6c   be written is l
27da0 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ocated...       
27db0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
27dc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
27dd0 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
27de0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
27df0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33   <see cref="Int3
27e00 32 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 77  2" /> value to w
27e10 72 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rite...        /
27e20 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
27e30 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
27e40 69 63 20 76 6f 69 64 20 57 72 69 74 65 49 6e 74  ic void WriteInt
27e50 33 32 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  32(..           
27e60 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c   IntPtr pointer,
27e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
27e80 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20  t offset,..     
27e90 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65         int value
27ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
27eb0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
27ec0 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
27ed0 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
27ee0 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
27ef0 57 72 69 74 65 49 6e 74 33 32 28 70 6f 69 6e 74  WriteInt32(point
27f00 65 72 2c 20 6f 66 66 73 65 74 2c 20 76 61 6c 75  er, offset, valu
27f10 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
27f20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
27f30 57 72 69 74 65 49 6e 74 33 32 28 49 6e 74 50 74  WriteInt32(IntPt
27f40 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74  rForOffset(point
27f50 65 72 2c 20 6f 66 66 73 65 74 29 2c 20 76 61 6c  er, offset), val
27f60 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
27f70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27f80 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
27f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
27fd0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
27fe0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
27ff0 20 57 72 69 74 65 73 20 61 20 3c 73 65 65 20 63   Writes a <see c
28000 72 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20  ref="Double" /> 
28010 76 61 6c 75 65 20 74 6f 20 74 68 65 20 73 70 65  value to the spe
28020 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20  cified memory.. 
28030 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74         /// locat
28040 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
28050 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
28060 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
28070 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e   name="pointer">
28080 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
28090 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  e <see cref="Int
280a0 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  Ptr" /> object i
280b0 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e  nstance represen
280c0 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20  ting the base.. 
280d0 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72         /// memor
280e0 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  y location...   
280f0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
28100 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
28110 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73  param name="offs
28120 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  et">..        //
28130 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66  / The integer of
28140 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61  fset from the ba
28150 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  se memory locati
28160 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20  on where the..  
28170 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
28180 72 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20  ref="Double" /> 
28190 76 61 6c 75 65 20 74 6f 20 62 65 20 77 72 69 74  value to be writ
281a0 74 65 6e 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d  ten is located..
281b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
281c0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
281d0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
281e0 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  value">..       
281f0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
28200 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20 76  ef="Double" /> v
28210 61 6c 75 65 20 74 6f 20 77 72 69 74 65 2e 0d 0a  alue to write...
28220 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
28230 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
28240 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
28250 20 57 72 69 74 65 44 6f 75 62 6c 65 28 0d 0a 20   WriteDouble(.. 
28260 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
28270 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20  r pointer,..    
28280 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
28290 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et,..           
282a0 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 0d 0a 20   double value.. 
282b0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
282c0 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
282d0 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
282e0 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
282f0 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69       Marshal.Wri
28300 74 65 49 6e 74 36 34 28 70 6f 69 6e 74 65 72 2c  teInt64(pointer,
28310 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20   offset,..      
28320 20 20 20 20 20 20 20 20 20 20 42 69 74 43 6f 6e            BitCon
28330 76 65 72 74 65 72 2e 44 6f 75 62 6c 65 54 6f 49  verter.DoubleToI
28340 6e 74 36 34 42 69 74 73 28 76 61 6c 75 65 29 29  nt64Bits(value))
28350 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
28360 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72        Marshal.Wr
28370 69 74 65 49 6e 74 36 34 28 49 6e 74 50 74 72 46  iteInt64(IntPtrF
28380 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72  orOffset(pointer
28390 2c 20 6f 66 66 73 65 74 29 2c 0d 0a 20 20 20 20  , offset),..    
283a0 20 20 20 20 20 20 20 20 20 20 20 20 42 69 74 43              BitC
283b0 6f 6e 76 65 72 74 65 72 2e 54 6f 49 6e 74 36 34  onverter.ToInt64
283c0 28 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 47 65  (BitConverter.Ge
283d0 74 42 79 74 65 73 28 76 61 6c 75 65 29 2c 20 30  tBytes(value), 0
283e0 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
283f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28400 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28440 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28450 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
28460 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
28470 57 72 69 74 65 73 20 61 20 3c 73 65 65 20 63 72  Writes a <see cr
28480 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76  ef="IntPtr" /> v
28490 61 6c 75 65 20 74 6f 20 74 68 65 20 73 70 65 63  alue to the spec
284a0 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20  ified memory..  
284b0 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69        /// locati
284c0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
284d0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
284e0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
284f0 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d  name="pointer">.
28500 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
28510 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
28520 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  tr" /> object in
28530 73 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e 74  stance represent
28540 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20 20  ing the base..  
28550 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79        /// memory
28560 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20   location...    
28570 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
28580 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
28590 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65  aram name="offse
285a0 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
285b0 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66 66   The integer off
285c0 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61 73  set from the bas
285d0 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
285e0 6e 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20 20  n where the..   
285f0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
28600 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76  ef="IntPtr" /> v
28610 61 6c 75 65 20 74 6f 20 62 65 20 77 72 69 74 74  alue to be writt
28620 65 6e 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a  en is located...
28630 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
28640 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
28650 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
28660 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  alue">..        
28670 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
28680 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76 61  f="IntPtr" /> va
28690 6c 75 65 20 74 6f 20 77 72 69 74 65 2e 0d 0a 20  lue to write... 
286a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
286b0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
286c0 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
286d0 57 72 69 74 65 49 6e 74 50 74 72 28 0d 0a 20 20  WriteIntPtr(..  
286e0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
286f0 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20   pointer,..     
28700 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
28710 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
28720 49 6e 74 50 74 72 20 76 61 6c 75 65 0d 0a 20 20  IntPtr value..  
28730 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
28740 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
28750 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
28760 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
28770 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74      Marshal.Writ
28780 65 49 6e 74 50 74 72 28 70 6f 69 6e 74 65 72 2c  eIntPtr(pointer,
28790 20 6f 66 66 73 65 74 2c 20 76 61 6c 75 65 29 3b   offset, value);
287a0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
287b0 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69       Marshal.Wri
287c0 74 65 49 6e 74 50 74 72 28 49 6e 74 50 74 72 46  teIntPtr(IntPtrF
287d0 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72  orOffset(pointer
287e0 2c 20 6f 66 66 73 65 74 29 2c 20 76 61 6c 75 65  , offset), value
287f0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
28800 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
28810 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
28820 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
28830 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
28840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28880 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
28890 6f 6e 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20  on SQLiteModule 
288a0 42 61 73 65 20 43 6c 61 73 73 0d 0a 20 20 20 20  Base Class..    
288b0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
288c0 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73     /// This clas
288d0 73 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 6d  s represents a m
288e0 61 6e 61 67 65 64 20 76 69 72 74 75 61 6c 20 74  anaged virtual t
288f0 61 62 6c 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  able module impl
28900 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
28910 20 2f 2f 2f 20 49 74 20 69 73 20 6e 6f 74 20 73   /// It is not s
28920 65 61 6c 65 64 20 61 6e 64 20 6d 75 73 74 20 62  ealed and must b
28930 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62 61  e used as the ba
28940 73 65 20 63 6c 61 73 73 20 66 6f 72 20 61 6e 79  se class for any
28950 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 65 72 2d 64  ..    /// user-d
28960 65 66 69 6e 65 64 20 76 69 72 74 75 61 6c 20 74  efined virtual t
28970 61 62 6c 65 20 6d 6f 64 75 6c 65 20 63 6c 61 73  able module clas
28980 73 65 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ses implemented 
28990 69 6e 20 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e  in managed code.
289a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
289b0 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
289c0 20 61 62 73 74 72 61 63 74 20 63 6c 61 73 73 20   abstract class 
289d0 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 3a 0d 0a  SQLiteModule :..
289e0 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c              ISQL
289f0 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
28a00 2c 20 2f 2a 49 53 51 4c 69 74 65 4e 61 74 69 76  , /*ISQLiteNativ
28a10 65 4d 6f 64 75 6c 65 2c 2a 2f 0d 0a 20 20 20 20  eModule,*/..    
28a20 20 20 20 20 20 20 20 20 49 44 69 73 70 6f 73 61          IDisposa
28a30 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45  ble /* NOT SEALE
28a40 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  D */..    {..   
28a50 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c       #region SQL
28a60 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20  iteNativeModule 
28a70 50 72 69 76 61 74 65 20 43 6c 61 73 73 0d 0a 20  Private Class.. 
28a80 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
28a90 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
28aa0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3a  teNativeModule :
28ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28ac0 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d    ISQLiteNativeM
28ad0 6f 64 75 6c 65 2c 20 49 44 69 73 70 6f 73 61 62  odule, IDisposab
28ae0 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
28af0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
28b00 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
28b10 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ants..          
28b20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
28b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28b40 20 54 68 69 73 20 69 73 20 74 68 65 20 76 61 6c   This is the val
28b50 75 65 20 74 68 61 74 20 69 73 20 61 6c 77 61 79  ue that is alway
28b60 73 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 22  s used for the "
28b70 6c 6f 67 45 72 72 6f 72 73 22 0d 0a 20 20 20 20  logErrors"..    
28b80 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61          /// para
28b90 6d 65 74 65 72 20 74 6f 20 74 68 65 20 76 61 72  meter to the var
28ba0 69 6f 75 73 20 73 74 61 74 69 63 20 65 72 72 6f  ious static erro
28bb0 72 20 68 61 6e 64 6c 69 6e 67 20 6d 65 74 68 6f  r handling metho
28bc0 64 73 20 70 72 6f 76 69 64 65 64 0d 0a 20 20 20  ds provided..   
28bd0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 79 20           /// by 
28be0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
28bf0 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
28c00 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
28c10 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
28c20 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
28c30 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 62 6f  private const bo
28c40 6f 6c 20 44 65 66 61 75 6c 74 4c 6f 67 45 72 72  ol DefaultLogErr
28c50 6f 72 73 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  ors = true;.... 
28c60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
28c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28cc0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
28cd0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69           /// Thi
28ce0 73 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d  s is the error m
28cf0 65 73 73 61 67 65 20 74 65 78 74 20 75 73 65 64  essage text used
28d00 20 77 68 65 6e 20 74 68 65 20 63 6f 6e 74 61 69   when the contai
28d10 6e 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ned..           
28d20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
28d30 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e  SQLiteModule" />
28d40 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
28d50 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
28d60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  e..            /
28d70 2f 2f 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f  // for any reaso
28d80 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n...            
28d90 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
28da0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
28db0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
28dc0 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
28dd0 62 6c 65 45 72 72 6f 72 4d 65 73 73 61 67 65 20  bleErrorMessage 
28de0 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
28df0 20 20 20 22 6e 61 74 69 76 65 20 6d 6f 64 75 6c     "native modul
28e00 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
28e10 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 22 3b   not available";
28e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
28e30 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
28e40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28e90 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
28ea0 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d  on Private Data.
28eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28ec0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
28ed0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
28ee0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
28ef0 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65  eModule" /> obje
28f00 63 74 20 69 6e 73 74 61 6e 63 65 20 75 73 65 64  ct instance used
28f10 20 74 6f 20 70 72 6f 76 69 64 65 0d 0a 20 20 20   to provide..   
28f20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 20           /// an 
28f30 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
28f40 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  f the <see cref=
28f50 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
28f60 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20  dule" />..      
28f70 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66        /// interf
28f80 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ace...          
28f90 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
28fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
28fb0 69 76 61 74 65 20 53 51 4c 69 74 65 4d 6f 64 75  ivate SQLiteModu
28fc0 6c 65 20 6d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20  le module;..    
28fd0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
28fe0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
28ff0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29030 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29040 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
29050 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
29060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29070 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
29080 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e           /// Con
29090 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
290a0 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
290b0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
290c0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
290d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
290e0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
290f0 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  ule">..         
29100 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
29110 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75  cref="SQLiteModu
29120 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
29130 73 74 61 6e 63 65 20 75 73 65 64 20 74 6f 20 70  stance used to p
29140 72 6f 76 69 64 65 0d 0a 20 20 20 20 20 20 20 20  rovide..        
29150 20 20 20 20 2f 2f 2f 20 61 6e 20 69 6d 70 6c 65      /// an imple
29160 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
29170 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
29180 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22  iteNativeModule"
29190 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   />..           
291a0 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65 2e 0d   /// interface..
291b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
291c0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
291d0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
291e0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
291f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29200 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20     SQLiteModule 
29210 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20  module..        
29220 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
29230 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29240 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d            this.m
29250 6f 64 75 6c 65 20 3d 20 6d 6f 64 75 6c 65 3b 0d  odule = module;.
29260 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29270 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
29280 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
29290 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
292a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
292e0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
292f0 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20   Private Static 
29300 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
29310 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
29320 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
29330 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 74 61 62  /// Sets the tab
29340 6c 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  le error message
29350 20 74 6f 20 6f 6e 65 20 74 68 61 74 20 69 6e 64   to one that ind
29360 69 63 61 74 65 73 20 74 68 65 20 6e 61 74 69 76  icates the nativ
29370 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  e..            /
29380 2f 2f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  // module implem
29390 65 6e 74 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20  entation is not 
293a0 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20  available...    
293b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
293c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
293d0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
293e0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
293f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68            /// Th
29400 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
29410 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
29420 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
29430 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
29440 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
29450 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29460 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
29470 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68            /// Th
29480 65 20 76 61 6c 75 65 20 6f 66 20 3c 73 65 65 20  e value of <see 
29490 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f  cref="SQLiteErro
294a0 72 43 6f 64 65 2e 45 72 72 6f 72 22 20 2f 3e 2e  rCode.Error" />.
294b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
294c0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
294d0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
294e0 65 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 45  e static SQLiteE
294f0 72 72 6f 72 43 6f 64 65 20 4d 6f 64 75 6c 65 4e  rrorCode ModuleN
29500 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
29510 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20  Error(..        
29520 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
29530 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
29540 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
29550 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29560 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
29570 45 72 72 6f 72 28 6e 75 6c 6c 2c 20 70 56 74 61  Error(null, pVta
29580 62 2c 20 44 65 66 61 75 6c 74 4c 6f 67 45 72 72  b, DefaultLogErr
29590 6f 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ors,..          
295a0 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65            Module
295b0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72 6f  NotAvailableErro
295c0 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20  rMessage);....  
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
295e0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
295f0 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
29600 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29610 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
29620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
29660 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29670 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
29680 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73          /// Sets
29690 20 74 68 65 20 74 61 62 6c 65 20 65 72 72 6f 72   the table error
296a0 20 6d 65 73 73 61 67 65 20 74 6f 20 6f 6e 65 20   message to one 
296b0 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
296c0 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  he native..     
296d0 20 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c         /// modul
296e0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
296f0 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
29700 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
29710 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
29720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29730 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75  <param name="pCu
29740 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rsor">..        
29750 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
29760 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
29770 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
29780 75 72 73 6f 72 20 64 65 72 69 76 65 64 0d 0a 20  ursor derived.. 
29790 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 73             /// s
297a0 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
297b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
297c0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
297d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
297e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
297f0 54 68 65 20 76 61 6c 75 65 20 6f 66 20 3c 73 65  The value of <se
29800 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72  e cref="SQLiteEr
29810 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 22 20 2f  rorCode.Error" /
29820 3e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  >...            
29830 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
29840 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
29850 61 74 65 20 73 74 61 74 69 63 20 53 51 4c 69 74  ate static SQLit
29860 65 45 72 72 6f 72 43 6f 64 65 20 4d 6f 64 75 6c  eErrorCode Modul
29870 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75 72  eNotAvailableCur
29880 73 6f 72 45 72 72 6f 72 28 0d 0a 20 20 20 20 20  sorError(..     
29890 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
298a0 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
298b0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
298c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74               Set
298e0 43 75 72 73 6f 72 45 72 72 6f 72 28 6e 75 6c 6c  CursorError(null
298f0 2c 20 70 43 75 72 73 6f 72 2c 20 44 65 66 61 75  , pCursor, Defau
29900 6c 74 4c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20  ltLogErrors,..  
29910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29920 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c    ModuleNotAvail
29930 61 62 6c 65 45 72 72 6f 72 4d 65 73 73 61 67 65  ableErrorMessage
29940 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29950 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
29960 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
29970 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or;..           
29980 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29990 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
299a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
299b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
299c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
299d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
299e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
299f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
29a00 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
29a10 76 65 4d 6f 64 75 6c 65 20 4d 65 6d 62 65 72 73  veModule Members
29a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29a30 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
29a40 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
29a50 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
29a60 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
29a70 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
29a80 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
29a90 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
29aa0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
29ab0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
29ac0 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20  ="pDb">..       
29ad0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
29ae0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
29af0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
29b00 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68  xCreate" /> meth
29b10 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
29b20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
29b30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
29b40 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78  param name="pAux
29b50 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
29b60 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29b70 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29b80 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
29b90 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29bb0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
29bc0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
29bd0 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20   name="argc">.. 
29be0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
29bf0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
29c00 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
29c10 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
29c20 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
29c30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
29c40 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
29c50 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
29c60 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20  ="argv">..      
29c70 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
29c80 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
29c90 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
29ca0 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74  .xCreate" /> met
29cb0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
29cc0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
29cd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29ce0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
29cf0 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ab">..          
29d00 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
29d10 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
29d20 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
29d30 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  eate" /> method.
29d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29d50 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
29d60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
29d70 61 6d 20 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22  am name="pError"
29d80 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29d90 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
29da0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
29db0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
29dc0 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
29dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
29de0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
29df0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
29e00 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
29e10 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29e20 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29e30 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
29e40 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
29e50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29e60 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
29e70 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
29e80 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
29e90 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20  Create(..       
29ea0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
29eb0 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  pDb,..          
29ec0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 41 75        IntPtr pAu
29ed0 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
29ee0 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
29f00 6e 74 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20  ntPtr argv,..   
29f10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
29f20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
29f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f40 72 65 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f  ref IntPtr pErro
29f50 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
29f60 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
29f70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29f80 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
29f90 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
29fa0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29fb0 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
29fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29fd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29fe0 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
29ff0 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
2a000 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
2a010 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng(..           
2a020 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64               Mod
2a030 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45  uleNotAvailableE
2a040 72 72 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d  rrorMessage);...
2a050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a060 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
2a070 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
2a080 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
2a090 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a0a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a0b0 6d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 28 0d  module.xCreate(.
2a0c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a0d0 20 20 20 20 20 70 44 62 2c 20 70 41 75 78 2c 20       pDb, pAux, 
2a0e0 61 72 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20  argc, argv, ref 
2a0f0 70 56 74 61 62 2c 20 72 65 66 20 70 45 72 72 6f  pVtab, ref pErro
2a100 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2a110 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a120 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a160 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2a170 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2a180 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2a190 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2a1a0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2a1b0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
2a1c0 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ect" /> method..
2a1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a1e0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2a1f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2a200 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d  ram name="pDb">.
2a210 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a220 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2a230 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2a240 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
2a250 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2a260 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2a270 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2a280 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2a290 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20  ame="pAux">..   
2a2a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2a2b0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2a2c0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2a2d0 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
2a2e0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2a2f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2a300 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2a310 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2a320 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20  "argc">..       
2a330 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2a340 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2a350 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2a360 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  xConnect" /> met
2a370 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2a380 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2a390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a3a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
2a3b0 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  v">..           
2a3c0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2a3d0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2a3e0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
2a3f0 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
2a400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a410 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2a420 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2a430 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
2a440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a450 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2a460 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2a470 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
2a480 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2a490 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2a4a0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2a4b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2a4c0 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a  name="pError">..
2a4d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a4e0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2a4f0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2a500 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
2a510 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2a520 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2a530 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2a540 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2a550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a560 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2a570 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2a580 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
2a590 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2a5a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2a5b0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2a5c0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
2a5d0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43  LiteErrorCode xC
2a5e0 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
2a5f0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2a600 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  pDb,..          
2a610 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 41 75        IntPtr pAu
2a620 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
2a630 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
2a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2a650 6e 74 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20  ntPtr argv,..   
2a660 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2a670 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
2a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a690 72 65 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f  ref IntPtr pErro
2a6a0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
2a6b0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2a6c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a6d0 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2a6e0 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2a6f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a700 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2a710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a730 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
2a740 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
2a750 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
2a760 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng(..           
2a770 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64               Mod
2a780 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45  uleNotAvailableE
2a790 72 72 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d  rrorMessage);...
2a7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a7b0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
2a7c0 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
2a7d0 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
2a7e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a7f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a800 6d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 28  module.xConnect(
2a810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a820 20 20 20 20 20 20 70 44 62 2c 20 70 41 75 78 2c        pDb, pAux,
2a830 20 61 72 67 63 2c 20 61 72 67 76 2c 20 72 65 66   argc, argv, ref
2a840 20 70 56 74 61 62 2c 20 72 65 66 20 70 45 72 72   pVtab, ref pErr
2a850 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
2a860 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a870 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a8c0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2a8d0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2a8e0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2a8f0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2a900 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73  ativeModule.xBes
2a910 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f  tIndex" /> metho
2a920 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2a930 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2a940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a950 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
2a960 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ab">..          
2a970 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2a980 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2a990 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65  NativeModule.xBe
2a9a0 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68  stIndex" /> meth
2a9b0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2a9c0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2a9d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2a9e0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64  param name="pInd
2a9f0 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ex">..          
2aa00 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2aa10 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2aa20 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65  NativeModule.xBe
2aa30 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68  stIndex" /> meth
2aa40 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2aa50 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2aa60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2aa70 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2aa80 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2aa90 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2aaa0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2aab0 2e 78 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20  .xBestIndex" /> 
2aac0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2aad0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2aae0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2aaf0 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2ab00 72 6f 72 43 6f 64 65 20 78 42 65 73 74 49 6e 64  rorCode xBestInd
2ab10 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ex(..           
2ab20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
2ab30 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
2ab40 20 20 20 20 49 6e 74 50 74 72 20 70 49 6e 64 65      IntPtr pInde
2ab50 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  x..             
2ab60 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2ab70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ab80 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2ab90 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2aba0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2abb0 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2abc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2abd0 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2abe0 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61  leNotAvailableTa
2abf0 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b  bleError(pVtab);
2ac00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ac10 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c      return modul
2ac20 65 2e 78 42 65 73 74 49 6e 64 65 78 28 70 56 74  e.xBestIndex(pVt
2ac30 61 62 2c 20 70 49 6e 64 65 78 29 3b 0d 0a 20 20  ab, pIndex);..  
2ac40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2ac50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2ac60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2aca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2acb0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2acc0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2acd0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2ace0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2acf0 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22  ule.xDisconnect"
2ad00 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2ad10 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
2ad20 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ad30 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2ad40 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
2ad50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2ad60 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2ad70 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2ad80 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63  odule.xDisconnec
2ad90 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2ada0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2adb0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2adc0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2add0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2ade0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2adf0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2ae00 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63  tiveModule.xDisc
2ae10 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
2ae20 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2ae30 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2ae40 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2ae50 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2ae60 64 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d  de xDisconnect(.
2ae70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae80 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
2ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2aea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2aeb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aec0 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65   // CheckDispose
2aed0 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
2aee0 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
2aef0 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af10 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f   return ModuleNo
2af20 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45  tAvailableTableE
2af30 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a  rror(pVtab);....
2af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af50 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 44  return module.xD
2af60 69 73 63 6f 6e 6e 65 63 74 28 70 56 74 61 62 29  isconnect(pVtab)
2af70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2af80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2af90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2afe0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2aff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b000 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2b010 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2b020 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f  veModule.xDestro
2b030 79 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  y" /> method... 
2b040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2b050 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2b060 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2b070 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
2b080 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b090 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2b0a0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2b0b0 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79  eModule.xDestroy
2b0c0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2b0d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2b0e0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2b0f0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2b100 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2b110 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2b120 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2b130 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72  iveModule.xDestr
2b140 6f 79 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  oy" /> method...
2b150 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b160 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2b170 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2b180 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
2b190 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20  Destroy(..      
2b1a0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2b1b0 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
2b1c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2b1d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b1e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2b1f0 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2b200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b210 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2b220 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2b230 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2b240 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2b250 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56  bleTableError(pV
2b260 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
2b270 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b280 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 28  module.xDestroy(
2b290 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20  pVtab);..       
2b2a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2b2b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2b2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2b300 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
2b310 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2b320 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2b330 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2b340 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2b350 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Open" /> method.
2b360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b370 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2b380 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2b390 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
2b3a0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2b3b0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2b3c0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2b3d0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e  tiveModule.xOpen
2b3e0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2b3f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2b400 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2b410 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2b420 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a  ame="pCursor">..
2b430 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b440 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b450 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b460 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e  Module.xOpen" />
2b470 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2b480 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2b490 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2b4a0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2b4b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2b4c0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2b4d0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2b4e0 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20  odule.xOpen" /> 
2b4f0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2b500 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2b510 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2b520 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2b530 72 6f 72 43 6f 64 65 20 78 4f 70 65 6e 28 0d 0a  rorCode xOpen(..
2b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b550 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
2b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b570 65 66 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f  ef IntPtr pCurso
2b580 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
2b590 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2b5a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b5b0 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2b5c0 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b5e0 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2b5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b600 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2b610 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61  leNotAvailableTa
2b620 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b  bleError(pVtab);
2b630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b640 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c      return modul
2b650 65 2e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 72  e.xOpen(pVtab, r
2b660 65 66 20 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20  ef pCursor);..  
2b670 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2b680 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2b690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2b6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b6e0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2b6f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2b700 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2b710 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2b720 75 6c 65 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d  ule.xClose" /> m
2b730 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2b740 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2b750 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2b760 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2b770 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
2b780 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2b790 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2b7a0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2b7b0 6c 65 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65  le.xClose" /> me
2b7c0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2b7d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2b7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b7f0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2b800 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2b810 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2b820 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2b830 6c 65 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65  le.xClose" /> me
2b840 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2b850 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
2b860 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
2b870 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
2b880 72 43 6f 64 65 20 78 43 6c 6f 73 65 28 0d 0a 20  rCode xClose(.. 
2b890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2b8a0 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
2b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2b8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b8e0 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65   // CheckDispose
2b8f0 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
2b900 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
2b910 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b930 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f   return ModuleNo
2b940 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72  tAvailableCursor
2b950 45 72 72 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d  Error(pCursor);.
2b960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b970 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
2b980 2e 78 43 6c 6f 73 65 28 70 43 75 72 73 6f 72 29  .xClose(pCursor)
2b990 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2b9a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f  ////////////////
2b9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2ba00 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2ba10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ba20 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2ba30 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2ba40 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72  veModule.xFilter
2ba50 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2ba60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2ba70 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2ba80 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2ba90 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e   name="pCursor">
2baa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2bab0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2bac0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2bad0 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72  veModule.xFilter
2bae0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2baf0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2bb00 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2bb10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2bb20 61 6d 65 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20  ame="idxNum">.. 
2bb30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2bb40 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2bb50 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2bb60 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
2bb70 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2bb80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2bb90 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2bba0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2bbb0 3d 22 69 64 78 53 74 72 22 3e 0d 0a 20 20 20 20  ="idxStr">..    
2bbc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2bbd0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2bbe0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2bbf0 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d  le.xFilter" /> m
2bc00 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2bc10 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2bc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2bc30 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
2bc40 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  rgc">..         
2bc50 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2bc60 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2bc70 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
2bc80 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64  ilter" /> method
2bc90 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2bca0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2bcb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2bcc0 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e  ram name="argv">
2bcd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2bce0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2bcf0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2bd00 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72  veModule.xFilter
2bd10 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2bd20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2bd30 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2bd40 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2bd50 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2bd60 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2bd70 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2bd80 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65  iveModule.xFilte
2bd90 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  r" /> method... 
2bda0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2bdb0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2bdc0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
2bdd0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 46  LiteErrorCode xF
2bde0 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20  ilter(..        
2bdf0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2be00 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20  Cursor,..       
2be10 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 64 78           int idx
2be20 4e 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Num,..          
2be30 20 20 20 20 20 20 49 6e 74 50 74 72 20 69 64 78        IntPtr idx
2be40 53 74 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Str,..          
2be50 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d        int argc,.
2be60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be70 20 49 6e 74 50 74 72 20 61 72 67 76 0d 0a 20 20   IntPtr argv..  
2be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2be90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2beb0 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2bec0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2bed0 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2bee0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf00 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
2bf10 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45  AvailableCursorE
2bf20 72 72 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a  rror(pCursor);..
2bf30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bf40 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2bf50 78 46 69 6c 74 65 72 28 70 43 75 72 73 6f 72 2c  xFilter(pCursor,
2bf60 20 69 64 78 4e 75 6d 2c 20 69 64 78 53 74 72 2c   idxNum, idxStr,
2bf70 20 61 72 67 63 2c 20 61 72 67 76 29 3b 0d 0a 20   argc, argv);.. 
2bf80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2bf90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2bfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2bfe0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2bff0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2c000 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2c010 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2c020 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2c030 64 75 6c 65 2e 78 4e 65 78 74 22 20 2f 3e 20 6d  dule.xNext" /> m
2c040 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2c050 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c060 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2c070 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2c080 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
2c090 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2c0a0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2c0b0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2c0c0 6c 65 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74  le.xNext" /> met
2c0d0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2c0e0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2c0f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c100 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
2c110 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2c120 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2c130 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2c140 65 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68  e.xNext" /> meth
2c150 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c160 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2c170 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2c180 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
2c190 6f 64 65 20 78 4e 65 78 74 28 0d 0a 20 20 20 20  ode xNext(..    
2c1a0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2c1b0 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
2c1c0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2c1d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2c1f0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2c200 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c210 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2c220 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c240 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2c250 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72  ailableCursorErr
2c260 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  or(pCursor);....
2c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c280 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 4e  return module.xN
2c290 65 78 74 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20  ext(pCursor);.. 
2c2a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c2b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2c2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2c300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c310 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2c320 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2c330 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2c340 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2c350 64 75 6c 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65  dule.xEof" /> me
2c360 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2c370 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2c380 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c390 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2c3a0 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
2c3b0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2c3c0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2c3d0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2c3e0 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f  e.xEof" /> metho
2c3f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2c400 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2c410 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2c420 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2c430 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2c440 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2c450 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2c460 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  xEof" /> method.
2c470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c480 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2c490 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2c4a0 20 69 6e 74 20 78 45 6f 66 28 0d 0a 20 20 20 20   int xEof(..    
2c4b0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2c4c0 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
2c4d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2c4e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2c500 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2c510 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c520 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2c530 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2c540 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c560 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2c570 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70  bleCursorError(p
2c580 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20  Cursor);..      
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c5a0 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20  turn 1;..       
2c5b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c5d0 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 45 6f 66  turn module.xEof
2c5e0 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20  (pCursor);..    
2c5f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c600 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2c610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2c650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c660 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2c670 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2c680 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2c690 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2c6a0 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65  e.xColumn" /> me
2c6b0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2c6c0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2c6d0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c6e0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2c6f0 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
2c700 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2c710 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2c720 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2c730 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65  e.xColumn" /> me
2c740 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2c750 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2c760 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c770 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
2c780 6f 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20  ontext">..      
2c790 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2c7a0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2c7b0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2c7c0 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74  .xColumn" /> met
2c7d0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2c7e0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2c7f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c800 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64  <param name="ind
2c810 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ex">..          
2c820 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2c830 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2c840 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
2c850 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lumn" /> method.
2c860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c870 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2c880 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2c890 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2c8a0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2c8b0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2c8c0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
2c8d0 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  olumn" /> method
2c8e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c8f0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2c900 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2c910 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2c920 65 20 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20  e xColumn(..    
2c930 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2c940 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20  tr pCursor,..   
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2c960 50 74 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20  Ptr pContext,.. 
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c980 6e 74 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20  nt index..      
2c990 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2c9a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c9b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2c9c0 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2c9d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c9e0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2c9f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ca00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ca10 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
2ca20 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72  lableCursorError
2ca30 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20  (pCursor);....  
2ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ca50 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c  turn module.xCol
2ca60 75 6d 6e 28 70 43 75 72 73 6f 72 2c 20 70 43 6f  umn(pCursor, pCo
2ca70 6e 74 65 78 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  ntext, index);..
2ca80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ca90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2caa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2caf0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2cb00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2cb10 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2cb20 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2cb30 6f 64 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e  odule.xRowId" />
2cb40 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2cb50 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2cb60 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2cb70 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2cb80 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20  e="pCursor">..  
2cb90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2cba0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2cbb0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2cbc0 64 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20  dule.xRowId" /> 
2cbd0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2cbe0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2cbf0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2cc00 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2cc10 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20  rowId">..       
2cc20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2cc30 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2cc40 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2cc50 78 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f  xRowId" /> metho
2cc60 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2cc70 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2cc80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2cc90 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2cca0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2ccb0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2ccc0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2ccd0 78 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f  xRowId" /> metho
2cce0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2ccf0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2cd10 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2cd20 64 65 20 78 52 6f 77 49 64 28 0d 0a 20 20 20 20  de xRowId(..    
2cd30 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2cd40 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20  tr pCursor,..   
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2cd60 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20   long rowId..   
2cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2cd80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2cda0 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2cdb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2cdc0 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2cdd0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2cdf0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2ce00 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72  vailableCursorEr
2ce10 72 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d  ror(pCursor);...
2ce20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce30 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
2ce40 52 6f 77 49 64 28 70 43 75 72 73 6f 72 2c 20 72  RowId(pCursor, r
2ce50 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20  ef rowId);..    
2ce60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ce70 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2ce80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ceb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ced0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2cee0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2cef0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2cf00 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2cf10 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65  e.xUpdate" /> me
2cf20 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2cf30 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2cf40 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2cf50 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2cf60 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
2cf70 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2cf80 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2cf90 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2cfa0 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68  xUpdate" /> meth
2cfb0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2cfc0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2cfd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2cfe0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
2cff0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2d000 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d010 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d020 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
2d030 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
2d040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d050 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2d060 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2d070 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20   name="argv">.. 
2d080 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2d090 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2d0a0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2d0b0 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f  odule.xUpdate" /
2d0c0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2d0d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2d0e0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2d0f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2d100 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20  ="rowId">..     
2d110 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2d120 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2d130 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2d140 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65  e.xUpdate" /> me
2d150 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2d160 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2d170 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d180 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2d190 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2d1a0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2d1b0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2d1c0 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d  le.xUpdate" /> m
2d1d0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2d1e0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2d1f0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2d200 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2d210 6f 72 43 6f 64 65 20 78 55 70 64 61 74 65 28 0d  orCode xUpdate(.
2d220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d230 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
2d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d250 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20  int argc,..     
2d260 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2d270 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20  r argv,..       
2d280 20 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e           ref lon
2d290 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20  g rowId..       
2d2a0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2d2b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d2c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
2d2d0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
2d2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d2f0 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
2d300 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2d310 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d320 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
2d330 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70  ableTableError(p
2d340 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
2d350 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d360 20 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 28   module.xUpdate(
2d370 70 56 74 61 62 2c 20 61 72 67 63 2c 20 61 72 67  pVtab, argc, arg
2d380 76 2c 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a  v, ref rowId);..
2d390 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d400 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2d410 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2d420 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2d430 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2d440 6f 64 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e  odule.xBegin" />
2d450 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2d460 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2d470 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2d480 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2d490 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
2d4a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2d4b0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2d4c0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2d4d0 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65  le.xBegin" /> me
2d4e0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2d4f0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2d500 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d510 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2d520 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2d530 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2d540 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2d550 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65  le.xBegin" /> me
2d560 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2d570 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
2d580 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
2d590 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
2d5a0 72 43 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a 20  rCode xBegin(.. 
2d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2d5c0 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
2d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d600 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2d610 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d620 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2d630 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d650 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2d660 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2d670 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
2d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d690 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 42 65 67  turn module.xBeg
2d6a0 69 6e 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20  in(pVtab);..    
2d6b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2d6c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2d6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2d710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d720 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2d730 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2d740 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2d750 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2d760 65 2e 78 53 79 6e 63 22 20 2f 3e 20 6d 65 74 68  e.xSync" /> meth
2d770 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d780 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2d790 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d7a0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
2d7b0 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  tab">..         
2d7c0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2d7d0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2d7e0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53  eNativeModule.xS
2d7f0 79 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ync" /> method..
2d800 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d810 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2d820 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
2d830 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2d840 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2d850 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2d860 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79  NativeModule.xSy
2d870 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  nc" /> method...
2d880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d890 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2d8a0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2d8b0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
2d8c0 53 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20  Sync(..         
2d8d0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
2d8e0 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tab..           
2d8f0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2d900 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d910 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2d920 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
2d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2d940 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
2d950 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2d960 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
2d970 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2d980 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
2d990 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d9a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
2d9b0 75 6c 65 2e 78 53 79 6e 63 28 70 56 74 61 62 29  ule.xSync(pVtab)
2d9c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d9d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2da30 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2da40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2da50 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2da60 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2da70 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74  veModule.xCommit
2da80 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2da90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2daa0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2dab0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2dac0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2dad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2dae0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2daf0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2db00 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20  Module.xCommit" 
2db10 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2db20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2db30 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2db40 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2db50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2db60 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2db70 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2db80 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22  eModule.xCommit"
2db90 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2dba0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2dbb0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2dbc0 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2dbd0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6d  teErrorCode xCom
2dbe0 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mit(..          
2dbf0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
2dc00 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
2dc10 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
2dc20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2dc30 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69        // CheckDi
2dc40 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
2dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2dc60 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (module == null)
2dc70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dc80 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64        return Mod
2dc90 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54  uleNotAvailableT
2dca0 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29  ableError(pVtab)
2dcb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2dcc0 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75       return modu
2dcd0 6c 65 2e 78 43 6f 6d 6d 69 74 28 70 56 74 61 62  le.xCommit(pVtab
2dce0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2dcf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2dd00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2dd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2dd50 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2dd60 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2dd70 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2dd80 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2dd90 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  iveModule.xRollb
2dda0 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ack" /> method..
2ddb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ddc0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2ddd0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2dde0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
2ddf0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2de00 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2de10 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2de20 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  iveModule.xRollb
2de30 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ack" /> method..
2de40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2de50 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2de60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
2de70 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2de80 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2de90 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2dea0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  NativeModule.xRo
2deb0 6c 6c 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f  llback" /> metho
2dec0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2ded0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2dee0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2def0 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2df00 64 65 20 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20  de xRollback(.. 
2df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2df20 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
2df30 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2df40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2df60 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2df70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2df80 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2df90 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2dfb0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2dfc0 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2dfd0 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
2dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2dff0 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c  turn module.xRol
2e000 6c 62 61 63 6b 28 70 56 74 61 62 29 3b 0d 0a 20  lback(pVtab);.. 
2e010 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2e020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2e030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e080 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2e090 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2e0a0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2e0b0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2e0c0 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69  dule.xFindFuncti
2e0d0 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  on" /> method...
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e0f0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2e100 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2e110 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
2e120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e130 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2e140 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2e150 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  veModule.xFindFu
2e160 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  nction" /> metho
2e170 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2e180 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2e190 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2e1a0 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 22  aram name="nArg"
2e1b0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2e1c0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2e1d0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2e1e0 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  iveModule.xFindF
2e1f0 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68  unction" /> meth
2e200 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2e210 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2e220 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e230 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d  param name="zNam
2e240 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e">..           
2e250 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2e260 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2e270 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
2e280 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65  dFunction" /> me
2e290 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2e2a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2e2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e2c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61   <param name="ca
2e2d0 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20 20 20 20 20  llback">..      
2e2e0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2e2f0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2e300 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2e310 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20  .xFindFunction" 
2e320 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2e330 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2e340 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2e350 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2e360 65 3d 22 70 43 6c 69 65 6e 74 44 61 74 61 22 3e  e="pClientData">
2e370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e380 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2e390 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2e3a0 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  veModule.xFindFu
2e3b0 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  nction" /> metho
2e3c0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2e3d0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2e3e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2e3f0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2e400 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2e410 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2e420 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2e430 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f  xFindFunction" /
2e440 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2e450 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2e460 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2e470 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 78 46     public int xF
2e480 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
2e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2e4a0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
2e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2e4c0 20 6e 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20   nArg,..        
2e4d0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a          IntPtr z
2e4e0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2e4f0 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74         ref SQLit
2e500 65 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  eCallback callba
2e510 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
2e520 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
2e530 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20  pClientData..   
2e540 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2e550 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e570 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2e580 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e590 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2e5a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e5b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5d0 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c    ModuleNotAvail
2e5e0 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70  ableTableError(p
2e5f0 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  Vtab);..        
2e600 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e610 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  rn 0;..         
2e620 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e630 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e640 72 6e 20 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  rn module.xFindF
2e650 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
2e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56                pV
2e670 74 61 62 2c 20 6e 41 72 67 2c 20 7a 4e 61 6d 65  tab, nArg, zName
2e680 2c 20 72 65 66 20 63 61 6c 6c 62 61 63 6b 2c 20  , ref callback, 
2e690 72 65 66 20 70 43 6c 69 65 6e 74 44 61 74 61 29  ref pClientData)
2e6a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2e6b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e700 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2e710 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2e720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e730 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2e740 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2e750 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65  veModule.xRename
2e760 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2e770 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2e780 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2e790 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2e7a0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2e7b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e7c0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2e7d0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2e7e0 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20  Module.xRename" 
2e7f0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2e800 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2e810 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2e820 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2e830 65 3d 22 7a 4e 65 77 22 3e 0d 0a 20 20 20 20 20  e="zNew">..     
2e840 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2e850 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2e860 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2e870 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65  e.xRename" /> me
2e880 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2e890 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2e8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e8b0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2e8c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2e8d0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2e8e0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2e8f0 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d  le.xRename" /> m
2e900 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2e910 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2e920 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2e930 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2e940 6f 72 43 6f 64 65 20 78 52 65 6e 61 6d 65 28 0d  orCode xRename(.
2e950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e960 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
2e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e980 49 6e 74 50 74 72 20 7a 4e 65 77 0d 0a 20 20 20  IntPtr zNew..   
2e990 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2e9a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e9c0 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2e9d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e9e0 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2e9f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ea10 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2ea20 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2ea30 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
2ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ea50 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 65 6e  turn module.xRen
2ea60 61 6d 65 28 70 56 74 61 62 2c 20 7a 4e 65 77 29  ame(pVtab, zNew)
2ea70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2ea80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ea90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eaa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ead0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2eae0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2eaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2eb00 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2eb10 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2eb20 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f  veModule.xSavepo
2eb30 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  int" /> method..
2eb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2eb50 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2eb60 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2eb70 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
2eb80 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2eb90 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2eba0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2ebb0 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70  iveModule.xSavep
2ebc0 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  oint" /> method.
2ebd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ebe0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2ebf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2ec00 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f  am name="iSavepo
2ec10 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  int">..         
2ec20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2ec30 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2ec40 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53  eNativeModule.xS
2ec50 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74  avepoint" /> met
2ec60 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2ec70 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2ec80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ec90 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
2eca0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2ecb0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2ecc0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2ecd0 65 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e  e.xSavepoint" />
2ece0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2ecf0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
2ed00 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2ed10 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45    public SQLiteE
2ed20 72 72 6f 72 43 6f 64 65 20 78 53 61 76 65 70 6f  rrorCode xSavepo
2ed30 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  int(..          
2ed40 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
2ed50 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
2ed60 20 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f       int iSavepo
2ed70 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  int..           
2ed80 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2ed90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2eda0 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2edb0 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2edd0 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
2ede0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2edf0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
2ee00 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2ee10 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
2ee20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ee30 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
2ee40 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 28 70  ule.xSavepoint(p
2ee50 56 74 61 62 2c 20 69 53 61 76 65 70 6f 69 6e 74  Vtab, iSavepoint
2ee60 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2ee70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ee80 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ee90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eec0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2eed0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2eee0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2eef0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2ef00 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2ef10 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61  iveModule.xRelea
2ef20 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  se" /> method...
2ef30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ef40 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2ef50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2ef60 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
2ef70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ef80 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2ef90 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2efa0 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73  veModule.xReleas
2efb0 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
2efc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2efd0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2efe0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2eff0 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74  name="iSavepoint
2f000 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2f010 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2f020 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2f030 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65  tiveModule.xRele
2f040 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ase" /> method..
2f050 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2f060 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2f070 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
2f080 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2f090 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2f0a0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2f0b0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  NativeModule.xRe
2f0c0 6c 65 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64  lease" /> method
2f0d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2f0e0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2f0f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2f100 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2f110 65 20 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20  e xRelease(..   
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2f130 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
2f140 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
2f150 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20  iSavepoint..    
2f160 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2f170 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f190 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2f1a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f1b0 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2f1c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f1e0 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2f1f0 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f  ailableTableErro
2f200 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  r(pVtab);....   
2f210 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f220 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65  urn module.xRele
2f230 61 73 65 28 70 56 74 61 62 2c 20 69 53 61 76 65  ase(pVtab, iSave
2f240 70 6f 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  point);..       
2f250 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f260 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2f270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2f2b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
2f2c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2f2d0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2f2e0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2f2f0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2f300 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d  RollbackTo" /> m
2f310 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2f320 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2f330 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2f340 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2f350 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
2f360 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2f370 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2f380 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2f390 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e  .xRollbackTo" />
2f3a0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2f3b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2f3c0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2f3d0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2f3e0 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20  "iSavepoint">.. 
2f3f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2f400 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2f410 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2f420 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54  odule.xRollbackT
2f430 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  o" /> method... 
2f440 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2f450 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2f460 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2f470 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2f480 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2f490 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2f4a0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
2f4b0 62 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f  backTo" /> metho
2f4c0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2f4d0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2f4e0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2f4f0 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2f500 64 65 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d  de xRollbackTo(.
2f510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f520 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f540 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a  int iSavepoint..
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f560 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2f570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f580 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
2f590 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2f5a0 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2f5b0 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5d0 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
2f5e0 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
2f5f0 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d  Error(pVtab);...
2f600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f610 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
2f620 52 6f 6c 6c 62 61 63 6b 54 6f 28 70 56 74 61 62  RollbackTo(pVtab
2f630 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a  , iSavepoint);..
2f640 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2f650 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2f660 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2f670 20 20 20 20 20 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
2f6c0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2f6d0 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62  IDisposable Memb
2f6e0 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
2f6f0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2f700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f710 44 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73  Disposes of this
2f720 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
2f730 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2f740 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2f750 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2f760 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29  c void Dispose()
2f770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2f780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f790 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d   Dispose(true);.
2f7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f7b0 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61   GC.SuppressFina
2f7c0 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20  lize(this);..   
2f7d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2f7e0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2f7f0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
2f800 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2f810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f840 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2f850 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
2f860 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72  sposable "Patter
2f870 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  n" Members..    
2f880 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2f890 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a  bool disposed;..
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f8b0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2f8c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77         /// Throw
2f8d0 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22  s an <see cref="
2f8e0 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
2f8f0 63 65 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74  ception" /> if t
2f900 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20  his object..    
2f910 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74          /// inst
2f920 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64 69  ance has been di
2f930 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  sposed...       
2f940 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2f950 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2f960 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
2f970 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
2f980 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
2f990 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48         {..#if TH
2f9a0 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
2f9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f9c0 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a   if (disposed)..
2f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f9f0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
2fa00 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45   ObjectDisposedE
2fa10 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa30 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
2fa40 4e 61 74 69 76 65 4d 6f 64 75 6c 65 29 2e 4e 61  NativeModule).Na
2fa50 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
2fa60 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
2fa70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2fa80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fab0 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2fae0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2fb00 44 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73  Disposes of this
2fb10 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
2fb20 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2fb30 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2fb40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2fb50 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70  param name="disp
2fb60 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20  osing">..       
2fb70 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
2fb80 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64  o if this method
2fb90 20 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64   is being called
2fba0 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20   from the..     
2fbb0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
2fbc0 63 72 65 66 3d 22 44 69 73 70 6f 73 65 28 29 22  cref="Dispose()"
2fbd0 20 2f 3e 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72   /> method.  Zer
2fbe0 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64  o if this method
2fbf0 20 69 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20   is being..     
2fc00 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65         /// calle
2fc10 64 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c  d from the final
2fc20 69 7a 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  izer...         
2fc30 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2fc40 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
2fc50 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65  vate /* protecte
2fc60 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69  d virtual */ voi
2fc70 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64  d Dispose(bool d
2fc80 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
2fc90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fca0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
2fcb0 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
2fcc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fce0 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67   //if (disposing
2fcf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2fd00 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20         //{..    
2fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
2fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
2fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd60 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
2fd70 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
2fd80 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fda0 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
2fdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
2fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fde0 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  //}....         
2fdf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2fe00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe20 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2fe30 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
2fe40 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
2fe50 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
2fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe70 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2fe80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2feb0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2fec0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2fed0 3a 20 54 68 65 20 6d 6f 64 75 6c 65 20 69 73 20  : The module is 
2fee0 6e 6f 74 20 6f 77 6e 65 64 20 62 79 20 75 73 3b  not owned by us;
2fef0 20 74 68 65 72 65 66 6f 72 65 2c 20 64 6f 20 6e   therefore, do n
2ff00 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot..            
2ff10 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2ff20 20 64 69 73 70 6f 73 65 20 69 74 2e 0d 0a 20 20   dispose it...  
2ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff40 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2ff50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2ff60 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  dule != null).. 
2ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff80 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 20 3d 20         module = 
2ff90 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
2ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
2ffb0 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
2ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ffd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ffe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2fff0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
30000 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
30010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30020 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
30050 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
30060 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
30070 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
30080 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
30090 20 20 20 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a       /// Finaliz
300a0 65 73 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  es this object i
300b0 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
300c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
300d0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
300e0 20 20 7e 53 51 4c 69 74 65 4e 61 74 69 76 65 4d    ~SQLiteNativeM
300f0 6f 64 75 6c 65 28 29 0d 0a 20 20 20 20 20 20 20  odule()..       
30100 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30110 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
30120 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
30130 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
30140 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
30150 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30160 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
30170 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
30180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
301d0 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
301e0 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  tants..        /
301f0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
30200 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65        /// The de
30210 66 61 75 6c 74 20 65 73 74 69 6d 61 74 65 64 20  fault estimated 
30220 63 6f 73 74 20 66 6f 72 20 75 73 65 20 77 69 74  cost for use wit
30230 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  h the..        /
30240 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
30250 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
30260 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e  le.BestIndex" />
30270 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
30280 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
30290 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
302a0 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
302b0 79 20 64 6f 75 62 6c 65 20 44 65 66 61 75 6c 74  y double Default
302c0 45 73 74 69 6d 61 74 65 64 43 6f 73 74 20 3d 20  EstimatedCost = 
302d0 64 6f 75 62 6c 65 2e 4d 61 78 56 61 6c 75 65 3b  double.MaxValue;
302e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
302f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30330 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
30340 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
30350 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65        /// The de
30360 66 61 75 6c 74 20 76 65 72 73 69 6f 6e 20 6f 66  fault version of
30370 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   the native sqli
30380 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63  te3_module struc
30390 74 75 72 65 20 69 6e 20 75 73 65 2e 0d 0a 20 20  ture in use...  
303a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
303b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
303c0 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
303d0 64 6f 6e 6c 79 20 69 6e 74 20 44 65 66 61 75 6c  donly int Defaul
303e0 74 4d 6f 64 75 6c 65 56 65 72 73 69 6f 6e 20 3d  tModuleVersion =
303f0 20 32 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e   2;..        #en
30400 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
30410 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
30420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
30460 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
30470 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20  ivate Data..    
30480 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
30490 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
304a0 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73 65  his field is use
304b0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6e  d to store the n
304c0 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f  ative sqlite3_mo
304d0 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 0d 0a  dule structure..
304e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
304f0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
30500 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
30510 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
30520 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
30530 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61 66     private Unsaf
30540 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
30550 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6e 61  qlite3_module na
30560 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a 0d 0a 20  tiveModule;.... 
30570 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
30580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
305a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
305b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
305c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
305d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
305e0 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
305f0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
30600 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
30610 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  e native sqlite3
30620 5f 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20  _module..       
30630 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20 72   /// structure r
30640 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 73  eturned by the s
30650 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69  qlite3_create_di
30660 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 0d  sposable_module.
30670 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 75 6e  .        /// fun
30680 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ction...        
30690 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
306a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
306b0 49 6e 74 50 74 72 20 64 69 73 70 6f 73 61 62 6c  IntPtr disposabl
306c0 65 4d 6f 64 75 6c 65 3b 0d 0a 0d 0a 20 20 20 20  eModule;....    
306d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
306e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23  ///////////....#
30720 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  if PLATFORM_COMP
30730 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
30740 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
30750 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
30760 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75   This field is u
30770 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
30780 62 6c 6f 63 6b 20 6f 66 20 6e 61 74 69 76 65 20  block of native 
30790 6d 65 6d 6f 72 79 20 74 68 61 74 20 63 6f 6e 74  memory that cont
307a0 61 69 6e 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ains..        //
307b0 2f 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  / the native sql
307c0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75  ite3_module stru
307d0 63 74 75 72 65 20 61 73 73 6f 63 69 61 74 65 64  cture associated
307e0 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63   with this objec
307f0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  t..        /// i
30800 6e 73 74 61 6e 63 65 20 77 68 65 6e 20 72 75 6e  nstance when run
30810 6e 69 6e 67 20 6f 6e 20 74 68 65 20 2e 4e 45 54  ning on the .NET
30820 20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f   Compact Framewo
30830 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rk...        ///
30840 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
30850 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 74       private Int
30860 50 74 72 20 70 4e 61 74 69 76 65 4d 6f 64 75 6c  Ptr pNativeModul
30870 65 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  e;..#endif....  
30880 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
30890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
308a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
308b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
308c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
308d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
308e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
308f0 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69  /// This field i
30900 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
30910 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
30920 65 20 69 6e 73 74 61 6e 63 65 73 20 61 73 73 6f  e instances asso
30930 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
30940 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 6d 6f  /// with this mo
30950 64 75 6c 65 2e 20 20 54 68 65 20 6e 61 74 69 76  dule.  The nativ
30960 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
30970 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
30980 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  rived..        /
30990 2f 2f 20 73 74 72 75 63 74 75 72 65 20 69 73 20  // structure is 
309a0 75 73 65 64 20 74 6f 20 6b 65 79 20 69 6e 74 6f  used to key into
309b0 20 74 68 69 73 20 63 6f 6c 6c 65 63 74 69 6f 6e   this collection
309c0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
309d0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
309e0 20 20 20 70 72 69 76 61 74 65 20 44 69 63 74 69     private Dicti
309f0 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20 53 51  onary<IntPtr, SQ
30a00 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
30a10 3e 20 74 61 62 6c 65 73 3b 0d 0a 0d 0a 20 20 20  > tables;....   
30a20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
30a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
30a70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
30a80 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
30a90 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69 73  // This field is
30aa0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
30ab0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
30ac0 20 63 75 72 73 6f 72 20 69 6e 73 74 61 6e 63 65   cursor instance
30ad0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  s..        /// a
30ae0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
30af0 68 69 73 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  his module.  The
30b00 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
30b10 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
30b20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /// sqlite3_vtab
30b30 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20  _cursor derived 
30b40 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
30b50 64 20 74 6f 20 6b 65 79 20 69 6e 74 6f 20 74 68  d to key into th
30b60 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
30b70 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  collection...   
30b80 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
30b90 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
30ba0 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79 3c  vate Dictionary<
30bb0 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69  IntPtr, SQLiteVi
30bc0 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
30bd0 3e 20 63 75 72 73 6f 72 73 3b 0d 0a 0d 0a 20 20  > cursors;....  
30be0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
30bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
30c30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
30c40 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
30c50 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69  /// This field i
30c60 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
30c70 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
30c80 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 73 74 61  e function insta
30c90 6e 63 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nces..        //
30ca0 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
30cb0 68 20 74 68 69 73 20 6d 6f 64 75 6c 65 2e 20 20  h this module.  
30cc0 54 68 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  The case-insensi
30cd0 74 69 76 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61  tive function na
30ce0 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  me..        /// 
30cf0 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  and the number o
30d00 66 20 61 72 67 75 6d 65 6e 74 73 20 28 77 69 74  f arguments (wit
30d10 68 20 2d 31 20 6d 65 61 6e 69 6e 67 20 22 61 6e  h -1 meaning "an
30d20 79 22 29 20 61 72 65 20 75 73 65 64 20 74 6f 0d  y") are used to.
30d30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e  .        /// con
30d40 73 74 72 75 63 74 20 74 68 65 20 73 74 72 69 6e  struct the strin
30d50 67 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  g that is used t
30d60 6f 20 6b 65 79 20 69 6e 74 6f 20 74 68 69 73 20  o key into this 
30d70 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  collection...   
30d80 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
30d90 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
30da0 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79 3c  vate Dictionary<
30db0 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 46 75  string, SQLiteFu
30dc0 6e 63 74 69 6f 6e 3e 20 66 75 6e 63 74 69 6f 6e  nction> function
30dd0 73 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  s;..        #end
30de0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
30df0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
30e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
30e40 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
30e50 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
30e60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
30e70 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
30e80 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
30e90 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
30ea0 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
30eb0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
30ec0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
30ed0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d  <param name="nam
30ee0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
30ef0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
30f00 20 6d 6f 64 75 6c 65 2e 20 20 54 68 69 73 20 70   module.  This p
30f10 61 72 61 6d 65 74 65 72 20 63 61 6e 6e 6f 74 20  arameter cannot 
30f20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  be null...      
30f30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
30f40 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
30f50 51 4c 69 74 65 4d 6f 64 75 6c 65 28 73 74 72 69  QLiteModule(stri
30f60 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  ng name)..      
30f70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30f80 20 69 66 20 28 6e 61 6d 65 20 3d 3d 20 6e 75 6c   if (name == nul
30f90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
30fa0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
30fb0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
30fc0 69 6f 6e 28 22 6e 61 6d 65 22 29 3b 0d 0a 0d 0a  ion("name");....
30fd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
30fe0 2e 6e 61 6d 65 20 3d 20 6e 61 6d 65 3b 0d 0a 20  .name = name;.. 
30ff0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
31000 74 61 62 6c 65 73 20 3d 20 6e 65 77 20 44 69 63  tables = new Dic
31010 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20  tionary<IntPtr, 
31020 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
31030 6c 65 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  le>();..        
31040 20 20 20 20 74 68 69 73 2e 63 75 72 73 6f 72 73      this.cursors
31050 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
31060 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65  y<IntPtr, SQLite
31070 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
31080 6f 72 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  or>();..        
31090 20 20 20 20 74 68 69 73 2e 66 75 6e 63 74 69 6f      this.functio
310a0 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e  ns = new Diction
310b0 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69  ary<string, SQLi
310c0 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a  teFunction>();..
310d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
310e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
310f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
31100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
31150 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 4d 65 74  ion Internal Met
31160 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
31170 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
31180 20 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74       /// Calls t
31190 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
311a0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
311b0 20 6f 72 64 65 72 20 74 6f 20 63 72 65 61 74 65   order to create
311c0 20 61 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20   a new..        
311d0 2f 2f 2f 20 64 69 73 70 6f 73 61 62 6c 65 20 6d  /// disposable m
311e0 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  odule containing
311f0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
31200 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ion of a virtual
31210 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
31220 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
31230 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
31240 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d  ram name="pDb">.
31250 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
31260 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65   native database
31270 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
31280 74 65 72 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20  ter to use...   
31290 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
312a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
312b0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
312c0 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75    /// Non-zero u
312d0 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20  pon success...  
312e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
312f0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  rns>..        in
31300 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 43 72 65 61  ternal bool Crea
31310 74 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75  teDisposableModu
31320 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
31330 20 49 6e 74 50 74 72 20 70 44 62 0d 0a 20 20 20   IntPtr pDb..   
31340 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
31350 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31360 20 20 20 69 66 20 28 64 69 73 70 6f 73 61 62 6c     if (disposabl
31370 65 4d 6f 64 75 6c 65 20 21 3d 20 49 6e 74 50 74  eModule != IntPt
31380 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
31390 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
313a0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
313b0 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61 6d       IntPtr pNam
313c0 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
313d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
313e0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
313f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31400 20 20 20 20 70 4e 61 6d 65 20 3d 20 53 51 4c 69      pName = SQLi
31410 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
31420 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61  PtrFromString(na
31430 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
31440 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
31450 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
31460 74 65 33 5f 6d 6f 64 75 6c 65 20 6e 61 74 69 76  te3_module nativ
31470 65 4d 6f 64 75 6c 65 20 3d 0d 0a 20 20 20 20 20  eModule =..     
31480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
31490 6c 6c 6f 63 61 74 65 4e 61 74 69 76 65 4d 6f 64  llocateNativeMod
314a0 75 6c 65 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  ule();....#if !P
314b0 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
314c0 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
314d0 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
314e0 61 62 6c 65 4d 6f 64 75 6c 65 20 3d 0d 0a 20 20  ableModule =..  
314f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31500 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
31510 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
31520 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f  eate_disposable_
31530 6d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20  module(..       
31540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31550 20 70 44 62 2c 20 70 4e 61 6d 65 2c 20 72 65 66   pDb, pName, ref
31560 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2c 20 49   nativeModule, I
31570 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 6e 75 6c 6c  ntPtr.Zero, null
31580 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31590 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 64 69        return (di
315a0 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 20 21  sposableModule !
315b0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  = IntPtr.Zero);.
315c0 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
315d0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
315e0 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 61           disposa
315f0 62 6c 65 4d 6f 64 75 6c 65 20 3d 0d 0a 20 20 20  bleModule =..   
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31610 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
31620 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
31630 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d  ate_disposable_m
31640 6f 64 75 6c 65 5f 69 6e 74 65 72 6f 70 28 0d 0a  odule_interop(..
31650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31660 20 20 20 20 20 20 20 70 44 62 2c 20 70 4e 61 6d         pDb, pNam
31670 65 2c 20 41 6c 6c 6f 63 61 74 65 4e 61 74 69 76  e, AllocateNativ
31680 65 4d 6f 64 75 6c 65 49 6e 74 65 72 6f 70 28 29  eModuleInterop()
31690 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
316a0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
316b0 4d 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f 6e 2c  Module.iVersion,
316c0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43   nativeModule.xC
316d0 72 65 61 74 65 2c 0d 0a 20 20 20 20 20 20 20 20  reate,..        
316e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
316f0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
31700 6e 65 63 74 2c 20 6e 61 74 69 76 65 4d 6f 64 75  nect, nativeModu
31710 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 2c 0d 0a  le.xBestIndex,..
31720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31730 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31740 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 2c  ule.xDisconnect,
31750 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44   nativeModule.xD
31760 65 73 74 72 6f 79 2c 0d 0a 20 20 20 20 20 20 20  estroy,..       
31770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31780 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70  nativeModule.xOp
31790 65 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65  en, nativeModule
317a0 2e 78 43 6c 6f 73 65 2c 0d 0a 20 20 20 20 20 20  .xClose,..      
317b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317c0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46   nativeModule.xF
317d0 69 6c 74 65 72 2c 20 6e 61 74 69 76 65 4d 6f 64  ilter, nativeMod
317e0 75 6c 65 2e 78 4e 65 78 74 2c 0d 0a 20 20 20 20  ule.xNext,..    
317f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31800 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31810 78 45 6f 66 2c 20 6e 61 74 69 76 65 4d 6f 64 75  xEof, nativeModu
31820 6c 65 2e 78 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20  le.xColumn,..   
31830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31840 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
31850 2e 78 52 6f 77 49 64 2c 20 6e 61 74 69 76 65 4d  .xRowId, nativeM
31860 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 2c 0d 0a  odule.xUpdate,..
31870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31880 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31890 75 6c 65 2e 78 42 65 67 69 6e 2c 20 6e 61 74 69  ule.xBegin, nati
318a0 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 2c 0d  veModule.xSync,.
318b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
318c0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
318d0 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 2c 20 6e 61  dule.xCommit, na
318e0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
318f0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
31900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
31910 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64  tiveModule.xFind
31920 46 75 6e 63 74 69 6f 6e 2c 20 6e 61 74 69 76 65  Function, native
31930 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 2c 0d  Module.xRename,.
31940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31950 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
31960 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 2c  dule.xSavepoint,
31970 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
31980 65 6c 65 61 73 65 2c 0d 0a 20 20 20 20 20 20 20  elease,..       
31990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319a0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  nativeModule.xRo
319b0 6c 6c 62 61 63 6b 54 6f 2c 20 49 6e 74 50 74 72  llbackTo, IntPtr
319c0 2e 5a 65 72 6f 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d  .Zero, null);...
319d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
319e0 20 72 65 74 75 72 6e 20 28 64 69 73 70 6f 73 61   return (disposa
319f0 62 6c 65 4d 6f 64 75 6c 65 20 21 3d 20 49 6e 74  bleModule != Int
31a00 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 23 65 6c 73  Ptr.Zero);..#els
31a10 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
31a20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
31a30 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
31a40 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
31a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
31a60 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
31a70 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
31a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31a90 20 20 20 20 69 66 20 28 70 4e 61 6d 65 20 21 3d      if (pName !=
31aa0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
31ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31ad0 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
31ae0 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d  ry.Free(pName);.
31af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b00 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74       pName = Int
31b10 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
31b20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
31b30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31b40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
31b50 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
31b60 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
31bb0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
31bc0 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73   Private Methods
31bd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
31be0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
31bf0 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 64   /// Creates and
31c00 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 61 74   returns the nat
31c10 69 76 65 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c  ive sqlite_modul
31c20 65 20 73 74 72 75 63 74 75 72 65 20 75 73 69 6e  e structure usin
31c30 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
31c40 2f 2f 20 63 6f 6e 66 69 67 75 72 65 64 20 28 6f  // configured (o
31c50 72 20 64 65 66 61 75 6c 74 29 20 3c 73 65 65 20  r default) <see 
31c60 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
31c70 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20  iveModule" />.. 
31c80 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72         /// inter
31c90 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  face implementat
31ca0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
31cb0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
31cc0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
31cd0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
31ce0 20 54 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   The native sqli
31cf0 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74  te_module struct
31d00 75 72 65 20 75 73 69 6e 67 20 74 68 65 20 63 6f  ure using the co
31d10 6e 66 69 67 75 72 65 64 20 28 6f 72 0d 0a 20 20  nfigured (or..  
31d20 20 20 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c        /// defaul
31d30 74 29 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  t) <see cref="IS
31d40 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
31d50 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65 0d  e" /> interface.
31d60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70  .        /// imp
31d70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20  lementation...  
31d80 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
31d90 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
31da0 69 76 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69  ivate UnsafeNati
31db0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
31dc0 33 5f 6d 6f 64 75 6c 65 20 41 6c 6c 6f 63 61 74  3_module Allocat
31dd0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 0d  eNativeModule().
31de0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
31df0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41          return A
31e00 6c 6c 6f 63 61 74 65 4e 61 74 69 76 65 4d 6f 64  llocateNativeMod
31e10 75 6c 65 28 47 65 74 4e 61 74 69 76 65 4d 6f 64  ule(GetNativeMod
31e20 75 6c 65 49 6d 70 6c 28 29 29 3b 0d 0a 20 20 20  uleImpl());..   
31e30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31e40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
31e90 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43   PLATFORM_COMPAC
31ea0 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
31eb0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
31ec0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
31ed0 72 65 61 74 65 73 20 61 6e 64 20 72 65 74 75 72  reates and retur
31ee0 6e 73 20 61 20 6d 65 6d 6f 72 79 20 62 6c 6f 63  ns a memory bloc
31ef0 6b 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  k obtained from 
31f00 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d  the SQLite core.
31f10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62  .        /// lib
31f20 72 61 72 79 20 75 73 65 64 20 74 6f 20 73 74 6f  rary used to sto
31f30 72 65 20 74 68 65 20 6e 61 74 69 76 65 20 73 71  re the native sq
31f40 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72  lite3_module str
31f50 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 0d  ucture for this.
31f60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a  .        /// obj
31f70 65 63 74 20 69 6e 73 74 61 6e 63 65 20 77 68 65  ect instance whe
31f80 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74 68 65  n running on the
31f90 20 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46 72   .NET Compact Fr
31fa0 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20  amework...      
31fb0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
31fc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
31fd0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
31fe0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
31ff0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e  pointer to the n
32000 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f  ative sqlite3_mo
32010 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 2e 0d  dule structure..
32020 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
32030 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
32040 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20   private IntPtr 
32050 41 6c 6c 6f 63 61 74 65 4e 61 74 69 76 65 4d 6f  AllocateNativeMo
32060 64 75 6c 65 49 6e 74 65 72 6f 70 28 29 0d 0a 20  duleInterop().. 
32070 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32080 20 20 20 20 20 20 69 66 20 28 70 4e 61 74 69 76        if (pNativ
32090 65 4d 6f 64 75 6c 65 20 3d 3d 20 49 6e 74 50 74  eModule == IntPt
320a0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
320b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
320c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
320d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48              // H
320e0 41 43 4b 3a 20 4e 6f 20 65 61 73 79 20 77 61 79  ACK: No easy way
320f0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
32100 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6e 61  e size of the na
32110 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20  tive..          
32120 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
32130 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72  qlite_module str
32140 75 63 74 75 72 65 20 77 68 65 6e 20 72 75 6e 6e  ucture when runn
32150 69 6e 67 20 6f 6e 20 74 68 65 20 2e 4e 45 54 0d  ing on the .NET.
32160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32170 20 2f 2f 20 20 20 20 20 20 20 43 6f 6d 70 61 63   //       Compac
32180 74 20 46 72 61 6d 65 77 6f 72 6b 3b 20 74 68 65  t Framework; the
32190 72 65 66 6f 72 65 2c 20 6a 75 73 74 20 62 61 73  refore, just bas
321a0 65 20 74 68 65 20 73 69 7a 65 0d 0a 20 20 20 20  e the size..    
321b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
321c0 20 20 20 20 20 6f 6e 20 77 68 61 74 20 77 65 20       on what we 
321d0 6b 6e 6f 77 3a 0d 0a 20 20 20 20 20 20 20 20 20  know:..         
321e0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
321f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
32200 20 20 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65      There is one
32210 20 69 6e 74 65 67 65 72 20 6d 65 6d 62 65 72 2e   integer member.
32220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32230 20 20 2f 2f 20 20 20 20 20 20 20 54 68 65 72 65    //       There
32240 20 61 72 65 20 32 32 20 66 75 6e 63 74 69 6f 6e   are 22 function
32250 20 70 6f 69 6e 74 65 72 20 6d 65 6d 62 65 72 73   pointer members
32260 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32270 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
32280 20 20 20 20 20 20 20 70 4e 61 74 69 76 65 4d 6f         pNativeMo
32290 64 75 6c 65 20 3d 20 53 51 4c 69 74 65 4d 65 6d  dule = SQLiteMem
322a0 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28 32 33 20  ory.Allocate(23 
322b0 2a 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 3b 0d  * IntPtr.Size);.
322c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
322d0 20 20 20 69 66 20 28 70 4e 61 74 69 76 65 4d 6f     if (pNativeMo
322e0 64 75 6c 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  dule == IntPtr.Z
322f0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
32300 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
32310 6e 65 77 20 4f 75 74 4f 66 4d 65 6d 6f 72 79 45  new OutOfMemoryE
32320 78 63 65 70 74 69 6f 6e 28 22 73 71 6c 69 74 65  xception("sqlite
32330 33 5f 6d 6f 64 75 6c 65 22 29 3b 0d 0a 20 20 20  3_module");..   
32340 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32350 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32360 20 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d   pNativeModule;.
32370 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
32380 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  if....        //
32390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
323e0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
323f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 72 65 61          /// Crea
32400 74 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  tes and returns 
32410 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74  the native sqlit
32420 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  e_module structu
32430 72 65 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20  re using the..  
32440 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63 69 66        /// specif
32450 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49  ied <see cref="I
32460 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
32470 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65  le" /> interface
32480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d  ..        /// im
32490 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20  plementation... 
324a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
324b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
324c0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
324d0 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20  module">..      
324e0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
324f0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
32500 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74  veModule" /> int
32510 65 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74  erface implement
32520 61 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20  ation to..      
32530 20 20 2f 2f 2f 20 75 73 65 2e 0d 0a 20 20 20 20    /// use...    
32540 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
32550 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
32560 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
32570 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
32580 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74  sqlite_module st
32590 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 74 68  ructure using th
325a0 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20  e specified..   
325b0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
325c0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
325d0 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65  eModule" /> inte
325e0 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61  rface implementa
325f0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
32600 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
32610 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 55         private U
32620 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32630 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ds.sqlite3_modul
32640 65 20 41 6c 6c 6f 63 61 74 65 4e 61 74 69 76 65  e AllocateNative
32650 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20  Module(..       
32660 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69       ISQLiteNati
32670 76 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d  veModule module.
32680 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
32690 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
326a0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
326b0 75 6c 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ule = new Unsafe
326c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
326d0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 28 29 3b 0d  lite3_module();.
326e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74  .            nat
326f0 69 76 65 4d 6f 64 75 6c 65 2e 69 56 65 72 73 69  iveModule.iVersi
32700 6f 6e 20 3d 20 44 65 66 61 75 6c 74 4d 6f 64 75  on = DefaultModu
32710 6c 65 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20  leVersion;....  
32720 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
32730 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  dule != null).. 
32740 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
32760 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
32770 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  te = new UnsafeN
32780 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 72  ativeMethods.xCr
32790 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
327a0 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
327b0 2e 78 43 72 65 61 74 65 29 3b 0d 0a 0d 0a 20 20  .xCreate);....  
327c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
327d0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
327e0 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ect = new Unsafe
327f0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
32800 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
32810 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
32820 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 29 3b 0d 0a  ule.xConnect);..
32830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32840 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
32850 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65 77 20  BestIndex = new 
32860 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
32870 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78 28 0d  ods.xBestIndex(.
32880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32890 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 42 65 73       module.xBes
328a0 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20  tIndex);....    
328b0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
328c0 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e  veModule.xDiscon
328d0 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  nect = new Unsaf
328e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
328f0 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  Disconnect(..   
32900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32910 20 6d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e   module.xDisconn
32920 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ect);....       
32930 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
32940 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20 3d  odule.xDestroy =
32950 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
32960 65 4d 65 74 68 6f 64 73 2e 78 44 65 73 74 72 6f  eMethods.xDestro
32970 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
32980 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
32990 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20  Destroy);....   
329a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
329b0 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20  iveModule.xOpen 
329c0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
329d0 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65 6e 28  veMethods.xOpen(
329e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
329f0 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 4f 70        module.xOp
32a00 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  en);....        
32a10 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
32a20 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65  dule.xClose = ne
32a30 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
32a40 74 68 6f 64 73 2e 78 43 6c 6f 73 65 28 0d 0a 20  thods.xClose(.. 
32a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a60 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65     module.xClose
32a70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32a80 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
32a90 6c 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65 77  le.xFilter = new
32aa0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
32ab0 68 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a 20  hods.xFilter(.. 
32ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ad0 20 20 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74 65     module.xFilte
32ae0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
32af0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
32b00 75 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20  ule.xNext = new 
32b10 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
32b20 6f 64 73 2e 78 4e 65 78 74 28 0d 0a 20 20 20 20  ods.xNext(..    
32b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b40 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 29 3b 0d 0a  module.xNext);..
32b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32b60 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
32b70 45 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  Eof = new Unsafe
32b80 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 45  NativeMethods.xE
32b90 6f 66 28 6d 6f 64 75 6c 65 2e 78 45 6f 66 29 3b  of(module.xEof);
32ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32bb0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
32bc0 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20 55  .xColumn = new U
32bd0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32be0 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20  ds.xColumn(..   
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c00 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 29   module.xColumn)
32c10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32c20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
32c30 65 2e 78 52 6f 77 49 64 20 3d 20 6e 65 77 20 55  e.xRowId = new U
32c40 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32c50 64 73 2e 78 52 6f 77 49 64 28 0d 0a 20 20 20 20  ds.xRowId(..    
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c70 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 29 3b 0d  module.xRowId);.
32c80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32c90 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
32ca0 78 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55 6e  xUpdate = new Un
32cb0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
32cc0 73 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20  s.xUpdate(..    
32cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ce0 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 29 3b  module.xUpdate);
32cf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32d00 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
32d10 2e 78 42 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e  .xBegin = new Un
32d20 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
32d30 73 2e 78 42 65 67 69 6e 28 0d 0a 20 20 20 20 20  s.xBegin(..     
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
32d50 6f 64 75 6c 65 2e 78 42 65 67 69 6e 29 3b 0d 0a  odule.xBegin);..
32d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32d70 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
32d80 53 79 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61 66  Sync = new Unsaf
32d90 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
32da0 53 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20  Sync(..         
32db0 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
32dc0 65 2e 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20  e.xSync);....   
32dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
32de0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69  iveModule.xCommi
32df0 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
32e00 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6d  tiveMethods.xCom
32e10 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mit(..          
32e20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
32e30 2e 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20  .xCommit);....  
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
32e50 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
32e60 62 61 63 6b 20 3d 20 6e 65 77 20 55 6e 73 61 66  back = new Unsaf
32e70 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
32e80 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  Rollback(..     
32e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
32ea0 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 29  odule.xRollback)
32eb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32ec0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
32ed0 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20  e.xFindFunction 
32ee0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
32ef0 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64 46  veMethods.xFindF
32f00 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
32f20 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69  dule.xFindFuncti
32f30 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
32f40 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
32f50 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3d 20 6e  dule.xRename = n
32f60 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32f70 65 74 68 6f 64 73 2e 78 52 65 6e 61 6d 65 28 0d  ethods.xRename(.
32f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32f90 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 65 6e       module.xRen
32fa0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
32fb0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
32fc0 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74  odule.xSavepoint
32fd0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
32fe0 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61 76 65  iveMethods.xSave
32ff0 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  point(..        
33000 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
33010 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d  le.xSavepoint);.
33020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33030 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
33040 78 52 65 6c 65 61 73 65 20 3d 20 6e 65 77 20 55  xRelease = new U
33050 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
33060 64 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a 20 20  ds.xRelease(..  
33070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33080 20 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73    module.xReleas
33090 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
330a0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
330b0 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20  ule.xRollbackTo 
330c0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
330d0 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62  veMethods.xRollb
330e0 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20  ackTo(..        
330f0 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
33100 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 29 3b  le.xRollbackTo);
33110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33120 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
33130 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
33140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33150 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
33160 43 72 65 61 74 65 20 3d 20 6e 65 77 20 55 6e 73  Create = new Uns
33170 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
33180 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20  .xCreate(..     
33190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
331a0 43 72 65 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  Create);....    
331b0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
331c0 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
331d0 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
331e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6e  tiveMethods.xCon
331f0 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
33200 20 20 20 20 20 20 20 20 20 20 20 78 43 6f 6e 6e             xConn
33210 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ect);....       
33220 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
33230 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
33240 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
33250 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 73 74  iveMethods.xBest
33260 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20  Index(..        
33270 20 20 20 20 20 20 20 20 20 20 20 20 78 42 65 73              xBes
33280 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20  tIndex);....    
33290 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
332a0 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e  veModule.xDiscon
332b0 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  nect = new Unsaf
332c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
332d0 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  Disconnect(..   
332e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332f0 20 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d 0a   xDisconnect);..
33300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33310 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
33320 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20 55 6e  Destroy = new Un
33330 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
33340 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20 20 20  s.xDestroy(..   
33350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33360 20 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20   xDestroy);.... 
33370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
33380 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65  ativeModule.xOpe
33390 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
333a0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65  tiveMethods.xOpe
333b0 6e 28 78 4f 70 65 6e 29 3b 0d 0a 20 20 20 20 20  n(xOpen);..     
333c0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
333d0 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3d  eModule.xClose =
333e0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
333f0 65 4d 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65 28  eMethods.xClose(
33400 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  xClose);....    
33410 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
33420 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72  veModule.xFilter
33430 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
33440 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c 74  iveMethods.xFilt
33450 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
33460 20 20 20 20 20 20 20 20 20 78 46 69 6c 74 65 72           xFilter
33470 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
33480 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
33490 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20 55  le.xNext = new U
334a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
334b0 64 73 2e 78 4e 65 78 74 28 78 4e 65 78 74 29 3b  ds.xNext(xNext);
334c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
334d0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
334e0 45 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  Eof = new Unsafe
334f0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 45  NativeMethods.xE
33500 6f 66 28 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20 20  of(xEof);....   
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
33520 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  iveModule.xColum
33530 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
33540 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6c  tiveMethods.xCol
33550 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  umn(..          
33560 20 20 20 20 20 20 20 20 20 20 78 43 6f 6c 75 6d            xColum
33570 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
33580 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
33590 75 6c 65 2e 78 52 6f 77 49 64 20 3d 20 6e 65 77  ule.xRowId = new
335a0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
335b0 68 6f 64 73 2e 78 52 6f 77 49 64 28 78 52 6f 77  hods.xRowId(xRow
335c0 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Id);....        
335d0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
335e0 64 75 6c 65 2e 78 55 70 64 61 74 65 20 3d 20 6e  dule.xUpdate = n
335f0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
33600 65 74 68 6f 64 73 2e 78 55 70 64 61 74 65 28 0d  ethods.xUpdate(.
33610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33620 20 20 20 20 20 78 55 70 64 61 74 65 29 3b 0d 0a       xUpdate);..
33630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33640 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
33650 42 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e 73 61  Begin = new Unsa
33660 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
33670 78 42 65 67 69 6e 28 78 42 65 67 69 6e 29 3b 0d  xBegin(xBegin);.
33680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33690 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53   nativeModule.xS
336a0 79 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ync = new Unsafe
336b0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53  NativeMethods.xS
336c0 79 6e 63 28 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20  ync(xSync);.... 
336d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
336e0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d  ativeModule.xCom
336f0 6d 69 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  mit = new Unsafe
33700 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
33710 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20  ommit(..        
33720 20 20 20 20 20 20 20 20 20 20 20 20 78 43 6f 6d              xCom
33730 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mit);....       
33740 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
33750 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20  odule.xRollback 
33760 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
33770 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62  veMethods.xRollb
33780 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
33790 20 20 20 20 20 20 20 20 20 20 78 52 6f 6c 6c 62            xRollb
337a0 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ack);....       
337b0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
337c0 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74  odule.xFindFunct
337d0 69 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ion = new Unsafe
337e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 46  NativeMethods.xF
337f0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
33800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33810 20 20 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29    xFindFunction)
33820 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33830 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
33840 65 2e 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20  e.xRename = new 
33850 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
33860 6f 64 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20  ods.xRename(..  
33870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33880 20 20 78 52 65 6e 61 6d 65 29 3b 0d 0a 0d 0a 20    xRename);.... 
33890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
338a0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76  ativeModule.xSav
338b0 65 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e 73  epoint = new Uns
338c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
338d0 2e 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20  .xSavepoint(..  
338e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338f0 20 20 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a    xSavepoint);..
33900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33910 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
33920 52 65 6c 65 61 73 65 20 3d 20 6e 65 77 20 55 6e  Release = new Un
33930 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
33940 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20  s.xRelease(..   
33950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33960 20 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a 20   xRelease);.... 
33970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
33980 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c  ativeModule.xRol
33990 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20 55 6e  lbackTo = new Un
339a0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
339b0 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a  s.xRollbackTo(..
339c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339d0 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 29      xRollbackTo)
339e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
339f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33a00 72 65 74 75 72 6e 20 6e 61 74 69 76 65 4d 6f 64  return nativeMod
33a10 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ule;..        }.
33a20 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
33a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
33a80 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
33a90 20 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73       /// Creates
33aa0 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 73   a copy of the s
33ab0 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20  pecified..      
33ac0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
33ad0 22 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  "UnsafeNativeMet
33ae0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64  hods.sqlite3_mod
33af0 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ule" /> object i
33b00 6e 73 74 61 6e 63 65 2c 0d 0a 20 20 20 20 20 20  nstance,..      
33b10 20 20 2f 2f 2f 20 75 73 69 6e 67 20 64 65 66 61    /// using defa
33b20 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ult implementati
33b30 6f 6e 73 20 66 6f 72 20 74 68 65 20 63 6f 6e 74  ons for the cont
33b40 61 69 6e 65 64 20 64 65 6c 65 67 61 74 65 73 20  ained delegates 
33b50 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  when..        //
33b60 2f 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20  / necessary...  
33b70 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
33b80 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
33b90 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
33ba0 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  odule">..       
33bb0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
33bc0 65 66 3d 22 55 6e 73 61 66 65 4e 61 74 69 76 65  ef="UnsafeNative
33bd0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
33be0 6d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  module" /> objec
33bf0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  t..        /// i
33c00 6e 73 74 61 6e 63 65 20 74 6f 20 63 6f 70 79 2e  nstance to copy.
33c10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
33c20 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
33c30 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
33c40 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
33c50 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22 55 6e  ew <see cref="Un
33c60 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
33c70 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  s.sqlite3_module
33c80 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20  " /> object..   
33c90 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63       /// instanc
33ca0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
33cb0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
33cc0 20 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61      private Unsa
33cd0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
33ce0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 43  sqlite3_module C
33cf0 6f 70 79 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28  opyNativeModule(
33d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
33d10 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
33d20 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  s.sqlite3_module
33d30 20 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20   module..       
33d40 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
33d50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  {..            U
33d60 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
33d70 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ds.sqlite3_modul
33d80 65 20 6e 65 77 4d 6f 64 75 6c 65 20 3d 0d 0a 20  e newModule =.. 
33d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
33da0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
33db0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
33dc0 6f 64 75 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  odule();....    
33dd0 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
33de0 65 2e 69 56 65 72 73 69 6f 6e 20 3d 20 6d 6f 64  e.iVersion = mod
33df0 75 6c 65 2e 69 56 65 72 73 69 6f 6e 3b 0d 0a 0d  ule.iVersion;...
33e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
33e10 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 20 3d  Module.xCreate =
33e20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
33e30 65 4d 65 74 68 6f 64 73 2e 78 43 72 65 61 74 65  eMethods.xCreate
33e40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33e50 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43 72 65 61     (module.xCrea
33e60 74 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f  te != null) ? mo
33e70 64 75 6c 65 2e 78 43 72 65 61 74 65 20 3a 20 78  dule.xCreate : x
33e80 43 72 65 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  Create);....    
33e90 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
33ea0 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20 6e 65 77  e.xConnect = new
33eb0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
33ec0 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a  hods.xConnect(..
33ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ee0 28 6d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  (module.xConnect
33ef0 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
33f00 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3a 20 78 43  le.xConnect : xC
33f10 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20  onnect);....    
33f20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
33f30 65 2e 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e  e.xBestIndex = n
33f40 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
33f50 65 74 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65  ethods.xBestInde
33f60 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x(..            
33f70 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 42 65 73      (module.xBes
33f80 74 49 6e 64 65 78 20 21 3d 20 6e 75 6c 6c 29 20  tIndex != null) 
33f90 3f 20 6d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e  ? module.xBestIn
33fa0 64 65 78 20 3a 20 78 42 65 73 74 49 6e 64 65 78  dex : xBestIndex
33fb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
33fc0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 44 69 73    newModule.xDis
33fd0 63 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e  connect = new Un
33fe0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
33ff0 73 2e 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a  s.xDisconnect(..
34000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34010 28 6d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e  (module.xDisconn
34020 65 63 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  ect != null) ? m
34030 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63  odule.xDisconnec
34040 74 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t :..           
34050 20 20 20 20 20 78 44 69 73 63 6f 6e 6e 65 63 74       xDisconnect
34060 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34070 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 44 65 73    newModule.xDes
34080 74 72 6f 79 20 3d 20 6e 65 77 20 55 6e 73 61 66  troy = new Unsaf
34090 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
340a0 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20  Destroy(..      
340b0 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
340c0 65 2e 78 44 65 73 74 72 6f 79 20 21 3d 20 6e 75  e.xDestroy != nu
340d0 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 44 65  ll) ? module.xDe
340e0 73 74 72 6f 79 20 3a 20 78 44 65 73 74 72 6f 79  stroy : xDestroy
340f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34100 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 4f 70 65    newModule.xOpe
34110 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
34120 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65  tiveMethods.xOpe
34130 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
34140 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 4f 70 65      (module.xOpe
34150 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  n != null) ? mod
34160 75 6c 65 2e 78 4f 70 65 6e 20 3a 20 78 4f 70 65  ule.xOpen : xOpe
34170 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
34180 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 6c     newModule.xCl
34190 6f 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ose = new Unsafe
341a0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
341b0 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lose(..         
341c0 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78         (module.x
341d0 43 6c 6f 73 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  Close != null) ?
341e0 20 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3a   module.xClose :
341f0 20 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20   xClose);....   
34200 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
34210 6c 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65 77  le.xFilter = new
34220 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
34230 68 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a 20  hods.xFilter(.. 
34240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
34250 6d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20 21  module.xFilter !
34260 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65  = null) ? module
34270 2e 78 46 69 6c 74 65 72 20 3a 20 78 46 69 6c 74  .xFilter : xFilt
34280 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  er);....        
34290 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 4e      newModule.xN
342a0 65 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ext = new Unsafe
342b0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e  NativeMethods.xN
342c0 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ext(..          
342d0 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 4e        (module.xN
342e0 65 78 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  ext != null) ? m
342f0 6f 64 75 6c 65 2e 78 4e 65 78 74 20 3a 20 78 4e  odule.xNext : xN
34300 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
34310 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78       newModule.x
34320 45 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  Eof = new Unsafe
34330 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 45  NativeMethods.xE
34340 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  of(..           
34350 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 45 6f       (module.xEo
34360 66 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  f != null) ? mod
34370 75 6c 65 2e 78 45 6f 66 20 3a 20 78 45 6f 66 29  ule.xEof : xEof)
34380 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34390 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75   newModule.xColu
343a0 6d 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  mn = new UnsafeN
343b0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
343c0 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  lumn(..         
343d0 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78         (module.x
343e0 43 6f 6c 75 6d 6e 20 21 3d 20 6e 75 6c 6c 29 20  Column != null) 
343f0 3f 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e  ? module.xColumn
34400 20 3a 20 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a   : xColumn);....
34410 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
34420 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20 3d 20 6e  odule.xRowId = n
34430 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
34440 65 74 68 6f 64 73 2e 78 52 6f 77 49 64 28 0d 0a  ethods.xRowId(..
34450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34460 28 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20 21  (module.xRowId !
34470 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65  = null) ? module
34480 2e 78 52 6f 77 49 64 20 3a 20 78 52 6f 77 49 64  .xRowId : xRowId
34490 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
344a0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 55 70 64    newModule.xUpd
344b0 61 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ate = new Unsafe
344c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 55  NativeMethods.xU
344d0 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  pdate(..        
344e0 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e          (module.
344f0 78 55 70 64 61 74 65 20 21 3d 20 6e 75 6c 6c 29  xUpdate != null)
34500 20 3f 20 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74   ? module.xUpdat
34510 65 20 3a 20 78 55 70 64 61 74 65 29 3b 0d 0a 0d  e : xUpdate);...
34520 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
34530 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20 3d 20  Module.xBegin = 
34540 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
34550 4d 65 74 68 6f 64 73 2e 78 42 65 67 69 6e 28 0d  Methods.xBegin(.
34560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34570 20 28 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20   (module.xBegin 
34580 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
34590 65 2e 78 42 65 67 69 6e 20 3a 20 78 42 65 67 69  e.xBegin : xBegi
345a0 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
345b0 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 53 79     newModule.xSy
345c0 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  nc = new UnsafeN
345d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 79  ativeMethods.xSy
345e0 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nc(..           
345f0 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 53 79       (module.xSy
34600 6e 63 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f  nc != null) ? mo
34610 64 75 6c 65 2e 78 53 79 6e 63 20 3a 20 78 53 79  dule.xSync : xSy
34620 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nc);....        
34630 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43      newModule.xC
34640 6f 6d 6d 69 74 20 3d 20 6e 65 77 20 55 6e 73 61  ommit = new Unsa
34650 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
34660 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20  xCommit(..      
34670 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
34680 65 2e 78 43 6f 6d 6d 69 74 20 21 3d 20 6e 75 6c  e.xCommit != nul
34690 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43 6f 6d  l) ? module.xCom
346a0 6d 69 74 20 3a 20 78 43 6f 6d 6d 69 74 29 3b 0d  mit : xCommit);.
346b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ...            n
346c0 65 77 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61  ewModule.xRollba
346d0 63 6b 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ck = new UnsafeN
346e0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f  ativeMethods.xRo
346f0 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
34700 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
34710 2e 78 52 6f 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  .xRollback != nu
34720 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 6f  ll) ? module.xRo
34730 6c 6c 62 61 63 6b 20 3a 20 78 52 6f 6c 6c 62 61  llback : xRollba
34740 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ck);....        
34750 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 46      newModule.xF
34760 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65  indFunction = ne
34770 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
34780 74 68 6f 64 73 2e 78 46 69 6e 64 46 75 6e 63 74  thods.xFindFunct
34790 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
347a0 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 46        (module.xF
347b0 69 6e 64 46 75 6e 63 74 69 6f 6e 20 21 3d 20 6e  indFunction != n
347c0 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 46  ull) ? module.xF
347d0 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3a 0d 0a 20  indFunction :.. 
347e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
347f0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a  FindFunction);..
34800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
34810 77 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20  wModule.xRename 
34820 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
34830 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6e 61 6d  veMethods.xRenam
34840 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
34850 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52 65 6e      (module.xRen
34860 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  ame != null) ? m
34870 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3a 20  odule.xRename : 
34880 78 52 65 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  xRename);....   
34890 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
348a0 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 20 3d 20  le.xSavepoint = 
348b0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
348c0 4d 65 74 68 6f 64 73 2e 78 53 61 76 65 70 6f 69  Methods.xSavepoi
348d0 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
348e0 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 53 61       (module.xSa
348f0 76 65 70 6f 69 6e 74 20 21 3d 20 6e 75 6c 6c 29  vepoint != null)
34900 20 3f 20 6d 6f 64 75 6c 65 2e 78 53 61 76 65 70   ? module.xSavep
34910 6f 69 6e 74 20 3a 20 78 53 61 76 65 70 6f 69 6e  oint : xSavepoin
34920 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
34930 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52 65     newModule.xRe
34940 6c 65 61 73 65 20 3d 20 6e 65 77 20 55 6e 73 61  lease = new Unsa
34950 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
34960 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20  xRelease(..     
34970 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
34980 6c 65 2e 78 52 65 6c 65 61 73 65 20 21 3d 20 6e  le.xRelease != n
34990 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52  ull) ? module.xR
349a0 65 6c 65 61 73 65 20 3a 20 78 52 65 6c 65 61 73  elease : xReleas
349b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
349c0 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52 6f     newModule.xRo
349d0 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20 55  llbackTo = new U
349e0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
349f0 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d  ds.xRollbackTo(.
34a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34a10 20 28 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61   (module.xRollba
34a20 63 6b 54 6f 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  ckTo != null) ? 
34a30 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  module.xRollback
34a40 54 6f 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  To :..          
34a50 20 20 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 54        xRollbackT
34a60 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  o);....         
34a70 20 20 20 72 65 74 75 72 6e 20 6e 65 77 4d 6f 64     return newMod
34a80 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ule;..        }.
34a90 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
34aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ae0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
34af0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
34b00 20 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 6f       /// Calls o
34b10 6e 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ne of the virtua
34b20 6c 20 74 61 62 6c 65 20 69 6e 69 74 69 61 6c 69  l table initiali
34b30 7a 61 74 69 6f 6e 20 6d 65 74 68 6f 64 73 2e 0d  zation methods..
34b40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
34b50 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
34b60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
34b70 3d 22 63 72 65 61 74 65 22 3e 0d 0a 20 20 20 20  ="create">..    
34b80 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
34b90 20 74 6f 20 63 61 6c 6c 20 74 68 65 20 3c 73 65   to call the <se
34ba0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
34bb0 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65  anagedModule.Cre
34bc0 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20  ate" />..       
34bd0 20 2f 2f 2f 20 6d 65 74 68 6f 64 3b 20 6f 74 68   /// method; oth
34be0 65 72 77 69 73 65 2c 20 74 68 65 20 3c 73 65 65  erwise, the <see
34bf0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
34c00 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e  nagedModule.Conn
34c10 65 63 74 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20  ect" />..       
34c20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 77 69 6c 6c   /// method will
34c30 20 62 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20   be called...   
34c40 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
34c50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
34c60 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22  param name="pDb"
34c70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
34c80 68 65 20 6e 61 74 69 76 65 20 64 61 74 61 62 61  he native databa
34c90 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
34ca0 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndle...        /
34cb0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
34cc0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
34cd0 6e 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20  name="pAux">..  
34ce0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72        /// The or
34cf0 69 67 69 6e 61 6c 20 6e 61 74 69 76 65 20 70 6f  iginal native po
34d00 69 6e 74 65 72 20 76 61 6c 75 65 20 74 68 61 74  inter value that
34d10 20 77 61 73 20 70 72 6f 76 69 64 65 64 20 74 6f   was provided to
34d20 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
34d30 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  / sqlite3_create
34d40 5f 6d 6f 64 75 6c 65 28 29 2c 20 73 71 6c 69 74  _module(), sqlit
34d50 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
34d60 5f 76 32 28 29 20 6f 72 0d 0a 20 20 20 20 20 20  _v2() or..      
34d70 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72    /// sqlite3_cr
34d80 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f  eate_disposable_
34d90 6d 6f 64 75 6c 65 28 29 20 66 75 6e 63 74 69 6f  module() functio
34da0 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns...        ///
34db0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
34dc0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
34dd0 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20  me="argc">..    
34de0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
34df0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
34e00 66 72 6f 6d 20 74 68 65 20 43 52 45 41 54 45 20  from the CREATE 
34e10 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74  VIRTUAL TABLE st
34e20 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20  atement...      
34e30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
34e40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
34e50 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d  am name="argv">.
34e60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
34e70 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
34e80 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
34e90 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
34ea0 41 4c 20 54 41 42 4c 45 0d 0a 20 20 20 20 20 20  AL TABLE..      
34eb0 20 20 2f 2f 2f 20 73 74 61 74 65 6d 65 6e 74 2e    /// statement.
34ec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
34ed0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
34ee0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
34ef0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
34f00 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
34f10 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  ss, this paramet
34f20 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
34f30 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ied to point to 
34f40 74 68 65 20 6e 65 77 6c 79 0d 0a 20 20 20 20 20  the newly..     
34f50 20 20 20 2f 2f 2f 20 63 72 65 61 74 65 64 20 6e     /// created n
34f60 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74  ative sqlite3_vt
34f70 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
34f80 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
34f90 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
34fa0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
34fb0 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a  name="pError">..
34fc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
34fd0 20 66 61 69 6c 75 72 65 2c 20 74 68 69 73 20 70   failure, this p
34fe0 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65  arameter must be
34ff0 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69   modified to poi
35000 6e 74 20 74 6f 20 74 68 65 20 65 72 72 6f 72 0d  nt to the error.
35010 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 73  .        /// mes
35020 73 61 67 65 2c 20 77 69 74 68 20 74 68 65 20 75  sage, with the u
35030 6e 64 65 72 6c 79 69 6e 67 20 6d 65 6d 6f 72 79  nderlying memory
35040 20 68 61 76 69 6e 67 20 62 65 65 6e 20 6f 62 74   having been obt
35050 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a  ained from the..
35060 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
35070 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e  te3_malloc() fun
35080 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ction...        
35090 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
350a0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
350b0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
350c0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
350d0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
350e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
350f0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
35100 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 45   private SQLiteE
35110 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 4f  rrorCode CreateO
35120 72 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20  rConnect(..     
35130 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 72 65 61         bool crea
35140 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te,..           
35150 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20 20   IntPtr pDb,..  
35160 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
35170 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20   pAux,..        
35180 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
35190 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
351a0 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20  r argv,..       
351b0 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
351c0 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
351d0 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
351e0 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  Error..         
351f0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
35200 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
35210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
35220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35230 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
35240 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
35250 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
35260 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
35270 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
35280 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
35290 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61  qlite3_db_filena
352a0 6d 65 28 70 44 62 2c 20 49 6e 74 50 74 72 2e 5a  me(pDb, IntPtr.Z
352b0 65 72 6f 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ero));....      
352c0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
352d0 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
352e0 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
352f0 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
35300 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
35310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
35320 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 66 61 6c  b, fileName, fal
35330 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
35340 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35350 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
35360 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
35370 74 61 62 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  table = null;.. 
35380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35390 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20     string error 
353a0 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
353b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
353c0 66 20 28 28 63 72 65 61 74 65 20 26 26 20 43 72  f ((create && Cr
353d0 65 61 74 65 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c  eate(connection,
353e0 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20   pAux,..        
353f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35400 20 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67      SQLiteString
35410 2e 53 74 72 69 6e 67 41 72 72 61 79 46 72 6f 6d  .StringArrayFrom
35420 55 74 66 38 53 69 7a 65 41 6e 64 49 6e 74 50 74  Utf8SizeAndIntPt
35430 72 28 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20  r(argc,..       
35440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35450 20 20 20 20 20 61 72 67 76 29 2c 20 72 65 66 20       argv), ref 
35460 74 61 62 6c 65 2c 20 72 65 66 20 65 72 72 6f 72  table, ref error
35470 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  ) == SQLiteError
35480 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20  Code.Ok) ||..   
35490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354a0 20 20 20 20 20 28 21 63 72 65 61 74 65 20 26 26       (!create &&
354b0 20 43 6f 6e 6e 65 63 74 28 63 6f 6e 6e 65 63 74   Connect(connect
354c0 69 6f 6e 2c 20 70 41 75 78 2c 0d 0a 20 20 20 20  ion, pAux,..    
354d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
354f0 72 69 6e 67 2e 53 74 72 69 6e 67 41 72 72 61 79  ring.StringArray
35500 46 72 6f 6d 55 74 66 38 53 69 7a 65 41 6e 64 49  FromUtf8SizeAndI
35510 6e 74 50 74 72 28 61 72 67 63 2c 0d 0a 20 20 20  ntPtr(argc,..   
35520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35530 20 20 20 20 20 20 20 20 20 61 72 67 76 29 2c 20           argv), 
35540 72 65 66 20 74 61 62 6c 65 2c 20 72 65 66 20 65  ref table, ref e
35550 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 45  rror) == SQLiteE
35560 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 0d 0a 20  rrorCode.Ok)).. 
35570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35580 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
355a0 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29   (table != null)
355b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
355c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
355d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355e0 20 20 20 20 20 20 20 20 20 70 56 74 61 62 20 3d           pVtab =
355f0 20 54 61 62 6c 65 54 6f 49 6e 74 50 74 72 28 74   TableToIntPtr(t
35600 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  able);..        
35610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35620 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
35630 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
35640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35650 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35670 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
35680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35690 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
356a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356b0 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53  pError = SQLiteS
356c0 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
356d0 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20  FromString(..   
356e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f               "no
35700 20 74 61 62 6c 65 20 77 61 73 20 63 72 65 61 74   table was creat
35710 65 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed");..         
35720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35740 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
35750 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
35760 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
35770 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35790 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74    pError = SQLit
357a0 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
357b0 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 65 72 72  trFromString(err
357c0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
357d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
357e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
357f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35800 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
35810 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
35820 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
35830 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
35840 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35850 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f             pErro
35860 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  r = SQLiteString
35870 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
35880 74 72 69 6e 67 28 65 2e 54 6f 53 74 72 69 6e 67  tring(e.ToString
35890 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
358a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
358b0 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
358c0 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
358d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
358e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
358f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35930 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
35940 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
35950 20 2f 2f 2f 20 43 61 6c 6c 73 20 6f 6e 65 20 6f   /// Calls one o
35960 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
35970 62 6c 65 20 66 69 6e 61 6c 69 7a 61 74 69 6f 6e  ble finalization
35980 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20   methods...     
35990 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
359a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
359b0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74  param name="dest
359c0 72 6f 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  roy">..        /
359d0 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 63  // Non-zero to c
359e0 61 6c 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65  all the <see cre
359f0 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
35a00 64 4d 6f 64 75 6c 65 2e 44 65 73 74 72 6f 79 22  dModule.Destroy"
35a10 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   />..        ///
35a20 20 6d 65 74 68 6f 64 3b 20 6f 74 68 65 72 77 69   method; otherwi
35a30 73 65 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 20  se, the..       
35a40 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
35a50 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
35a60 64 75 6c 65 2e 44 69 73 63 6f 6e 6e 65 63 74 22  dule.Disconnect"
35a70 20 2f 3e 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20   /> method will 
35a80 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
35a90 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20  called...       
35aa0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
35ab0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
35ac0 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
35ad0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
35ae0 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
35af0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
35b00 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
35b10 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
35b20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
35b30 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
35b40 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
35b50 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
35b60 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
35b70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
35b80 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
35b90 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 45   private SQLiteE
35ba0 72 72 6f 72 43 6f 64 65 20 44 65 73 74 72 6f 79  rrorCode Destroy
35bb0 4f 72 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20  OrDisconnect(.. 
35bc0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
35bd0 64 65 73 74 72 6f 79 2c 0d 0a 20 20 20 20 20 20  destroy,..      
35be0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
35bf0 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
35c00 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
35c10 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
35c20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
35c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
35c40 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
35c50 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72   table = TableFr
35c60 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b  omIntPtr(pVtab);
35c70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35c80 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d      if (table !=
35c90 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
35ca0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
35cc0 66 20 28 28 64 65 73 74 72 6f 79 20 26 26 20 28  f ((destroy && (
35cd0 44 65 73 74 72 6f 79 28 74 61 62 6c 65 29 20 3d  Destroy(table) =
35ce0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
35cf0 65 2e 4f 6b 29 29 20 7c 7c 0d 0a 20 20 20 20 20  e.Ok)) ||..     
35d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d10 20 20 20 28 21 64 65 73 74 72 6f 79 20 26 26 20     (!destroy && 
35d20 28 44 69 73 63 6f 6e 6e 65 63 74 28 74 61 62 6c  (Disconnect(tabl
35d30 65 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  e) == SQLiteErro
35d40 72 43 6f 64 65 2e 4f 6b 29 29 29 0d 0a 20 20 20  rCode.Ok)))..   
35d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35d70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35d80 74 61 62 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d  tables != null).
35d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 61 62               tab
35db0 6c 65 73 2e 52 65 6d 6f 76 65 28 70 56 74 61 62  les.Remove(pVtab
35dc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
35de0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
35df0 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20  Code.Ok;..      
35e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
35e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35e20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
35e30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
35e40 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
35e50 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74  e) /* NOTE: Must
35e60 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a   catch ALL. */..
35e70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35e90 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
35ea0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 74 20 74     // NOTE: At t
35eb0 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 72 65  his point, there
35ec0 20 69 73 20 6e 6f 20 77 61 79 20 74 6f 20 72 65   is no way to re
35ed0 70 6f 72 74 20 74 68 65 20 65 72 72 6f 72 0d 0a  port the error..
35ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ef0 2f 2f 20 20 20 20 20 20 20 63 6f 6e 64 69 74 69  //       conditi
35f00 6f 6e 20 62 61 63 6b 20 74 6f 20 74 68 65 20 63  on back to the c
35f10 61 6c 6c 65 72 3b 20 74 68 65 72 65 66 6f 72 65  aller; therefore
35f20 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20  , use the..     
35f30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
35f40 20 20 20 20 6c 6f 67 67 69 6e 67 20 66 61 63 69      logging faci
35f50 6c 69 74 79 20 69 6e 73 74 65 61 64 2e 0d 0a 20  lity instead... 
35f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35f70 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
35f80 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
35f90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
35fb0 66 20 28 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73  f (LogExceptions
35fc0 4e 6f 54 68 72 6f 77 29 0d 0a 20 20 20 20 20 20  NoThrow)..      
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
35fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35ff0 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f           /* thro
36000 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
36020 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
36030 67 65 28 53 51 4c 69 74 65 42 61 73 65 2e 43 4f  ge(SQLiteBase.CO
36040 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a  R_E_EXCEPTION,..
36050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36060 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
36070 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ng.Format(Cultur
36080 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
36090 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
360a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360b0 20 20 20 22 43 61 75 67 68 74 20 65 78 63 65 70     "Caught excep
360c0 74 69 6f 6e 20 69 6e 20 5c 22 7b 30 7d 5c 22 20  tion in \"{0}\" 
360d0 6d 65 74 68 6f 64 3a 20 7b 31 7d 22 2c 0d 0a 20  method: {1}",.. 
360e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360f0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74 72             destr
36100 6f 79 20 3f 20 22 78 44 65 73 74 72 6f 79 22 20  oy ? "xDestroy" 
36110 3a 20 22 78 44 69 73 63 6f 6e 6e 65 63 74 22 2c  : "xDisconnect",
36120 20 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   e));..         
36130 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
36140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
36150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36160 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
36170 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
36190 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
361a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
361b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
361c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
361d0 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
361e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
361f0 20 20 20 20 20 46 72 65 65 54 61 62 6c 65 28 70       FreeTable(p
36200 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  Vtab);..        
36210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36220 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
36230 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
36240 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  r;..        }...
36250 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
36260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
362a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
362b0 69 6f 6e 20 53 74 61 74 69 63 20 45 72 72 6f 72  ion Static Error
362c0 20 48 61 6e 64 6c 69 6e 67 20 48 65 6c 70 65 72   Handling Helper
362d0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
362e0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
362f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72  .        /// Arr
36300 61 6e 67 65 73 20 66 6f 72 20 74 68 65 20 73 70  anges for the sp
36310 65 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65  ecified error me
36320 73 73 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63  ssage to be plac
36330 65 64 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20  ed into the..   
36340 20 20 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67       /// zErrMsg
36350 20 66 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69   field of a sqli
36360 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
36370 20 73 74 72 75 63 74 75 72 65 2c 20 66 72 65 65   structure, free
36380 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
36390 20 2f 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72   /// existing er
363a0 72 6f 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20  ror message, if 
363b0 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  any...        //
363c0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
363d0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
363e0 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
363f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
36400 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
36410 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a  teModule" /> obj
36420 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20  ect instance to 
36430 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20  be used...      
36440 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
36450 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
36460 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
36470 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
36480 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
36490 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
364a0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
364b0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
364c0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
364d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
364e0 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72 72 6f 72  m name="logError
364f0 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  s">..        ///
36500 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69   Non-zero if thi
36510 73 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  s error message 
36520 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20 6c  should also be l
36530 6f 67 67 65 64 20 75 73 69 6e 67 20 74 68 65 0d  ogged using the.
36540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
36550 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4c 6f  e cref="SQLiteLo
36560 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20  g" /> class...  
36570 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
36580 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
36590 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
365a0 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
365b0 2f 20 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73  / The error mess
365c0 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  age...        //
365d0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
365e0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
365f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
36600 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63  on-zero upon suc
36610 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  cess...        /
36620 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
36630 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
36640 74 61 74 69 63 20 62 6f 6f 6c 20 53 65 74 54 61  tatic bool SetTa
36650 62 6c 65 45 72 72 6f 72 28 0d 0a 20 20 20 20 20  bleError(..     
36660 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64         SQLiteMod
36670 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20  ule module,..   
36680 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
36690 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
366a0 20 20 20 20 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f      bool logErro
366b0 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs,..           
366c0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
366d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
366e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
366f0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
36700 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36710 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 67           if (log
36720 45 72 72 6f 72 73 29 0d 0a 20 20 20 20 20 20 20  Errors)..       
36730 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
36740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36750 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
36760 73 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72  sage(SQLiteError
36770 43 6f 64 65 2e 45 72 72 6f 72 2c 0d 0a 20 20 20  Code.Error,..   
36780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36790 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
367a0 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43  at(CultureInfo.C
367b0 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
367c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367d0 20 20 20 20 20 20 20 20 22 56 69 72 74 75 61 6c          "Virtual
367e0 20 74 61 62 6c 65 20 65 72 72 6f 72 3a 20 7b 30   table error: {0
367f0 7d 22 2c 20 65 72 72 6f 72 29 29 3b 20 2f 2a 20  }", error)); /* 
36800 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
36810 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
36820 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
36830 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
36840 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
36860 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
36870 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36880 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
36890 56 74 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  Vtab == IntPtr.Z
368a0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
368b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
368c0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
368d0 20 20 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20     int offset = 
368e0 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
368f0 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74    offset = SQLit
36900 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66  eMarshal.NextOff
36910 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 49 6e  setOf(offset, In
36920 74 50 74 72 2e 53 69 7a 65 2c 0d 0a 20 20 20 20  tPtr.Size,..    
36930 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65              size
36940 6f 66 28 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20  of(int));....   
36950 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
36960 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e  = SQLiteMarshal.
36970 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66  NextOffsetOf(off
36980 73 65 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  set, sizeof(int)
36990 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
369a0 20 20 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 3b     IntPtr.Size);
369b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
369c0 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20  IntPtr pError = 
369d0 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65  SQLiteMarshal.Re
369e0 61 64 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20  adIntPtr(pVtab, 
369f0 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20  offset);....    
36a00 20 20 20 20 20 20 20 20 69 66 20 28 70 45 72 72          if (pErr
36a10 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  or != IntPtr.Zer
36a20 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
36a30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36a40 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
36a50 46 72 65 65 28 70 45 72 72 6f 72 29 3b 20 70 45  Free(pError); pE
36a60 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
36a70 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
36a80 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68       SQLiteMarsh
36a90 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28 70  al.WriteIntPtr(p
36aa0 56 74 61 62 2c 20 6f 66 66 73 65 74 2c 20 70 45  Vtab, offset, pE
36ab0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
36ac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36ad0 20 20 20 20 20 69 66 20 28 65 72 72 6f 72 20 3d       if (error =
36ae0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
36af0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
36b00 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
36b10 20 20 20 20 20 62 6f 6f 6c 20 73 75 63 63 65 73       bool succes
36b20 73 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  s = false;....  
36b30 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
36b40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
36b60 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72  rror = SQLiteStr
36b70 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
36b80 6f 6d 53 74 72 69 6e 67 28 65 72 72 6f 72 29 3b  omString(error);
36b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36ba0 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e    SQLiteMarshal.
36bb0 57 72 69 74 65 49 6e 74 50 74 72 28 70 56 74 61  WriteIntPtr(pVta
36bc0 62 2c 20 6f 66 66 73 65 74 2c 20 70 45 72 72 6f  b, offset, pErro
36bd0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
36be0 20 20 20 20 20 73 75 63 63 65 73 73 20 3d 20 74       success = t
36bf0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
36c00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
36c10 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
36c20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36c30 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73 75           if (!su
36c40 63 63 65 73 73 20 26 26 20 28 70 45 72 72 6f 72  ccess && (pError
36c50 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
36c60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36c70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36c80 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
36c90 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 45 72 72  Memory.Free(pErr
36ca0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
36cb0 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72            pError
36cc0 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
36cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36ce0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36cf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
36d00 20 72 65 74 75 72 6e 20 73 75 63 63 65 73 73 3b   return success;
36d10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
36d20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
36d70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
36d80 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
36d90 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73 20 66 6f   /// Arranges fo
36da0 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  r the specified 
36db0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f  error message to
36dc0 20 62 65 20 70 6c 61 63 65 64 20 69 6e 74 6f 20   be placed into 
36dd0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
36de0 20 7a 45 72 72 4d 73 67 20 66 69 65 6c 64 20 6f   zErrMsg field o
36df0 66 20 61 20 73 71 6c 69 74 65 33 5f 76 74 61 62  f a sqlite3_vtab
36e00 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
36e10 72 65 2c 20 66 72 65 65 69 6e 67 20 74 68 65 0d  re, freeing the.
36e20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 78 69  .        /// exi
36e30 73 74 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73  sting error mess
36e40 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20  age, if any...  
36e50 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
36e60 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
36e70 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
36e80 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  odule">..       
36e90 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
36ea0 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
36eb0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
36ec0 61 6e 63 65 20 74 6f 20 62 65 20 75 73 65 64 2e  ance to be used.
36ed0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
36ee0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
36ef0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
36f00 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20  "table">..      
36f10 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
36f20 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
36f30 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
36f40 63 74 20 69 6e 73 74 61 6e 63 65 20 75 73 65 64  ct instance used
36f50 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
36f60 20 6c 6f 6f 6b 75 70 20 74 68 65 20 6e 61 74 69   lookup the nati
36f70 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
36f80 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
36f90 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
36fa0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
36fb0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
36fc0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
36fd0 3d 22 6c 6f 67 45 72 72 6f 72 73 22 3e 0d 0a 20  ="logErrors">.. 
36fe0 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
36ff0 65 72 6f 20 69 66 20 74 68 69 73 20 65 72 72 6f  ero if this erro
37000 72 20 6d 65 73 73 61 67 65 20 73 68 6f 75 6c 64  r message should
37010 20 61 6c 73 6f 20 62 65 20 6c 6f 67 67 65 64 20   also be logged 
37020 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  using the..     
37030 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
37040 3d 22 53 51 4c 69 74 65 4c 6f 67 22 20 2f 3e 20  ="SQLiteLog" /> 
37050 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
37060 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
37070 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
37080 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a   name="error">..
37090 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
370a0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a  error message...
370b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
370c0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
370d0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
370e0 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
370f0 6f 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d  o upon success..
37100 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
37110 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
37120 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
37130 62 6f 6f 6c 20 53 65 74 54 61 62 6c 65 45 72 72  bool SetTableErr
37140 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or(..           
37150 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f   SQLiteModule mo
37160 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  dule,..         
37170 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
37180 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
37190 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c            bool l
371a0 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20  ogErrors,..     
371b0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72         string er
371c0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
371d0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
371e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
371f0 61 62 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  able == null).. 
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
37210 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
37220 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
37230 74 72 20 70 56 74 61 62 20 3d 20 74 61 62 6c 65  tr pVtab = table
37240 2e 4e 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a  .NativeHandle;..
37250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
37260 20 28 70 56 74 61 62 20 3d 3d 20 49 6e 74 50 74   (pVtab == IntPt
37270 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
37280 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37290 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
372a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 65 74        return Set
372b0 54 61 62 6c 65 45 72 72 6f 72 28 6d 6f 64 75 6c  TableError(modul
372c0 65 2c 20 70 56 74 61 62 2c 20 6c 6f 67 45 72 72  e, pVtab, logErr
372d0 6f 72 73 2c 20 65 72 72 6f 72 29 3b 0d 0a 20 20  ors, error);..  
372e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
372f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
37300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
37340 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
37350 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
37360 20 41 72 72 61 6e 67 65 73 20 66 6f 72 20 74 68   Arranges for th
37370 65 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f  e specified erro
37380 72 20 6d 65 73 73 61 67 65 20 74 6f 20 62 65 20  r message to be 
37390 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 0d  placed into the.
373a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 7a 45 72  .        /// zEr
373b0 72 4d 73 67 20 66 69 65 6c 64 20 6f 66 20 61 20  rMsg field of a 
373c0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
373d0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2c 20  ived structure, 
373e0 66 72 65 65 69 6e 67 20 74 68 65 0d 0a 20 20 20  freeing the..   
373f0 20 20 20 20 20 2f 2f 2f 20 65 78 69 73 74 69 6e       /// existin
37400 67 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2c  g error message,
37410 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20   if any...      
37420 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
37430 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
37440 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
37450 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
37460 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
37470 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e  SQLiteModule" />
37480 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
37490 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20   to be used...  
374a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
374b0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
374c0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75  <param name="pCu
374d0 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rsor">..        
374e0 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
374f0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
37500 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
37510 72 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  r derived struct
37520 75 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ure..        ///
37530 20 75 73 65 64 20 74 6f 20 67 65 74 20 74 68 65   used to get the
37540 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
37550 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
37560 74 61 62 20 64 65 72 69 76 65 64 0d 0a 20 20 20  tab derived..   
37570 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75       /// structu
37580 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
37590 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
375a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
375b0 6d 65 3d 22 6c 6f 67 45 72 72 6f 72 73 22 3e 0d  me="logErrors">.
375c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
375d0 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 65 72  -zero if this er
375e0 72 6f 72 20 6d 65 73 73 61 67 65 20 73 68 6f 75  ror message shou
375f0 6c 64 20 61 6c 73 6f 20 62 65 20 6c 6f 67 67 65  ld also be logge
37600 64 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  d using the..   
37610 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
37620 65 66 3d 22 53 51 4c 69 74 65 4c 6f 67 22 20 2f  ef="SQLiteLog" /
37630 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20  > class...      
37640 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
37650 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
37660 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e  am name="error">
37670 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
37680 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  e error message.
37690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
376a0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
376b0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
376c0 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
376d0 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65 73 73  ero upon success
376e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
376f0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
37700 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
37710 63 20 62 6f 6f 6c 20 53 65 74 43 75 72 73 6f 72  c bool SetCursor
37720 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20  Error(..        
37730 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
37740 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20   module,..      
37750 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
37760 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  rsor,..         
37770 20 20 20 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f 72     bool logError
37780 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
37790 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
377a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
377b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
377c0 20 20 20 20 69 66 20 28 70 43 75 72 73 6f 72 20      if (pCursor 
377d0 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
377e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
377f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
37800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
37810 74 50 74 72 20 70 56 74 61 62 20 3d 20 54 61 62  tPtr pVtab = Tab
37820 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 6d 6f 64  leFromCursor(mod
37830 75 6c 65 2c 20 70 43 75 72 73 6f 72 29 3b 0d 0a  ule, pCursor);..
37840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
37850 20 28 70 56 74 61 62 20 3d 3d 20 49 6e 74 50 74   (pVtab == IntPt
37860 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
37870 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37880 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
37890 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 65 74        return Set
378a0 54 61 62 6c 65 45 72 72 6f 72 28 6d 6f 64 75 6c  TableError(modul
378b0 65 2c 20 70 56 74 61 62 2c 20 6c 6f 67 45 72 72  e, pVtab, logErr
378c0 6f 72 73 2c 20 65 72 72 6f 72 29 3b 0d 0a 20 20  ors, error);..  
378d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
378e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
378f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
37930 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
37940 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
37950 20 41 72 72 61 6e 67 65 73 20 66 6f 72 20 74 68   Arranges for th
37960 65 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f  e specified erro
37970 72 20 6d 65 73 73 61 67 65 20 74 6f 20 62 65 20  r message to be 
37980 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 0d  placed into the.
37990 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 7a 45 72  .        /// zEr
379a0 72 4d 73 67 20 66 69 65 6c 64 20 6f 66 20 61 20  rMsg field of a 
379b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
379c0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2c 20  ived structure, 
379d0 66 72 65 65 69 6e 67 20 74 68 65 0d 0a 20 20 20  freeing the..   
379e0 20 20 20 20 20 2f 2f 2f 20 65 78 69 73 74 69 6e       /// existin
379f0 67 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2c  g error message,
37a00 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20   if any...      
37a10 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
37a20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
37a30 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
37a40 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
37a50 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
37a60 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e  SQLiteModule" />
37a70 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
37a80 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20   to be used...  
37a90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
37aa0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
37ab0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72  <param name="cur
37ac0 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
37ad0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
37ae0 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
37af0 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f  ableCursor" /> o
37b00 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 75  bject instance u
37b10 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  sed to..        
37b20 2f 2f 2f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 6e  /// lookup the n
37b30 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
37b40 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
37b50 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
37b60 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
37b70 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
37b80 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
37b90 61 6d 65 3d 22 6c 6f 67 45 72 72 6f 72 73 22 3e  ame="logErrors">
37ba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ..        /// No
37bb0 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 65  n-zero if this e
37bc0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 68 6f  rror message sho
37bd0 75 6c 64 20 61 6c 73 6f 20 62 65 20 6c 6f 67 67  uld also be logg
37be0 65 64 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20  ed using the..  
37bf0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
37c00 72 65 66 3d 22 53 51 4c 69 74 65 4c 6f 67 22 20  ref="SQLiteLog" 
37c10 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  /> class...     
37c20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
37c30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
37c40 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22  ram name="error"
37c50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
37c60 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
37c70 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
37c80 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
37c90 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
37ca0 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
37cb0 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65 73  zero upon succes
37cc0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
37cd0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
37ce0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
37cf0 69 63 20 62 6f 6f 6c 20 53 65 74 43 75 72 73 6f  ic bool SetCurso
37d00 72 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20  rError(..       
37d10 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
37d20 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,