System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 28944cf13fd6c3c7ea76fd7ed0ae2281ec9cd196:


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 65 74 68 6f 64 73 0d  nternal Methods.
2c10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
2c20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2c30: 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6c  /// Converts a l
2c40: 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20  ogical array of 
2c50: 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20  native pointers 
2c60: 74 6f 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  to native sqlite
2c70: 33 5f 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  3_value..       
2c80: 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20   /// structures 
2c90: 69 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 61  into a managed a
2ca0: 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72 65  rray of <see cre
2cb0: 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22 20  f="SQLiteValue" 
2cc0: 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
2cd0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73  object instances
2ce0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2cf0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2d00: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2d10: 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20  me="argc">..    
2d20: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
2d30: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
2d40: 6e 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 61 72  n the logical ar
2d50: 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20 73 71  ray of native sq
2d60: 6c 69 74 65 33 5f 76 61 6c 75 65 0d 0a 20 20 20  lite3_value..   
2d70: 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75       /// structu
2d80: 72 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  res...        //
2d90: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2da0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2db0: 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20  ame="argv">..   
2dc0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
2dd0: 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
2de0: 68 65 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79  he logical array
2df0: 20 6f 66 20 6e 61 74 69 76 65 20 73 71 6c 69 74   of native sqlit
2e00: 65 33 5f 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  e3_value..      
2e10: 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 73    /// structures
2e20: 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20   to convert...  
2e30: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2e40: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
2e50: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
2e60: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67     /// The manag
2e70: 65 64 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65  ed array of <see
2e80: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c   cref="SQLiteVal
2e90: 75 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ue" /> object in
2ea0: 73 74 61 6e 63 65 73 20 6f 72 0d 0a 20 20 20 20  stances or..    
2eb0: 20 20 20 20 2f 2f 2f 20 6e 75 6c 6c 20 75 70 6f      /// null upo
2ec0: 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20  n failure...    
2ed0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2ee0: 73 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  s>..        inte
2ef0: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
2f00: 74 65 56 61 6c 75 65 5b 5d 20 41 72 72 61 79 46  teValue[] ArrayF
2f10: 72 6f 6d 53 69 7a 65 41 6e 64 49 6e 74 50 74 72  romSizeAndIntPtr
2f20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  (..            i
2f30: 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
2f40: 20 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67        IntPtr arg
2f50: 76 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  v..            )
2f60: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2f70: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67           if (arg
2f80: 63 20 3c 20 30 29 0d 0a 20 20 20 20 20 20 20 20  c < 0)..        
2f90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
2fa0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
2fb0: 20 20 20 20 69 66 20 28 61 72 67 76 20 3d 3d 20      if (argv == 
2fc0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2fe0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
2ff0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
3000: 56 61 6c 75 65 5b 5d 20 72 65 73 75 6c 74 20 3d  Value[] result =
3010: 20 6e 65 77 20 53 51 4c 69 74 65 56 61 6c 75 65   new SQLiteValue
3020: 5b 61 72 67 63 5d 3b 0d 0a 0d 0a 20 20 20 20 20  [argc];....     
3030: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
3040: 69 6e 64 65 78 20 3d 20 30 2c 20 6f 66 66 73 65  index = 0, offse
3050: 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  t = 0;..        
3060: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
3070: 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74  x < result.Lengt
3080: 68 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h;..            
3090: 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 2c          index++,
30a0: 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74   offset += IntPt
30b0: 72 2e 53 69 7a 65 29 0d 0a 20 20 20 20 20 20 20  r.Size)..       
30c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30d0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
30e0: 41 72 67 20 3d 20 53 51 4c 69 74 65 4d 61 72 73  Arg = SQLiteMars
30f0: 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 61  hal.ReadIntPtr(a
3100: 72 67 76 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d  rgv, offset);...
3110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3120: 20 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d   result[index] =
3130: 20 28 70 41 72 67 20 21 3d 20 49 6e 74 50 74 72   (pArg != IntPtr
3140: 2e 5a 65 72 6f 29 20 3f 0d 0a 20 20 20 20 20 20  .Zero) ?..      
3150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
3160: 77 20 53 51 4c 69 74 65 56 61 6c 75 65 28 70 41  w SQLiteValue(pA
3170: 72 67 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20  rg) : null;..   
3180: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3190: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31a0: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
31b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
31c0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
31d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
31e0: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
3220: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53        #region IS
3230: 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c  QLiteNativeHandl
3240: 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  e Members..     
3250: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3260: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65  ..        /// Re
3270: 74 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c  turns the underl
3280: 79 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69  ying SQLite nati
3290: 76 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69  ve handle associ
32a0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a  ated with this..
32b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65          /// obje
32c0: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
32d0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
32e0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
32f0: 62 6c 69 63 20 49 6e 74 50 74 72 20 4e 61 74 69  blic IntPtr Nati
3300: 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20  veHandle..      
3310: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3320: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 56   get { return pV
3330: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
3340: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
3350: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
3360: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3370: 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
33b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
33c0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
33d0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
33e0: 62 6f 6f 6c 20 70 65 72 73 69 73 74 65 64 3b 0d  bool persisted;.
33f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
3400: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3410: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d  /// Returns non-
3420: 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61 74 69  zero if the nati
3430: 76 65 20 53 51 4c 69 74 65 20 76 61 6c 75 65 20  ve SQLite value 
3440: 68 61 73 20 62 65 65 6e 20 73 75 63 63 65 73 73  has been success
3450: 66 75 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f  fully..        /
3460: 2f 2f 20 70 65 72 73 69 73 74 65 64 20 61 73 20  // persisted as 
3470: 61 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 20  a managed value 
3480: 77 69 74 68 69 6e 20 74 68 69 73 20 6f 62 6a 65  within this obje
3490: 63 74 20 69 6e 73 74 61 6e 63 65 20 28 69 2e 65  ct instance (i.e
34a0: 2e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  . the..        /
34b0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 56 61  // <see cref="Va
34c0: 6c 75 65 22 20 2f 3e 20 70 72 6f 70 65 72 74 79  lue" /> property
34d0: 20 6d 61 79 20 74 68 65 6e 20 62 65 20 72 65 61   may then be rea
34e0: 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 29 2e  d successfully).
34f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
3500: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
3510: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65    public bool Pe
3520: 72 73 69 73 74 65 64 0d 0a 20 20 20 20 20 20 20  rsisted..       
3530: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3540: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 65 72  get { return per
3550: 73 69 73 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20  sisted; }..     
3560: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
35c0: 20 20 20 70 72 69 76 61 74 65 20 6f 62 6a 65 63     private objec
35d0: 74 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  t value;..      
35e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
35f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20  .        /// If 
3600: 74 68 65 20 6d 61 6e 61 67 65 64 20 76 61 6c 75  the managed valu
3610: 65 20 66 6f 72 20 74 68 69 73 20 6f 62 6a 65 63  e for this objec
3620: 74 20 69 6e 73 74 61 6e 63 65 20 69 73 20 61 76  t instance is av
3630: 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 20 69 74  ailable (i.e. it
3640: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61  ..        /// ha
3650: 73 20 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c  s been previousl
3660: 79 20 70 65 72 73 69 73 74 65 64 20 76 69 61 20  y persisted via 
3670: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 50  the <see cref="P
3680: 65 72 73 69 73 74 22 20 2f 3e 29 20 6d 65 74 68  ersist" />) meth
3690: 6f 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od,..        ///
36a0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 73 20 72   that value is r
36b0: 65 74 75 72 6e 65 64 3b 20 6f 74 68 65 72 77 69  eturned; otherwi
36c0: 73 65 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  se, an exception
36d0: 20 69 73 20 74 68 72 6f 77 6e 2e 20 20 54 68 65   is thrown.  The
36e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65  ..        /// re
36f0: 74 75 72 6e 65 64 20 76 61 6c 75 65 20 6d 61 79  turned value may
3700: 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20   be null...     
3710: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3720: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
3730: 63 20 6f 62 6a 65 63 74 20 56 61 6c 75 65 0d 0a  c object Value..
3740: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3750: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
3760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3770: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
3780: 70 65 72 73 69 73 74 65 64 29 0d 0a 20 20 20 20  persisted)..    
3790: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
37c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
37d0: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
37e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f0: 20 22 76 61 6c 75 65 20 77 61 73 20 6e 6f 74 20   "value was not 
3800: 70 65 72 73 69 73 74 65 64 22 29 3b 0d 0a 20 20  persisted");..  
3810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3820: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3830: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
3840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3850: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
3860: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
3870: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
3880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
38d0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68  gion Public Meth
38e0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
38f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3900: 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64      /// Gets and
3910: 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 79 70   returns the typ
3920: 65 20 61 66 66 69 6e 69 74 79 20 61 73 73 6f 63  e affinity assoc
3930: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
3940: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...        
3950: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
3960: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
3970: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
3980: 2f 2f 20 54 68 65 20 74 79 70 65 20 61 66 66 69  // The type affi
3990: 6e 69 74 79 20 61 73 73 6f 63 69 61 74 65 64 20  nity associated 
39a0: 77 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e  with this value.
39b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
39c0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
39d0: 20 20 70 75 62 6c 69 63 20 54 79 70 65 41 66 66    public TypeAff
39e0: 69 6e 69 74 79 20 47 65 74 54 79 70 65 41 66 66  inity GetTypeAff
39f0: 69 6e 69 74 79 28 29 0d 0a 20 20 20 20 20 20 20  inity()..       
3a00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3a10: 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e  if (pValue == In
3a20: 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72  tPtr.Zero) retur
3a30: 6e 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  n TypeAffinity.N
3a40: 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  one;..          
3a50: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
3a60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3a70: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
3a80: 70 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20  pValue);..      
3a90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
3aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3af0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3b00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74  .        /// Get
3b10: 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
3b20: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
3b30: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
3b40: 68 20 74 68 69 73 20 76 61 6c 75 65 2c 20 69 66  h this value, if
3b50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 74  ..        /// it
3b60: 20 72 65 66 65 72 73 20 74 6f 20 61 20 55 54 46   refers to a UTF
3b70: 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e  -8 encoded strin
3b80: 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  g...        /// 
3b90: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3ba0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
3bb0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
3bc0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
3bd0: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
3be0: 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20  th this value.  
3bf0: 54 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c  The returned val
3c00: 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ue..        /// 
3c10: 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a 20 20  may be zero...  
3c20: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
3c30: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
3c40: 62 6c 69 63 20 69 6e 74 20 47 65 74 42 79 74 65  blic int GetByte
3c50: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s()..        {..
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3c70: 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72  pValue == IntPtr
3c80: 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 30 3b  .Zero) return 0;
3c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
3ca0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
3cb0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3cc0: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61  _value_bytes(pVa
3cd0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
3ce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
3cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
3d40: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
3d50: 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61        /// Gets a
3d60: 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c  nd returns the <
3d70: 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22  see cref="Int32"
3d80: 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77   /> associated w
3d90: 69 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20  ith this..      
3da0: 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20    /// value...  
3db0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
3dc0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
3dd0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
3de0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
3df0: 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f  e cref="Int32" /
3e00: 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  > associated wit
3e10: 68 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20  h this value... 
3e20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
3e30: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
3e40: 75 62 6c 69 63 20 69 6e 74 20 47 65 74 49 6e 74  ublic int GetInt
3e50: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
3e60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
3e70: 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e  Value == IntPtr.
3e80: 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 64 65 66  Zero) return def
3e90: 61 75 6c 74 28 69 6e 74 29 3b 0d 0a 20 20 20 20  ault(int);..    
3ea0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
3eb0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3ec0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
3ed0: 5f 69 6e 74 28 70 56 61 6c 75 65 29 3b 0d 0a 20  _int(pValue);.. 
3ee0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3ef0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3f40: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
3f50: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
3f60: 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72  / Gets and retur
3f70: 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ns the <see cref
3f80: 3d 22 49 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f  ="Int64" /> asso
3f90: 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20  ciated with..   
3fa0: 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 76 61       /// this va
3fb0: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
3fc0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3fd0: 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
3fe0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
3ff0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
4000: 49 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f 63 69  Int64" /> associ
4010: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76  ated with this v
4020: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
4030: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
4040: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6c 6f         public lo
4050: 6e 67 20 47 65 74 49 6e 74 36 34 28 29 0d 0a 20  ng GetInt64().. 
4060: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4070: 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65        if (pValue
4080: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
4090: 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 28   return default(
40a0: 6c 6f 6e 67 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  long);....#if !P
40b0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
40c0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
40d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
40e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
40f0: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69  .sqlite3_value_i
4100: 6e 74 36 34 28 70 56 61 6c 75 65 29 3b 0d 0a 23  nt64(pValue);..#
4110: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
4120: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
4130: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a     long value;..
4140: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
4150: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4160: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
4170: 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 56 61 6c  t64_interop(pVal
4180: 75 65 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d  ue, out value);.
4190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
41a0: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73  urn value;..#els
41b0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  e..            t
41c0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
41d0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
41e0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
41f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4200: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4210: 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
4250: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
4260: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
4270: 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73  Gets and returns
4280: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
4290: 44 6f 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63  Double" /> assoc
42a0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d  iated with this.
42b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c  .        /// val
42c0: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
42d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
42e0: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
42f0: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
4300: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44  The <see cref="D
4310: 6f 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63 69  ouble" /> associ
4320: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76  ated with this v
4330: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
4340: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
4350: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 64 6f         public do
4360: 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 29  uble GetDouble()
4370: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4380: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61           if (pVa
4390: 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  lue == IntPtr.Ze
43a0: 72 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61 75  ro) return defau
43b0: 6c 74 28 64 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 23  lt(double);....#
43c0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
43d0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
43e0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
43f0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
4400: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
4410: 6c 75 65 5f 64 6f 75 62 6c 65 28 70 56 61 6c 75  lue_double(pValu
4420: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
4430: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
4440: 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20           double 
4450: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
4460: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
4470: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4480: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74  value_double_int
4490: 65 72 6f 70 28 70 56 61 6c 75 65 2c 20 6f 75 74  erop(pValue, out
44a0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
44b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
44c0: 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ue;..#else..    
44d0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
44e0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
44f0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
4500: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
4510: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
4520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
4570: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4580: 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e       /// Gets an
4590: 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73  d returns the <s
45a0: 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22  ee cref="String"
45b0: 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77   /> associated w
45c0: 69 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20  ith this..      
45d0: 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20    /// value...  
45e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
45f0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
4600: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
4610: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
4620: 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22 20  e cref="String" 
4630: 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  /> associated wi
4640: 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20  th this value.  
4650: 54 68 65 20 76 61 6c 75 65 20 69 73 0d 0a 20 20  The value is..  
4660: 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72        /// conver
4670: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 55 54 46  ted from the UTF
4680: 2d 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f  -8 encoding prio
4690: 72 20 74 6f 20 62 65 69 6e 67 20 72 65 74 75 72  r to being retur
46a0: 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ned...        //
46b0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
46c0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
46d0: 69 6e 67 20 47 65 74 53 74 72 69 6e 67 28 29 0d  ing GetString().
46e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
46f0: 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
4700: 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
4710: 6f 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d  o) return null;.
4720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4730: 75 72 6e 20 53 51 4c 69 74 65 53 74 72 69 6e 67  urn SQLiteString
4740: 2e 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49  .StringFromUtf8I
4750: 6e 74 50 74 72 28 70 56 61 6c 75 65 2c 20 47 65  ntPtr(pValue, Ge
4760: 74 42 79 74 65 73 28 29 29 3b 0d 0a 20 20 20 20  tBytes());..    
4770: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4780: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
47d0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
47e0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47  >..        /// G
47f0: 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ets and returns 
4800: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 42  the <see cref="B
4810: 79 74 65 22 20 2f 3e 20 61 72 72 61 79 20 61 73  yte" /> array as
4820: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
4830: 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
4840: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...        
4850: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
4860: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
4870: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
4880: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
4890: 3d 22 42 79 74 65 22 20 2f 3e 20 61 72 72 61 79  ="Byte" /> array
48a0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
48b0: 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20   this value...  
48c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
48d0: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
48e0: 62 6c 69 63 20 62 79 74 65 5b 5d 20 47 65 74 42  blic byte[] GetB
48f0: 6c 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  lob()..        {
4900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
4910: 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50   (pValue == IntP
4920: 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20  tr.Zero) return 
4930: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
4940: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
4950: 42 79 74 65 73 2e 46 72 6f 6d 49 6e 74 50 74 72  Bytes.FromIntPtr
4960: 28 70 56 61 6c 75 65 2c 20 47 65 74 42 79 74 65  (pValue, GetByte
4970: 73 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  s());..        }
4980: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
4990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
49e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
49f0: 20 20 20 20 20 20 2f 2f 2f 20 55 73 65 73 20 74        /// Uses t
4a00: 68 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20  he native value 
4a10: 68 61 6e 64 6c 65 20 74 6f 20 6f 62 74 61 69 6e  handle to obtain
4a20: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 6d   and store the m
4a30: 61 6e 61 67 65 64 20 76 61 6c 75 65 0d 0a 20 20  anaged value..  
4a40: 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 74 68        /// for th
4a50: 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
4a60: 63 65 2c 20 74 68 75 73 20 73 61 76 69 6e 67 20  ce, thus saving 
4a70: 69 74 20 66 6f 72 20 6c 61 74 65 72 20 75 73 65  it for later use
4a80: 2e 20 20 54 68 65 20 74 79 70 65 0d 0a 20 20 20  .  The type..   
4a90: 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20       /// of the 
4aa0: 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 20 69 73  managed value is
4ab0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
4ac0: 68 65 20 74 79 70 65 20 61 66 66 69 6e 69 74 79  he type affinity
4ad0: 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
4ae0: 20 2f 2f 2f 20 6e 61 74 69 76 65 20 76 61 6c 75   /// native valu
4af0: 65 2e 20 20 49 66 20 74 68 65 20 74 79 70 65 20  e.  If the type 
4b00: 61 66 66 69 6e 69 74 79 20 69 73 20 6e 6f 74 20  affinity is not 
4b10: 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 74 68  recognized by th
4b20: 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
4b30: 6d 65 74 68 6f 64 2c 20 6e 6f 20 77 6f 72 6b 20  method, no work 
4b40: 69 73 20 64 6f 6e 65 20 61 6e 64 20 66 61 6c 73  is done and fals
4b50: 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0d 0a  e is returned...
4b60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
4b70: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
4b80: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
4b90: 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
4ba0: 65 72 6f 20 69 66 20 74 68 65 20 6e 61 74 69 76  ero if the nativ
4bb0: 65 20 76 61 6c 75 65 20 77 61 73 20 70 65 72 73  e value was pers
4bc0: 69 73 74 65 64 20 73 75 63 63 65 73 73 66 75 6c  isted successful
4bd0: 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ly...        ///
4be0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
4bf0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
4c00: 20 50 65 72 73 69 73 74 28 29 0d 0a 20 20 20 20   Persist()..    
4c10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4c20: 20 20 20 73 77 69 74 63 68 20 28 47 65 74 54 79     switch (GetTy
4c30: 70 65 41 66 66 69 6e 69 74 79 28 29 29 0d 0a 20  peAffinity()).. 
4c40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
4c60: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
4c70: 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3a 0d 0a  Uninitialized:..
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
4cb0: 61 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  alue = null;..  
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cd0: 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74        PreventNat
4ce0: 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20  iveAccess();..  
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65        return (pe
4d10: 72 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b  rsisted = true);
4d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4d40: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79           case Ty
4d50: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
4d60: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
4d70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d90: 20 20 76 61 6c 75 65 20 3d 20 47 65 74 49 6e 74    value = GetInt
4da0: 36 34 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  64();..         
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
4dc0: 72 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65  reventNativeAcce
4dd0: 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ss();..         
4de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4df0: 65 74 75 72 6e 20 28 70 65 72 73 69 73 74 65 64  eturn (persisted
4e00: 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20   = true);..     
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4e30: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
4e40: 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20  ity.Double:..   
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75              valu
4e80: 65 20 3d 20 47 65 74 44 6f 75 62 6c 65 28 29 3b  e = GetDouble();
4e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ea0: 20 20 20 20 20 20 20 20 20 20 50 72 65 76 65 6e            Preven
4eb0: 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29 3b  tNativeAccess();
4ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ed0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4ee0: 20 28 70 65 72 73 69 73 74 65 64 20 3d 20 74 72   (persisted = tr
4ef0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
4f00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
4f20: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  e TypeAffinity.T
4f30: 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ext:..          
4f40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f60: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 47 65 74       value = Get
4f70: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20  String();..     
4f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f90: 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76 65     PreventNative
4fa0: 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20 20  Access();..     
4fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fc0: 20 20 20 72 65 74 75 72 6e 20 28 70 65 72 73 69     return (persi
4fd0: 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20  sted = true);.. 
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ff0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5000: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
5010: 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
5020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5030: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
5050: 6c 75 65 20 3d 20 47 65 74 42 79 74 65 73 28 29  lue = GetBytes()
5060: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5070: 20 20 20 20 20 20 20 20 20 20 20 50 72 65 76 65             Preve
5080: 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29  ntNativeAccess()
5090: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
50a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
50b0: 6e 20 28 70 65 72 73 69 73 74 65 64 20 3d 20 74  n (persisted = t
50c0: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
50d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
50e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
50f0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
5100: 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20 20  Null:..         
5110: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5130: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 44 42        value = DB
5140: 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
5150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5160: 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69       PreventNati
5170: 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20  veAccess();..   
5180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5190: 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72       return (per
51a0: 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d  sisted = true);.
51b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
51c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
51d0: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
51e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
51f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5210: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
5220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5230: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5240: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
5250: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
5260: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
5270: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5280: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5290: 2f 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 0d 0a 0d  /////////////...
52d0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
52e0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
52f0: 6e 74 4f 70 20 45 6e 75 6d 65 72 61 74 69 6f 6e  ntOp Enumeration
5300: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5310: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
5320: 73 65 20 61 72 65 20 74 68 65 20 61 6c 6c 6f 77  se are the allow
5330: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
5340: 65 20 6f 70 65 72 61 74 6f 72 73 20 74 68 61 74  e operators that
5350: 20 61 72 65 20 70 61 72 74 20 6f 66 20 61 0d 0a   are part of a..
5360: 20 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 61 69      /// constrai
5370: 6e 74 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57  nt term in the W
5380: 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61  HERE clause of a
5390: 20 71 75 65 72 79 20 74 68 61 74 20 75 73 65 73   query that uses
53a0: 20 61 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20   a virtual..    
53b0: 2f 2f 2f 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  /// table...    
53c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
53d0: 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20      public enum 
53e0: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
53f0: 72 61 69 6e 74 4f 70 20 3a 20 62 79 74 65 0d 0a  raintOp : byte..
5400: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
5410: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
5420: 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76        /// This v
5430: 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20  alue represents 
5440: 74 68 65 20 65 71 75 61 6c 69 74 79 20 6f 70 65  the equality ope
5450: 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  rator...        
5460: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5470: 20 20 20 20 20 20 20 20 45 71 75 61 6c 54 6f 20          EqualTo 
5480: 3d 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 2,....        
5490: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
54a0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
54b0: 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73  value represents
54c0: 20 74 68 65 20 67 72 65 61 74 65 72 20 74 68 61   the greater tha
54d0: 6e 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20  n operator...   
54e0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
54f0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72 65  ry>..        Gre
5500: 61 74 65 72 54 68 61 6e 20 3d 20 34 2c 0d 0a 0d  aterThan = 4,...
5510: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
5520: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
5530: 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72  /// This value r
5540: 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 65  epresents the le
5550: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
5560: 20 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20   to operator... 
5570: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
5580: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 4c  mary>..        L
5590: 65 73 73 54 68 61 6e 4f 72 45 71 75 61 6c 54 6f  essThanOrEqualTo
55a0: 20 3d 20 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 20   = 8,....       
55b0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
55c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
55d0: 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74   value represent
55e0: 73 20 74 68 65 20 6c 65 73 73 20 74 68 61 6e 20  s the less than 
55f0: 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20  operator...     
5600: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5610: 3e 0d 0a 20 20 20 20 20 20 20 20 4c 65 73 73 54  >..        LessT
5620: 68 61 6e 20 3d 20 31 36 2c 0d 0a 0d 0a 20 20 20  han = 16,....   
5630: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
5640: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
5650: 54 68 69 73 20 76 61 6c 75 65 20 72 65 70 72 65  This value repre
5660: 73 65 6e 74 73 20 74 68 65 20 67 72 65 61 74 65  sents the greate
5670: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
5680: 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20  to operator...  
5690: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
56a0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72  ary>..        Gr
56b0: 65 61 74 65 72 54 68 61 6e 4f 72 45 71 75 61 6c  eaterThanOrEqual
56c0: 54 6f 20 3d 20 33 32 2c 0d 0a 0d 0a 20 20 20 20  To = 32,....    
56d0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
56e0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
56f0: 68 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73  his value repres
5700: 65 6e 74 73 20 74 68 65 20 4d 41 54 43 48 20 6f  ents the MATCH o
5710: 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20  perator...      
5720: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5730: 0d 0a 20 20 20 20 20 20 20 20 4d 61 74 63 68 20  ..        Match 
5740: 3d 20 36 34 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  = 64..    }..   
5750: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
5760: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5770: 2f 2f 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 0d 0a  //////////////..
57b0: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
57c0: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
57d0: 69 6e 74 20 48 65 6c 70 65 72 20 43 6c 61 73 73  int Helper Class
57e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
57f0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
5800: 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e  s class represen
5810: 74 73 20 74 68 65 20 6e 61 74 69 76 65 20 73 71  ts the native sq
5820: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
5830: 74 72 61 69 6e 74 20 73 74 72 75 63 74 75 72 65  traint structure
5840: 0d 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74  ..    /// from t
5850: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
5860: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f  ibrary...    ///
5870: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5880: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
5890: 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78  lass SQLiteIndex
58a0: 43 6f 6e 73 74 72 61 69 6e 74 0d 0a 20 20 20 20  Constraint..    
58b0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
58c0: 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73  on Internal Cons
58d0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
58e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
58f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
5900: 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
5910: 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
5920: 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63  s using the spec
5930: 69 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20 20  ified native..  
5940: 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
5950: 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69  3_index_constrai
5960: 6e 74 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  nt structure... 
5970: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
5980: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
5990: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
59a0: 63 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20  constraint">..  
59b0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
59c0: 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64  tive sqlite3_ind
59d0: 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 73 74  ex_constraint st
59e0: 72 75 63 74 75 72 65 20 74 6f 20 75 73 65 2e 0d  ructure to use..
59f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
5a00: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69  aram>..        i
5a10: 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e  nternal SQLiteIn
5a20: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 0d 0a  dexConstraint(..
5a30: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
5a40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5a50: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
5a60: 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61  nstraint constra
5a70: 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  int..           
5a80: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5a90: 3a 20 74 68 69 73 28 63 6f 6e 73 74 72 61 69 6e  : this(constrain
5aa0: 74 2e 69 43 6f 6c 75 6d 6e 2c 20 63 6f 6e 73 74  t.iColumn, const
5ab0: 72 61 69 6e 74 2e 6f 70 2c 20 63 6f 6e 73 74 72  raint.op, constr
5ac0: 61 69 6e 74 2e 75 73 61 62 6c 65 2c 0d 0a 20 20  aint.usable,..  
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ae0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 69 54 65 72   constraint.iTer
5af0: 6d 4f 66 66 73 65 74 29 0d 0a 20 20 20 20 20 20  mOffset)..      
5b00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5b10: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
5b20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5b30: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
5b40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
5b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
5ba0: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
5bb0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
5bc0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5bd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
5be0: 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
5bf0: 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
5c00: 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63  s using the spec
5c10: 69 66 69 65 64 20 66 69 65 6c 64 0d 0a 20 20 20  ified field..   
5c20: 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e       /// values.
5c30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5c40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
5c50: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5c60: 65 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20 20  e="iColumn">..  
5c70: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e        /// Column
5c80: 20 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73 69   on left-hand si
5c90: 64 65 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e 74  de of constraint
5ca0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
5cb0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
5cc0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5cd0: 3d 22 6f 70 22 3e 0d 0a 20 20 20 20 20 20 20 20  ="op">..        
5ce0: 2f 2f 2f 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f  /// Constraint o
5cf0: 70 65 72 61 74 6f 72 20 28 3c 73 65 65 20 63 72  perator (<see cr
5d00: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43  ef="SQLiteIndexC
5d10: 6f 6e 73 74 72 61 69 6e 74 4f 70 22 20 2f 3e 29  onstraintOp" />)
5d20: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
5d30: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
5d40: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5d50: 3d 22 75 73 61 62 6c 65 22 3e 0d 0a 20 20 20 20  ="usable">..    
5d60: 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20      /// True if 
5d70: 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 20  this constraint 
5d80: 69 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20 20 20  is usable...    
5d90: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
5da0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
5db0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 54 65 72 6d  aram name="iTerm
5dc0: 4f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20  Offset">..      
5dd0: 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72    /// Used inter
5de0: 6e 61 6c 6c 79 20 2d 20 3c 73 65 65 20 63 72 65  nally - <see cre
5df0: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
5e00: 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65  dModule.BestInde
5e10: 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  x" />..        /
5e20: 2f 2f 20 73 68 6f 75 6c 64 20 69 67 6e 6f 72 65  // should ignore
5e30: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
5e40: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
5e50: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 49   private SQLiteI
5e60: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 0d  ndexConstraint(.
5e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
5e80: 20 69 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20   iColumn,..     
5e90: 20 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64         SQLiteInd
5ea0: 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20 6f  exConstraintOp o
5eb0: 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p,..            
5ec0: 62 79 74 65 20 75 73 61 62 6c 65 2c 0d 0a 20 20  byte usable,..  
5ed0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 54            int iT
5ee0: 65 72 6d 4f 66 66 73 65 74 0d 0a 20 20 20 20 20  ermOffset..     
5ef0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
5f00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5f10: 20 74 68 69 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20   this.iColumn = 
5f20: 69 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20 20 20  iColumn;..      
5f30: 20 20 20 20 20 20 74 68 69 73 2e 6f 70 20 3d 20        this.op = 
5f40: 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op;..           
5f50: 20 74 68 69 73 2e 75 73 61 62 6c 65 20 3d 20 75   this.usable = u
5f60: 73 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  sable;..        
5f70: 20 20 20 20 74 68 69 73 2e 69 54 65 72 6d 4f 66      this.iTermOf
5f80: 66 73 65 74 20 3d 20 69 54 65 72 6d 4f 66 66 73  fset = iTermOffs
5f90: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  et;..        }..
5fa0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5fb0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
5fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6010: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46  #region Public F
6020: 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  ields..        /
6030: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6040: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e        /// Column
6050: 20 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73 69   on left-hand si
6060: 64 65 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e 74  de of constraint
6070: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
6080: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
6090: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 69 43     public int iC
60a0: 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  olumn;....      
60b0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
60c0: 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
6100: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
6110: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
6120: 6f 6e 73 74 72 61 69 6e 74 20 6f 70 65 72 61 74  onstraint operat
6130: 6f 72 20 28 3c 73 65 65 20 63 72 65 66 3d 22 53  or (<see cref="S
6140: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
6150: 61 69 6e 74 4f 70 22 20 2f 3e 29 2e 0d 0a 20 20  aintOp" />)...  
6160: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
6170: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
6180: 62 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65 78  blic SQLiteIndex
6190: 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20 6f 70 3b  ConstraintOp op;
61a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
61b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
6200: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6210: 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66       /// True if
6220: 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
6230: 20 69 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20 20   is usable...   
6240: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
6250: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
6260: 6c 69 63 20 62 79 74 65 20 75 73 61 62 6c 65 3b  lic byte usable;
6270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
6280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
62d0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
62e0: 20 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e       /// Used in
62f0: 74 65 72 6e 61 6c 6c 79 20 2d 20 3c 73 65 65 20  ternally - <see 
6300: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
6310: 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49  agedModule.BestI
6320: 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20  ndex" />..      
6330: 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 69 67 6e    /// should ign
6340: 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ore...        //
6350: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6360: 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74        public int
6370: 20 69 54 65 72 6d 4f 66 66 73 65 74 3b 0d 0a 20   iTermOffset;.. 
6380: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
6390: 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
63a0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
63b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6400: 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
6410: 65 49 6e 64 65 78 4f 72 64 65 72 42 79 20 48 65  eIndexOrderBy He
6420: 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  lper Class..    
6430: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6440: 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73     /// This clas
6450: 73 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  s represents the
6460: 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
6470: 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 73 74  index_orderby st
6480: 72 75 63 74 75 72 65 20 66 72 6f 6d 0d 0a 20 20  ructure from..  
6490: 20 20 2f 2f 2f 20 74 68 65 20 53 51 4c 69 74 65    /// the SQLite
64a0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
64b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
64c0: 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  y>..    public s
64d0: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
64e0: 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 0d 0a  teIndexOrderBy..
64f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
6500: 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20  region Internal 
6510: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
6520: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
6530: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
6540: 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
6550: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
6560: 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20  class using the 
6570: 73 70 65 63 69 66 69 65 64 20 6e 61 74 69 76 65  specified native
6580: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
6590: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65  lite3_index_orde
65a0: 72 62 79 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  rby structure...
65b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
65c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
65d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
65e0: 22 6f 72 64 65 72 42 79 22 3e 0d 0a 20 20 20 20  "orderBy">..    
65f0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
6600: 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ve sqlite3_index
6610: 5f 6f 72 64 65 72 62 79 20 73 74 72 75 63 74 75  _orderby structu
6620: 72 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20  re to use...    
6630: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6640: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
6650: 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72  al SQLiteIndexOr
6660: 64 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20  derBy(..        
6670: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
6680: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6690: 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f 72  index_orderby or
66a0: 64 65 72 42 79 0d 0a 20 20 20 20 20 20 20 20 20  derBy..         
66b0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
66c0: 20 20 3a 20 74 68 69 73 28 6f 72 64 65 72 42 79    : this(orderBy
66d0: 2e 69 43 6f 6c 75 6d 6e 2c 20 6f 72 64 65 72 42  .iColumn, orderB
66e0: 79 2e 64 65 73 63 29 0d 0a 20 20 20 20 20 20 20  y.desc)..       
66f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6700: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
6710: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6720: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
6730: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
6740: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
6780: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
6790: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
67a0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
67b0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
67c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
67d0: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
67e0: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
67f0: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
6800: 66 69 65 64 20 66 69 65 6c 64 0d 0a 20 20 20 20  fied field..    
6810: 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d      /// values..
6820: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
6830: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
6840: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
6850: 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20 20 20  ="iColumn">..   
6860: 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20       /// Column 
6870: 6e 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20  number...       
6880: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
6890: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
68a0: 6d 20 6e 61 6d 65 3d 22 64 65 73 63 22 3e 0d 0a  m name="desc">..
68b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65          /// True
68c0: 20 66 6f 72 20 44 45 53 43 2e 20 20 46 61 6c 73   for DESC.  Fals
68d0: 65 20 66 6f 72 20 41 53 43 2e 0d 0a 20 20 20 20  e for ASC...    
68e0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
68f0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
6900: 65 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  e SQLiteIndexOrd
6910: 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20 20  erBy(..         
6920: 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 2c 0d     int iColumn,.
6930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74  .            byt
6940: 65 20 64 65 73 63 0d 0a 20 20 20 20 20 20 20 20  e desc..        
6950: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
6960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
6970: 69 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20 69 43 6f  is.iColumn = iCo
6980: 6c 75 6d 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  lumn;..         
6990: 20 20 20 74 68 69 73 2e 64 65 73 63 20 3d 20 64     this.desc = d
69a0: 65 73 63 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  esc;..        }.
69b0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
69c0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
69d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6a20: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
6a30: 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20  Fields..        
6a40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6a50: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d         /// Colum
6a60: 6e 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20  n number...     
6a70: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
6a80: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
6a90: 63 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 0d 0a  c int iColumn;..
6aa0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
6ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
6b00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
6b10: 20 20 20 2f 2f 2f 20 54 72 75 65 20 66 6f 72 20     /// True for 
6b20: 44 45 53 43 2e 20 20 46 61 6c 73 65 20 66 6f 72  DESC.  False for
6b30: 20 41 53 43 2e 0d 0a 20 20 20 20 20 20 20 20 2f   ASC...        /
6b40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6b50: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 79         public by
6b60: 74 65 20 64 65 73 63 3b 0d 0a 20 20 20 20 20 20  te desc;..      
6b70: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
6b80: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
6b90: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
6ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
6bf0: 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65  egion SQLiteInde
6c00: 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  xConstraintUsage
6c10: 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20   Helper Class.. 
6c20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6c30: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63  ..    /// This c
6c40: 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20  lass represents 
6c50: 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74  the native sqlit
6c60: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
6c70: 69 6e 74 5f 75 73 61 67 65 0d 0a 20 20 20 20 2f  int_usage..    /
6c80: 2f 2f 20 73 74 72 75 63 74 75 72 65 20 66 72 6f  // structure fro
6c90: 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  m the SQLite cor
6ca0: 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...    
6cb0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6cc0: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
6cd0: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e  d class SQLiteIn
6ce0: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  dexConstraintUsa
6cf0: 67 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ge..    {..     
6d00: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72     #region Inter
6d10: 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  nal Constructors
6d20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
6d30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
6d40: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
6d50: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
6d60: 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20  his class using 
6d70: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61  the specified na
6d80: 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tive..        //
6d90: 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  / sqlite3_index_
6da0: 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65  constraint_usage
6db0: 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
6dc0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
6dd0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
6de0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
6df0: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22 3e 0d  nstraintUsage">.
6e00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
6e10: 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
6e20: 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74  index_constraint
6e30: 5f 75 73 61 67 65 20 73 74 72 75 63 74 75 72 65  _usage structure
6e40: 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20   to use...      
6e50: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
6e60: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
6e70: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
6e80: 74 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20 20  traintUsage(..  
6e90: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
6ea0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6eb0: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
6ec0: 74 72 61 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e  traint_usage con
6ed0: 73 74 72 61 69 6e 74 55 73 61 67 65 0d 0a 20 20  straintUsage..  
6ee0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
6ef0: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
6f00: 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2e  constraintUsage.
6f10: 61 72 67 76 49 6e 64 65 78 2c 20 63 6f 6e 73 74  argvIndex, const
6f20: 72 61 69 6e 74 55 73 61 67 65 2e 6f 6d 69 74 29  raintUsage.omit)
6f30: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6f40: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
6f50: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
6f60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
6f70: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
6f80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6f90: 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
6fd0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
6fe0: 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  ate Constructors
6ff0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
7000: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7010: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
7020: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
7030: 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20  his class using 
7040: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
7050: 65 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  eld..        ///
7060: 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20 20   values...      
7070: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7080: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
7090: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 49  aram name="argvI
70a0: 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  ndex">..        
70b0: 2f 2f 2f 20 49 66 20 67 72 65 61 74 65 72 20 74  /// If greater t
70c0: 68 61 6e 20 30 2c 20 63 6f 6e 73 74 72 61 69 6e  han 0, constrain
70d0: 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 72 67  t is part of arg
70e0: 76 20 74 6f 20 78 46 69 6c 74 65 72 2e 0d 0a 20  v to xFilter... 
70f0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
7100: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
7110: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 6d   <param name="om
7120: 69 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  it">..        //
7130: 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20  / Do not code a 
7140: 74 65 73 74 20 66 6f 72 20 74 68 69 73 20 63 6f  test for this co
7150: 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20  nstraint...     
7160: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
7170: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
7180: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
7190: 74 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20 20  traintUsage(..  
71a0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72            int ar
71b0: 67 76 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20  gvIndex,..      
71c0: 20 20 20 20 20 20 62 79 74 65 20 6f 6d 69 74 0d        byte omit.
71d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
71e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
71f0: 20 20 20 20 20 20 20 74 68 69 73 2e 61 72 67 76         this.argv
7200: 49 6e 64 65 78 20 3d 20 61 72 67 76 49 6e 64 65  Index = argvInde
7210: 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x;..            
7220: 74 68 69 73 2e 6f 6d 69 74 20 3d 20 6f 6d 69 74  this.omit = omit
7230: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
7240: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
7260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
72b0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69  region Public Fi
72c0: 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  elds..        //
72d0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
72e0: 20 20 20 20 20 2f 2f 2f 20 49 66 20 67 72 65 61       /// If grea
72f0: 74 65 72 20 74 68 61 6e 20 30 2c 20 63 6f 6e 73  ter than 0, cons
7300: 74 72 61 69 6e 74 20 69 73 20 70 61 72 74 20 6f  traint is part o
7310: 66 20 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65  f argv to xFilte
7320: 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
7330: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
7340: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 61      public int a
7350: 72 67 76 49 6e 64 65 78 3b 0d 0a 0d 0a 20 20 20  rgvIndex;....   
7360: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7370: 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
73b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
73c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
73d0: 2f 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61  // Do not code a
73e0: 20 74 65 73 74 20 66 6f 72 20 74 68 69 73 20 63   test for this c
73f0: 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20  onstraint...    
7400: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7410: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
7420: 69 63 20 62 79 74 65 20 6f 6d 69 74 3b 0d 0a 20  ic byte omit;.. 
7430: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7440: 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
7450: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
7460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
74b0: 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
74c0: 65 49 6e 64 65 78 49 6e 70 75 74 73 20 48 65 6c  eIndexInputs Hel
74d0: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f  per Class..    /
74e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
74f0: 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
7500: 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
7510: 76 61 72 69 6f 75 73 20 69 6e 70 75 74 73 20 70  various inputs p
7520: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 53  rovided by the S
7530: 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20  QLite core..    
7540: 2f 2f 2f 20 6c 69 62 72 61 72 79 20 74 6f 20 74  /// library to t
7550: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
7560: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
7570: 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e  le.BestIndex" />
7580: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f   method...    //
7590: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
75a0: 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20    public sealed 
75b0: 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65  class SQLiteInde
75c0: 78 49 6e 70 75 74 73 0d 0a 20 20 20 20 7b 0d 0a  xInputs..    {..
75d0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
75e0: 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72 75  Internal Constru
75f0: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f  ctors..        /
7600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
7610: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72        /// Constr
7620: 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ucts an instance
7630: 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d   of this class..
7640: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
7650: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7660: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7670: 3d 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22 3e 0d  ="nConstraint">.
7680: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
7690: 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20   number of <see 
76a0: 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
76b0: 78 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e 20  xConstraint" /> 
76c0: 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20  instances to..  
76d0: 20 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c        /// pre-al
76e0: 6c 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72  locate space for
76f0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7700: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
7710: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7720: 3d 22 6e 4f 72 64 65 72 42 79 22 3e 0d 0a 20 20  ="nOrderBy">..  
7730: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75        /// The nu
7740: 6d 62 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65  mber of <see cre
7750: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 72  f="SQLiteIndexOr
7760: 64 65 72 42 79 22 20 2f 3e 20 69 6e 73 74 61 6e  derBy" /> instan
7770: 63 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ces to..        
7780: 2f 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65  /// pre-allocate
7790: 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20   space for...   
77a0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
77b0: 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  >..        inter
77c0: 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 49  nal SQLiteIndexI
77d0: 6e 70 75 74 73 28 69 6e 74 20 6e 43 6f 6e 73 74  nputs(int nConst
77e0: 72 61 69 6e 74 2c 20 69 6e 74 20 6e 4f 72 64 65  raint, int nOrde
77f0: 72 42 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  rBy)..        {.
7800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
7810: 73 74 72 61 69 6e 74 73 20 3d 20 6e 65 77 20 53  straints = new S
7820: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
7830: 61 69 6e 74 5b 6e 43 6f 6e 73 74 72 61 69 6e 74  aint[nConstraint
7840: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
7850: 6f 72 64 65 72 42 79 73 20 3d 20 6e 65 77 20 53  orderBys = new S
7860: 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42  QLiteIndexOrderB
7870: 79 5b 6e 4f 72 64 65 72 42 79 5d 3b 0d 0a 20 20  y[nOrderBy];..  
7880: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7890: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
78a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
78b0: 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
78f0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
7900: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
7910: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ies..        pri
7920: 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78  vate SQLiteIndex
7930: 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 63 6f 6e  Constraint[] con
7940: 73 74 72 61 69 6e 74 73 3b 0d 0a 20 20 20 20 20  straints;..     
7950: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7960: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e  ..        /// An
7970: 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63   array of <see c
7980: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
7990: 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e 20 6f  Constraint" /> o
79a0: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 2c  bject instances,
79b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 61  ..        /// ea
79c0: 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6e  ch containing in
79d0: 66 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70 6c 69  formation suppli
79e0: 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74 65  ed by the SQLite
79f0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
7a00: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
7a10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7a20: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e 64  public SQLiteInd
7a30: 65 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 43  exConstraint[] C
7a40: 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 20  onstraints..    
7a50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7a60: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
7a70: 63 6f 6e 73 74 72 61 69 6e 74 73 3b 20 7d 0d 0a  constraints; }..
7a80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7a90: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7aa0: 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
7ae0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7af0: 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72  SQLiteIndexOrder
7b00: 42 79 5b 5d 20 6f 72 64 65 72 42 79 73 3b 0d 0a  By[] orderBys;..
7b10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
7b20: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
7b30: 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20 3c  // An array of <
7b40: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
7b50: 49 6e 64 65 78 4f 72 64 65 72 42 79 22 20 2f 3e  IndexOrderBy" />
7b60: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
7b70: 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s,..        /// 
7b80: 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20  each containing 
7b90: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70  information supp
7ba0: 6c 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 69  lied by the SQLi
7bb0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
7bc0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
7bd0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
7be0: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49    public SQLiteI
7bf0: 6e 64 65 78 4f 72 64 65 72 42 79 5b 5d 20 4f 72  ndexOrderBy[] Or
7c00: 64 65 72 42 79 73 0d 0a 20 20 20 20 20 20 20 20  derBys..        
7c10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
7c20: 65 74 20 7b 20 72 65 74 75 72 6e 20 6f 72 64 65  et { return orde
7c30: 72 42 79 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rBys; }..       
7c40: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
7c50: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
7c60: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
7c70: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
7c80: 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
7cd0: 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75  SQLiteIndexOutpu
7ce0: 74 73 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d  ts Helper Class.
7cf0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7d00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
7d10: 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74   class represent
7d20: 73 20 74 68 65 20 76 61 72 69 6f 75 73 20 6f 75  s the various ou
7d30: 74 70 75 74 73 20 70 72 6f 76 69 64 65 64 20 74  tputs provided t
7d40: 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  o the SQLite cor
7d50: 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61  e..    /// libra
7d60: 72 79 20 62 79 20 74 68 65 20 3c 73 65 65 20 63  ry by the <see c
7d70: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
7d80: 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e  gedModule.BestIn
7d90: 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  dex" /> method..
7da0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
7db0: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
7dc0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c  sealed class SQL
7dd0: 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73 0d  iteIndexOutputs.
7de0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7df0: 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c  #region Internal
7e00: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
7e10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
7e20: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
7e30: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
7e40: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
7e50: 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20   class...       
7e60: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7e70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
7e80: 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e 73 74  ram name="nConst
7e90: 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20  raint">..       
7ea0: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
7eb0: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
7ec0: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
7ed0: 69 6e 74 55 73 61 67 65 22 20 2f 3e 20 69 6e 73  intUsage" /> ins
7ee0: 74 61 6e 63 65 73 0d 0a 20 20 20 20 20 20 20 20  tances..        
7ef0: 2f 2f 2f 20 74 6f 20 70 72 65 2d 61 6c 6c 6f 63  /// to pre-alloc
7f00: 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a  ate space for...
7f10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
7f20: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  ram>..        in
7f30: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64  ternal SQLiteInd
7f40: 65 78 4f 75 74 70 75 74 73 28 69 6e 74 20 6e 43  exOutputs(int nC
7f50: 6f 6e 73 74 72 61 69 6e 74 29 0d 0a 20 20 20 20  onstraint)..    
7f60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7f70: 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61     constraintUsa
7f80: 67 65 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ges = new SQLite
7f90: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
7fa0: 73 61 67 65 5b 6e 43 6f 6e 73 74 72 61 69 6e 74  sage[nConstraint
7fb0: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  ];..        }.. 
7fc0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7fd0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
7fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8030: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
8040: 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
8050: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
8060: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
8070: 55 73 61 67 65 5b 5d 20 63 6f 6e 73 74 72 61 69  Usage[] constrai
8080: 6e 74 55 73 61 67 65 73 3b 0d 0a 20 20 20 20 20  ntUsages;..     
8090: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
80a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e  ..        /// An
80b0: 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63   array of <see c
80c0: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
80d0: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22  ConstraintUsage"
80e0: 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20   /> object..    
80f0: 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
8100: 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69  s, each containi
8110: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  ng information t
8120: 6f 20 62 65 20 73 75 70 70 6c 69 65 64 20 74 6f  o be supplied to
8130: 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20   the SQLite..   
8140: 20 20 20 20 20 2f 2f 2f 20 63 6f 72 65 20 6c 69       /// core li
8150: 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  brary...        
8160: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8170: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
8180: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
8190: 61 69 6e 74 55 73 61 67 65 5b 5d 20 43 6f 6e 73  aintUsage[] Cons
81a0: 74 72 61 69 6e 74 55 73 61 67 65 73 0d 0a 20 20  traintUsages..  
81b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
81c0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
81d0: 6e 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  n constraintUsag
81e0: 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  es; }..        }
81f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
8200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
8250: 72 69 76 61 74 65 20 69 6e 74 20 69 6e 64 65 78  rivate int index
8260: 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20  Number;..       
8270: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8280: 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62          /// Numb
8290: 65 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  er used to help 
82a0: 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c  identify the sel
82b0: 65 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54 68  ected index.  Th
82c0: 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20  is value will.. 
82d0: 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74 65 72         /// later
82e0: 20 62 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20   be provided to 
82f0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
8300: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
8310: 75 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e 0d 0a  ule.Filter" />..
8320: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68          /// meth
8330: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
8340: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8350: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
8360: 49 6e 64 65 78 4e 75 6d 62 65 72 0d 0a 20 20 20  IndexNumber..   
8370: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8380: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
8390: 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b 20 7d 0d   indexNumber; }.
83a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
83b0: 20 7b 20 69 6e 64 65 78 4e 75 6d 62 65 72 20 3d   { indexNumber =
83c0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
83d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
83e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8430: 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
8440: 67 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a  g indexString;..
8450: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
8460: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
8470: 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20 74  // String used t
8480: 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
8490: 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
84a0: 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ex.  This value 
84b0: 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  will..        //
84c0: 2f 20 6c 61 74 65 72 20 62 65 20 70 72 6f 76 69  / later be provi
84d0: 64 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20  ded to the <see 
84e0: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
84f0: 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65  agedModule.Filte
8500: 72 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  r" />..        /
8510: 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  // method...    
8520: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8530: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
8540: 69 63 20 73 74 72 69 6e 67 20 49 6e 64 65 78 53  ic string IndexS
8550: 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b  tring..        {
8560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
8570: 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 64 65 78  t { return index
8580: 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20  String; }..     
8590: 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 64         set { ind
85a0: 65 78 53 74 72 69 6e 67 20 3d 20 76 61 6c 75 65  exString = value
85b0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
85c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
85d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
8620: 76 61 74 65 20 69 6e 74 20 6e 65 65 64 54 6f 46  vate int needToF
8630: 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 3b 0d  reeIndexString;.
8640: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
8650: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
8660: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
8670: 74 68 65 20 69 6e 64 65 78 20 73 74 72 69 6e 67  the index string
8680: 20 6d 75 73 74 20 62 65 20 66 72 65 65 64 20 62   must be freed b
8690: 79 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  y the SQLite cor
86a0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  e..        /// l
86b0: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
86c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
86d0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
86e0: 69 6e 74 20 4e 65 65 64 54 6f 46 72 65 65 49 6e  int NeedToFreeIn
86f0: 64 65 78 53 74 72 69 6e 67 0d 0a 20 20 20 20 20  dexString..     
8700: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8710: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
8720: 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74  eedToFreeIndexSt
8730: 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ring; }..       
8740: 20 20 20 20 20 73 65 74 20 7b 20 6e 65 65 64 54       set { needT
8750: 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67  oFreeIndexString
8760: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
8770: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8780: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8790: 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
87d0: 20 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74       private int
87e0: 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64   orderByConsumed
87f0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
8800: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8810: 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 6f 75    /// True if ou
8820: 74 70 75 74 20 69 73 20 61 6c 72 65 61 64 79 20  tput is already 
8830: 6f 72 64 65 72 65 64 2e 0d 0a 20 20 20 20 20 20  ordered...      
8840: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8850: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
8860: 20 69 6e 74 20 4f 72 64 65 72 42 79 43 6f 6e 73   int OrderByCons
8870: 75 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 7b 0d  umed..        {.
8880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
8890: 20 7b 20 72 65 74 75 72 6e 20 6f 72 64 65 72 42   { return orderB
88a0: 79 43 6f 6e 73 75 6d 65 64 3b 20 7d 0d 0a 20 20  yConsumed; }..  
88b0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
88c0: 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20  orderByConsumed 
88d0: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
88e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
88f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8930: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8940: 20 20 20 20 70 72 69 76 61 74 65 20 64 6f 75 62      private doub
8950: 6c 65 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74  le estimatedCost
8960: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
8970: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8980: 20 20 2f 2f 2f 20 45 73 74 69 6d 61 74 65 64 20    /// Estimated 
8990: 63 6f 73 74 20 6f 66 20 75 73 69 6e 67 20 74 68  cost of using th
89a0: 69 73 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20  is index...     
89b0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
89c0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
89d0: 63 20 64 6f 75 62 6c 65 20 45 73 74 69 6d 61 74  c double Estimat
89e0: 65 64 43 6f 73 74 0d 0a 20 20 20 20 20 20 20 20  edCost..        
89f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
8a00: 65 74 20 7b 20 72 65 74 75 72 6e 20 65 73 74 69  et { return esti
8a10: 6d 61 74 65 64 43 6f 73 74 3b 20 7d 0d 0a 20 20  matedCost; }..  
8a20: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
8a30: 65 73 74 69 6d 61 74 65 64 43 6f 73 74 20 3d 20  estimatedCost = 
8a40: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
8a50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
8a60: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
8a70: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
8a80: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
8a90: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
8ae0: 20 53 51 4c 69 74 65 49 6e 64 65 78 20 48 65 6c   SQLiteIndex Hel
8af0: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f  per Class..    /
8b00: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
8b10: 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
8b20: 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
8b30: 76 61 72 69 6f 75 73 20 69 6e 70 75 74 73 20 61  various inputs a
8b40: 6e 64 20 6f 75 74 70 75 74 73 20 75 73 65 64 20  nd outputs used 
8b50: 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 2f 2f  with the..    //
8b60: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
8b70: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
8b80: 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20  e.BestIndex" /> 
8b90: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f  method...    ///
8ba0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8bb0: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
8bc0: 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78  lass SQLiteIndex
8bd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
8be0: 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61   #region Interna
8bf0: 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  l Constructors..
8c00: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
8c10: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
8c20: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e  // Constructs an
8c30: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
8c40: 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20  s class...      
8c50: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8c60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
8c70: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e 73  aram name="nCons
8c80: 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20  traint">..      
8c90: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
8ca0: 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53   of <see cref="S
8cb0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
8cc0: 61 69 6e 74 22 20 2f 3e 20 28 61 6e 64 0d 0a 20  aint" /> (and.. 
8cd0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
8ce0: 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
8cf0: 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  xConstraintUsage
8d00: 22 20 2f 3e 29 20 69 6e 73 74 61 6e 63 65 73 20  " />) instances 
8d10: 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
8d20: 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20 73 70 61  pre-allocate spa
8d30: 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20 20 20 20  ce for...       
8d40: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
8d50: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
8d60: 6d 20 6e 61 6d 65 3d 22 6e 4f 72 64 65 72 42 79  m name="nOrderBy
8d70: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
8d80: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73  The number of <s
8d90: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
8da0: 6e 64 65 78 4f 72 64 65 72 42 79 22 20 2f 3e 20  ndexOrderBy" /> 
8db0: 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20  instances to..  
8dc0: 20 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c        /// pre-al
8dd0: 6c 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72  locate space for
8de0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
8df0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
8e00: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
8e10: 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20  Index(..        
8e20: 20 20 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61      int nConstra
8e30: 69 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  int,..          
8e40: 20 20 69 6e 74 20 6e 4f 72 64 65 72 42 79 0d 0a    int nOrderBy..
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
8e60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8e70: 20 20 20 20 20 20 69 6e 70 75 74 73 20 3d 20 6e        inputs = n
8e80: 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e  ew SQLiteIndexIn
8e90: 70 75 74 73 28 6e 43 6f 6e 73 74 72 61 69 6e 74  puts(nConstraint
8ea0: 2c 20 6e 4f 72 64 65 72 42 79 29 3b 0d 0a 20 20  , nOrderBy);..  
8eb0: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
8ec0: 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49 6e  s = new SQLiteIn
8ed0: 64 65 78 4f 75 74 70 75 74 73 28 6e 43 6f 6e 73  dexOutputs(nCons
8ee0: 74 72 61 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20  traint);..      
8ef0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
8f00: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
8f10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8f20: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
8f60: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
8f70: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
8f80: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
8f90: 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75   SQLiteIndexInpu
8fa0: 74 73 20 69 6e 70 75 74 73 3b 0d 0a 20 20 20 20  ts inputs;..    
8fb0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8fc0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
8fd0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
8fe0: 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73 22  LiteIndexInputs"
8ff0: 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
9000: 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a  nce containing..
9010: 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
9020: 69 6e 70 75 74 73 20 74 6f 20 74 68 65 20 3c 73  inputs to the <s
9030: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
9040: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65  ManagedModule.Be
9050: 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20  stIndex" />..   
9060: 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e       /// method.
9070: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
9080: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
9090: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49    public SQLiteI
90a0: 6e 64 65 78 49 6e 70 75 74 73 20 49 6e 70 75 74  ndexInputs Input
90b0: 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  s..        {..  
90c0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
90d0: 72 65 74 75 72 6e 20 69 6e 70 75 74 73 3b 20 7d  return inputs; }
90e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
90f0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9140: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
9150: 65 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74  e SQLiteIndexOut
9160: 70 75 74 73 20 6f 75 74 70 75 74 73 3b 0d 0a 20  puts outputs;.. 
9170: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
9180: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
9190: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
91a0: 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70  "SQLiteIndexOutp
91b0: 75 74 73 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  uts" /> object i
91c0: 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69  nstance containi
91d0: 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
91e0: 74 68 65 20 6f 75 74 70 75 74 73 20 66 72 6f 6d  the outputs from
91f0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
9200: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
9210: 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20  dule.BestIndex" 
9220: 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
9230: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
9240: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
9250: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
9260: 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75  SQLiteIndexOutpu
9270: 74 73 20 4f 75 74 70 75 74 73 0d 0a 20 20 20 20  ts Outputs..    
9280: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9290: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
92a0: 6f 75 74 70 75 74 73 3b 20 7d 0d 0a 20 20 20 20  outputs; }..    
92b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
92c0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
92d0: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
92e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
92f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9330: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
9340: 6f 6e 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  on SQLiteVirtual
9350: 54 61 62 6c 65 20 42 61 73 65 20 43 6c 61 73 73  Table Base Class
9360: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
9370: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
9380: 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e  s class represen
9390: 74 73 20 61 20 6d 61 6e 61 67 65 64 20 76 69 72  ts a managed vir
93a0: 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
93b0: 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  mentation.  It i
93c0: 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e 6f 74 20 73  s..    /// not s
93d0: 65 61 6c 65 64 20 61 6e 64 20 73 68 6f 75 6c 64  ealed and should
93e0: 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
93f0: 62 61 73 65 20 63 6c 61 73 73 20 66 6f 72 20 61  base class for a
9400: 6e 79 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0d  ny user-defined.
9410: 0a 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c  .    /// virtual
9420: 20 74 61 62 6c 65 20 63 6c 61 73 73 65 73 20 69   table classes i
9430: 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e 20 6d 61  mplemented in ma
9440: 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20  naged code...   
9450: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
9460: 0a 20 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73  .    public clas
9470: 73 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  s SQLiteVirtualT
9480: 61 62 6c 65 20 3a 0d 0a 20 20 20 20 20 20 20 20  able :..        
9490: 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76      ISQLiteNativ
94a0: 65 48 61 6e 64 6c 65 2c 20 49 44 69 73 70 6f 73  eHandle, IDispos
94b0: 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c  able /* NOT SEAL
94c0: 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20  ED */..    {..  
94d0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
94e0: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
94f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
9500: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
9510: 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20 77 69  /// The index wi
9520: 74 68 69 6e 20 74 68 65 20 61 72 72 61 79 20 6f  thin the array o
9530: 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69 64  f strings provid
9540: 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ed to the..     
9550: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
9560: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
9570: 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f  Module.Create" /
9580: 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f  > and..        /
9590: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
95a0: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
95b0: 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  le.Connect" /> m
95c0: 65 74 68 6f 64 73 20 63 6f 6e 74 61 69 6e 69 6e  ethods containin
95d0: 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
95e0: 2f 2f 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d  // name of the m
95f0: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 69  odule implementi
9600: 6e 67 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  ng this virtual 
9610: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
9620: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9630: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
9640: 63 6f 6e 73 74 20 69 6e 74 20 4d 6f 64 75 6c 65  const int Module
9650: 4e 61 6d 65 49 6e 64 65 78 20 3d 20 30 3b 0d 0a  NameIndex = 0;..
9660: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
9670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96b0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
96c0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
96d0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65      /// The inde
96e0: 78 20 77 69 74 68 69 6e 20 74 68 65 20 61 72 72  x within the arr
96f0: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 70 72  ay of strings pr
9700: 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20  ovided to the.. 
9710: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
9720: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
9730: 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74  agedModule.Creat
9740: 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20  e" /> and..     
9750: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
9760: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
9770: 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20  Module.Connect" 
9780: 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f 6e 74 61  /> methods conta
9790: 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  ining the..     
97a0: 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66 20 74     /// name of t
97b0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
97c0: 61 69 6e 69 6e 67 20 74 68 69 73 20 76 69 72 74  aining this virt
97d0: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
97e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
97f0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
9800: 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 44 61  ate const int Da
9810: 74 61 62 61 73 65 4e 61 6d 65 49 6e 64 65 78 20  tabaseNameIndex 
9820: 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 1;....        
9830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9870: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9880: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
9890: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
98a0: 65 20 69 6e 64 65 78 20 77 69 74 68 69 6e 20 74  e index within t
98b0: 68 65 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  he array of stri
98c0: 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20  ngs provided to 
98d0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
98e0: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
98f0: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
9900: 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d  .Create" /> and.
9910: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
9920: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
9930: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e  anagedModule.Con
9940: 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73  nect" /> methods
9950: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d   containing the.
9960: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d  .        /// nam
9970: 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  e of the virtual
9980: 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
9990: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
99a0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
99b0: 20 63 6f 6e 73 74 20 69 6e 74 20 54 61 62 6c 65   const int Table
99c0: 4e 61 6d 65 49 6e 64 65 78 20 3d 20 32 3b 0d 0a  NameIndex = 2;..
99d0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
99e0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
99f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a30: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
9a40: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
9a50: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
9a60: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
9a70: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
9a80: 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
9a90: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
9aa0: 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
9ab0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9ac0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
9ad0: 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e  am name="argumen
9ae0: 74 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ts">..        //
9af0: 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 61  / The original a
9b00: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
9b10: 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d  provided to the.
9b20: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
9b30: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
9b40: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65  anagedModule.Cre
9b50: 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20  ate" /> and..   
9b60: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
9b70: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
9b80: 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74  edModule.Connect
9b90: 22 20 2f 3e 20 6d 65 74 68 6f 64 73 2e 0d 0a 20  " /> methods... 
9ba0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
9bb0: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
9bc0: 6c 69 63 20 53 51 4c 69 74 65 56 69 72 74 75 61  lic SQLiteVirtua
9bd0: 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20  lTable(..       
9be0: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
9bf0: 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20 20  guments..       
9c00: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9c10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
9c20: 68 69 73 2e 61 72 67 75 6d 65 6e 74 73 20 3d 20  his.arguments = 
9c30: 61 72 67 75 6d 65 6e 74 73 3b 0d 0a 20 20 20 20  arguments;..    
9c40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
9c50: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
9c60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9cb0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
9cc0: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
9cd0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
9ce0: 74 65 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75  te string[] argu
9cf0: 6d 65 6e 74 73 3b 0d 0a 20 20 20 20 20 20 20 20  ments;..        
9d00: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9d10: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f         /// The o
9d20: 72 69 67 69 6e 61 6c 20 61 72 72 61 79 20 6f 66  riginal array of
9d30: 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69 64 65   strings provide
9d40: 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  d to the..      
9d50: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
9d60: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
9d70: 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e  odule.Create" />
9d80: 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f   and..        //
9d90: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
9da0: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
9db0: 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  e.Connect" /> me
9dc0: 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20 20 20  thods...        
9dd0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9de0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
9df0: 69 72 74 75 61 6c 20 73 74 72 69 6e 67 5b 5d 20  irtual string[] 
9e00: 41 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20  Arguments..     
9e10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9e20: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
9e30: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
9e40: 61 72 67 75 6d 65 6e 74 73 3b 20 7d 0d 0a 20 20  arguments; }..  
9e50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9e60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9eb0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
9ec0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
9ed0: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
9ee0: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
9ef0: 74 69 6e 67 20 74 68 69 73 20 76 69 72 74 75 61  ting this virtua
9f00: 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
9f10: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9f20: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
9f30: 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20   virtual string 
9f40: 4d 6f 64 75 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  ModuleName..    
9f50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9f60: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
9f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9f80: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9f90: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
9fa0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9fb0: 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20 3d 20  g[] arguments = 
9fc0: 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20 20  Arguments;....  
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9fe0: 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21 3d 20   ((arguments != 
9ff0: 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61                (a
a010: 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68 20  rguments.Length 
a020: 3e 20 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65  > ModuleNameInde
a030: 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x))..           
a040: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a050: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
a060: 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 4d 6f 64  rn arguments[Mod
a070: 75 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a  uleNameIndex];..
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
a0a0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
a0b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0d0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
a0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a100: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a110: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a160: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
a170: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
a180: 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
a190: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
a1a0: 61 69 6e 69 6e 67 20 74 68 69 73 20 76 69 72 74  aining this virt
a1b0: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
a1c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
a1d0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
a1e0: 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e  ic virtual strin
a1f0: 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65 0d 0a  g DatabaseName..
a200: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a210: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
a220: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a230: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a240: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
a260: 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74  tring[] argument
a270: 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a  s = Arguments;..
a280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a290: 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73    if ((arguments
a2a0: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20   != null) &&..  
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2c0: 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e    (arguments.Len
a2d0: 67 74 68 20 3e 20 44 61 74 61 62 61 73 65 4e 61  gth > DatabaseNa
a2e0: 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20  meIndex))..     
a2f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a310: 20 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65 6e    return argumen
a320: 74 73 5b 44 61 74 61 62 61 73 65 4e 61 6d 65 49  ts[DatabaseNameI
a330: 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
a340: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a350: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
a360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a370: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a380: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
a390: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
a3a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a3b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a3c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
a3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a410: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a420: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
a430: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
a440: 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  ame of the virtu
a450: 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
a460: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
a470: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
a480: 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67  c virtual string
a490: 20 54 61 62 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   TableName..    
a4a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a4b0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
a4c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a4d0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
a4e0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
a4f0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a500: 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20 3d 20  g[] arguments = 
a510: 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20 20  Arguments;....  
a520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a530: 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21 3d 20   ((arguments != 
a540: 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61                (a
a560: 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68 20  rguments.Length 
a570: 3e 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78  > TableNameIndex
a580: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
a590: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a5a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a5b0: 6e 20 61 72 67 75 6d 65 6e 74 73 5b 54 61 62 6c  n arguments[Tabl
a5c0: 65 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a 20 20  eNameIndex];..  
a5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
a5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a5f0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
a600: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
a620: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
a630: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
a640: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a650: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a660: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
a670: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a6c0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
a6d0: 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73  n Public Methods
a6e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
a6f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
a700: 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f   /// Attempts to
a710: 20 72 65 63 6f 72 64 20 74 68 65 20 72 65 6e 61   record the rena
a720: 6d 69 6e 67 20 6f 66 20 74 68 65 20 76 69 72 74  ming of the virt
a730: 75 61 6c 20 74 61 62 6c 65 20 61 73 73 6f 63 69  ual table associ
a740: 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
a750: 2f 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65  / with this obje
a760: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
a770: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
a780: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
a790: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
a7a0: 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ame">..        /
a7b0: 2f 2f 20 54 68 65 20 6e 65 77 20 6e 61 6d 65 20  // The new name 
a7c0: 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
a7d0: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
a7e0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
a7f0: 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
a800: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
a810: 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73   Non-zero upon s
a820: 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  uccess...       
a830: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
a840: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
a850: 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 52 65 6e  virtual bool Ren
a860: 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
a870: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20    string name.. 
a880: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
a890: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a8a0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
a8b0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
a8c0: 20 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65       if ((argume
a8d0: 6e 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d  nts != null) &&.
a8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a8f0: 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67   (arguments.Leng
a900: 74 68 20 3e 20 54 61 62 6c 65 4e 61 6d 65 49 6e  th > TableNameIn
a910: 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20  dex))..         
a920: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a930: 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 73 5b        arguments[
a940: 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 20  TableNameIndex] 
a950: 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  = name;..       
a960: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a970: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
a980: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a990: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
a9a0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
a9b0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
a9c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa10: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
aa20: 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61  region ISQLiteNa
aa30: 74 69 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65  tiveHandle Membe
aa40: 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  rs..        priv
aa50: 61 74 65 20 49 6e 74 50 74 72 20 6e 61 74 69 76  ate IntPtr nativ
aa60: 65 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20  eHandle;..      
aa70: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
aa80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74  .        /// Ret
aa90: 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79  urns the underly
aaa0: 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76  ing SQLite nativ
aab0: 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61  e handle associa
aac0: 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20  ted with this.. 
aad0: 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63         /// objec
aae0: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
aaf0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
ab00: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
ab10: 6c 69 63 20 76 69 72 74 75 61 6c 20 49 6e 74 50  lic virtual IntP
ab20: 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d  tr NativeHandle.
ab30: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ab40: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
ab50: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
ab60: 65 74 75 72 6e 20 6e 61 74 69 76 65 48 61 6e 64  eturn nativeHand
ab70: 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  le; }..         
ab80: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 74 20     internal set 
ab90: 7b 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 20 3d  { nativeHandle =
aba0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
abb0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
abc0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
abd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
abe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ac20: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
ac30: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
ac40: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
ac50: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
ac60: 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20     /// Disposes 
ac70: 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  of this object i
ac80: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
ac90: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
aca0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
acb0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
acc0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
acd0: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
ace0: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
acf0: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
ad00: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a  inalize(this);..
ad10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ad20: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
ad30: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
ad90: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
ada0: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
adb0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
adc0: 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64  te bool disposed
add0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
ade0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
adf0: 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20    /// Throws an 
ae00: 3c 73 65 65 20 63 72 65 66 3d 22 4f 62 6a 65 63  <see cref="Objec
ae10: 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
ae20: 6f 6e 22 20 2f 3e 20 69 66 20 74 68 69 73 20 6f  on" /> if this o
ae30: 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f  bject..        /
ae40: 2f 2f 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20  // instance has 
ae50: 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a  been disposed...
ae60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
ae70: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
ae80: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
ae90: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
aea0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
aeb0: 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f    {..#if THROW_O
aec0: 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20  N_DISPOSED..    
aed0: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
aee0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
aef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
af00: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
af10: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
af20: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
af30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
af40: 70 65 6f 66 28 53 51 4c 69 74 65 56 69 72 74 75  peof(SQLiteVirtu
af50: 61 6c 54 61 62 6c 65 29 2e 4e 61 6d 65 29 3b 0d  alTable).Name);.
af60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
af70: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
af80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
af90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
afe0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
aff0: 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f         /// Dispo
b000: 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  ses of this obje
b010: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
b020: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
b030: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
b040: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
b050: 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20  isposing">..    
b060: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
b070: 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20   if this method 
b080: 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  is being called 
b090: 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20  from the..      
b0a0: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
b0b0: 22 44 69 73 70 6f 73 65 28 29 22 20 2f 3e 20 6d  "Dispose()" /> m
b0c0: 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20 69 66 20  ethod.  Zero if 
b0d0: 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62  this method is b
b0e0: 65 69 6e 67 20 63 61 6c 6c 65 64 0d 0a 20 20 20  eing called..   
b0f0: 20 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68       /// from th
b100: 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a 20 20  e finalizer...  
b110: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
b120: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  m>..        prot
b130: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f  ected virtual vo
b140: 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20  id Dispose(bool 
b150: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
b160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b170: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
b180: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b1a0: 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e    //if (disposin
b1b0: 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
b1c0: 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
b1d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
b1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b200: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
b210: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69       //    // di
b220: 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65  spose managed re
b230: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
b240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b250: 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
b260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d               //}
b290: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b2a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72              // r
b2e0: 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64  elease unmanaged
b2f0: 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e   resources here.
b300: 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b310: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
b350: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
b360: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b370: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b380: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b390: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b3e0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
b3f0: 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20  on Destructor.. 
b400: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
b410: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
b420: 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68 69 73  / Finalizes this
b430: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
b440: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
b450: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
b460: 20 20 20 7e 53 51 4c 69 74 65 56 69 72 74 75 61     ~SQLiteVirtua
b470: 6c 54 61 62 6c 65 28 29 0d 0a 20 20 20 20 20 20  lTable()..      
b480: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b490: 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b   Dispose(false);
b4a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
b4b0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
b4c0: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
b4d0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
b4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b530: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 56   #region SQLiteV
b540: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
b550: 72 20 42 61 73 65 20 43 6c 61 73 73 0d 0a 20 20  r Base Class..  
b560: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
b570: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
b580: 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 61  ass represents a
b590: 20 6d 61 6e 61 67 65 64 20 76 69 72 74 75 61 6c   managed virtual
b5a0: 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 6d   table cursor im
b5b0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20  plementation... 
b5c0: 20 20 20 2f 2f 2f 20 49 74 20 69 73 20 6e 6f 74     /// It is not
b5d0: 20 73 65 61 6c 65 64 20 61 6e 64 20 73 68 6f 75   sealed and shou
b5e0: 6c 64 20 62 65 20 75 73 65 64 20 61 73 20 74 68  ld be used as th
b5f0: 65 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f 72  e base class for
b600: 20 61 6e 79 0d 0a 20 20 20 20 2f 2f 2f 20 75 73   any..    /// us
b610: 65 72 2d 64 65 66 69 6e 65 64 20 76 69 72 74 75  er-defined virtu
b620: 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  al table cursor 
b630: 63 6c 61 73 73 65 73 20 69 6d 70 6c 65 6d 65 6e  classes implemen
b640: 74 65 64 20 69 6e 20 6d 61 6e 61 67 65 64 20 63  ted in managed c
b650: 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
b660: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
b670: 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74  blic class SQLit
b680: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
b690: 73 6f 72 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  sor :..         
b6a0: 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65     ISQLiteNative
b6b0: 48 61 6e 64 6c 65 2c 20 49 44 69 73 70 6f 73 61  Handle, IDisposa
b6c0: 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45  ble /* NOT SEALE
b6d0: 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  D */..    {..   
b6e0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
b6f0: 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
b700: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b710: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
b720: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
b730: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
b740: 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
b750: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b760: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
b770: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
b780: 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
b790: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
b7a0: 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
b7b0: 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
b7c0: 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
b7d0: 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
b7e0: 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
b7f0: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
b800: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
b810: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
b820: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
b830: 62 6c 65 43 75 72 73 6f 72 28 0d 0a 20 20 20 20  bleCursor(..    
b840: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
b850: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
b860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
b870: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
b880: 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 61 62          this.tab
b890: 6c 65 20 3d 20 74 61 62 6c 65 3b 0d 0a 20 20 20  le = table;..   
b8a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b8b0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b8c0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b910: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
b920: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
b930: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
b940: 61 74 65 20 53 51 4c 69 74 65 56 69 72 74 75 61  ate SQLiteVirtua
b950: 6c 54 61 62 6c 65 20 74 61 62 6c 65 3b 0d 0a 20  lTable table;.. 
b960: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
b970: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
b980: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
b990: 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
b9a0: 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
b9b0: 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
b9c0: 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
b9d0: 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
b9e0: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
b9f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
ba00: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
ba10: 69 63 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74  ic virtual SQLit
ba20: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 54 61  eVirtualTable Ta
ba30: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ble..        {..
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
ba50: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
ba60: 29 3b 20 72 65 74 75 72 6e 20 74 61 62 6c 65 3b  ); return table;
ba70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
ba80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
ba90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bad0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
bae0: 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d  ate int indexNum
baf0: 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ber;..        //
bb00: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
bb10: 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20       /// Number 
bb20: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
bb30: 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
bb40: 65 64 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20  ed index.  This 
bb50: 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20 20 20  value will..    
bb60: 20 20 20 20 2f 2f 2f 20 62 65 20 73 65 74 20 76      /// be set v
bb70: 69 61 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ia the <see cref
bb80: 3d 22 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74  ="Filter" /> met
bb90: 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
bba0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
bbb0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
bbc0: 74 75 61 6c 20 69 6e 74 20 49 6e 64 65 78 4e 75  tual int IndexNu
bbd0: 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mber..        {.
bbe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
bbf0: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
bc00: 28 29 3b 20 72 65 74 75 72 6e 20 69 6e 64 65 78  (); return index
bc10: 4e 75 6d 62 65 72 3b 20 7d 0d 0a 20 20 20 20 20  Number; }..     
bc20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
bc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc50: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
bc80: 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
bc90: 67 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a  g indexString;..
bca0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
bcb0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
bcc0: 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20 74  // String used t
bcd0: 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
bce0: 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
bcf0: 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ex.  This value 
bd00: 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  will..        //
bd10: 2f 20 62 65 20 73 65 74 20 76 69 61 20 74 68 65  / be set via the
bd20: 20 3c 73 65 65 20 63 72 65 66 3d 22 46 69 6c 74   <see cref="Filt
bd30: 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  er" /> method...
bd40: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
bd50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
bd60: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73  public virtual s
bd70: 74 72 69 6e 67 20 49 6e 64 65 78 53 74 72 69 6e  tring IndexStrin
bd80: 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  g..        {..  
bd90: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
bda0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
bdb0: 20 72 65 74 75 72 6e 20 69 6e 64 65 78 53 74 72   return indexStr
bdc0: 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ing; }..        
bdd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
bde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
be30: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 56 61  private SQLiteVa
be40: 6c 75 65 5b 5d 20 76 61 6c 75 65 73 3b 0d 0a 20  lue[] values;.. 
be50: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
be60: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
be70: 2f 20 54 68 65 20 76 61 6c 75 65 73 20 75 73 65  / The values use
be80: 64 20 74 6f 20 66 69 6c 74 65 72 20 74 68 65 20  d to filter the 
be90: 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 76 69  rows returned vi
bea0: 61 20 74 68 69 73 20 63 75 72 73 6f 72 20 6f 62  a this cursor ob
beb0: 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
bec0: 2f 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68 69  / instance.  Thi
bed0: 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  s value will be 
bee0: 73 65 74 20 76 69 61 20 74 68 65 20 3c 73 65 65  set via the <see
bef0: 20 63 72 65 66 3d 22 46 69 6c 74 65 72 22 20 2f   cref="Filter" /
bf00: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
bf10: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
bf20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
bf30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
bf40: 69 72 74 75 61 6c 20 53 51 4c 69 74 65 56 61 6c  irtual SQLiteVal
bf50: 75 65 5b 5d 20 56 61 6c 75 65 73 0d 0a 20 20 20  ue[] Values..   
bf60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
bf70: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
bf80: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
bf90: 6e 20 76 61 6c 75 65 73 3b 20 7d 0d 0a 20 20 20  n values; }..   
bfa0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
bfb0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
bfc0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
bfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
c010: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
c020: 20 50 72 6f 74 65 63 74 65 64 20 4d 65 74 68 6f   Protected Metho
c030: 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
c040: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
c050: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
c060: 74 6f 20 70 65 72 73 69 73 74 20 74 68 65 20 73  to persist the s
c070: 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63 72  pecified <see cr
c080: 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22  ef="SQLiteValue"
c090: 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20   /> object..    
c0a0: 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
c0b0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 61  s in order to ma
c0c0: 6b 65 20 74 68 65 6d 20 61 76 61 69 6c 61 62 6c  ke them availabl
c0d0: 65 20 61 66 74 65 72 20 74 68 65 0d 0a 20 20 20  e after the..   
c0e0: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
c0f0: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
c100: 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22  edModule.Filter"
c110: 20 2f 3e 20 6d 65 74 68 6f 64 20 72 65 74 75 72   /> method retur
c120: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns...        ///
c130: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
c140: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
c150: 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a  name="values">..
c160: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
c170: 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72  array of <see cr
c180: 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22  ef="SQLiteValue"
c190: 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
c1a0: 6e 63 65 73 20 74 6f 20 62 65 0d 0a 20 20 20 20  nces to be..    
c1b0: 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73 74 65      /// persiste
c1c0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
c1d0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
c1e0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
c1f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
c200: 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20   number of <see 
c210: 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75  cref="SQLiteValu
c220: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
c230: 74 61 6e 63 65 73 20 74 68 61 74 20 77 65 72 65  tances that were
c240: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
c250: 63 63 65 73 73 66 75 6c 6c 79 20 70 65 72 73 69  ccessfully persi
c260: 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sted...        /
c270: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
c280: 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
c290: 20 76 69 72 74 75 61 6c 20 69 6e 74 20 54 72 79   virtual int Try
c2a0: 50 65 72 73 69 73 74 56 61 6c 75 65 73 28 0d 0a  PersistValues(..
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
c2c0: 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73  teValue[] values
c2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
c2e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
c2f0: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75          int resu
c300: 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  lt = 0;....     
c310: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
c320: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
c330: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c340: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
c350: 63 68 20 28 53 51 4c 69 74 65 56 61 6c 75 65 20  ch (SQLiteValue 
c360: 76 61 6c 75 65 20 69 6e 20 76 61 6c 75 65 73 29  value in values)
c370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c380: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c390: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
c3a0: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3c0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
c3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c3e0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
c3f0: 50 65 72 73 69 73 74 28 29 29 0d 0a 20 20 20 20  Persist())..    
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c410: 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b 0d 0a 20      result++;.. 
c420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
c430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
c440: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
c450: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
c460: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c470: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
c480: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
c4d0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
c4e0: 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
c4f0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
c500: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
c510: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
c520: 64 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  d should normall
c530: 79 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  y be used by the
c540: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
c550: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
c560: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69  ManagedModule.Fi
c570: 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 20  lter" /> method 
c580: 69 6e 20 6f 72 64 65 72 20 74 6f 0d 0a 20 20 20  in order to..   
c590: 20 20 20 20 20 2f 2f 2f 20 70 65 72 66 6f 72 6d       /// perform
c5a0: 20 66 69 6c 74 65 72 69 6e 67 20 6f 66 20 74 68   filtering of th
c5b0: 65 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 6e  e result rows an
c5c0: 64 2f 6f 72 20 74 6f 20 72 65 63 6f 72 64 20 74  d/or to record t
c5d0: 68 65 20 66 69 6c 74 65 72 69 6e 67 0d 0a 20 20  he filtering..  
c5e0: 20 20 20 20 20 20 2f 2f 2f 20 63 72 69 74 65 72        /// criter
c5f0: 69 61 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  ia provided by t
c600: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
c610: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
c620: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
c630: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
c640: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 4e  ram name="indexN
c650: 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20 20 20 20  umber">..       
c660: 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65 64   /// Number used
c670: 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
c680: 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
c690: 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
c6a0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
c6b0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
c6c0: 6e 61 6d 65 3d 22 69 6e 64 65 78 53 74 72 69 6e  name="indexStrin
c6d0: 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  g">..        ///
c6e0: 20 53 74 72 69 6e 67 20 75 73 65 64 20 74 6f 20   String used to 
c6f0: 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
c700: 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
c710: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
c720: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
c730: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
c740: 3d 22 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20  ="values">..    
c750: 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75      /// The valu
c760: 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
c770: 20 74 6f 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   to each column 
c780: 69 6e 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  in the selected 
c790: 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
c7a0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
c7b0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
c7c0: 74 75 61 6c 20 76 6f 69 64 20 46 69 6c 74 65 72  tual void Filter
c7d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  (..            i
c7e0: 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72 2c 0d  nt indexNumber,.
c7f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
c800: 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67 2c  ing indexString,
c810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
c820: 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75  LiteValue[] valu
c830: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
c840: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
c850: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
c860: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
c870: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 76            if ((v
c880: 61 6c 75 65 73 20 21 3d 20 6e 75 6c 6c 29 20 26  alues != null) &
c890: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
c8a0: 20 20 20 28 54 72 79 50 65 72 73 69 73 74 56 61     (TryPersistVa
c8b0: 6c 75 65 73 28 76 61 6c 75 65 73 29 20 21 3d 20  lues(values) != 
c8c0: 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 29 29 0d  values.Length)).
c8d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8f0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
c900: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 22 66 61 69 6c 65 64 20 74 6f 20 70 65 72 73 69  "failed to persi
c930: 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  st one or more v
c940: 61 6c 75 65 73 22 29 3b 0d 0a 20 20 20 20 20 20  alues");..      
c950: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c960: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65         this.inde
c970: 78 4e 75 6d 62 65 72 20 3d 20 69 6e 64 65 78 4e  xNumber = indexN
c980: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
c990: 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 53 74      this.indexSt
c9a0: 72 69 6e 67 20 3d 20 69 6e 64 65 78 53 74 72 69  ring = indexStri
c9b0: 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng;..           
c9c0: 20 74 68 69 73 2e 76 61 6c 75 65 73 20 3d 20 76   this.values = v
c9d0: 61 6c 75 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  alues;..        
c9e0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
c9f0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
ca00: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ca10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca40: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ca50: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
ca60: 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20  iteNativeHandle 
ca70: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
ca80: 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20   private IntPtr 
ca90: 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 20  nativeHandle;.. 
caa0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
cab0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
cac0: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 75 6e  / Returns the un
cad0: 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 20  derlying SQLite 
cae0: 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 61 73  native handle as
caf0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
cb00: 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
cb10: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
cb20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
cb30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
cb40: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
cb50: 20 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61   IntPtr NativeHa
cb60: 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ndle..        {.
cb70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
cb80: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
cb90: 28 29 3b 20 72 65 74 75 72 6e 20 6e 61 74 69 76  (); return nativ
cba0: 65 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20 20  eHandle; }..    
cbb0: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
cbc0: 20 73 65 74 20 7b 20 6e 61 74 69 76 65 48 61 6e   set { nativeHan
cbd0: 64 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  dle = value; }..
cbe0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
cbf0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
cc00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
cc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
cc60: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
cc70: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
cc80: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
cc90: 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70          /// Disp
cca0: 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a  oses of this obj
ccb0: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
ccc0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
ccd0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
cce0: 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f  ublic void Dispo
ccf0: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  se()..        {.
cd00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73  .            Dis
cd10: 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20  pose(true);..   
cd20: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
cd30: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
cd40: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  s);..        }..
cd50: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
cd60: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
cd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd90: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
cdc0: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
cdd0: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
cde0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
cdf0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73  private bool dis
ce00: 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  posed;..        
ce10: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
ce20: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77         /// Throw
ce30: 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22  s an <see cref="
ce40: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
ce50: 63 65 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74  ception" /> if t
ce60: 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20  his object..    
ce70: 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
ce80: 20 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f 73   has been dispos
ce90: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
cea0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
ceb0: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
cec0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
ced0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
cee0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48         {..#if TH
cef0: 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
cf00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
cf10: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
cf20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
cf30: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
cf40: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
cf50: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
cf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf70: 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
cf80: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
cf90: 6f 72 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  or).Name);..    
cfa0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
cfb0: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
cfc0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
cfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d010: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
d020: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
d030: 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f    /// Disposes o
d040: 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
d050: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
d060: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d070: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
d080: 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73  ram name="dispos
d090: 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ing">..        /
d0a0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
d0b0: 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65  his method is be
d0c0: 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  ing called from 
d0d0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
d0e0: 20 3c 73 65 65 20 63 72 65 66 3d 22 44 69 73 70   <see cref="Disp
d0f0: 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74 68 6f 64  ose()" /> method
d100: 2e 20 20 5a 65 72 6f 20 69 66 20 74 68 69 73 20  .  Zero if this 
d110: 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67 20  method is being 
d120: 63 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  called..        
d130: 2f 2f 2f 20 66 72 6f 6d 20 74 68 65 20 66 69 6e  /// from the fin
d140: 61 6c 69 7a 65 72 2e 0d 0a 20 20 20 20 20 20 20  alizer...       
d150: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
d160: 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
d170: 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 44 69   virtual void Di
d180: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
d190: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b  sing)..        {
d1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
d1b0: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
d1c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
d1e0: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
d1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d200: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
d210: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
d220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d250: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
d260: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
d270: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
d280: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
d290: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2b0: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
d2c0: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d300: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
d310: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
d320: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
d330: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d370: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d380: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
d390: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
d3a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d3b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
d3c0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
d3d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d420: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
d430: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
d440: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
d450: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 69 6e  .        /// Fin
d460: 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65  alizes this obje
d470: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
d480: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
d490: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 7e 53  ary>..        ~S
d4a0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
d4b0: 65 43 75 72 73 6f 72 28 29 0d 0a 20 20 20 20 20  eCursor()..     
d4c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d4d0: 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29    Dispose(false)
d4e0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
d4f0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
d500: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
d510: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
d520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d570: 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74    #region ISQLit
d580: 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 49 6e  eNativeHandle In
d590: 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f  terface..    ///
d5a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
d5b0: 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61  /// This interfa
d5c0: 63 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ce represents a 
d5d0: 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 70 72  native handle pr
d5e0: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 53 51  ovided by the SQ
d5f0: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 2f  Lite core..    /
d600: 2f 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  // library...   
d610: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d620: 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65  .    public inte
d630: 72 66 61 63 65 20 49 53 51 4c 69 74 65 4e 61 74  rface ISQLiteNat
d640: 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b  iveHandle..    {
d650: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
d660: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
d670: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
d680: 68 61 6e 64 6c 65 20 76 61 6c 75 65 2e 0d 0a 20  handle value... 
d690: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
d6a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 49  mary>..        I
d6b0: 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e 64  ntPtr NativeHand
d6c0: 6c 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20  le { get; }..   
d6d0: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
d6e0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
d6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
d740: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
d750: 76 65 4d 6f 64 75 6c 65 20 49 6e 74 65 72 66 61  veModule Interfa
d760: 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ce..    /// <sum
d770: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
d780: 68 69 73 20 69 6e 74 65 72 66 61 63 65 20 72 65  his interface re
d790: 70 72 65 73 65 6e 74 73 20 61 20 76 69 72 74 75  presents a virtu
d7a0: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
d7b0: 6e 74 61 74 69 6f 6e 20 77 72 69 74 74 65 6e 20  ntation written 
d7c0: 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69  in..    /// nati
d7d0: 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  ve code...    //
d7e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
d7f0: 20 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61    public interfa
d800: 63 65 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  ce ISQLiteNative
d810: 4d 6f 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20  Module..    {.. 
d820: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
d830: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
d840: 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
d850: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
d860: 64 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  d is called to c
d870: 72 65 61 74 65 20 61 20 6e 65 77 20 69 6e 73 74  reate a new inst
d880: 61 6e 63 65 20 6f 66 20 61 20 76 69 72 74 75 61  ance of a virtua
d890: 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
d8a0: 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65   /// in response
d8b0: 20 74 6f 20 61 20 43 52 45 41 54 45 20 56 49 52   to a CREATE VIR
d8c0: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d8d0: 6d 65 6e 74 2e 20 54 68 65 20 64 62 20 70 61 72  ment. The db par
d8e0: 61 6d 65 74 65 72 0d 0a 20 20 20 20 20 20 20 20  ameter..        
d8f0: 2f 2f 2f 20 69 73 20 61 20 70 6f 69 6e 74 65 72  /// is a pointer
d900: 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 64   to the SQLite d
d910: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
d920: 6f 6e 20 74 68 61 74 20 69 73 20 65 78 65 63 75  on that is execu
d930: 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ting..        //
d940: 2f 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  / the CREATE VIR
d950: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d960: 6d 65 6e 74 2e 20 54 68 65 20 70 41 75 78 20 61  ment. The pAux a
d970: 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20 63  rgument is the c
d980: 6f 70 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  opy..        ///
d990: 20 6f 66 20 74 68 65 20 63 6c 69 65 6e 74 20 64   of the client d
d9a0: 61 74 61 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ata pointer that
d9b0: 20 77 61 73 20 74 68 65 20 66 6f 75 72 74 68 20   was the fourth 
d9c0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0d  argument to the.
d9d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
d9e0: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
d9f0: 6c 65 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f  le() or sqlite3_
da00: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32  create_module_v2
da10: 28 29 20 63 61 6c 6c 20 74 68 61 74 0d 0a 20 20  () call that..  
da20: 20 20 20 20 20 20 2f 2f 2f 20 72 65 67 69 73 74        /// regist
da30: 65 72 65 64 20 74 68 65 20 76 69 72 74 75 61 6c  ered the virtual
da40: 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 20 54   table module. T
da50: 68 65 20 61 72 67 76 20 70 61 72 61 6d 65 74 65  he argv paramete
da60: 72 20 69 73 20 61 6e 0d 0a 20 20 20 20 20 20 20  r is an..       
da70: 20 2f 2f 2f 20 61 72 72 61 79 20 6f 66 20 61 72   /// array of ar
da80: 67 63 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 6e  gc pointers to n
da90: 75 6c 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 73  ull terminated s
daa0: 74 72 69 6e 67 73 2e 20 54 68 65 20 66 69 72 73  trings. The firs
dab0: 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  t..        /// s
dac0: 74 72 69 6e 67 2c 20 61 72 67 76 5b 30 5d 2c 20  tring, argv[0], 
dad0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
dae0: 68 65 20 6d 6f 64 75 6c 65 20 62 65 69 6e 67 20  he module being 
daf0: 69 6e 76 6f 6b 65 64 2e 20 54 68 65 0d 0a 20 20  invoked. The..  
db00: 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65        /// module
db10: 20 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d   name is the nam
db20: 65 20 70 72 6f 76 69 64 65 64 20 61 73 20 74 68  e provided as th
db30: 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
db40: 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t to..        //
db50: 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  / sqlite3_create
db60: 5f 6d 6f 64 75 6c 65 28 29 20 61 6e 64 20 61 73  _module() and as
db70: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
db80: 20 74 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   the USING claus
db90: 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e of..        //
dba0: 2f 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  / the CREATE VIR
dbb0: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
dbc0: 6d 65 6e 74 20 74 68 61 74 20 69 73 20 72 75 6e  ment that is run
dbd0: 6e 69 6e 67 2e 20 54 68 65 20 73 65 63 6f 6e 64  ning. The second
dbe0: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  ,..        /// a
dbf0: 72 67 76 5b 31 5d 2c 20 69 73 20 74 68 65 20 6e  rgv[1], is the n
dc00: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
dc10: 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65  ase in which the
dc20: 20 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61 62   new virtual tab
dc30: 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
dc40: 69 73 20 62 65 69 6e 67 20 63 72 65 61 74 65 64  is being created
dc50: 2e 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6e  . The database n
dc60: 61 6d 65 20 69 73 20 22 6d 61 69 6e 22 20 66 6f  ame is "main" fo
dc70: 72 20 74 68 65 20 70 72 69 6d 61 72 79 0d 0a 20  r the primary.. 
dc80: 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62         /// datab
dc90: 61 73 65 2c 20 6f 72 20 22 74 65 6d 70 22 20 66  ase, or "temp" f
dca0: 6f 72 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  or TEMP database
dcb0: 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 67 69  , or the name gi
dcc0: 76 65 6e 20 61 74 20 74 68 65 0d 0a 20 20 20 20  ven at the..    
dcd0: 20 20 20 20 2f 2f 2f 20 65 6e 64 20 6f 66 20 74      /// end of t
dce0: 68 65 20 41 54 54 41 43 48 20 73 74 61 74 65 6d  he ATTACH statem
dcf0: 65 6e 74 20 66 6f 72 20 61 74 74 61 63 68 65 64  ent for attached
dd00: 20 64 61 74 61 62 61 73 65 73 2e 20 54 68 65 20   databases. The 
dd10: 74 68 69 72 64 0d 0a 20 20 20 20 20 20 20 20 2f  third..        /
dd20: 2f 2f 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  // element of th
dd30: 65 20 61 72 72 61 79 2c 20 61 72 67 76 5b 32 5d  e array, argv[2]
dd40: 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  , is the name of
dd50: 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
dd60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61  ..        /// ta
dd70: 62 6c 65 2c 20 61 73 20 73 70 65 63 69 66 69 65  ble, as specifie
dd80: 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  d following the 
dd90: 54 41 42 4c 45 20 6b 65 79 77 6f 72 64 20 69 6e  TABLE keyword in
dda0: 20 74 68 65 20 43 52 45 41 54 45 0d 0a 20 20 20   the CREATE..   
ddb0: 20 20 20 20 20 2f 2f 2f 20 56 49 52 54 55 41 4c       /// VIRTUAL
ddc0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
ddd0: 2e 20 49 66 20 70 72 65 73 65 6e 74 2c 20 74 68  . If present, th
dde0: 65 20 66 6f 75 72 74 68 20 61 6e 64 20 73 75 62  e fourth and sub
ddf0: 73 65 71 75 65 6e 74 0d 0a 20 20 20 20 20 20 20  sequent..       
de00: 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20 69 6e 20   /// strings in 
de10: 74 68 65 20 61 72 67 76 5b 5d 20 61 72 72 61 79  the argv[] array
de20: 20 72 65 70 6f 72 74 20 74 68 65 20 61 72 67 75   report the argu
de30: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
de40: 75 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ule name..      
de50: 20 20 2f 2f 2f 20 69 6e 20 74 68 65 20 43 52 45    /// in the CRE
de60: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
de70: 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  E statement...  
de80: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
de90: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
dea0: 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
deb0: 2f 2f 20 54 68 65 20 6a 6f 62 20 6f 66 20 74 68  // The job of th
dec0: 69 73 20 6d 65 74 68 6f 64 20 69 73 20 74 6f 20  is method is to 
ded0: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6e 65  construct the ne
dee0: 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  w virtual table 
def0: 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
df00: 2f 2f 2f 20 28 61 6e 20 73 71 6c 69 74 65 33 5f  /// (an sqlite3_
df10: 76 74 61 62 20 6f 62 6a 65 63 74 29 20 61 6e 64  vtab object) and
df20: 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65   return a pointe
df30: 72 20 74 6f 20 69 74 20 69 6e 20 2a 70 70 56 54  r to it in *ppVT
df40: 61 62 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ab...        ///
df50: 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
df60: 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
df70: 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 70 61 72        /// As par
df80: 74 20 6f 66 20 74 68 65 20 74 61 73 6b 20 6f 66  t of the task of
df90: 20 63 72 65 61 74 69 6e 67 20 61 20 6e 65 77 20   creating a new 
dfa0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
dfb0: 75 63 74 75 72 65 2c 20 74 68 69 73 0d 0a 20 20  ucture, this..  
dfc0: 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
dfd0: 20 6d 75 73 74 20 69 6e 76 6f 6b 65 20 73 71 6c   must invoke sql
dfe0: 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
dff0: 62 28 29 20 74 6f 20 74 65 6c 6c 20 74 68 65 20  b() to tell the 
e000: 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..   
e010: 20 20 20 20 20 2f 2f 2f 20 61 62 6f 75 74 20 74       /// about t
e020: 68 65 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 64  he columns and d
e030: 61 74 61 74 79 70 65 73 20 69 6e 20 74 68 65 20  atatypes in the 
e040: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54  virtual table. T
e050: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
e060: 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
e070: 76 74 61 62 28 29 20 41 50 49 20 68 61 73 20 74  vtab() API has t
e080: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f  he following pro
e090: 74 6f 74 79 70 65 3a 0d 0a 20 20 20 20 20 20 20  totype:..       
e0a0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
e0b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
e0c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
e0d0: 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
e0e0: 2f 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 64 65  / int sqlite3_de
e0f0: 63 6c 61 72 65 5f 76 74 61 62 28 73 71 6c 69 74  clare_vtab(sqlit
e100: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
e110: 61 72 20 2a 7a 43 72 65 61 74 65 54 61 62 6c 65  ar *zCreateTable
e120: 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  )..        /// <
e130: 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
e140: 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
e150: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
e160: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
e170: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
e180: 74 6f 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  to sqlite3_decla
e190: 72 65 5f 76 74 61 62 28 29 20 6d 75 73 74 20 62  re_vtab() must b
e1a0: 65 20 74 68 65 20 73 61 6d 65 0d 0a 20 20 20 20  e the same..    
e1b0: 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
e1c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
e1d0: 74 65 72 20 61 73 20 74 68 65 20 66 69 72 73 74  ter as the first
e1e0: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68   parameter to th
e1f0: 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  is method...    
e200: 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 65 63 6f      /// The seco
e210: 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  nd argument to s
e220: 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
e230: 74 61 62 28 29 20 6d 75 73 74 20 61 0d 0a 20 20  tab() must a..  
e240: 20 20 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 2d 74        /// zero-t
e250: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
e260: 73 74 72 69 6e 67 20 74 68 61 74 20 63 6f 6e 74  string that cont
e270: 61 69 6e 73 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  ains a well-form
e280: 65 64 20 43 52 45 41 54 45 0d 0a 20 20 20 20 20  ed CREATE..     
e290: 20 20 20 2f 2f 2f 20 54 41 42 4c 45 20 73 74 61     /// TABLE sta
e2a0: 74 65 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69  tement that defi
e2b0: 6e 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  nes the columns 
e2c0: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  in the virtual t
e2d0: 61 62 6c 65 20 61 6e 64 0d 0a 20 20 20 20 20 20  able and..      
e2e0: 20 20 2f 2f 2f 20 74 68 65 69 72 20 64 61 74 61    /// their data
e2f0: 20 74 79 70 65 73 2e 20 54 68 65 20 6e 61 6d 65   types. The name
e300: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
e310: 20 74 68 69 73 20 43 52 45 41 54 45 20 54 41 42   this CREATE TAB
e320: 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  LE..        /// 
e330: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 67 6e  statement is ign
e340: 6f 72 65 64 2c 20 61 73 20 61 72 65 20 61 6c 6c  ored, as are all
e350: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 4f 6e   constraints. On
e360: 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  ly the column na
e370: 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  mes..        ///
e380: 20 61 6e 64 20 64 61 74 61 74 79 70 65 73 20 6d   and datatypes m
e390: 61 74 74 65 72 2e 20 54 68 65 20 43 52 45 41 54  atter. The CREAT
e3a0: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
e3b0: 74 20 73 74 72 69 6e 67 20 6e 65 65 64 20 6e 6f  t string need no
e3c0: 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t to..        //
e3d0: 2f 20 62 65 20 68 65 6c 64 20 69 6e 20 70 65 72  / be held in per
e3e0: 73 69 73 74 65 6e 74 20 6d 65 6d 6f 72 79 2e 20  sistent memory. 
e3f0: 54 68 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  The string can b
e400: 65 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 61 6e  e deallocated an
e410: 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d/or..        //
e420: 2f 20 72 65 75 73 65 64 20 61 73 20 73 6f 6f 6e  / reused as soon
e430: 20 61 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f   as the sqlite3_
e440: 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 72  declare_vtab() r
e450: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 2e 0d  outine returns..
e460: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
e470: 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
e480: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
e490: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
e4a0: 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20   name="pDb">..  
e4b0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
e4c0: 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f  tive database co
e4d0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e  nnection handle.
e4e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
e4f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
e500: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
e510: 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20  "pAux">..       
e520: 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61   /// The origina
e530: 6c 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  l native pointer
e540: 20 76 61 6c 75 65 20 74 68 61 74 20 77 61 73 20   value that was 
e550: 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d  provided to the.
e560: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
e570: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
e580: 6c 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 63 72  le(), sqlite3_cr
e590: 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29  eate_module_v2()
e5a0: 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
e5b0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
e5c0: 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c  disposable_modul
e5d0: 65 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  e() functions...
e5e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
e5f0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
e600: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
e610: 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rgc">..        /
e620: 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
e630: 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
e640: 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
e650: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
e660: 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
e670: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
e680: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
e690: 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
e6a0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
e6b0: 79 20 6f 66 20 73 74 72 69 6e 67 20 61 72 67 75  y of string argu
e6c0: 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43  ments from the C
e6d0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
e6e0: 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  BLE..        ///
e6f0: 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20   statement...   
e700: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
e710: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
e720: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
e730: 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
e740: 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
e750: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
e760: 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
e770: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e  o point to the n
e780: 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ewly..        //
e790: 2f 20 63 72 65 61 74 65 64 20 6e 61 74 69 76 65  / created native
e7a0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
e7b0: 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
e7c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
e7d0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
e7e0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
e7f0: 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20  "pError">..     
e800: 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c     /// Upon fail
e810: 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ure, this parame
e820: 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
e830: 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f  fied to point to
e840: 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20   the error..    
e850: 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c      /// message,
e860: 20 77 69 74 68 20 74 68 65 20 75 6e 64 65 72 6c   with the underl
e870: 79 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76 69  ying memory havi
e880: 6e 67 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64  ng been obtained
e890: 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20   from the..     
e8a0: 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d     /// sqlite3_m
e8b0: 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e  alloc() function
e8c0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
e8d0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
e8e0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
e8f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
e900: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
e910: 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
e920: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
e930: 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
e940: 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 72 65  teErrorCode xCre
e950: 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
e960: 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
e970: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
e980: 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20  r pAux,..       
e990: 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a       int argc,..
e9a0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
e9b0: 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  tr argv,..      
e9c0: 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
e9d0: 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
e9e0: 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
e9f0: 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20  pError..        
ea00: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
ea10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ea20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ea60: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
ea70: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
ea80: 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
ea90: 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74  /// The xConnect
eaa0: 20 6d 65 74 68 6f 64 20 69 73 20 76 65 72 79 20   method is very 
eab0: 73 69 6d 69 6c 61 72 20 74 6f 20 78 43 72 65 61  similar to xCrea
eac0: 74 65 2e 20 49 74 20 68 61 73 20 74 68 65 20 73  te. It has the s
ead0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ame..        ///
eae0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20   parameters and 
eaf0: 63 6f 6e 73 74 72 75 63 74 73 20 61 20 6e 65 77  constructs a new
eb00: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
eb10: 72 75 63 74 75 72 65 20 6a 75 73 74 20 6c 69 6b  ructure just lik
eb20: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
eb30: 43 72 65 61 74 65 2e 20 41 6e 64 20 69 74 20 6d  Create. And it m
eb40: 75 73 74 20 61 6c 73 6f 20 63 61 6c 6c 20 73 71  ust also call sq
eb50: 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
eb60: 61 62 28 29 20 6c 69 6b 65 20 78 43 72 65 61 74  ab() like xCreat
eb70: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
eb80: 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
eb90: 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
eba0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 69 66       /// The dif
ebb0: 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74 20  ference is that 
ebc0: 78 43 6f 6e 6e 65 63 74 20 69 73 20 63 61 6c 6c  xConnect is call
ebd0: 65 64 20 74 6f 20 65 73 74 61 62 6c 69 73 68 20  ed to establish 
ebe0: 61 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 2f  a new..        /
ebf0: 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  // connection to
ec00: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 76 69 72   an existing vir
ec10: 74 75 61 6c 20 74 61 62 6c 65 20 77 68 65 72 65  tual table where
ec20: 61 73 20 78 43 72 65 61 74 65 20 69 73 20 63 61  as xCreate is ca
ec30: 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lled..        //
ec40: 2f 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  / to create a ne
ec50: 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  w virtual table 
ec60: 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0d 0a 20  from scratch... 
ec70: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
ec80: 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
ec90: 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
eca0: 2f 2f 2f 20 54 68 65 20 78 43 72 65 61 74 65 20  /// The xCreate 
ecb0: 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74  and xConnect met
ecc0: 68 6f 64 73 20 61 72 65 20 6f 6e 6c 79 20 64 69  hods are only di
ecd0: 66 66 65 72 65 6e 74 20 77 68 65 6e 20 74 68 65  fferent when the
ece0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
ecf0: 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20  rtual table has 
ed00: 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 62 61 63  some kind of bac
ed10: 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61 74 20  king store that 
ed20: 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20  must be..       
ed30: 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64   /// initialized
ed40: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
ed50: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
ed60: 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 54 68  e is created. Th
ed70: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
ed80: 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 63 72  Create method cr
ed90: 65 61 74 65 73 20 61 6e 64 20 69 6e 69 74 69 61  eates and initia
eda0: 6c 69 7a 65 73 20 74 68 65 20 62 61 63 6b 69 6e  lizes the backin
edb0: 67 20 73 74 6f 72 65 2e 20 54 68 65 0d 0a 20 20  g store. The..  
edc0: 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e 65        /// xConne
edd0: 63 74 20 6d 65 74 68 6f 64 20 6a 75 73 74 20 63  ct method just c
ede0: 6f 6e 6e 65 63 74 73 20 74 6f 20 61 6e 20 65 78  onnects to an ex
edf0: 69 73 74 69 6e 67 20 62 61 63 6b 69 6e 67 20 73  isting backing s
ee00: 74 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tore...        /
ee10: 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
ee20: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
ee30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 61          /// As a
ee40: 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e 73 69  n example, consi
ee50: 64 65 72 20 61 20 76 69 72 74 75 61 6c 20 74 61  der a virtual ta
ee60: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
ee70: 6f 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20  on that..       
ee80: 20 2f 2f 2f 20 70 72 6f 76 69 64 65 73 20 72 65   /// provides re
ee90: 61 64 2d 6f 6e 6c 79 20 61 63 63 65 73 73 20 74  ad-only access t
eea0: 6f 20 65 78 69 73 74 69 6e 67 20 63 6f 6d 6d 61  o existing comma
eeb0: 2d 73 65 70 61 72 61 74 65 64 2d 76 61 6c 75 65  -separated-value
eec0: 20 28 43 53 56 29 0d 0a 20 20 20 20 20 20 20 20   (CSV)..        
eed0: 2f 2f 2f 20 66 69 6c 65 73 20 6f 6e 20 64 69 73  /// files on dis
eee0: 6b 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 62  k. There is no b
eef0: 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61  acking store tha
ef00: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 63 72  t needs to be cr
ef10: 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  eated..        /
ef20: 2f 2f 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65  // or initialize
ef30: 64 20 66 6f 72 20 73 75 63 68 20 61 20 76 69 72  d for such a vir
ef40: 74 75 61 6c 20 74 61 62 6c 65 20 28 73 69 6e 63  tual table (sinc
ef50: 65 20 74 68 65 20 43 53 56 20 66 69 6c 65 73 0d  e the CSV files.
ef60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 72  .        /// alr
ef70: 65 61 64 79 20 65 78 69 73 74 20 6f 6e 20 64 69  eady exist on di
ef80: 73 6b 29 20 73 6f 20 74 68 65 20 78 43 72 65 61  sk) so the xCrea
ef90: 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20  te and xConnect 
efa0: 6d 65 74 68 6f 64 73 20 77 69 6c 6c 20 62 65 0d  methods will be.
efb0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 64 65  .        /// ide
efc0: 6e 74 69 63 61 6c 20 66 6f 72 20 74 68 61 74 20  ntical for that 
efd0: 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 20 20 20  module...       
efe0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
eff0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
f000: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e  ..        /// An
f010: 6f 74 68 65 72 20 65 78 61 6d 70 6c 65 20 69 73  other example is
f020: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
f030: 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
f040: 20 61 20 66 75 6c 6c 2d 74 65 78 74 0d 0a 20 20   a full-text..  
f050: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 65 78 2e        /// index.
f060: 20 54 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   The xCreate met
f070: 68 6f 64 20 6d 75 73 74 20 63 72 65 61 74 65 20  hod must create 
f080: 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 64  and initialize d
f090: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ata..        ///
f0a0: 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 68   structures to h
f0b0: 6f 6c 64 20 74 68 65 20 64 69 63 74 69 6f 6e 61  old the dictiona
f0c0: 72 79 20 61 6e 64 20 70 6f 73 74 69 6e 67 20 6c  ry and posting l
f0d0: 69 73 74 73 20 66 6f 72 20 74 68 61 74 20 69 6e  ists for that in
f0e0: 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
f0f0: 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74 20 6d  / The xConnect m
f100: 65 74 68 6f 64 2c 20 6f 6e 20 74 68 65 20 6f 74  ethod, on the ot
f110: 68 65 72 20 68 61 6e 64 2c 20 6f 6e 6c 79 20 68  her hand, only h
f120: 61 73 20 74 6f 20 6c 6f 63 61 74 65 20 61 6e 64  as to locate and
f130: 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   use..        //
f140: 2f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 69  / an existing di
f150: 63 74 69 6f 6e 61 72 79 20 61 6e 64 20 70 6f 73  ctionary and pos
f160: 74 69 6e 67 20 6c 69 73 74 73 20 74 68 61 74 20  ting lists that 
f170: 77 65 72 65 20 63 72 65 61 74 65 64 20 62 79 20  were created by 
f180: 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  a..        /// p
f190: 72 69 6f 72 20 78 43 72 65 61 74 65 20 63 61 6c  rior xCreate cal
f1a0: 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  l...        /// 
f1b0: 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
f1c0: 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
f1d0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f       /// The xCo
f1e0: 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 6d 75 73  nnect method mus
f1f0: 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  t return SQLITE_
f200: 4f 4b 20 69 66 20 69 74 20 69 73 20 73 75 63 63  OK if it is succ
f210: 65 73 73 66 75 6c 20 69 6e 0d 0a 20 20 20 20 20  essful in..     
f220: 20 20 20 2f 2f 2f 20 63 72 65 61 74 69 6e 67 20     /// creating 
f230: 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
f240: 74 61 62 6c 65 2c 20 6f 72 20 53 51 4c 49 54 45  table, or SQLITE
f250: 5f 45 52 52 4f 52 20 69 66 20 69 74 20 69 73 20  _ERROR if it is 
f260: 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  not..        ///
f270: 20 73 75 63 63 65 73 73 66 75 6c 2e 20 49 66 20   successful. If 
f280: 6e 6f 74 20 73 75 63 63 65 73 73 66 75 6c 2c 20  not successful, 
f290: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
f2a0: 20 73 74 72 75 63 74 75 72 65 20 6d 75 73 74 20   structure must 
f2b0: 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  not..        ///
f2c0: 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e 20 41   be allocated. A
f2d0: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
f2e0: 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  may optionally b
f2f0: 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 2a 70  e returned in *p
f300: 7a 45 72 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  zErr..        //
f310: 2f 20 69 66 20 75 6e 73 75 63 63 65 73 73 66 75  / if unsuccessfu
f320: 6c 2e 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  l. Space to hold
f330: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
f340: 67 65 20 73 74 72 69 6e 67 20 6d 75 73 74 20 62  ge string must b
f350: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  e..        /// a
f360: 6c 6c 6f 63 61 74 65 64 20 75 73 69 6e 67 20 61  llocated using a
f370: 6e 20 53 51 4c 69 74 65 20 6d 65 6d 6f 72 79 20  n SQLite memory 
f380: 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 75 6e 63 74  allocation funct
f390: 69 6f 6e 20 6c 69 6b 65 0d 0a 20 20 20 20 20 20  ion like..      
f3a0: 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61    /// sqlite3_ma
f3b0: 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69 74 65  lloc() or sqlite
f3c0: 33 5f 6d 70 72 69 6e 74 66 28 29 20 61 73 20 74  3_mprintf() as t
f3d0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77  he SQLite core w
f3e0: 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ill..        ///
f3f0: 20 61 74 74 65 6d 70 74 20 74 6f 20 66 72 65 65   attempt to free
f400: 20 74 68 65 20 73 70 61 63 65 20 75 73 69 6e 67   the space using
f410: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 29 20   sqlite3_free() 
f420: 61 66 74 65 72 20 74 68 65 20 65 72 72 6f 72 20  after the error 
f430: 68 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  has..        ///
f440: 20 62 65 65 6e 20 72 65 70 6f 72 74 65 64 20 75   been reported u
f450: 70 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61  p to the applica
f460: 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
f470: 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
f480: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
f490: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
f4a0: 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20  xConnect method 
f4b0: 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
f4c0: 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
f4d0: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
f4e0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
f4f0: 20 74 68 6f 75 67 68 20 74 68 65 20 78 43 72 65   though the xCre
f500: 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74  ate and xConnect
f510: 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 74 68 65   pointers of the
f520: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
f530: 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6f 62 6a  lite3_module obj
f540: 65 63 74 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f  ect may point to
f550: 20 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74 69   the same functi
f560: 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a  on the virtual..
f570: 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c          /// tabl
f580: 65 20 64 6f 65 73 20 6e 6f 74 20 6e 65 65 64 20  e does not need 
f590: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61  to initialize ba
f5a0: 63 6b 69 6e 67 20 73 74 6f 72 65 2e 0d 0a 20 20  cking store...  
f5b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
f5c0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
f5d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
f5e0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
f5f0: 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20  me="pDb">..     
f600: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
f610: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
f620: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a 20  ction handle... 
f630: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
f640: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
f650: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41   <param name="pA
f660: 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ux">..        //
f670: 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e  / The original n
f680: 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 76 61  ative pointer va
f690: 6c 75 65 20 74 68 61 74 20 77 61 73 20 70 72 6f  lue that was pro
f6a0: 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20  vided to the..  
f6b0: 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
f6c0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
f6d0: 29 2c 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ), sqlite3_creat
f6e0: 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 20 6f 72  e_module_v2() or
f6f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
f700: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73  lite3_create_dis
f710: 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 29  posable_module()
f720: 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20   functions...   
f730: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
f740: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
f750: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
f760: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
f770: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  The number of ar
f780: 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65  guments from the
f790: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
f7a0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
f7b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
f7c0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
f7d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
f7e0: 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20  "argv">..       
f7f0: 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f   /// The array o
f800: 66 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e  f string argumen
f810: 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52 45 41  ts from the CREA
f820: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
f830: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
f840: 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20  atement...      
f850: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
f860: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
f870: 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
f880: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
f890: 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73  on success, this
f8a0: 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
f8b0: 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 70  be modified to p
f8c0: 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e 65 77 6c  oint to the newl
f8d0: 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  y..        /// c
f8e0: 72 65 61 74 65 64 20 6e 61 74 69 76 65 20 73 71  reated native sq
f8f0: 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
f900: 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
f910: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
f920: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
f930: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45   <param name="pE
f940: 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rror">..        
f950: 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72 65  /// Upon failure
f960: 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
f970: 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
f980: 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  d to point to th
f990: 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  e error..       
f9a0: 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c 20 77 69   /// message, wi
f9b0: 74 68 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  th the underlyin
f9c0: 67 20 6d 65 6d 6f 72 79 20 68 61 76 69 6e 67 20  g memory having 
f9d0: 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 66 72  been obtained fr
f9e0: 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  om the..        
f9f0: 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  /// sqlite3_mall
fa00: 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a  oc() function...
fa10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
fa20: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
fa30: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
fa40: 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
fa50: 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
fa60: 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
fa70: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
fa80: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
fa90: 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63  rrorCode xConnec
faa0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
fab0: 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20 20 20  IntPtr pDb,..   
fac0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
fad0: 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  pAux,..         
fae0: 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
faf0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
fb00: 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20   argv,..        
fb10: 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
fb20: 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
fb30: 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 45     ref IntPtr pE
fb40: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
fb50: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
fb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fba0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
fbb0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
fbc0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
fbd0: 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
fbe0: 2f 20 53 51 4c 69 74 65 20 75 73 65 73 20 74 68  / SQLite uses th
fbf0: 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74  e xBestIndex met
fc00: 68 6f 64 20 6f 66 20 61 20 76 69 72 74 75 61 6c  hod of a virtual
fc10: 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 6f   table module to
fc20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65  ..        /// de
fc30: 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73 74  termine the best
fc40: 20 77 61 79 20 74 6f 20 61 63 63 65 73 73 20 74   way to access t
fc50: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
fc60: 2e 20 54 68 65 20 78 42 65 73 74 49 6e 64 65 78  . The xBestIndex
fc70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
fc80: 74 68 6f 64 20 68 61 73 20 61 20 70 72 6f 74 6f  thod has a proto
fc90: 74 79 70 65 20 6c 69 6b 65 20 74 68 69 73 3a 0d  type like this:.
fca0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
fcb0: 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
fcc0: 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
fcd0: 20 20 2f 2f 2f 20 69 6e 74 20 28 2a 78 42 65 73    /// int (*xBes
fce0: 74 49 6e 64 65 78 29 28 73 71 6c 69 74 65 33 5f  tIndex)(sqlite3_
fcf0: 76 74 61 62 20 2a 70 56 54 61 62 2c 20 73 71 6c  vtab *pVTab, sql
fd00: 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 2a  ite3_index_info*
fd10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  );..        /// 
fd20: 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20  </code>..       
fd30: 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
fd40: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c       /// The SQL
fd50: 69 74 65 20 63 6f 72 65 20 63 6f 6d 6d 75 6e 69  ite core communi
fd60: 63 61 74 65 73 20 77 69 74 68 20 74 68 65 20 78  cates with the x
fd70: 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
fd80: 20 62 79 20 66 69 6c 6c 69 6e 67 0d 0a 20 20 20   by filling..   
fd90: 20 20 20 20 20 2f 2f 2f 20 69 6e 20 63 65 72 74       /// in cert
fda0: 61 69 6e 20 66 69 65 6c 64 73 20 6f 66 20 74 68  ain fields of th
fdb0: 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
fdc0: 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 61  info structure a
fdd0: 6e 64 20 70 61 73 73 69 6e 67 20 61 0d 0a 20 20  nd passing a..  
fde0: 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65        /// pointe
fdf0: 72 20 74 6f 20 74 68 61 74 20 73 74 72 75 63 74  r to that struct
fe00: 75 72 65 20 69 6e 74 6f 20 78 42 65 73 74 49 6e  ure into xBestIn
fe10: 64 65 78 20 61 73 20 74 68 65 20 73 65 63 6f 6e  dex as the secon
fe20: 64 20 70 61 72 61 6d 65 74 65 72 2e 0d 0a 20 20  d parameter...  
fe30: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42        /// The xB
fe40: 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
fe50: 66 69 6c 6c 73 20 6f 75 74 20 6f 74 68 65 72 20  fills out other 
fe60: 66 69 65 6c 64 73 20 6f 66 20 74 68 69 73 20 73  fields of this s
fe70: 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20 20 20  tructure..      
fe80: 20 20 2f 2f 2f 20 77 68 69 63 68 20 66 6f 72 6d    /// which form
fe90: 73 20 74 68 65 20 72 65 70 6c 79 2e 20 54 68 65  s the reply. The
fea0: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
feb0: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 6c 6f  nfo structure lo
fec0: 6f 6b 73 20 6c 69 6b 65 0d 0a 20 20 20 20 20 20  oks like..      
fed0: 20 20 2f 2f 2f 20 74 68 69 73 3a 0d 0a 20 20 20    /// this:..   
fee0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
fef0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
ff00: 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
ff10: 2f 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  /  struct sqlite
ff20: 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 7b 0d 0a  3_index_info {..
ff30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 2f          ///    /
ff40: 2a 20 49 6e 70 75 74 73 20 2a 2f 0d 0a 20 20 20  * Inputs */..   
ff50: 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73       ///    cons
ff60: 74 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e  t int nConstrain
ff70: 74 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  t;   /* Number o
ff80: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
ff90: 6e 73 74 72 61 69 6e 74 20 2a 2f 0d 0a 20 20 20  nstraint */..   
ffa0: 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73       ///    cons
ffb0: 74 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  t struct sqlite3
ffc0: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
ffd0: 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t {..        ///
ffe0: 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 75         int iColu
fff0: 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
10000 43 6f 6c 75 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68  Column on left-h
10010 61 6e 64 20 73 69 64 65 20 6f 66 0d 0a 20 20 20  and side of..   
10020 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10040 20 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61 69        * constrai
10050 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  nt */..        /
10060 2f 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65  //       unsigne
10070 64 20 63 68 61 72 20 6f 70 3b 20 20 20 20 20 2f  d char op;     /
10080 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70 65  * Constraint ope
10090 72 61 74 6f 72 20 2a 2f 0d 0a 20 20 20 20 20 20  rator */..      
100a0 20 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73 69    ///       unsi
100b0 67 6e 65 64 20 63 68 61 72 20 75 73 61 62 6c 65  gned char usable
100c0 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69  ; /* True if thi
100d0 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  s constraint is 
100e0 75 73 61 62 6c 65 20 2a 2f 0d 0a 20 20 20 20 20  usable */..     
100f0 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74     ///       int
10100 20 69 54 65 72 6d 4f 66 66 73 65 74 3b 20 20 20   iTermOffset;   
10110 20 20 20 2f 2a 20 55 73 65 64 20 69 6e 74 65 72     /* Used inter
10120 6e 61 6c 6c 79 20 2d 20 78 42 65 73 74 49 6e 64  nally - xBestInd
10130 65 78 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20  ex should..     
10140 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10160 20 20 20 20 2a 20 69 67 6e 6f 72 65 20 2a 2f 0d      * ignore */.
10170 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
10180 7d 20 2a 63 6f 6e 73 74 20 61 43 6f 6e 73 74 72  } *const aConstr
10190 61 69 6e 74 3b 20 20 20 20 2f 2a 20 54 61 62 6c  aint;    /* Tabl
101a0 65 20 6f 66 20 57 48 45 52 45 20 63 6c 61 75 73  e of WHERE claus
101b0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
101c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
101d0 20 63 6f 6e 73 74 20 69 6e 74 20 6e 4f 72 64 65   const int nOrde
101e0 72 42 79 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rBy;      /* Num
101f0 62 65 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20  ber of terms in 
10200 74 68 65 20 4f 52 44 45 52 20 42 59 0d 0a 20 20  the ORDER BY..  
10210 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10230 20 20 20 20 20 20 20 2a 20 63 6c 61 75 73 65 20         * clause 
10240 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
10250 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20     const struct 
10260 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72  sqlite3_index_or
10270 64 65 72 62 79 20 7b 0d 0a 20 20 20 20 20 20 20  derby {..       
10280 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74 20 69   ///       int i
10290 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
102a0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
102b0 72 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  r */..        //
102c0 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /       unsigned
102d0 20 63 68 61 72 20 64 65 73 63 3b 20 20 20 2f 2a   char desc;   /*
102e0 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 2e 20   True for DESC. 
102f0 20 46 61 6c 73 65 20 66 6f 72 20 41 53 43 2e 20   False for ASC. 
10300 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
10310 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 4f 72 64     } *const aOrd
10320 65 72 42 79 3b 20 20 20 20 20 20 20 2f 2a 20 54  erBy;       /* T
10330 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
10340 73 65 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  se */..        /
10350 2f 2f 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 73  //    /* Outputs
10360 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
10370 20 20 20 20 73 74 72 75 63 74 20 73 71 6c 69 74      struct sqlit
10380 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
10390 69 6e 74 5f 75 73 61 67 65 20 7b 0d 0a 20 20 20  int_usage {..   
103a0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 69 6e       ///      in
103b0 74 20 61 72 67 76 49 6e 64 65 78 3b 20 20 20 20  t argvIndex;    
103c0 20 20 20 20 20 2f 2a 20 69 66 20 67 72 65 61 74       /* if great
103d0 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 63 6f  er than zero, co
103e0 6e 73 74 72 61 69 6e 74 20 69 73 0d 0a 20 20 20  nstraint is..   
103f0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
10400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10410 20 20 20 20 20 20 2a 20 70 61 72 74 20 6f 66 20        * part of 
10420 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72 20  argv to xFilter 
10430 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
10440 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68       unsigned ch
10450 61 72 20 6f 6d 69 74 3b 20 20 20 20 2f 2a 20 44  ar omit;    /* D
10460 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20 74 65 73  o not code a tes
10470 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20  t for this..    
10480 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
10490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104a0 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61 69 6e       * constrain
104b0 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t */..        //
104c0 2f 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 43  /    } *const aC
104d0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 3b 0d  onstraintUsage;.
104e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
104f0 69 6e 74 20 69 64 78 4e 75 6d 3b 20 20 20 20 20  int idxNum;     
10500 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10510 65 72 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74  er used to ident
10520 69 66 79 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  ify the index */
10530 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
10540 20 63 68 61 72 20 2a 69 64 78 53 74 72 3b 20 20   char *idxStr;  
10550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
10560 69 6e 67 2c 20 70 6f 73 73 69 62 6c 79 20 6f 62  ing, possibly ob
10570 74 61 69 6e 65 64 20 66 72 6f 6d 0d 0a 20 20 20  tained from..   
10580 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105a0 20 20 20 20 20 20 2a 20 73 71 6c 69 74 65 33 5f        * sqlite3_
105b0 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0d 0a 20 20 20  malloc() */..   
105c0 20 20 20 20 20 2f 2f 2f 20 20 20 20 69 6e 74 20       ///    int 
105d0 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53 74 72  needToFreeIdxStr
105e0 3b 20 20 20 20 2f 2a 20 46 72 65 65 20 69 64 78  ;    /* Free idx
105f0 53 74 72 20 75 73 69 6e 67 20 73 71 6c 69 74 65  Str using sqlite
10600 33 5f 66 72 65 65 28 29 20 69 66 0d 0a 20 20 20  3_free() if..   
10610 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 20 20 20 20 2a 20 74 72 75 65 20 2a 2f 0d        * true */.
10640 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
10650 69 6e 74 20 6f 72 64 65 72 42 79 43 6f 6e 73 75  int orderByConsu
10660 6d 65 64 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  med;     /* True
10670 20 69 66 20 6f 75 74 70 75 74 20 69 73 20 61 6c   if output is al
10680 72 65 61 64 79 20 6f 72 64 65 72 65 64 20 2a 2f  ready ordered */
10690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
106a0 20 64 6f 75 62 6c 65 20 65 73 74 69 6d 61 74 65   double estimate
106b0 64 43 6f 73 74 3b 20 20 20 20 2f 2a 20 45 73 74  dCost;    /* Est
106c0 69 6d 61 74 65 64 20 63 6f 73 74 20 6f 66 20 75  imated cost of u
106d0 73 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  sing this index 
106e0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
106f0 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   };..        ///
10700 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20   </code>..      
10710 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
10720 20 20 20 20 20 20 2f 2f 2f 20 49 6e 20 61 64 64        /// In add
10730 69 74 69 6f 6e 2c 20 74 68 65 72 65 20 61 72 65  ition, there are
10740 20 73 6f 6d 65 20 64 65 66 69 6e 65 64 20 63 6f   some defined co
10750 6e 73 74 61 6e 74 73 3a 0d 0a 20 20 20 20 20 20  nstants:..      
10760 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
10770 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65         /// <code
10780 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  >..        ///  
10790 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
107a0 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
107b0 45 51 20 20 20 20 32 0d 0a 20 20 20 20 20 20 20  EQ    2..       
107c0 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51   ///  #define SQ
107d0 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54  LITE_INDEX_CONST
107e0 52 41 49 4e 54 5f 47 54 20 20 20 20 34 0d 0a 20  RAINT_GT    4.. 
107f0 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66         ///  #def
10800 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58  ine SQLITE_INDEX
10810 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 4c 45 20 20  _CONSTRAINT_LE  
10820 20 20 38 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f    8..        ///
10830 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
10840 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e  _INDEX_CONSTRAIN
10850 54 5f 4c 54 20 20 20 20 31 36 0d 0a 20 20 20 20  T_LT    16..    
10860 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65      ///  #define
10870 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f   SQLITE_INDEX_CO
10880 4e 53 54 52 41 49 4e 54 5f 47 45 20 20 20 20 33  NSTRAINT_GE    3
10890 32 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  2..        ///  
108a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
108b0 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
108c0 4d 41 54 43 48 20 36 34 0d 0a 20 20 20 20 20 20  MATCH 64..      
108d0 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20    /// </code>.. 
108e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
108f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
10900 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 63  he SQLite core c
10910 61 6c 6c 73 20 74 68 65 20 78 42 65 73 74 49 6e  alls the xBestIn
10920 64 65 78 20 6d 65 74 68 6f 64 20 77 68 65 6e 20  dex method when 
10930 69 74 20 69 73 20 63 6f 6d 70 69 6c 69 6e 67 20  it is compiling 
10940 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 71  a..        /// q
10950 75 65 72 79 20 74 68 61 74 20 69 6e 76 6f 6c 76  uery that involv
10960 65 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  es a virtual tab
10970 6c 65 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  le. In other wor
10980 64 73 2c 20 53 51 4c 69 74 65 20 63 61 6c 6c 73  ds, SQLite calls
10990 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
109a0 69 73 20 6d 65 74 68 6f 64 20 77 68 65 6e 20 69  is method when i
109b0 74 20 69 73 20 72 75 6e 6e 69 6e 67 20 73 71 6c  t is running sql
109c0 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
109d0 72 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74  r the equivalent
109e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 42  ...        /// B
109f0 79 20 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d  y calling this m
10a00 65 74 68 6f 64 2c 20 74 68 65 20 53 51 4c 69 74  ethod, the SQLit
10a10 65 20 63 6f 72 65 20 69 73 20 73 61 79 69 6e 67  e core is saying
10a20 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0d   to the virtual.
10a30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62  .        /// tab
10a40 6c 65 20 74 68 61 74 20 69 74 20 6e 65 65 64 73  le that it needs
10a50 20 74 6f 20 61 63 63 65 73 73 20 73 6f 6d 65 20   to access some 
10a60 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 72 6f  subset of the ro
10a70 77 73 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ws in the..     
10a80 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
10a90 61 62 6c 65 20 61 6e 64 20 69 74 20 77 61 6e 74  able and it want
10aa0 73 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 6d 6f  s to know the mo
10ab0 73 74 20 65 66 66 69 63 69 65 6e 74 20 77 61 79  st efficient way
10ac0 20 74 6f 20 64 6f 0d 0a 20 20 20 20 20 20 20 20   to do..        
10ad0 2f 2f 2f 20 74 68 61 74 20 61 63 63 65 73 73 2e  /// that access.
10ae0 20 54 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   The xBestIndex 
10af0 6d 65 74 68 6f 64 20 72 65 70 6c 69 65 73 20 77  method replies w
10b00 69 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ith information 
10b10 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  that..        //
10b20 2f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  / the SQLite cor
10b30 65 20 63 61 6e 20 74 68 65 6e 20 75 73 65 20 74  e can then use t
10b40 6f 20 63 6f 6e 64 75 63 74 20 61 6e 20 65 66 66  o conduct an eff
10b50 69 63 69 65 6e 74 20 73 65 61 72 63 68 20 6f 66  icient search of
10b60 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
10b70 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  / virtual table.
10b80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
10b90 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
10ba0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
10bb0 20 20 20 2f 2f 2f 20 57 68 69 6c 65 20 63 6f 6d     /// While com
10bc0 70 69 6c 69 6e 67 20 61 20 73 69 6e 67 6c 65 20  piling a single 
10bd0 53 51 4c 20 71 75 65 72 79 2c 20 74 68 65 20 53  SQL query, the S
10be0 51 4c 69 74 65 20 63 6f 72 65 20 6d 69 67 68 74  QLite core might
10bf0 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   call..        /
10c00 2f 2f 20 78 42 65 73 74 49 6e 64 65 78 20 6d 75  // xBestIndex mu
10c10 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 77 69 74  ltiple times wit
10c20 68 20 64 69 66 66 65 72 65 6e 74 20 73 65 74 74  h different sett
10c30 69 6e 67 73 20 69 6e 0d 0a 20 20 20 20 20 20 20  ings in..       
10c40 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64   /// sqlite3_ind
10c50 65 78 5f 69 6e 66 6f 2e 20 54 68 65 20 53 51 4c  ex_info. The SQL
10c60 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 74 68  ite core will th
10c70 65 6e 20 73 65 6c 65 63 74 20 74 68 65 0d 0a 20  en select the.. 
10c80 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 62 69         /// combi
10c90 6e 61 74 69 6f 6e 20 74 68 61 74 20 61 70 70 65  nation that appe
10ca0 61 72 73 20 74 6f 20 67 69 76 65 20 74 68 65 20  ars to give the 
10cb0 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
10cc0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
10cd0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
10ce0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
10cf0 20 20 20 20 2f 2f 2f 20 42 65 66 6f 72 65 20 63      /// Before c
10d00 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65 74 68  alling this meth
10d10 6f 64 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63  od, the SQLite c
10d20 6f 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  ore initializes 
10d30 61 6e 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20  an instance..   
10d40 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20       /// of the 
10d50 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
10d60 66 6f 20 73 74 72 75 63 74 75 72 65 20 77 69 74  fo structure wit
10d70 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
10d80 6f 75 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20  out the..       
10d90 20 2f 2f 2f 20 71 75 65 72 79 20 74 68 61 74 20   /// query that 
10da0 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  it is currently 
10db0 74 72 79 69 6e 67 20 74 6f 20 70 72 6f 63 65 73  trying to proces
10dc0 73 2e 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74  s. This informat
10dd0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ion..        ///
10de0 20 64 65 72 69 76 65 73 20 6d 61 69 6e 6c 79 20   derives mainly 
10df0 66 72 6f 6d 20 74 68 65 20 57 48 45 52 45 20 63  from the WHERE c
10e00 6c 61 75 73 65 20 61 6e 64 20 4f 52 44 45 52 20  lause and ORDER 
10e10 42 59 20 6f 72 20 47 52 4f 55 50 20 42 59 0d 0a  BY or GROUP BY..
10e20 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6c 61 75          /// clau
10e30 73 65 73 20 6f 66 20 74 68 65 20 71 75 65 72 79  ses of the query
10e40 2c 20 62 75 74 20 61 6c 73 6f 20 66 72 6f 6d 20  , but also from 
10e50 61 6e 79 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20  any ON or USING 
10e60 63 6c 61 75 73 65 73 20 69 66 20 74 68 65 0d 0a  clauses if the..
10e70 20 20 20 20 20 20 20 20 2f 2f 2f 20 71 75 65 72          /// quer
10e80 79 20 69 73 20 61 20 6a 6f 69 6e 2e 20 54 68 65  y is a join. The
10e90 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
10ea0 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
10eb0 65 20 70 72 6f 76 69 64 65 73 20 74 6f 0d 0a 20  e provides to.. 
10ec0 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 78         /// the x
10ed0 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
10ee0 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
10ef0 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
10f00 63 74 75 72 65 20 74 68 61 74 20 69 73 0d 0a 20  cture that is.. 
10f10 20 20 20 20 20 20 20 2f 2f 2f 20 6d 61 72 6b 65         /// marke
10f20 64 20 61 73 20 22 49 6e 70 75 74 73 22 2e 20 54  d as "Inputs". T
10f30 68 65 20 22 4f 75 74 70 75 74 73 22 20 73 65 63  he "Outputs" sec
10f40 74 69 6f 6e 20 69 73 20 69 6e 69 74 69 61 6c 69  tion is initiali
10f50 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 0d 0a 20 20  zed to zero...  
10f60 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
10f70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
10f80 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
10f90 2f 2f 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69  // The informati
10fa0 6f 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  on in the sqlite
10fb0 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72  3_index_info str
10fc0 75 63 74 75 72 65 20 69 73 20 65 70 68 65 6d 65  ucture is epheme
10fd0 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ral..        ///
10fe0 20 61 6e 64 20 6d 61 79 20 62 65 20 6f 76 65 72   and may be over
10ff0 77 72 69 74 74 65 6e 20 6f 72 20 64 65 61 6c 6c  written or deall
11000 6f 63 61 74 65 64 20 61 73 20 73 6f 6f 6e 20 61  ocated as soon a
11010 73 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  s the xBestIndex
11020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
11030 74 68 6f 64 20 72 65 74 75 72 6e 73 2e 20 49 66  thod returns. If
11040 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   the xBestIndex 
11050 6d 65 74 68 6f 64 20 6e 65 65 64 73 20 74 6f 20  method needs to 
11060 72 65 6d 65 6d 62 65 72 20 61 6e 79 20 70 61 72  remember any par
11070 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  t..        /// o
11080 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
11090 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75  dex_info structu
110a0 72 65 2c 20 69 74 20 73 68 6f 75 6c 64 20 6d 61  re, it should ma
110b0 6b 65 20 61 20 63 6f 70 79 2e 20 43 61 72 65 0d  ke a copy. Care.
110c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 75 73  .        /// mus
110d0 74 20 62 65 20 74 61 6b 65 20 74 6f 20 73 74 6f  t be take to sto
110e0 72 65 20 74 68 65 20 63 6f 70 79 20 69 6e 20 61  re the copy in a
110f0 20 70 6c 61 63 65 20 77 68 65 72 65 20 69 74 20   place where it 
11100 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20  will be..       
11110 20 2f 2f 2f 20 64 65 61 6c 6c 6f 63 61 74 65 64   /// deallocated
11120 2c 20 73 75 63 68 20 61 73 20 69 6e 20 74 68 65  , such as in the
11130 20 69 64 78 53 74 72 20 66 69 65 6c 64 20 77 69   idxStr field wi
11140 74 68 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78  th needToFreeIdx
11150 53 74 72 20 73 65 74 0d 0a 20 20 20 20 20 20 20  Str set..       
11160 20 2f 2f 2f 20 74 6f 20 31 2e 0d 0a 20 20 20 20   /// to 1...    
11170 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
11180 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
11190 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
111a0 20 4e 6f 74 65 20 74 68 61 74 20 78 42 65 73 74   Note that xBest
111b0 49 6e 64 65 78 20 77 69 6c 6c 20 61 6c 77 61 79  Index will alway
111c0 73 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f  s be called befo
111d0 72 65 20 78 46 69 6c 74 65 72 2c 20 73 69 6e 63  re xFilter, sinc
111e0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
111f0 68 65 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64  he idxNum and id
11200 78 53 74 72 20 6f 75 74 70 75 74 73 20 66 72 6f  xStr outputs fro
11210 6d 20 78 42 65 73 74 49 6e 64 65 78 20 61 72 65  m xBestIndex are
11220 20 72 65 71 75 69 72 65 64 20 69 6e 70 75 74 73   required inputs
11230 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f  ..        /// to
11240 20 78 46 69 6c 74 65 72 2e 20 48 6f 77 65 76 65   xFilter. Howeve
11250 72 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 67  r, there is no g
11260 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 78 46  uarantee that xF
11270 69 6c 74 65 72 20 77 69 6c 6c 20 62 65 0d 0a 20  ilter will be.. 
11280 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65         /// calle
11290 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  d following a su
112a0 63 63 65 73 73 66 75 6c 20 78 42 65 73 74 49 6e  ccessful xBestIn
112b0 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
112c0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
112d0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
112e0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
112f0 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
11300 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
11310 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
11320 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
11330 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
11340 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
11350 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
11360 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
11370 20 20 20 20 2f 2f 2f 20 32 2e 33 2e 31 20 49 6e      /// 2.3.1 In
11380 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  puts..        //
11390 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
113a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
113b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d         /// The m
113c0 61 69 6e 20 74 68 69 6e 67 20 74 68 61 74 20 74  ain thing that t
113d0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69  he SQLite core i
113e0 73 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 6d 6d  s trying to comm
113f0 75 6e 69 63 61 74 65 20 74 6f 20 74 68 65 0d 0a  unicate to the..
11400 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74          /// virt
11410 75 61 6c 20 74 61 62 6c 65 20 69 73 20 74 68 65  ual table is the
11420 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61   constraints tha
11430 74 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  t are available 
11440 74 6f 20 6c 69 6d 69 74 20 74 68 65 0d 0a 20 20  to limit the..  
11450 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72        /// number
11460 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20 6e 65   of rows that ne
11470 65 64 20 74 6f 20 62 65 20 73 65 61 72 63 68 65  ed to be searche
11480 64 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69  d. The aConstrai
11490 6e 74 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20 20  nt[] array..    
114a0 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73      /// contains
114b0 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   one entry for e
114c0 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ach constraint. 
114d0 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 65 78  There will be ex
114e0 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f  actly..        /
114f0 2f 2f 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 65  // nConstraint e
11500 6e 74 72 69 65 73 20 69 6e 20 74 68 61 74 20 61  ntries in that a
11510 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rray...        /
11520 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
11530 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
11540 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 61 63 68          /// Each
11550 20 63 6f 6e 73 74 72 61 69 6e 74 20 77 69 6c 6c   constraint will
11560 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
11570 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57 48 45   term in the WHE
11580 52 45 20 63 6c 61 75 73 65 20 6f 72 20 69 6e 0d  RE clause or in.
11590 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 20 55  .        /// a U
115a0 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73  SING or ON claus
115b0 65 20 74 68 61 74 20 69 73 20 6f 66 20 74 68 65  e that is of the
115c0 20 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 2f   form..        /
115d0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
115e0 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
115f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
11600 63 6f 6c 75 6d 6e 20 4f 50 20 45 58 50 52 0d 0a  column OP EXPR..
11610 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f          /// </co
11620 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
11630 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
11640 20 2f 2f 2f 20 57 68 65 72 65 20 22 63 6f 6c 75   /// Where "colu
11650 6d 6e 22 20 69 73 20 61 20 63 6f 6c 75 6d 6e 20  mn" is a column 
11660 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  in the virtual t
11670 61 62 6c 65 2c 20 4f 50 20 69 73 20 61 6e 20 6f  able, OP is an o
11680 70 65 72 61 74 6f 72 0d 0a 20 20 20 20 20 20 20  perator..       
11690 20 2f 2f 2f 20 6c 69 6b 65 20 22 3d 22 20 6f 72   /// like "=" or
116a0 20 22 26 6c 74 3b 22 2c 20 61 6e 64 20 45 58 50   "&lt;", and EXP
116b0 52 20 69 73 20 61 6e 20 61 72 62 69 74 72 61 72  R is an arbitrar
116c0 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 53 6f  y expression. So
116d0 2c 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  , for..        /
116e0 2f 2f 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74  // example, if t
116f0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
11700 63 6f 6e 74 61 69 6e 65 64 20 61 20 74 65 72 6d  contained a term
11710 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20 20   like this:..   
11720 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
11730 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
11740 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
11750 2f 20 20 20 20 20 20 20 20 20 20 61 20 3d 20 35  /          a = 5
11760 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
11770 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
11780 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
11790 20 20 20 2f 2f 2f 20 54 68 65 6e 20 6f 6e 65 20     /// Then one 
117a0 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
117b0 74 73 20 77 6f 75 6c 64 20 62 65 20 6f 6e 20 74  ts would be on t
117c0 68 65 20 22 61 22 20 63 6f 6c 75 6d 6e 20 77 69  he "a" column wi
117d0 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  th..        /// 
117e0 6f 70 65 72 61 74 6f 72 20 22 3d 22 20 61 6e 64  operator "=" and
117f0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
11800 66 20 22 35 22 2e 20 43 6f 6e 73 74 72 61 69 6e  f "5". Constrain
11810 74 73 20 6e 65 65 64 20 6e 6f 74 20 68 61 76 65  ts need not have
11820 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   a..        /// 
11830 6c 69 74 65 72 61 6c 20 72 65 70 72 65 73 65 6e  literal represen
11840 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48  tation of the WH
11850 45 52 45 20 63 6c 61 75 73 65 2e 20 54 68 65 20  ERE clause. The 
11860 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 0d  query optimizer.
11870 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 69 67  .        /// mig
11880 68 74 20 6d 61 6b 65 20 74 72 61 6e 73 66 6f 72  ht make transfor
11890 6d 61 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 57  mations to the W
118a0 48 45 52 45 20 63 6c 61 75 73 65 20 69 6e 20 6f  HERE clause in o
118b0 72 64 65 72 20 74 6f 20 65 78 74 72 61 63 74 0d  rder to extract.
118c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 20  .        /// as 
118d0 6d 61 6e 79 20 63 6f 6e 73 74 72 61 69 6e 74 73  many constraints
118e0 20 61 73 20 69 74 20 63 61 6e 2e 20 53 6f 2c 20   as it can. So, 
118f0 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  for example, if 
11900 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
11910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
11920 6e 74 61 69 6e 65 64 20 73 6f 6d 65 74 68 69 6e  ntained somethin
11930 67 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20  g like this:..  
11940 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
11950 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
11960 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
11970 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20 42 45  //          x BE
11980 54 57 45 45 4e 20 31 30 20 41 4e 44 20 31 30 30  TWEEN 10 AND 100
11990 20 41 4e 44 20 39 39 39 26 67 74 3b 79 0d 0a 20   AND 999&gt;y.. 
119a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
119b0 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
119c0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
119d0 2f 2f 2f 20 54 68 65 20 71 75 65 72 79 20 6f 70  /// The query op
119e0 74 69 6d 69 7a 65 72 20 6d 69 67 68 74 20 74 72  timizer might tr
119f0 61 6e 73 6c 61 74 65 20 74 68 69 73 20 69 6e 74  anslate this int
11a00 6f 20 74 68 72 65 65 20 73 65 70 61 72 61 74 65  o three separate
11a10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
11a20 6e 73 74 72 61 69 6e 74 73 3a 0d 0a 20 20 20 20  nstraints:..    
11a30 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
11a40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f  .        /// <co
11a50 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
11a60 20 20 20 20 20 20 20 20 20 20 78 20 26 67 74 3b            x &gt;
11a70 3d 20 31 30 0d 0a 20 20 20 20 20 20 20 20 2f 2f  = 10..        //
11a80 2f 20 20 20 20 20 20 20 20 20 20 78 20 26 6c 74  /          x &lt
11a90 3b 3d 20 31 30 30 0d 0a 20 20 20 20 20 20 20 20  ;= 100..        
11aa0 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 79 20 26  ///          y &
11ab0 6c 74 3b 20 39 39 39 0d 0a 20 20 20 20 20 20 20  lt; 999..       
11ac0 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
11ad0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
11ae0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 6f  ..        /// Fo
11af0 72 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e  r each constrain
11b00 74 2c 20 74 68 65 20 61 43 6f 6e 73 74 72 61 69  t, the aConstrai
11b10 6e 74 5b 5d 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  nt[].iColumn fie
11b20 6c 64 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20  ld indicates..  
11b30 20 20 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20        /// which 
11b40 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 6f  column appears o
11b50 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  n the left-hand 
11b60 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  side of the cons
11b70 74 72 61 69 6e 74 2e 20 54 68 65 0d 0a 20 20 20  traint. The..   
11b80 20 20 20 20 20 2f 2f 2f 20 66 69 72 73 74 20 63       /// first c
11b90 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 76 69 72  olumn of the vir
11ba0 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 63 6f  tual table is co
11bb0 6c 75 6d 6e 20 30 2e 20 54 68 65 20 72 6f 77 69  lumn 0. The rowi
11bc0 64 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  d of the..      
11bd0 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61    /// virtual ta
11be0 62 6c 65 20 69 73 20 63 6f 6c 75 6d 6e 20 2d 31  ble is column -1
11bf0 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e  . The aConstrain
11c00 74 5b 5d 2e 6f 70 20 66 69 65 6c 64 20 69 6e 64  t[].op field ind
11c10 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20  icates..        
11c20 2f 2f 2f 20 77 68 69 63 68 20 6f 70 65 72 61 74  /// which operat
11c30 6f 72 20 69 73 20 75 73 65 64 2e 20 54 68 65 20  or is used. The 
11c40 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e  SQLITE_INDEX_CON
11c50 53 54 52 41 49 4e 54 5f 2a 20 63 6f 6e 73 74 61  STRAINT_* consta
11c60 6e 74 73 20 6d 61 70 0d 0a 20 20 20 20 20 20 20  nts map..       
11c70 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 63 6f 6e   /// integer con
11c80 73 74 61 6e 74 73 20 69 6e 74 6f 20 6f 70 65 72  stants into oper
11c90 61 74 6f 72 20 76 61 6c 75 65 73 2e 20 43 6f 6c  ator values. Col
11ca0 75 6d 6e 73 20 6f 63 63 75 72 20 69 6e 20 74 68  umns occur in th
11cb0 65 20 6f 72 64 65 72 0d 0a 20 20 20 20 20 20 20  e order..       
11cc0 20 2f 2f 2f 20 74 68 65 79 20 77 65 72 65 20 64   /// they were d
11cd0 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 63 61  efined by the ca
11ce0 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 64 65  ll to sqlite3_de
11cf0 63 6c 61 72 65 5f 76 74 61 62 28 29 20 69 6e 20  clare_vtab() in 
11d00 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
11d10 20 78 43 72 65 61 74 65 20 6f 72 20 78 43 6f 6e   xCreate or xCon
11d20 6e 65 63 74 20 6d 65 74 68 6f 64 2e 20 48 69 64  nect method. Hid
11d30 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  den columns are 
11d40 63 6f 75 6e 74 65 64 20 77 68 65 6e 0d 0a 20 20  counted when..  
11d50 20 20 20 20 20 20 2f 2f 2f 20 64 65 74 65 72 6d        /// determ
11d60 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  ining the column
11d70 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20   index...       
11d80 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
11d90 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
11da0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
11db0 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20  e aConstraint[] 
11dc0 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 73 20 69  array contains i
11dd0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
11de0 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e 74 73   all constraints
11df0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
11e00 61 74 20 61 70 70 6c 79 20 74 6f 20 74 68 65 20  at apply to the 
11e10 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 42  virtual table. B
11e20 75 74 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 63  ut some of the c
11e30 6f 6e 73 74 72 61 69 6e 74 73 20 6d 69 67 68 74  onstraints might
11e40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f  ..        /// no
11e50 74 20 62 65 20 75 73 61 62 6c 65 20 62 65 63 61  t be usable beca
11e60 75 73 65 20 6f 66 20 74 68 65 20 77 61 79 20 74  use of the way t
11e70 61 62 6c 65 73 20 61 72 65 20 6f 72 64 65 72 65  ables are ordere
11e80 64 20 69 6e 20 61 20 6a 6f 69 6e 2e 20 54 68 65  d in a join. The
11e90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 42  ..        /// xB
11ea0 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
11eb0 6d 75 73 74 20 74 68 65 72 65 66 6f 72 65 20 6f  must therefore o
11ec0 6e 6c 79 20 63 6f 6e 73 69 64 65 72 20 63 6f 6e  nly consider con
11ed0 73 74 72 61 69 6e 74 73 20 74 68 61 74 0d 0a 20  straints that.. 
11ee0 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 76 65 20         /// have 
11ef0 61 6e 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d  an aConstraint[]
11f00 2e 75 73 61 62 6c 65 20 66 6c 61 67 20 77 68 69  .usable flag whi
11f10 63 68 20 69 73 20 74 72 75 65 2e 0d 0a 20 20 20  ch is true...   
11f20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
11f30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
11f40 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
11f50 2f 20 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f  / In addition to
11f60 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f   WHERE clause co
11f70 6e 73 74 72 61 69 6e 74 73 2c 20 74 68 65 20 53  nstraints, the S
11f80 51 4c 69 74 65 20 63 6f 72 65 20 61 6c 73 6f 20  QLite core also 
11f90 74 65 6c 6c 73 0d 0a 20 20 20 20 20 20 20 20 2f  tells..        /
11fa0 2f 2f 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  // the xBestInde
11fb0 78 20 6d 65 74 68 6f 64 20 61 62 6f 75 74 20 74  x method about t
11fc0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
11fd0 73 65 2e 20 28 49 6e 20 61 6e 20 61 67 67 72 65  se. (In an aggre
11fe0 67 61 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gate..        //
11ff0 2f 20 71 75 65 72 79 2c 20 74 68 65 20 53 51 4c  / query, the SQL
12000 69 74 65 20 63 6f 72 65 20 6d 69 67 68 74 20 70  ite core might p
12010 75 74 20 69 6e 20 47 52 4f 55 50 20 42 59 20 63  ut in GROUP BY c
12020 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f  lause informatio
12030 6e 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n in..        //
12040 2f 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20 4f  / place of the O
12050 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
12060 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 62 75 74 20  nformation, but 
12070 74 68 69 73 20 66 61 63 74 20 73 68 6f 75 6c 64  this fact should
12080 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f   not..        //
12090 2f 20 6d 61 6b 65 20 61 6e 79 20 64 69 66 66 65  / make any diffe
120a0 72 65 6e 63 65 20 74 6f 20 74 68 65 20 78 42 65  rence to the xBe
120b0 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 2e 29  stIndex method.)
120c0 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
120d0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
120e0 2f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  / ORDER BY claus
120f0 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  e are columns in
12100 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
12110 6c 65 2c 20 74 68 65 6e 20 6e 4f 72 64 65 72 42  le, then nOrderB
12120 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  y..        /// w
12130 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65  ill be the numbe
12140 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20 74 68  r of terms in th
12150 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
12160 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20  e and the..     
12170 20 20 20 2f 2f 2f 20 61 4f 72 64 65 72 42 79 5b     /// aOrderBy[
12180 5d 20 61 72 72 61 79 20 77 69 6c 6c 20 69 64 65  ] array will ide
12190 6e 74 69 66 79 20 74 68 65 20 63 6f 6c 75 6d 6e  ntify the column
121a0 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 69   for each term i
121b0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
121c0 2f 2f 20 6f 72 64 65 72 20 62 79 20 63 6c 61 75  // order by clau
121d0 73 65 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  se and whether o
121e0 72 20 6e 6f 74 20 74 68 61 74 20 63 6f 6c 75 6d  r not that colum
121f0 6e 20 69 73 20 41 53 43 20 6f 72 20 44 45 53 43  n is ASC or DESC
12200 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
12210 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
12220 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
12230 20 20 20 20 2f 2f 2f 20 32 2e 33 2e 32 20 4f 75      /// 2.3.2 Ou
12240 74 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  tputs..        /
12250 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
12260 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
12270 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 69 76 65          /// Give
12280 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20 69 6e 66  n all of the inf
12290 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 2c 20  ormation above, 
122a0 74 68 65 20 6a 6f 62 20 6f 66 20 74 68 65 20 78  the job of the x
122b0 42 65 73 74 49 6e 64 65 78 0d 0a 20 20 20 20 20  BestIndex..     
122c0 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 69 74     /// method it
122d0 20 74 6f 20 66 69 67 75 72 65 20 6f 75 74 20 74   to figure out t
122e0 68 65 20 62 65 73 74 20 77 61 79 20 74 6f 20 73  he best way to s
122f0 65 61 72 63 68 20 74 68 65 20 76 69 72 74 75 61  earch the virtua
12300 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
12310 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
12320 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
12330 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
12340 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
12350 74 68 6f 64 20 66 69 6c 6c 73 20 74 68 65 20 69  thod fills the i
12360 64 78 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72  dxNum and idxStr
12370 20 66 69 65 6c 64 73 20 77 69 74 68 0d 0a 20 20   fields with..  
12380 20 20 20 20 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d        /// inform
12390 61 74 69 6f 6e 20 74 68 61 74 20 63 6f 6d 6d 75  ation that commu
123a0 6e 69 63 61 74 65 73 20 61 6e 20 69 6e 64 65 78  nicates an index
123b0 69 6e 67 20 73 74 72 61 74 65 67 79 20 74 6f 20  ing strategy to 
123c0 74 68 65 20 78 46 69 6c 74 65 72 0d 0a 20 20 20  the xFilter..   
123d0 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e       /// method.
123e0 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   The information
123f0 20 69 6e 20 69 64 78 4e 75 6d 20 61 6e 64 20 69   in idxNum and i
12400 64 78 53 74 72 20 69 73 20 61 72 62 69 74 72 61  dxStr is arbitra
12410 72 79 20 61 73 20 66 61 72 20 61 73 0d 0a 20 20  ry as far as..  
12420 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 53 51        /// the SQ
12430 4c 69 74 65 20 63 6f 72 65 20 69 73 20 63 6f 6e  Lite core is con
12440 63 65 72 6e 65 64 2e 20 54 68 65 20 53 51 4c 69  cerned. The SQLi
12450 74 65 20 63 6f 72 65 20 6a 75 73 74 20 63 6f 70  te core just cop
12460 69 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ies the..       
12470 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   /// information
12480 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
12490 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
124a0 41 6e 79 20 64 65 73 69 72 65 64 20 6d 65 61 6e  Any desired mean
124b0 69 6e 67 20 63 61 6e 0d 0a 20 20 20 20 20 20 20  ing can..       
124c0 20 2f 2f 2f 20 62 65 20 61 73 73 69 67 6e 65 64   /// be assigned
124d0 20 74 6f 20 69 64 78 4e 75 6d 20 61 6e 64 20 69   to idxNum and i
124e0 64 78 53 74 72 20 61 73 20 6c 6f 6e 67 20 61 73  dxStr as long as
124f0 20 78 42 65 73 74 49 6e 64 65 78 20 61 6e 64 20   xBestIndex and 
12500 78 46 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20  xFilter..       
12510 20 2f 2f 2f 20 61 67 72 65 65 20 6f 6e 20 77 68   /// agree on wh
12520 61 74 20 74 68 61 74 20 6d 65 61 6e 69 6e 67 20  at that meaning 
12530 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  is...        ///
12540 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
12550 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
12560 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 64        /// The id
12570 78 53 74 72 20 76 61 6c 75 65 20 6d 61 79 20 62  xStr value may b
12580 65 20 61 20 73 74 72 69 6e 67 20 6f 62 74 61 69  e a string obtai
12590 6e 65 64 20 66 72 6f 6d 20 61 6e 20 53 51 4c 69  ned from an SQLi
125a0 74 65 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20  te memory..     
125b0 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f     /// allocatio
125c0 6e 20 66 75 6e 63 74 69 6f 6e 20 73 75 63 68 20  n function such 
125d0 61 73 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  as sqlite3_mprin
125e0 74 66 28 29 2e 20 49 66 20 74 68 69 73 20 69 73  tf(). If this is
125f0 20 74 68 65 20 63 61 73 65 2c 0d 0a 20 20 20 20   the case,..    
12600 20 20 20 20 2f 2f 2f 20 74 68 65 6e 20 74 68 65      /// then the
12610 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53 74   needToFreeIdxSt
12620 72 20 66 6c 61 67 20 6d 75 73 74 20 62 65 20 73  r flag must be s
12630 65 74 20 74 6f 20 74 72 75 65 20 73 6f 20 74 68  et to true so th
12640 61 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  at the..        
12650 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72 65 20  /// SQLite core 
12660 77 69 6c 6c 20 6b 6e 6f 77 20 74 6f 20 63 61 6c  will know to cal
12670 6c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 29  l sqlite3_free()
12680 20 6f 6e 20 74 68 61 74 20 73 74 72 69 6e 67 20   on that string 
12690 77 68 65 6e 20 69 74 0d 0a 20 20 20 20 20 20 20  when it..       
126a0 20 2f 2f 2f 20 68 61 73 20 66 69 6e 69 73 68 65   /// has finishe
126b0 64 20 77 69 74 68 20 69 74 2c 20 61 6e 64 20 74  d with it, and t
126c0 68 75 73 20 61 76 6f 69 64 20 61 20 6d 65 6d 6f  hus avoid a memo
126d0 72 79 20 6c 65 61 6b 2e 0d 0a 20 20 20 20 20 20  ry leak...      
126e0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
126f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
12700 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  >..        /// I
12710 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
12720 62 6c 65 20 77 69 6c 6c 20 6f 75 74 70 75 74 20  ble will output 
12730 72 6f 77 73 20 69 6e 20 74 68 65 20 6f 72 64 65  rows in the orde
12740 72 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  r specified by t
12750 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
12760 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
12770 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 42   then the orderB
12780 79 43 6f 6e 73 75 6d 65 64 20 66 6c 61 67 20 6d  yConsumed flag m
12790 61 79 20 62 65 20 73 65 74 20 74 6f 20 74 72 75  ay be set to tru
127a0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
127b0 49 66 20 74 68 65 20 6f 75 74 70 75 74 20 69 73  If the output is
127c0 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c   not automatical
127d0 6c 79 20 69 6e 20 74 68 65 20 63 6f 72 72 65 63  ly in the correc
127e0 74 20 6f 72 64 65 72 20 74 68 65 6e 0d 0a 20 20  t order then..  
127f0 20 20 20 20 20 20 2f 2f 2f 20 6f 72 64 65 72 42        /// orderB
12800 79 43 6f 6e 73 75 6d 65 64 20 6d 75 73 74 20 62  yConsumed must b
12810 65 20 6c 65 66 74 20 69 6e 20 69 74 73 20 64 65  e left in its de
12820 66 61 75 6c 74 20 66 61 6c 73 65 20 73 65 74 74  fault false sett
12830 69 6e 67 2e 20 54 68 69 73 0d 0a 20 20 20 20 20  ing. This..     
12840 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 69 6e 64 69     /// will indi
12850 63 61 74 65 20 74 6f 20 74 68 65 20 53 51 4c 69  cate to the SQLi
12860 74 65 20 63 6f 72 65 20 74 68 61 74 20 69 74 20  te core that it 
12870 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 64 6f 20  will need to do 
12880 61 20 73 65 70 61 72 61 74 65 0d 0a 20 20 20 20  a separate..    
12890 20 20 20 20 2f 2f 2f 20 73 6f 72 74 69 6e 67 20      /// sorting 
128a0 70 61 73 73 20 6f 76 65 72 20 74 68 65 20 64 61  pass over the da
128b0 74 61 20 61 66 74 65 72 20 69 74 20 63 6f 6d 65  ta after it come
128c0 73 20 6f 75 74 20 6f 66 20 74 68 65 20 76 69 72  s out of the vir
128d0 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
128e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
128f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
12900 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
12910 2f 20 54 68 65 20 65 73 74 69 6d 61 74 65 64 43  / The estimatedC
12920 6f 73 74 20 66 69 65 6c 64 20 73 68 6f 75 6c 64  ost field should
12930 20 62 65 20 73 65 74 20 74 6f 20 74 68 65 20 65   be set to the e
12940 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
12950 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
12960 64 69 73 6b 20 61 63 63 65 73 73 20 6f 70 65 72  disk access oper
12970 61 74 69 6f 6e 73 20 72 65 71 75 69 72 65 64 20  ations required 
12980 74 6f 20 65 78 65 63 75 74 65 20 74 68 69 73 20  to execute this 
12990 71 75 65 72 79 20 61 67 61 69 6e 73 74 20 74 68  query against th
129a0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
129b0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68  irtual table. Th
129c0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69  e SQLite core wi
129d0 6c 6c 20 6f 66 74 65 6e 20 63 61 6c 6c 20 78 42  ll often call xB
129e0 65 73 74 49 6e 64 65 78 20 6d 75 6c 74 69 70 6c  estIndex multipl
129f0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
12a00 69 6d 65 73 20 77 69 74 68 20 64 69 66 66 65 72  imes with differ
12a10 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  ent constraints,
12a20 20 6f 62 74 61 69 6e 20 6d 75 6c 74 69 70 6c 65   obtain multiple
12a30 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 2c   cost estimates,
12a40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
12a50 65 6e 20 63 68 6f 6f 73 65 20 74 68 65 20 71 75  en choose the qu
12a60 65 72 79 20 70 6c 61 6e 20 74 68 61 74 20 67 69  ery plan that gi
12a70 76 65 73 20 74 68 65 20 6c 6f 77 65 73 74 20 65  ves the lowest e
12a80 73 74 69 6d 61 74 65 2e 0d 0a 20 20 20 20 20 20  stimate...      
12a90 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
12aa0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
12ab0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
12ac0 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73  he aConstraintUs
12ad0 61 67 65 5b 5d 20 61 72 72 61 79 20 63 6f 6e 74  age[] array cont
12ae0 61 69 6e 73 20 6f 6e 65 20 65 6c 65 6d 65 6e 74  ains one element
12af0 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65   for each of the
12b00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 43  ..        /// nC
12b10 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72  onstraint constr
12b20 61 69 6e 74 73 20 69 6e 20 74 68 65 20 69 6e 70  aints in the inp
12b30 75 74 73 20 73 65 63 74 69 6f 6e 20 6f 66 20 74  uts section of t
12b40 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
12b50 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
12b60 66 6f 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  fo structure. Th
12b70 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  e aConstraintUsa
12b80 67 65 5b 5d 20 61 72 72 61 79 20 69 73 20 75 73  ge[] array is us
12b90 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
12ba0 62 79 20 78 42 65 73 74 49 6e 64 65 78 20 74 6f  by xBestIndex to
12bb0 20 74 65 6c 6c 20 74 68 65 20 63 6f 72 65 20 68   tell the core h
12bc0 6f 77 20 69 74 20 69 73 20 75 73 69 6e 67 20 74  ow it is using t
12bd0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d  he constraints..
12be0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
12bf0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
12c00 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
12c10 20 20 2f 2f 2f 20 54 68 65 20 78 42 65 73 74 49    /// The xBestI
12c20 6e 64 65 78 20 6d 65 74 68 6f 64 20 6d 61 79 20  ndex method may 
12c30 73 65 74 20 61 43 6f 6e 73 74 72 61 69 6e 74 55  set aConstraintU
12c40 73 61 67 65 5b 5d 2e 61 72 67 76 49 6e 64 65 78  sage[].argvIndex
12c50 20 65 6e 74 72 69 65 73 0d 0a 20 20 20 20 20 20   entries..      
12c60 20 20 2f 2f 2f 20 74 6f 20 76 61 6c 75 65 73 20    /// to values 
12c70 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 6e 65  greater than one
12c80 2e 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 65 6e  . Exactly one en
12c90 74 72 79 20 73 68 6f 75 6c 64 20 62 65 20 73 65  try should be se
12ca0 74 20 74 6f 20 31 2c 0d 0a 20 20 20 20 20 20 20  t to 1,..       
12cb0 20 2f 2f 2f 20 61 6e 6f 74 68 65 72 20 74 6f 20   /// another to 
12cc0 32 2c 20 61 6e 6f 74 68 65 72 20 74 6f 20 33 2c  2, another to 3,
12cd0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 75 70   and so forth up
12ce0 20 74 6f 20 61 73 20 6d 61 6e 79 20 6f 72 20 61   to as many or a
12cf0 73 20 66 65 77 20 61 73 0d 0a 20 20 20 20 20 20  s few as..      
12d00 20 20 2f 2f 2f 20 74 68 65 20 78 42 65 73 74 49    /// the xBestI
12d10 6e 64 65 78 20 6d 65 74 68 6f 64 20 77 61 6e 74  ndex method want
12d20 73 2e 20 54 68 65 20 45 58 50 52 20 6f 66 20 74  s. The EXPR of t
12d30 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
12d40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
12d50 6e 73 74 72 61 69 6e 74 73 20 77 69 6c 6c 20 74  nstraints will t
12d60 68 65 6e 20 62 65 20 70 61 73 73 65 64 20 69 6e  hen be passed in
12d70 20 61 73 20 74 68 65 20 61 72 67 76 5b 5d 20 70   as the argv[] p
12d80 61 72 61 6d 65 74 65 72 73 20 74 6f 0d 0a 20 20  arameters to..  
12d90 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74 65        /// xFilte
12da0 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
12db0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
12dc0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
12dd0 20 20 20 20 20 2f 2f 2f 20 46 6f 72 20 65 78 61       /// For exa
12de0 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 61 43 6f  mple, if the aCo
12df0 6e 73 74 72 61 69 6e 74 5b 33 5d 2e 61 72 67 76  nstraint[3].argv
12e00 49 6e 64 65 78 20 69 73 20 73 65 74 20 74 6f 20  Index is set to 
12e10 31 2c 20 74 68 65 6e 20 77 68 65 6e 0d 0a 20 20  1, then when..  
12e20 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74 65        /// xFilte
12e30 72 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65  r is called, the
12e40 20 61 72 67 76 5b 30 5d 20 70 61 73 73 65 64 20   argv[0] passed 
12e50 74 6f 20 78 46 69 6c 74 65 72 20 77 69 6c 6c 20  to xFilter will 
12e60 68 61 76 65 20 74 68 65 20 45 58 50 52 0d 0a 20  have the EXPR.. 
12e70 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65         /// value
12e80 20 6f 66 20 74 68 65 20 61 43 6f 6e 73 74 72 61   of the aConstra
12e90 69 6e 74 5b 33 5d 20 63 6f 6e 73 74 72 61 69 6e  int[3] constrain
12ea0 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
12eb0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
12ec0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
12ed0 20 20 20 20 20 2f 2f 2f 20 42 79 20 64 65 66 61       /// By defa
12ee0 75 6c 74 2c 20 74 68 65 20 53 51 4c 69 74 65 20  ult, the SQLite 
12ef0 63 6f 72 65 20 64 6f 75 62 6c 65 20 63 68 65 63  core double chec
12f00 6b 73 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e  ks all constrain
12f10 74 73 20 6f 6e 20 65 61 63 68 0d 0a 20 20 20 20  ts on each..    
12f20 20 20 20 20 2f 2f 2f 20 72 6f 77 20 6f 66 20 74      /// row of t
12f30 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
12f40 20 74 68 61 74 20 69 74 20 72 65 63 65 69 76 65   that it receive
12f50 73 2e 20 49 66 20 73 75 63 68 20 61 20 63 68 65  s. If such a che
12f60 63 6b 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f  ck is..        /
12f70 2f 2f 20 72 65 64 75 6e 64 61 6e 74 2c 20 74 68  // redundant, th
12f80 65 20 78 42 65 73 74 46 69 6c 74 65 72 20 6d 65  e xBestFilter me
12f90 74 68 6f 64 20 63 61 6e 20 73 75 70 70 72 65 73  thod can suppres
12fa0 73 20 74 68 61 74 20 64 6f 75 62 6c 65 2d 63 68  s that double-ch
12fb0 65 63 6b 20 62 79 0d 0a 20 20 20 20 20 20 20 20  eck by..        
12fc0 2f 2f 2f 20 73 65 74 74 69 6e 67 20 61 43 6f 6e  /// setting aCon
12fd0 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e 6f  straintUsage[].o
12fe0 6d 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  mit...        //
12ff0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
13000 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
13010 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
13020 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
13030 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
13040 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
13050 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
13060 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
13070 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
13080 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
13090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
130a0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65  aram name="pInde
130b0 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  x">..        ///
130c0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
130d0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
130e0 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74  e3_index_info st
130f0 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
13100 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
13110 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
13120 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
13130 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
13140 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
13150 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
13160 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
13170 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
13180 64 65 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a  de xBestIndex(..
13190 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
131a0 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
131b0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 49         IntPtr pI
131c0 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ndex..          
131d0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
131e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
131f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13220 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
13230 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
13240 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
13250 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13260 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 72 65  / This method re
13270 6c 65 61 73 65 73 20 61 20 63 6f 6e 6e 65 63 74  leases a connect
13280 69 6f 6e 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ion to a virtual
13290 20 74 61 62 6c 65 2e 20 4f 6e 6c 79 20 74 68 65   table. Only the
132a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
132b0 6c 69 74 65 33 5f 76 74 61 62 20 6f 62 6a 65 63  lite3_vtab objec
132c0 74 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  t is destroyed. 
132d0 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  The virtual tabl
132e0 65 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20  e is not..      
132f0 20 20 2f 2f 2f 20 64 65 73 74 72 6f 79 65 64 20    /// destroyed 
13300 61 6e 64 20 61 6e 79 20 62 61 63 6b 69 6e 67 20  and any backing 
13310 73 74 6f 72 65 20 61 73 73 6f 63 69 61 74 65 64  store associated
13320 20 77 69 74 68 20 74 68 65 20 76 69 72 74 75 61   with the virtua
13330 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
13340 20 2f 2f 2f 20 70 65 72 73 69 73 74 73 2e 20 54   /// persists. T
13350 68 69 73 20 6d 65 74 68 6f 64 20 75 6e 64 6f 65  his method undoe
13360 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 78 43  s the work of xC
13370 6f 6e 6e 65 63 74 2e 0d 0a 20 20 20 20 20 20 20  onnect...       
13380 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
13390 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
133a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
133b0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 61 20 64  is method is a d
133c0 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61 20  estructor for a 
133d0 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68  connection to th
133e0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
133f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
13400 6e 74 72 61 73 74 20 74 68 69 73 20 6d 65 74 68  ntrast this meth
13410 6f 64 20 77 69 74 68 20 78 44 65 73 74 72 6f 79  od with xDestroy
13420 2e 20 54 68 65 20 78 44 65 73 74 72 6f 79 20 69  . The xDestroy i
13430 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 0d 0a  s a destructor..
13440 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20          /// for 
13450 74 68 65 20 65 6e 74 69 72 65 20 76 69 72 74 75  the entire virtu
13460 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
13470 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
13480 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
13490 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
134a0 54 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 20  The xDisconnect 
134b0 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72  method is requir
134c0 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72  ed for every vir
134d0 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
134e0 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e      /// implemen
134f0 74 61 74 69 6f 6e 2c 20 74 68 6f 75 67 68 20 69  tation, though i
13500 74 20 69 73 20 61 63 63 65 70 74 61 62 6c 65 20  t is acceptable 
13510 66 6f 72 20 74 68 65 20 78 44 69 73 63 6f 6e 6e  for the xDisconn
13520 65 63 74 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  ect and..       
13530 20 2f 2f 2f 20 78 44 65 73 74 72 6f 79 20 6d 65   /// xDestroy me
13540 74 68 6f 64 73 20 74 6f 20 62 65 20 74 68 65 20  thods to be the 
13550 73 61 6d 65 20 66 75 6e 63 74 69 6f 6e 20 69 66  same function if
13560 20 74 68 61 74 20 6d 61 6b 65 73 20 73 65 6e 73   that makes sens
13570 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  e for..        /
13580 2f 2f 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  // the particula
13590 72 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  r virtual table.
135a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
135b0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
135c0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
135d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
135e0 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
135f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
13600 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
13610 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
13620 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
13630 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
13640 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
13650 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
13660 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
13670 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
13680 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
13690 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
136a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
136b0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
136c0 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20   xDisconnect(.. 
136d0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
136e0 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
136f0 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
13700 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
13710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
13750 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
13760 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
13770 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
13780 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
13790 20 72 65 6c 65 61 73 65 73 20 61 20 63 6f 6e 6e   releases a conn
137a0 65 63 74 69 6f 6e 20 74 6f 20 61 20 76 69 72 74  ection to a virt
137b0 75 61 6c 20 74 61 62 6c 65 2c 20 6a 75 73 74 20  ual table, just 
137c0 6c 69 6b 65 20 74 68 65 0d 0a 20 20 20 20 20 20  like the..      
137d0 20 20 2f 2f 2f 20 78 44 69 73 63 6f 6e 6e 65 63    /// xDisconnec
137e0 74 20 6d 65 74 68 6f 64 2c 20 61 6e 64 20 69 74  t method, and it
137f0 20 61 6c 73 6f 20 64 65 73 74 72 6f 79 73 20 74   also destroys t
13800 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 61  he underlying ta
13810 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
13820 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
13830 20 54 68 69 73 20 6d 65 74 68 6f 64 20 75 6e 64   This method und
13840 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20  oes the work of 
13850 78 43 72 65 61 74 65 2e 0d 0a 20 20 20 20 20 20  xCreate...      
13860 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
13870 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
13880 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
13890 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 20 6d  he xDisconnect m
138a0 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
138b0 77 68 65 6e 65 76 65 72 20 61 20 64 61 74 61 62  whenever a datab
138c0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  ase connection..
138d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61 74          /// that
138e0 20 75 73 65 73 20 61 20 76 69 72 74 75 61 6c 20   uses a virtual 
138f0 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e  table is closed.
13900 20 54 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65   The xDestroy me
13910 74 68 6f 64 20 69 73 20 6f 6e 6c 79 0d 0a 20 20  thod is only..  
13920 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64        /// called
13930 20 77 68 65 6e 20 61 20 44 52 4f 50 20 54 41 42   when a DROP TAB
13940 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
13950 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 73 74  executed against
13960 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20   the virtual..  
13970 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e        /// table.
13980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
13990 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
139a0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
139b0 20 20 20 2f 2f 2f 20 54 68 65 20 78 44 65 73 74     /// The xDest
139c0 72 6f 79 20 6d 65 74 68 6f 64 20 69 73 20 72 65  roy method is re
139d0 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
139e0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
139f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
13a00 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75  ementation, thou
13a10 67 68 20 69 74 20 69 73 20 61 63 63 65 70 74 61  gh it is accepta
13a20 62 6c 65 20 66 6f 72 20 74 68 65 20 78 44 69 73  ble for the xDis
13a30 63 6f 6e 6e 65 63 74 20 61 6e 64 0d 0a 20 20 20  connect and..   
13a40 20 20 20 20 20 2f 2f 2f 20 78 44 65 73 74 72 6f       /// xDestro
13a50 79 20 6d 65 74 68 6f 64 73 20 74 6f 20 62 65 20  y methods to be 
13a60 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74 69 6f  the same functio
13a70 6e 20 69 66 20 74 68 61 74 20 6d 61 6b 65 73 20  n if that makes 
13a80 73 65 6e 73 65 20 66 6f 72 0d 0a 20 20 20 20 20  sense for..     
13a90 20 20 20 2f 2f 2f 20 74 68 65 20 70 61 72 74 69     /// the parti
13aa0 63 75 6c 61 72 20 76 69 72 74 75 61 6c 20 74 61  cular virtual ta
13ab0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
13ac0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
13ad0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
13ae0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
13af0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
13b00 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
13b10 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
13b20 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
13b30 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
13b40 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
13b50 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
13b60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
13b70 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
13b80 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
13b90 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
13ba0 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
13bb0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
13bc0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
13bd0 43 6f 64 65 20 78 44 65 73 74 72 6f 79 28 0d 0a  Code xDestroy(..
13be0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
13bf0 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
13c00 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
13c10 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
13c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
13c60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
13c70 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
13c80 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
13c90 20 20 2f 2f 2f 20 54 68 65 20 78 4f 70 65 6e 20    /// The xOpen 
13ca0 6d 65 74 68 6f 64 20 63 72 65 61 74 65 73 20 61  method creates a
13cb0 20 6e 65 77 20 63 75 72 73 6f 72 20 75 73 65 64   new cursor used
13cc0 20 66 6f 72 20 61 63 63 65 73 73 69 6e 67 20 28   for accessing (
13cd0 72 65 61 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  read..        //
13ce0 2f 20 61 6e 64 2f 6f 72 20 77 72 69 74 69 6e 67  / and/or writing
13cf0 29 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ) a virtual tabl
13d00 65 2e 20 41 20 73 75 63 63 65 73 73 66 75 6c 20  e. A successful 
13d10 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
13d20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
13d30 6d 65 74 68 6f 64 20 77 69 6c 6c 20 61 6c 6c 6f  method will allo
13d40 63 61 74 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  cate the memory 
13d50 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
13d60 76 74 61 62 5f 63 75 72 73 6f 72 20 28 6f 72 20  vtab_cursor (or 
13d70 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  a..        /// s
13d80 75 62 63 6c 61 73 73 29 2c 20 69 6e 69 74 69 61  ubclass), initia
13d90 6c 69 7a 65 20 74 68 65 20 6e 65 77 20 6f 62 6a  lize the new obj
13da0 65 63 74 2c 20 61 6e 64 20 6d 61 6b 65 20 2a 70  ect, and make *p
13db0 70 43 75 72 73 6f 72 20 70 6f 69 6e 74 20 74 6f  pCursor point to
13dc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
13dd0 65 20 6e 65 77 20 6f 62 6a 65 63 74 2e 20 54 68  e new object. Th
13de0 65 20 73 75 63 63 65 73 73 66 75 6c 20 63 61 6c  e successful cal
13df0 6c 20 74 68 65 6e 20 72 65 74 75 72 6e 73 20 53  l then returns S
13e00 51 4c 49 54 45 5f 4f 4b 2e 0d 0a 20 20 20 20 20  QLITE_OK...     
13e10 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
13e20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
13e30 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
13e40 46 6f 72 20 65 76 65 72 79 20 73 75 63 63 65 73  For every succes
13e50 73 66 75 6c 20 63 61 6c 6c 20 74 6f 20 74 68 69  sful call to thi
13e60 73 20 6d 65 74 68 6f 64 2c 20 74 68 65 20 53 51  s method, the SQ
13e70 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 0d 0a  Lite core will..
13e80 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74 65          /// late
13e90 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 43 6c  r invoke the xCl
13ea0 6f 73 65 20 6d 65 74 68 6f 64 20 74 6f 20 64 65  ose method to de
13eb0 73 74 72 6f 79 20 74 68 65 20 61 6c 6c 6f 63 61  stroy the alloca
13ec0 74 65 64 20 63 75 72 73 6f 72 2e 0d 0a 20 20 20  ted cursor...   
13ed0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
13ee0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
13ef0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13f00 2f 20 54 68 65 20 78 4f 70 65 6e 20 6d 65 74 68  / The xOpen meth
13f10 6f 64 20 6e 65 65 64 20 6e 6f 74 20 69 6e 69 74  od need not init
13f20 69 61 6c 69 7a 65 20 74 68 65 20 70 56 74 61 62  ialize the pVtab
13f30 20 66 69 65 6c 64 20 6f 66 20 74 68 65 0d 0a 20   field of the.. 
13f40 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
13f50 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 73  e3_vtab_cursor s
13f60 74 72 75 63 74 75 72 65 2e 20 54 68 65 20 53 51  tructure. The SQ
13f70 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 74  Lite core will t
13f80 61 6b 65 20 63 61 72 65 20 6f 66 0d 0a 20 20 20  ake care of..   
13f90 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 63 68       /// that ch
13fa0 6f 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ore automaticall
13fb0 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
13fc0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
13fd0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
13fe0 20 20 20 20 20 2f 2f 2f 20 41 20 76 69 72 74 75       /// A virtu
13ff0 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
14000 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  ntation must be 
14010 61 62 6c 65 20 74 6f 20 73 75 70 70 6f 72 74 20  able to support 
14020 61 6e 20 61 72 62 69 74 72 61 72 79 0d 0a 20 20  an arbitrary..  
14030 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72        /// number
14040 20 6f 66 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73   of simultaneous
14050 6c 79 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2e  ly open cursors.
14060 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
14070 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
14080 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
14090 20 20 20 2f 2f 2f 20 57 68 65 6e 20 69 6e 69 74     /// When init
140a0 69 61 6c 6c 79 20 6f 70 65 6e 65 64 2c 20 74 68  ially opened, th
140b0 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 20 61  e cursor is in a
140c0 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74  n undefined stat
140d0 65 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  e. The..        
140e0 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72 65 20  /// SQLite core 
140f0 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20  will invoke the 
14100 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
14110 6e 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69  n the cursor pri
14120 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  or to..        /
14130 2f 2f 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74  // any attempt t
14140 6f 20 70 6f 73 69 74 69 6f 6e 20 6f 72 20 72 65  o position or re
14150 61 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73  ad from the curs
14160 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  or...        ///
14170 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
14180 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
14190 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4f        /// The xO
141a0 70 65 6e 20 6d 65 74 68 6f 64 20 69 73 20 72 65  pen method is re
141b0 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
141c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
141d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
141e0 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
141f0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
14200 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
14210 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
14220 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
14230 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
14240 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
14250 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
14260 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
14270 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
14280 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
14290 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
142a0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
142b0 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
142c0 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
142d0 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
142e0 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
142f0 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20  dified to point 
14300 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a 20 20  to the newly..  
14310 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 65        /// create
14320 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  d native sqlite3
14330 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
14340 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
14350 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
14360 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
14370 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
14380 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
14390 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
143a0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
143b0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
143c0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
143d0 45 72 72 6f 72 43 6f 64 65 20 78 4f 70 65 6e 28  ErrorCode xOpen(
143e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
143f0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
14400 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
14410 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
14420 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
14430 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
14440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
14480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
14490 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
144a0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
144b0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6c       /// The xCl
144c0 6f 73 65 20 6d 65 74 68 6f 64 20 63 6c 6f 73 65  ose method close
144d0 73 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69  s a cursor previ
144e0 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 62 79 20  ously opened by 
144f0 78 4f 70 65 6e 2e 20 54 68 65 0d 0a 20 20 20 20  xOpen. The..    
14500 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63      /// SQLite c
14510 6f 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ore will always 
14520 63 61 6c 6c 20 78 43 6c 6f 73 65 20 6f 6e 63 65  call xClose once
14530 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72   for each cursor
14540 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 20   opened..       
14550 20 2f 2f 2f 20 75 73 69 6e 67 20 78 4f 70 65 6e   /// using xOpen
14560 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
14570 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
14580 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
14590 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
145a0 68 6f 64 20 6d 75 73 74 20 72 65 6c 65 61 73 65  hod must release
145b0 20 61 6c 6c 20 72 65 73 6f 75 72 63 65 73 20 61   all resources a
145c0 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 68 65 0d  llocated by the.
145d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72  .        /// cor
145e0 72 65 73 70 6f 6e 64 69 6e 67 20 78 4f 70 65 6e  responding xOpen
145f0 20 63 61 6c 6c 2e 20 54 68 65 20 72 6f 75 74 69   call. The routi
14600 6e 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 63  ne will not be c
14610 61 6c 6c 65 64 20 61 67 61 69 6e 20 65 76 65 6e  alled again even
14620 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 66  ..        /// if
14630 20 69 74 20 72 65 74 75 72 6e 73 20 61 6e 20 65   it returns an e
14640 72 72 6f 72 2e 20 54 68 65 20 53 51 4c 69 74 65  rror. The SQLite
14650 20 63 6f 72 65 20 77 69 6c 6c 20 6e 6f 74 20 75   core will not u
14660 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  se the..        
14670 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /// sqlite3_vtab
14680 5f 63 75 72 73 6f 72 20 61 67 61 69 6e 20 61 66  _cursor again af
14690 74 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20  ter it has been 
146a0 63 6c 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  closed...       
146b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
146c0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
146d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
146e0 65 20 78 43 6c 6f 73 65 20 6d 65 74 68 6f 64 20  e xClose method 
146f0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
14700 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
14710 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
14720 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
14730 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
14740 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
14750 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
14760 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
14770 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
14780 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
14790 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
147a0 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
147b0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
147c0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
147d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
147e0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
147f0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
14800 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
14810 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
14820 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
14830 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
14840 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
14850 45 72 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73 65  ErrorCode xClose
14860 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
14870 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
14880 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
14890 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
148a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
148b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
148c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
148d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
148e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
148f0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
14900 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
14910 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
14920 6d 65 74 68 6f 64 20 62 65 67 69 6e 73 20 61 20  method begins a 
14930 73 65 61 72 63 68 20 6f 66 20 61 20 76 69 72 74  search of a virt
14940 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 65 20 66  ual table. The f
14950 69 72 73 74 20 61 72 67 75 6d 65 6e 74 0d 0a 20  irst argument.. 
14960 20 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 61 20         /// is a 
14970 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 62 79  cursor opened by
14980 20 78 4f 70 65 6e 2e 20 54 68 65 20 6e 65 78 74   xOpen. The next
14990 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 20 64 65   two argument de
149a0 66 69 6e 65 20 61 0d 0a 20 20 20 20 20 20 20 20  fine a..        
149b0 2f 2f 2f 20 70 61 72 74 69 63 75 6c 61 72 20 73  /// particular s
149c0 65 61 72 63 68 20 69 6e 64 65 78 20 70 72 65 76  earch index prev
149d0 69 6f 75 73 6c 79 20 63 68 6f 73 65 6e 20 62 79  iously chosen by
149e0 20 78 42 65 73 74 49 6e 64 65 78 2e 20 54 68 65   xBestIndex. The
149f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70  ..        /// sp
14a00 65 63 69 66 69 63 20 6d 65 61 6e 69 6e 67 73 20  ecific meanings 
14a10 6f 66 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64  of idxNum and id
14a20 78 53 74 72 20 61 72 65 20 75 6e 69 6d 70 6f 72  xStr are unimpor
14a30 74 61 6e 74 20 61 73 20 6c 6f 6e 67 20 61 73 0d  tant as long as.
14a40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 46 69  .        /// xFi
14a50 6c 74 65 72 20 61 6e 64 20 78 42 65 73 74 49 6e  lter and xBestIn
14a60 64 65 78 20 61 67 72 65 65 20 6f 6e 20 77 68 61  dex agree on wha
14a70 74 20 74 68 61 74 20 6d 65 61 6e 69 6e 67 20 69  t that meaning i
14a80 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
14a90 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
14aa0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
14ab0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65       /// The xBe
14ac0 73 74 49 6e 64 65 78 20 66 75 6e 63 74 69 6f 6e  stIndex function
14ad0 20 6d 61 79 20 68 61 76 65 20 72 65 71 75 65 73   may have reques
14ae0 74 65 64 20 74 68 65 20 76 61 6c 75 65 73 20 6f  ted the values o
14af0 66 20 63 65 72 74 61 69 6e 0d 0a 20 20 20 20 20  f certain..     
14b00 20 20 20 2f 2f 2f 20 65 78 70 72 65 73 73 69 6f     /// expressio
14b10 6e 73 20 75 73 69 6e 67 20 74 68 65 20 61 43 6f  ns using the aCo
14b20 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e  nstraintUsage[].
14b30 61 72 67 76 49 6e 64 65 78 20 76 61 6c 75 65 73  argvIndex values
14b40 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
14b50 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64   /// sqlite3_ind
14b60 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72  ex_info structur
14b70 65 2e 20 54 68 6f 73 65 20 76 61 6c 75 65 73 20  e. Those values 
14b80 61 72 65 20 70 61 73 73 65 64 20 74 6f 20 78 46  are passed to xF
14b90 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20 20 2f  ilter..        /
14ba0 2f 2f 20 75 73 69 6e 67 20 74 68 65 20 61 72 67  // using the arg
14bb0 63 20 61 6e 64 20 61 72 67 76 20 70 61 72 61 6d  c and argv param
14bc0 65 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  eters...        
14bd0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
14be0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
14bf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20  .        /// If 
14c00 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
14c10 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  e contains one o
14c20 72 20 6d 6f 72 65 20 72 6f 77 73 20 74 68 61 74  r more rows that
14c30 20 6d 61 74 63 68 20 74 68 65 0d 0a 20 20 20 20   match the..    
14c40 20 20 20 20 2f 2f 2f 20 73 65 61 72 63 68 20 63      /// search c
14c50 72 69 74 65 72 69 61 2c 20 74 68 65 6e 20 74 68  riteria, then th
14c60 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  e cursor must be
14c70 20 6c 65 66 74 20 70 6f 69 6e 74 20 61 74 20 74   left point at t
14c80 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20  he first..      
14c90 20 20 2f 2f 2f 20 72 6f 77 2e 20 53 75 62 73 65    /// row. Subse
14ca0 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 78  quent calls to x
14cb0 45 6f 66 20 6d 75 73 74 20 72 65 74 75 72 6e 20  Eof must return 
14cc0 66 61 6c 73 65 20 28 7a 65 72 6f 29 2e 20 49 66  false (zero). If
14cd0 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20   there..        
14ce0 2f 2f 2f 20 61 72 65 20 6e 6f 20 72 6f 77 73 20  /// are no rows 
14cf0 6d 61 74 63 68 2c 20 74 68 65 6e 20 74 68 65 20  match, then the 
14d00 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 6c  cursor must be l
14d10 65 66 74 20 69 6e 20 61 20 73 74 61 74 65 20 74  eft in a state t
14d20 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  hat..        ///
14d30 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20   will cause the 
14d40 78 45 6f 66 20 74 6f 20 72 65 74 75 72 6e 20 74  xEof to return t
14d50 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 2e 20  rue (non-zero). 
14d60 54 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e  The SQLite engin
14d70 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  e..        /// w
14d80 69 6c 6c 20 75 73 65 20 74 68 65 20 78 43 6f 6c  ill use the xCol
14d90 75 6d 6e 20 61 6e 64 20 78 52 6f 77 69 64 20 6d  umn and xRowid m
14da0 65 74 68 6f 64 73 20 74 6f 20 61 63 63 65 73 73  ethods to access
14db0 20 74 68 61 74 20 72 6f 77 20 63 6f 6e 74 65 6e   that row conten
14dc0 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
14dd0 54 68 65 20 78 4e 65 78 74 20 6d 65 74 68 6f 64  The xNext method
14de0 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
14df0 20 61 64 76 61 6e 63 65 20 74 6f 20 74 68 65 20   advance to the 
14e00 6e 65 78 74 20 72 6f 77 2e 0d 0a 20 20 20 20 20  next row...     
14e10 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
14e20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
14e30 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14e40 54 68 69 73 20 6d 65 74 68 6f 64 20 6d 75 73 74  This method must
14e50 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
14e60 4b 20 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c  K if successful,
14e70 20 6f 72 20 61 6e 20 73 71 6c 69 74 65 20 65 72   or an sqlite er
14e80 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ror..        ///
14e90 20 63 6f 64 65 20 69 66 20 61 6e 20 65 72 72 6f   code if an erro
14ea0 72 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20  r occurs...     
14eb0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
14ec0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
14ed0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14ee0 54 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  The xFilter meth
14ef0 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66  od is required f
14f00 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c  or every virtual
14f10 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
14f20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  /// implementati
14f30 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
14f40 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
14f50 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
14f60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
14f70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
14f80 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
14f90 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
14fa0 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
14fb0 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
14fc0 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
14fd0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
14fe0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
14ff0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
15000 65 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20 20 20  e="idxNum">..   
15010 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20       /// Number 
15020 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
15030 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
15040 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20  ed index...     
15050 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
15060 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
15070 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78 53 74 72  ram name="idxStr
15080 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
15090 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
150a0 65 72 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20  er to the UTF-8 
150b0 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 20 63  encoded string c
150c0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20  ontaining the.. 
150d0 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e         /// strin
150e0 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  g used to help i
150f0 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
15100 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20  cted index...   
15110 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
15120 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15130 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
15140 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
15150 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 61  The number of na
15160 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74 6f  tive pointers to
15170 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 73   sqlite3_value s
15180 74 72 75 63 74 75 72 65 73 20 73 70 65 63 69 66  tructures specif
15190 69 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ied..        ///
151a0 20 69 6e 20 3c 70 61 72 61 6d 72 65 66 20 6e 61   in <paramref na
151b0 6d 65 3d 22 61 72 67 76 22 20 2f 3e 2e 0d 0a 20  me="argv" />... 
151c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
151d0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
151e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
151f0 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gv">..        //
15200 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20 6e 61  / An array of na
15210 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74 6f  tive pointers to
15220 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 73   sqlite3_value s
15230 74 72 75 63 74 75 72 65 73 20 63 6f 6e 74 61 69  tructures contai
15240 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ning..        //
15250 2f 20 66 69 6c 74 65 72 69 6e 67 20 63 72 69 74  / filtering crit
15260 65 72 69 61 20 66 6f 72 20 74 68 65 20 73 65 6c  eria for the sel
15270 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20  ected index...  
15280 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
15290 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
152a0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
152b0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
152c0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
152d0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
152e0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
152f0 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
15300 6f 72 43 6f 64 65 20 78 46 69 6c 74 65 72 28 0d  orCode xFilter(.
15310 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
15320 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20  Ptr pCursor,..  
15330 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 64            int id
15340 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  xNum,..         
15350 20 20 20 49 6e 74 50 74 72 20 69 64 78 53 74 72     IntPtr idxStr
15360 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
15370 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
15380 20 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67        IntPtr arg
15390 76 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  v..            )
153a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
153b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
15400 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
15410 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
15420 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
15430 68 65 20 78 4e 65 78 74 20 6d 65 74 68 6f 64 20  he xNext method 
15440 61 64 76 61 6e 63 65 73 20 61 20 76 69 72 74 75  advances a virtu
15450 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  al table cursor 
15460 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20  to the next row 
15470 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
15480 61 20 72 65 73 75 6c 74 20 73 65 74 20 69 6e 69  a result set ini
15490 74 69 61 74 65 64 20 62 79 20 78 46 69 6c 74 65  tiated by xFilte
154a0 72 2e 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  r. If the cursor
154b0 20 69 73 20 61 6c 72 65 61 64 79 0d 0a 20 20 20   is already..   
154c0 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 69 6e       /// pointin
154d0 67 20 61 74 20 74 68 65 20 6c 61 73 74 20 72 6f  g at the last ro
154e0 77 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75 74  w when this rout
154f0 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2c 20 74  ine is called, t
15500 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  hen the..       
15510 20 2f 2f 2f 20 63 75 72 73 6f 72 20 6e 6f 20 6c   /// cursor no l
15520 6f 6e 67 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  onger points to 
15530 76 61 6c 69 64 20 64 61 74 61 20 61 6e 64 20 61  valid data and a
15540 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
15550 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
15560 20 2f 2f 2f 20 78 45 6f 66 20 6d 65 74 68 6f 64   /// xEof method
15570 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74 72 75   must return tru
15580 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 2e 20 49 66  e (non-zero). If
15590 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0d 0a   the cursor is..
155a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 63 63          /// succ
155b0 65 73 73 66 75 6c 6c 79 20 61 64 76 61 6e 63 65  essfully advance
155c0 64 20 74 6f 20 61 6e 6f 74 68 65 72 20 72 6f 77  d to another row
155d0 20 6f 66 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65   of content, the
155e0 6e 20 73 75 62 73 65 71 75 65 6e 74 0d 0a 20 20  n subsequent..  
155f0 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 73 20        /// calls 
15600 74 6f 20 78 45 6f 66 20 6d 75 73 74 20 72 65 74  to xEof must ret
15610 75 72 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f 29  urn false (zero)
15620 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15630 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
15640 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
15650 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
15660 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20  hod must return 
15670 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 73 75 63  SQLITE_OK if suc
15680 63 65 73 73 66 75 6c 2c 20 6f 72 20 61 6e 20 73  cessful, or an s
15690 71 6c 69 74 65 20 65 72 72 6f 72 0d 0a 20 20 20  qlite error..   
156a0 20 20 20 20 20 2f 2f 2f 20 63 6f 64 65 20 69 66       /// code if
156b0 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
156c0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
156d0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
156e0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
156f0 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4e 65 78      /// The xNex
15700 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  t method is requ
15710 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
15720 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
15730 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
15740 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
15750 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
15760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
15770 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
15780 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
15790 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
157a0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
157b0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
157c0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
157d0 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
157e0 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
157f0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
15800 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
15810 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
15820 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
15830 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
15840 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15850 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
15860 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
15870 64 65 20 78 4e 65 78 74 28 0d 0a 20 20 20 20 20  de xNext(..     
15880 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
15890 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
158a0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
158b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
158c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
15900 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
15910 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15920 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15930 2f 2f 20 54 68 65 20 78 45 6f 66 20 6d 65 74 68  // The xEof meth
15940 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20 66  od must return f
15950 61 6c 73 65 20 28 7a 65 72 6f 29 20 69 66 20 74  alse (zero) if t
15960 68 65 20 73 70 65 63 69 66 69 65 64 20 63 75 72  he specified cur
15970 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  sor..        ///
15980 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
15990 73 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  s to a valid row
159a0 20 6f 66 20 64 61 74 61 2c 20 6f 72 20 74 72 75   of data, or tru
159b0 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 0d 0a 20 20  e (non-zero)..  
159c0 20 20 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 77        /// otherw
159d0 69 73 65 2e 20 54 68 69 73 20 6d 65 74 68 6f 64  ise. This method
159e0 20 69 73 20 63 61 6c 6c 65 64 20 62 79 20 74 68   is called by th
159f0 65 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 6d 6d  e SQL engine imm
15a00 65 64 69 61 74 65 6c 79 0d 0a 20 20 20 20 20 20  ediately..      
15a10 20 20 2f 2f 2f 20 61 66 74 65 72 20 65 61 63 68    /// after each
15a20 20 78 46 69 6c 74 65 72 20 61 6e 64 20 78 4e 65   xFilter and xNe
15a30 78 74 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0d 0a  xt invocation...
15a40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
15a50 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
15a60 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
15a70 20 2f 2f 2f 20 54 68 65 20 78 45 6f 66 20 6d 65   /// The xEof me
15a80 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
15a90 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
15aa0 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
15ab0 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ntation...      
15ac0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
15ad0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
15ae0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
15af0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
15b00 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
15b10 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
15b20 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
15b30 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
15b40 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72  rsor derived str
15b50 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
15b60 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
15b70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
15b80 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
15b90 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 6e 6f  / Non-zero if no
15ba0 20 6d 6f 72 65 20 72 6f 77 73 20 61 72 65 20 61   more rows are a
15bb0 76 61 69 6c 61 62 6c 65 3b 20 7a 65 72 6f 20 6f  vailable; zero o
15bc0 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 20  therwise...     
15bd0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
15be0 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 78  >..        int x
15bf0 45 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Eof(..          
15c00 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72    IntPtr pCursor
15c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
15c20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
15c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c70 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
15c80 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
15c90 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
15ca0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
15cb0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69 6e  e SQLite core in
15cc0 76 6f 6b 65 73 20 74 68 69 73 20 6d 65 74 68 6f  vokes this metho
15cd0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 69  d in order to fi
15ce0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72  nd the value for
15cf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
15d00 65 20 4e 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e N-th column of
15d10 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
15d20 2e 20 4e 20 69 73 20 7a 65 72 6f 2d 62 61 73 65  . N is zero-base
15d30 64 20 73 6f 20 74 68 65 20 66 69 72 73 74 0d 0a  d so the first..
15d40 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6c 75          /// colu
15d50 6d 6e 20 69 73 20 6e 75 6d 62 65 72 65 64 20 30  mn is numbered 0
15d60 2e 20 54 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65  . The xColumn me
15d70 74 68 6f 64 20 6d 61 79 20 72 65 74 75 72 6e 20  thod may return 
15d80 69 74 73 20 72 65 73 75 6c 74 20 62 61 63 6b 0d  its result back.
15d90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
15da0 53 51 4c 69 74 65 20 75 73 69 6e 67 20 6f 6e 65  SQLite using one
15db0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
15dc0 67 20 69 6e 74 65 72 66 61 63 65 3a 0d 0a 20 20  g interface:..  
15dd0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
15de0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15df0 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
15e00 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
15e10 65 73 75 6c 74 5f 62 6c 6f 62 28 29 0d 0a 20 20  esult_blob()..  
15e20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71        ///     sq
15e30 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
15e40 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  ble()..        /
15e50 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
15e60 65 73 75 6c 74 5f 69 6e 74 28 29 0d 0a 20 20 20  esult_int()..   
15e70 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c       ///     sql
15e80 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
15e90 34 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  4()..        ///
15ea0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
15eb0 75 6c 74 5f 6e 75 6c 6c 28 29 0d 0a 20 20 20 20  ult_null()..    
15ec0 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69      ///     sqli
15ed0 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
15ee0 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  )..        ///  
15ef0 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
15f00 74 5f 74 65 78 74 31 36 28 29 0d 0a 20 20 20 20  t_text16()..    
15f10 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69      ///     sqli
15f20 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31  te3_result_text1
15f30 36 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  6le()..        /
15f40 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
15f50 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65 28 29  esult_text16be()
15f60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
15f70 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
15f80 5f 7a 65 72 6f 62 6c 6f 62 28 29 0d 0a 20 20 20  _zeroblob()..   
15f90 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
15fa0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
15fb0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
15fc0 2f 20 49 66 20 74 68 65 20 78 43 6f 6c 75 6d 6e  / If the xColumn
15fd0 20 6d 65 74 68 6f 64 20 69 6d 70 6c 65 6d 65 6e   method implemen
15fe0 74 61 74 69 6f 6e 20 63 61 6c 6c 73 20 6e 6f 6e  tation calls non
15ff0 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
16000 6e 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ns..        /// 
16010 61 62 6f 76 65 2c 20 74 68 65 6e 20 74 68 65 20  above, then the 
16020 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c  value of the col
16030 75 6d 6e 20 64 65 66 61 75 6c 74 73 20 74 6f 20  umn defaults to 
16040 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e 0d 0a 20 20  an SQL NULL...  
16050 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
16060 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16070 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
16080 2f 2f 20 54 6f 20 72 61 69 73 65 20 61 6e 20 65  // To raise an e
16090 72 72 6f 72 2c 20 74 68 65 20 78 43 6f 6c 75 6d  rror, the xColum
160a0 6e 20 6d 65 74 68 6f 64 20 73 68 6f 75 6c 64 20  n method should 
160b0 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 0d 0a  use one of the..
160c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 73 75          /// resu
160d0 6c 74 5f 74 65 78 74 28 29 20 6d 65 74 68 6f 64  lt_text() method
160e0 73 20 74 6f 20 73 65 74 20 74 68 65 20 65 72 72  s to set the err
160f0 6f 72 20 6d 65 73 73 61 67 65 20 74 65 78 74 2c  or message text,
16100 20 74 68 65 6e 20 72 65 74 75 72 6e 20 61 6e 0d   then return an.
16110 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 70 70  .        /// app
16120 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 63  ropriate error c
16130 6f 64 65 2e 20 54 68 65 20 78 43 6f 6c 75 6d 6e  ode. The xColumn
16140 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74   method must ret
16150 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 6f 6e  urn SQLITE_OK on
16160 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
16170 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
16180 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
16190 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
161a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
161b0 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20   xColumn method 
161c0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
161d0 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
161e0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
161f0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
16200 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
16210 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
16220 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
16230 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
16240 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
16250 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
16260 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
16270 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
16280 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
16290 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
162a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
162b0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
162c0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
162d0 70 43 6f 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20  pContext">..    
162e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
162f0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
16300 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
16310 74 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 62  t structure to b
16320 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20  e used..        
16330 2f 2f 2f 20 66 6f 72 20 72 65 74 75 72 6e 69 6e  /// for returnin
16340 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
16350 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20  column value to 
16360 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d  the SQLite core.
16370 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62  .        /// lib
16380 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
16390 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
163a0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
163b0 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
163c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 7a         /// The z
163d0 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20  ero-based index 
163e0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
163f0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
16400 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  aining the..    
16410 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 74 6f      /// value to
16420 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20   be returned... 
16430 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
16440 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
16450 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
16460 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
16470 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
16480 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
16490 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
164a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
164b0 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75 6d 6e 28  rorCode xColumn(
164c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
164d0 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20  tPtr pCursor,.. 
164e0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
164f0 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  r pContext,..   
16500 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
16510 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
16520 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
16530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16570 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16580 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
16590 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
165a0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
165b0 41 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 76  A successful inv
165c0 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
165d0 6d 65 74 68 6f 64 20 77 69 6c 6c 20 63 61 75 73  method will caus
165e0 65 20 2a 70 52 6f 77 69 64 20 74 6f 20 62 65 0d  e *pRowid to be.
165f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 6c  .        /// fil
16600 6c 65 64 20 77 69 74 68 20 74 68 65 20 72 6f 77  led with the row
16610 69 64 20 6f 66 20 72 6f 77 20 74 68 61 74 20 74  id of row that t
16620 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
16630 20 63 75 72 73 6f 72 20 70 43 75 72 20 69 73 0d   cursor pCur is.
16640 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 75 72  .        /// cur
16650 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
16660 61 74 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20  at. This method 
16670 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
16680 4b 20 6f 6e 20 73 75 63 63 65 73 73 2e 20 49 74  K on success. It
16690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65  ..        /// re
166a0 74 75 72 6e 73 20 61 6e 20 61 70 70 72 6f 70 72  turns an appropr
166b0 69 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65 20  iate error code 
166c0 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20  on failure...   
166d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
166e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
166f0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
16700 2f 20 54 68 65 20 78 52 6f 77 69 64 20 6d 65 74  / The xRowid met
16710 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
16720 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
16730 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
16740 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
16750 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
16760 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
16770 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
16780 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16790 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
167a0 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
167b0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
167c0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
167d0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
167e0 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
167f0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
16800 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
16810 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
16820 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
16830 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
16840 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
16850 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
16860 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
16870 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20  n the unique..  
16880 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
16890 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72  r row identifier
168a0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
168b0 20 72 6f 77 20 66 6f 72 20 74 68 65 20 73 70 65   row for the spe
168c0 63 69 66 69 65 64 20 63 75 72 73 6f 72 2e 0d 0a  cified cursor...
168d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
168e0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
168f0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
16900 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
16910 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
16920 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
16930 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
16940 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
16950 72 72 6f 72 43 6f 64 65 20 78 52 6f 77 49 64 28  rrorCode xRowId(
16960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
16970 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20  tPtr pCursor,.. 
16980 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c             ref l
16990 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20  ong rowId..     
169a0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
169b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
169c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
169d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
169e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
169f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
16a00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
16a10 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
16a20 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
16a30 20 20 20 2f 2f 2f 20 41 6c 6c 20 63 68 61 6e 67     /// All chang
16a40 65 73 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  es to a virtual 
16a50 74 61 62 6c 65 20 61 72 65 20 6d 61 64 65 20 75  table are made u
16a60 73 69 6e 67 20 74 68 65 20 78 55 70 64 61 74 65  sing the xUpdate
16a70 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
16a80 20 20 2f 2f 2f 20 54 68 69 73 20 6f 6e 65 20 6d    /// This one m
16a90 65 74 68 6f 64 20 63 61 6e 20 62 65 20 75 73 65  ethod can be use
16aa0 64 20 74 6f 20 69 6e 73 65 72 74 2c 20 64 65 6c  d to insert, del
16ab0 65 74 65 2c 20 6f 72 20 75 70 64 61 74 65 2e 0d  ete, or update..
16ac0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
16ad0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
16ae0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
16af0 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 63 20 70    /// The argc p
16b00 61 72 61 6d 65 74 65 72 20 73 70 65 63 69 66 69  arameter specifi
16b10 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  es the number of
16b20 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
16b30 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 2f 2f  argv..        //
16b40 2f 20 61 72 72 61 79 2e 20 54 68 65 20 76 61 6c  / array. The val
16b50 75 65 20 6f 66 20 61 72 67 63 20 77 69 6c 6c 20  ue of argc will 
16b60 62 65 20 31 20 66 6f 72 20 61 20 70 75 72 65 20  be 1 for a pure 
16b70 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e  delete operation
16b80 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
16b90 20 4e 2b 32 20 66 6f 72 20 61 6e 20 69 6e 73 65   N+2 for an inse
16ba0 72 74 20 6f 72 20 72 65 70 6c 61 63 65 20 6f 72  rt or replace or
16bb0 20 75 70 64 61 74 65 20 77 68 65 72 65 20 4e 20   update where N 
16bc0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
16bd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
16be0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
16bf0 6c 65 2e 20 49 6e 20 74 68 65 20 70 72 65 76 69  le. In the previ
16c00 6f 75 73 20 73 65 6e 74 65 6e 63 65 2c 20 4e 20  ous sentence, N 
16c10 69 6e 63 6c 75 64 65 73 20 61 6e 79 0d 0a 20 20  includes any..  
16c20 20 20 20 20 20 20 2f 2f 2f 20 68 69 64 64 65 6e        /// hidden
16c30 20 63 6f 6c 75 6d 6e 73 2e 0d 0a 20 20 20 20 20   columns...     
16c40 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
16c50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
16c60 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16c70 45 76 65 72 79 20 61 72 67 76 20 65 6e 74 72 79  Every argv entry
16c80 20 77 69 6c 6c 20 68 61 76 65 20 61 20 6e 6f 6e   will have a non
16c90 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 43  -NULL value in C
16ca0 20 62 75 74 20 6d 61 79 20 63 6f 6e 74 61 69 6e   but may contain
16cb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
16cc0 65 20 53 51 4c 20 76 61 6c 75 65 20 4e 55 4c 4c  e SQL value NULL
16cd0 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
16ce0 2c 20 69 74 20 69 73 20 61 6c 77 61 79 73 20 74  , it is always t
16cf0 72 75 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20  rue that..      
16d00 20 20 2f 2f 2f 20 61 72 67 76 5b 69 5d 21 3d 30    /// argv[i]!=0
16d10 20 66 6f 72 20 69 20 62 65 74 77 65 65 6e 20 30   for i between 0
16d20 20 61 6e 64 20 61 72 67 63 2d 31 2e 20 48 6f 77   and argc-1. How
16d30 65 76 65 72 2c 20 69 74 20 6d 69 67 68 74 20 62  ever, it might b
16d40 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  e the..        /
16d50 2f 2f 20 63 61 73 65 20 74 68 61 74 20 73 71 6c  // case that sql
16d60 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
16d70 61 72 67 76 5b 69 5d 29 3d 3d 53 51 4c 49 54 45  argv[i])==SQLITE
16d80 5f 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20  _NULL...        
16d90 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
16da0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
16db0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
16dc0 20 61 72 67 76 5b 30 5d 20 70 61 72 61 6d 65 74   argv[0] paramet
16dd0 65 72 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  er is the rowid 
16de0 6f 66 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20  of a row in the 
16df0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
16e00 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 62 65         /// to be
16e10 20 64 65 6c 65 74 65 64 2e 20 49 66 20 61 72 67   deleted. If arg
16e20 76 5b 30 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e  v[0] is an SQL N
16e30 55 4c 4c 2c 20 74 68 65 6e 20 6e 6f 20 64 65 6c  ULL, then no del
16e40 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 0d 0a 20  etion occurs... 
16e50 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
16e60 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16e70 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
16e80 2f 2f 2f 20 54 68 65 20 61 72 67 76 5b 31 5d 20  /// The argv[1] 
16e90 70 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65  parameter is the
16ea0 20 72 6f 77 69 64 20 6f 66 20 61 20 6e 65 77 20   rowid of a new 
16eb0 72 6f 77 20 74 6f 20 62 65 20 69 6e 73 65 72 74  row to be insert
16ec0 65 64 20 69 6e 74 6f 0d 0a 20 20 20 20 20 20 20  ed into..       
16ed0 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c   /// the virtual
16ee0 20 74 61 62 6c 65 2e 20 49 66 20 61 72 67 76 5b   table. If argv[
16ef0 31 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e 55 4c  1] is an SQL NUL
16f00 4c 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20  L, then the..   
16f10 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
16f20 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 63 68 6f  ntation must cho
16f30 6f 73 65 20 61 20 72 6f 77 69 64 20 66 6f 72 20  ose a rowid for 
16f40 74 68 65 20 6e 65 77 6c 79 20 69 6e 73 65 72 74  the newly insert
16f50 65 64 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20  ed row...       
16f60 20 2f 2f 2f 20 53 75 62 73 65 71 75 65 6e 74 20   /// Subsequent 
16f70 61 72 67 76 5b 5d 20 65 6e 74 72 69 65 73 20 63  argv[] entries c
16f80 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 6f 66  ontain values of
16f90 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
16fa0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
16fb0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20   virtual table, 
16fc0 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 61  in the order tha
16fd0 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 77 65  t the columns we
16fe0 72 65 20 64 65 63 6c 61 72 65 64 2e 20 54 68 65  re declared. The
16ff0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75  ..        /// nu
17000 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
17010 77 69 6c 6c 20 6d 61 74 63 68 20 74 68 65 20 74  will match the t
17020 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
17030 20 74 68 61 74 20 74 68 65 0d 0a 20 20 20 20 20   that the..     
17040 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e 65 63 74 20     /// xConnect 
17050 6f 72 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  or xCreate metho
17060 64 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  d made using the
17070 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
17080 5f 76 74 61 62 28 29 0d 0a 20 20 20 20 20 20 20  _vtab()..       
17090 20 2f 2f 2f 20 63 61 6c 6c 2e 20 41 6c 6c 20 68   /// call. All h
170a0 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 61 72  idden columns ar
170b0 65 20 69 6e 63 6c 75 64 65 64 2e 0d 0a 20 20 20  e included...   
170c0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
170d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
170e0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
170f0 2f 20 57 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20  / When doing an 
17100 69 6e 73 65 72 74 20 77 69 74 68 6f 75 74 20 61  insert without a
17110 20 72 6f 77 69 64 20 28 61 72 67 63 3e 31 2c 20   rowid (argc>1, 
17120 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20 53 51  argv[1] is an SQ
17130 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  L..        /// N
17140 55 4c 4c 29 2c 20 74 68 65 20 69 6d 70 6c 65 6d  ULL), the implem
17150 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 73 65  entation must se
17160 74 20 2a 70 52 6f 77 69 64 20 74 6f 20 74 68 65  t *pRowid to the
17170 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0d 0a 20   rowid of the.. 
17180 20 20 20 20 20 20 20 2f 2f 2f 20 6e 65 77 6c 79         /// newly
17190 20 69 6e 73 65 72 74 65 64 20 72 6f 77 3b 20 74   inserted row; t
171a0 68 69 73 20 77 69 6c 6c 20 62 65 63 6f 6d 65 20  his will become 
171b0 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
171c0 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
171d0 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6c     /// sqlite3_l
171e0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
171f0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 74  () function. Set
17200 74 69 6e 67 20 74 68 69 73 20 76 61 6c 75 65 20  ting this value 
17210 69 6e 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20  in all the..    
17220 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 20 63 61      /// other ca
17230 73 65 73 20 69 73 20 61 20 68 61 72 6d 6c 65 73  ses is a harmles
17240 73 20 6e 6f 2d 6f 70 3b 20 74 68 65 20 53 51 4c  s no-op; the SQL
17250 69 74 65 20 65 6e 67 69 6e 65 20 69 67 6e 6f 72  ite engine ignor
17260 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  es the..        
17270 2f 2f 2f 20 2a 70 52 6f 77 69 64 20 72 65 74 75  /// *pRowid retu
17280 72 6e 20 76 61 6c 75 65 20 69 66 20 61 72 67 63  rn value if argc
17290 3d 3d 31 20 6f 72 20 61 72 67 76 5b 31 5d 20 69  ==1 or argv[1] i
172a0 73 20 6e 6f 74 20 61 6e 20 53 51 4c 20 4e 55 4c  s not an SQL NUL
172b0 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  L...        /// 
172c0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
172d0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
172e0 20 20 20 20 20 2f 2f 2f 20 45 61 63 68 20 63 61       /// Each ca
172f0 6c 6c 20 74 6f 20 78 55 70 64 61 74 65 20 77 69  ll to xUpdate wi
17300 6c 6c 20 66 61 6c 6c 20 69 6e 74 6f 20 6f 6e 65  ll fall into one
17310 20 6f 66 20 63 61 73 65 73 20 73 68 6f 77 6e 20   of cases shown 
17320 62 65 6c 6f 77 2e 20 4e 6f 74 65 0d 0a 20 20 20  below. Note..   
17330 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 72 65       /// that re
17340 66 65 72 65 6e 63 65 73 20 74 6f 20 61 72 67 76  ferences to argv
17350 5b 69 5d 20 6d 65 61 6e 20 74 68 65 20 53 51 4c  [i] mean the SQL
17360 20 76 61 6c 75 65 20 68 65 6c 64 20 77 69 74 68   value held with
17370 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..        
17380 2f 2f 2f 20 61 72 67 76 5b 69 5d 20 6f 62 6a 65  /// argv[i] obje
17390 63 74 2c 20 6e 6f 74 20 74 68 65 20 61 72 67 76  ct, not the argv
173a0 5b 69 5d 20 6f 62 6a 65 63 74 20 69 74 73 65 6c  [i] object itsel
173b0 66 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  f...        /// 
173c0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
173d0 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20   /// <code>..   
173e0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67       ///     arg
173f0 63 20 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 2f  c = 1..        /
17400 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20  // </code>..    
17410 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
17420 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
17430 20 20 20 20 54 68 65 20 73 69 6e 67 6c 65 20 72      The single r
17440 6f 77 20 77 69 74 68 20 72 6f 77 69 64 20 65 71  ow with rowid eq
17450 75 61 6c 20 74 6f 20 61 72 67 76 5b 30 5d 20 69  ual to argv[0] i
17460 73 20 64 65 6c 65 74 65 64 2e 20 4e 6f 0d 0a 20  s deleted. No.. 
17470 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
17480 20 20 20 69 6e 73 65 72 74 20 6f 63 63 75 72 73     insert occurs
17490 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
174a0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
174b0 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
174c0 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63      ///     argc
174d0 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f   > 1..        //
174e0 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20  /     argv[0] = 
174f0 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  NULL..        //
17500 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20  / </code>..     
17510 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
17520 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
17530 20 20 20 41 20 6e 65 77 20 72 6f 77 20 69 73 20     A new row is 
17540 69 6e 73 65 72 74 65 64 20 77 69 74 68 20 61 20  inserted with a 
17550 72 6f 77 69 64 20 61 72 67 76 5b 31 5d 20 61 6e  rowid argv[1] an
17560 64 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20  d column..      
17570 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 76 61    ///         va
17580 6c 75 65 73 20 69 6e 20 61 72 67 76 5b 32 5d 20  lues in argv[2] 
17590 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20 49  and following. I
175a0 66 20 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20  f argv[1] is an 
175b0 53 51 4c 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20  SQL NULL,..     
175c0 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 74     ///         t
175d0 68 65 20 61 20 6e 65 77 20 75 6e 69 71 75 65 20  he a new unique 
175e0 72 6f 77 69 64 20 69 73 20 67 65 6e 65 72 61 74  rowid is generat
175f0 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
17600 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17610 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
17620 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
17630 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63      ///     argc
17640 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f   > 1..        //
17650 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3f 20  /     argv[0] ? 
17660 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  NULL..        //
17670 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20  /     argv[0] = 
17680 61 72 67 76 5b 31 5d 0d 0a 20 20 20 20 20 20 20  argv[1]..       
17690 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
176a0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
176b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
176c0 20 20 20 20 20 20 54 68 65 20 72 6f 77 20 77 69        The row wi
176d0 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b 30 5d  th rowid argv[0]
176e0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
176f0 20 6e 65 77 20 76 61 6c 75 65 73 20 69 6e 0d 0a   new values in..
17700 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
17710 20 20 20 20 61 72 67 76 5b 32 5d 20 61 6e 64 20      argv[2] and 
17720 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 72 61 6d 65  following parame
17730 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ters...        /
17740 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
17750 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
17760 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
17770 61 72 67 63 20 3e 20 31 0d 0a 20 20 20 20 20 20  argc > 1..      
17780 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30    ///     argv[0
17790 5d 20 3f 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20  ] ? NULL..      
177a0 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30    ///     argv[0
177b0 5d 20 3f 20 61 72 67 76 5b 31 5d 0d 0a 20 20 20  ] ? argv[1]..   
177c0 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
177d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
177e0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
177f0 2f 20 20 20 20 20 20 20 20 20 54 68 65 20 72 6f  /         The ro
17800 77 20 77 69 74 68 20 72 6f 77 69 64 20 61 72 67  w with rowid arg
17810 76 5b 30 5d 20 69 73 20 75 70 64 61 74 65 64 20  v[0] is updated 
17820 77 69 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b  with rowid argv[
17830 31 5d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  1]..        /// 
17840 20 20 20 20 20 20 20 20 61 6e 64 20 6e 65 77 20          and new 
17850 76 61 6c 75 65 73 20 69 6e 20 61 72 67 76 5b 32  values in argv[2
17860 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  ] and following 
17870 70 61 72 61 6d 65 74 65 72 73 2e 20 54 68 69 73  parameters. This
17880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
17890 20 20 20 20 20 20 77 69 6c 6c 20 6f 63 63 75 72        will occur
178a0 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61   when an SQL sta
178b0 74 65 6d 65 6e 74 20 75 70 64 61 74 65 73 20 61  tement updates a
178c0 20 72 6f 77 69 64 2c 20 61 73 20 69 6e 0d 0a 20   rowid, as in.. 
178d0 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
178e0 20 20 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74     the statement
178f0 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  :..        /// <
17900 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
17910 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
17920 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
17930 20 20 20 20 55 50 44 41 54 45 20 74 61 62 6c 65      UPDATE table
17940 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77 69 64   SET rowid=rowid
17950 2b 31 20 57 48 45 52 45 20 2e 2e 2e 3b 0d 0a 20  +1 WHERE ...;.. 
17960 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
17970 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
17980 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
17990 2f 2f 2f 20 54 68 65 20 78 55 70 64 61 74 65 20  /// The xUpdate 
179a0 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75  method must retu
179b0 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20  rn SQLITE_OK if 
179c0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 69 74 20 69  and only if it i
179d0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  s..        /// s
179e0 75 63 63 65 73 73 66 75 6c 2e 20 49 66 20 61 20  uccessful. If a 
179f0 66 61 69 6c 75 72 65 20 6f 63 63 75 72 73 2c 20  failure occurs, 
17a00 74 68 65 20 78 55 70 64 61 74 65 20 6d 75 73 74  the xUpdate must
17a10 20 72 65 74 75 72 6e 20 61 6e 0d 0a 20 20 20 20   return an..    
17a20 20 20 20 20 2f 2f 2f 20 61 70 70 72 6f 70 72 69      /// appropri
17a30 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 20  ate error code. 
17a40 4f 6e 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  On a failure, th
17a50 65 20 70 56 54 61 62 2d 3e 7a 45 72 72 4d 73 67  e pVTab->zErrMsg
17a60 20 65 6c 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20   element..      
17a70 20 20 2f 2f 2f 20 6d 61 79 20 6f 70 74 69 6f 6e    /// may option
17a80 61 6c 6c 79 20 62 65 20 72 65 70 6c 61 63 65 64  ally be replaced
17a90 20 77 69 74 68 20 65 72 72 6f 72 20 6d 65 73 73   with error mess
17aa0 61 67 65 20 74 65 78 74 20 73 74 6f 72 65 64 20  age text stored 
17ab0 69 6e 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20  in memory..     
17ac0 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 65 64     /// allocated
17ad0 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 75 73 69   from SQLite usi
17ae0 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 73 75 63  ng functions suc
17af0 68 20 61 73 20 73 71 6c 69 74 65 33 5f 6d 70 72  h as sqlite3_mpr
17b00 69 6e 74 66 28 29 20 6f 72 0d 0a 20 20 20 20 20  intf() or..     
17b10 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d     /// sqlite3_m
17b20 61 6c 6c 6f 63 28 29 2e 0d 0a 20 20 20 20 20 20  alloc()...      
17b30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
17b40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
17b50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  >..        /// I
17b60 66 20 74 68 65 20 78 55 70 64 61 74 65 20 6d 65  f the xUpdate me
17b70 74 68 6f 64 20 76 69 6f 6c 61 74 65 73 20 73 6f  thod violates so
17b80 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66  me constraint of
17b90 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
17ba0 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
17bb0 28 69 6e 63 6c 75 64 69 6e 67 2c 20 62 75 74 20  (including, but 
17bc0 6e 6f 74 20 6c 69 6d 69 74 65 64 20 74 6f 2c 20  not limited to, 
17bd0 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 74  attempting to st
17be0 6f 72 65 20 61 20 76 61 6c 75 65 20 6f 66 20 74  ore a value of t
17bf0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
17c00 77 72 6f 6e 67 20 64 61 74 61 74 79 70 65 2c 20  wrong datatype, 
17c10 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 74  attempting to st
17c20 6f 72 65 20 61 20 76 61 6c 75 65 20 74 68 61 74  ore a value that
17c30 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72   is too large or
17c40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f  ..        /// to
17c50 6f 20 73 6d 61 6c 6c 2c 20 6f 72 20 61 74 74 65  o small, or atte
17c60 6d 70 74 69 6e 67 20 74 6f 20 63 68 61 6e 67 65  mpting to change
17c70 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76 61 6c   a read-only val
17c80 75 65 29 20 74 68 65 6e 20 74 68 65 0d 0a 20 20  ue) then the..  
17c90 20 20 20 20 20 20 2f 2f 2f 20 78 55 70 64 61 74        /// xUpdat
17ca0 65 20 6d 75 73 74 20 66 61 69 6c 20 77 69 74 68  e must fail with
17cb0 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
17cc0 65 72 72 6f 72 20 63 6f 64 65 2e 0d 0a 20 20 20  error code...   
17cd0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
17ce0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
17cf0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
17d00 2f 20 54 68 65 72 65 20 6d 69 67 68 74 20 62 65  / There might be
17d10 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 71 6c   one or more sql
17d20 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
17d30 20 6f 62 6a 65 63 74 73 20 6f 70 65 6e 20 61 6e   objects open an
17d40 64 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d in..        //
17d50 2f 20 75 73 65 20 6f 6e 20 74 68 65 20 76 69 72  / use on the vir
17d60 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 73 74 61  tual table insta
17d70 6e 63 65 20 61 6e 64 20 70 65 72 68 61 70 73 20  nce and perhaps 
17d80 65 76 65 6e 20 6f 6e 20 74 68 65 20 72 6f 77 20  even on the row 
17d90 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
17da0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
17db0 65 20 77 68 65 6e 20 74 68 65 20 78 55 70 64 61  e when the xUpda
17dc0 74 65 20 6d 65 74 68 6f 64 20 69 73 20 69 6e 76  te method is inv
17dd0 6f 6b 65 64 2e 20 54 68 65 0d 0a 20 20 20 20 20  oked. The..     
17de0 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74     /// implement
17df0 61 74 69 6f 6e 20 6f 66 20 78 55 70 64 61 74 65  ation of xUpdate
17e00 20 6d 75 73 74 20 62 65 20 70 72 65 70 61 72 65   must be prepare
17e10 64 20 66 6f 72 20 61 74 74 65 6d 70 74 73 20 74  d for attempts t
17e20 6f 20 64 65 6c 65 74 65 0d 0a 20 20 20 20 20 20  o delete..      
17e30 20 20 2f 2f 2f 20 6f 72 20 6d 6f 64 69 66 79 20    /// or modify 
17e40 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c  rows of the tabl
17e50 65 20 6f 75 74 20 66 72 6f 6d 20 6f 74 68 65 72  e out from other
17e60 20 65 78 69 73 74 69 6e 67 20 63 75 72 73 6f 72   existing cursor
17e70 73 2e 20 49 66 20 74 68 65 0d 0a 20 20 20 20 20  s. If the..     
17e80 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
17e90 61 62 6c 65 20 63 61 6e 6e 6f 74 20 61 63 63 6f  able cannot acco
17ea0 6d 6d 6f 64 61 74 65 20 73 75 63 68 20 63 68 61  mmodate such cha
17eb0 6e 67 65 73 2c 20 74 68 65 20 78 55 70 64 61 74  nges, the xUpdat
17ec0 65 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20  e method..      
17ed0 20 20 2f 2f 2f 20 6d 75 73 74 20 72 65 74 75 72    /// must retur
17ee0 6e 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  n an error code.
17ef0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17f00 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
17f10 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
17f20 20 20 20 2f 2f 2f 20 54 68 65 20 78 55 70 64 61     /// The xUpda
17f30 74 65 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74  te method is opt
17f40 69 6f 6e 61 6c 2e 20 49 66 20 74 68 65 20 78 55  ional. If the xU
17f50 70 64 61 74 65 20 70 6f 69 6e 74 65 72 20 69 6e  pdate pointer in
17f60 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
17f70 2f 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  / sqlite3_module
17f80 20 66 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74   for a virtual t
17f90 61 62 6c 65 20 69 73 20 61 20 4e 55 4c 4c 20 70  able is a NULL p
17fa0 6f 69 6e 74 65 72 2c 20 74 68 65 6e 20 74 68 65  ointer, then the
17fb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
17fc0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 72  rtual table is r
17fd0 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20  ead-only...     
17fe0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
17ff0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
18000 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
18010 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
18020 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
18030 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
18040 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
18050 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
18060 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
18070 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
18080 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
18090 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
180a0 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
180b0 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
180c0 66 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66 69 65  f new or modifie
180d0 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20  d column values 
180e0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 0d 0a 20 20  contained in..  
180f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
18100 72 65 66 20 6e 61 6d 65 3d 22 61 72 67 76 22 20  ref name="argv" 
18110 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  />...        ///
18120 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
18130 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
18140 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
18150 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
18160 79 20 6f 66 20 6e 61 74 69 76 65 20 70 6f 69 6e  y of native poin
18170 74 65 72 73 20 74 6f 20 73 71 6c 69 74 65 33 5f  ters to sqlite3_
18180 76 61 6c 75 65 20 73 74 72 75 63 74 75 72 65 73  value structures
18190 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
181a0 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77       /// the new
181b0 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c   or modified col
181c0 75 6d 6e 20 76 61 6c 75 65 73 2c 20 69 66 20 61  umn values, if a
181d0 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ny...        ///
181e0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
181f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
18200 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
18210 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
18220 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
18230 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
18240 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
18250 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20  n the unique..  
18260 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
18270 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72  r row identifier
18280 20 66 6f 72 20 74 68 65 20 72 6f 77 20 74 68 61   for the row tha
18290 74 20 77 61 73 20 69 6e 73 65 72 74 65 64 2c 20  t was inserted, 
182a0 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20  if any...       
182b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
182c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
182d0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
182e0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
182f0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
18300 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18310 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
18320 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
18330 65 20 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20  e xUpdate(..    
18340 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
18350 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
18360 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
18370 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
18380 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20   argv,..        
18390 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
183a0 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
183b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
183c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18400 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18410 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
18420 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
18430 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
18440 54 68 69 73 20 6d 65 74 68 6f 64 20 62 65 67 69  This method begi
18450 6e 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ns a transaction
18460 20 6f 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   on a virtual ta
18470 62 6c 65 2e 20 54 68 69 73 20 69 73 20 6d 65 74  ble. This is met
18480 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  hod..        ///
18490 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68   is optional. Th
184a0 65 20 78 42 65 67 69 6e 20 70 6f 69 6e 74 65 72  e xBegin pointer
184b0 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75   of sqlite3_modu
184c0 6c 65 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0d  le may be NULL..
184d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
184e0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
184f0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
18500 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
18510 64 20 69 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c  d is always foll
18520 6f 77 65 64 20 62 79 20 6f 6e 65 20 63 61 6c 6c  owed by one call
18530 20 74 6f 20 65 69 74 68 65 72 20 74 68 65 20 78   to either the x
18540 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20 20 20 20 20  Commit or..     
18550 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c 62 61 63 6b     /// xRollback
18560 20 6d 65 74 68 6f 64 2e 20 56 69 72 74 75 61 6c   method. Virtual
18570 20 74 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69   table transacti
18580 6f 6e 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2c  ons do not nest,
18590 20 73 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   so the..       
185a0 20 2f 2f 2f 20 78 42 65 67 69 6e 20 6d 65 74 68   /// xBegin meth
185b0 6f 64 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 69  od will not be i
185c0 6e 76 6f 6b 65 64 20 6d 6f 72 65 20 74 68 61 6e  nvoked more than
185d0 20 6f 6e 63 65 20 6f 6e 20 61 20 73 69 6e 67 6c   once on a singl
185e0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
185f0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 69 74  irtual table wit
18600 68 6f 75 74 20 61 6e 20 69 6e 74 65 72 76 65 6e  hout an interven
18610 69 6e 67 20 63 61 6c 6c 20 74 6f 20 65 69 74 68  ing call to eith
18620 65 72 20 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20  er xCommit or.. 
18630 20 20 20 20 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c         /// xRoll
18640 62 61 63 6b 2e 20 4d 75 6c 74 69 70 6c 65 20 63  back. Multiple c
18650 61 6c 6c 73 20 74 6f 20 6f 74 68 65 72 20 6d 65  alls to other me
18660 74 68 6f 64 73 20 63 61 6e 20 61 6e 64 20 6c 69  thods can and li
18670 6b 65 6c 79 20 77 69 6c 6c 0d 0a 20 20 20 20 20  kely will..     
18680 20 20 20 2f 2f 2f 20 6f 63 63 75 72 20 69 6e 20     /// occur in 
18690 62 65 74 77 65 65 6e 20 74 68 65 20 78 42 65 67  between the xBeg
186a0 69 6e 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65  in and the corre
186b0 73 70 6f 6e 64 69 6e 67 20 78 43 6f 6d 6d 69 74  sponding xCommit
186c0 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
186d0 20 78 52 6f 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20   xRollback...   
186e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
186f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18700 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
18710 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
18720 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
18730 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
18740 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
18750 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
18760 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
18770 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18780 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
18790 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
187a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
187b0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
187c0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
187d0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
187e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
187f0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42 65 67  teErrorCode xBeg
18800 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in(..           
18810 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
18820 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
18830 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
18840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
18890 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
188a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
188b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
188c0 6d 65 74 68 6f 64 20 73 69 67 6e 61 6c 73 20 74  method signals t
188d0 68 65 20 73 74 61 72 74 20 6f 66 20 61 20 74 77  he start of a tw
188e0 6f 2d 70 68 61 73 65 20 63 6f 6d 6d 69 74 20 6f  o-phase commit o
188f0 6e 20 61 20 76 69 72 74 75 61 6c 0d 0a 20 20 20  n a virtual..   
18900 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e 20       /// table. 
18910 54 68 69 73 20 69 73 20 6d 65 74 68 6f 64 20 69  This is method i
18920 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68 65 20  s optional. The 
18930 78 53 79 6e 63 20 70 6f 69 6e 74 65 72 20 6f 66  xSync pointer of
18940 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
18950 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79  lite3_module may
18960 20 62 65 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20   be NULL...     
18970 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
18980 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
18990 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
189a0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 6f  This method is o
189b0 6e 6c 79 20 69 6e 76 6f 6b 65 64 20 61 66 74 65  nly invoked afte
189c0 72 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 78 42  r call to the xB
189d0 65 67 69 6e 20 6d 65 74 68 6f 64 20 61 6e 64 0d  egin method and.
189e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 69  .        /// pri
189f0 6f 72 20 74 6f 20 61 6e 20 78 43 6f 6d 6d 69 74  or to an xCommit
18a00 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 2e 20 49   or xRollback. I
18a10 6e 20 6f 72 64 65 72 20 74 6f 20 69 6d 70 6c 65  n order to imple
18a20 6d 65 6e 74 20 74 77 6f 2d 70 68 61 73 65 0d 0a  ment two-phase..
18a30 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 6d          /// comm
18a40 69 74 2c 20 74 68 65 20 78 53 79 6e 63 20 6d 65  it, the xSync me
18a50 74 68 6f 64 20 6f 6e 20 61 6c 6c 20 76 69 72 74  thod on all virt
18a60 75 61 6c 20 74 61 62 6c 65 73 20 69 73 20 69 6e  ual tables is in
18a70 76 6f 6b 65 64 20 70 72 69 6f 72 20 74 6f 0d 0a  voked prior to..
18a80 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 76 6f          /// invo
18a90 6b 69 6e 67 20 74 68 65 20 78 43 6f 6d 6d 69 74  king the xCommit
18aa0 20 6d 65 74 68 6f 64 20 6f 6e 20 61 6e 79 20 76   method on any v
18ab0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 49 66  irtual table. If
18ac0 20 61 6e 79 20 6f 66 20 74 68 65 0d 0a 20 20 20   any of the..   
18ad0 20 20 20 20 20 2f 2f 2f 20 78 53 79 6e 63 20 6d       /// xSync m
18ae0 65 74 68 6f 64 73 20 66 61 69 6c 2c 20 74 68 65  ethods fail, the
18af0 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
18b00 69 6f 6e 20 69 73 20 72 6f 6c 6c 65 64 20 62 61  ion is rolled ba
18b10 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ck...        ///
18b20 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
18b30 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
18b40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18b50 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
18b60 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
18b70 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
18b80 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
18b90 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
18ba0 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
18bb0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
18bc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
18bd0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
18be0 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
18bf0 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
18c00 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
18c10 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
18c20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
18c30 6f 64 65 20 78 53 79 6e 63 28 0d 0a 20 20 20 20  ode xSync(..    
18c40 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
18c50 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
18c60 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
18c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18cb0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
18cc0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
18cd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18ce0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
18cf0 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 63 61  / This method ca
18d00 75 73 65 73 20 61 20 76 69 72 74 75 61 6c 20 74  uses a virtual t
18d10 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  able transaction
18d20 20 74 6f 20 63 6f 6d 6d 69 74 2e 20 54 68 69 73   to commit. This
18d30 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   is..        ///
18d40 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f   method is optio
18d50 6e 61 6c 2e 20 54 68 65 20 78 43 6f 6d 6d 69 74  nal. The xCommit
18d60 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c 69   pointer of sqli
18d70 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20 62  te3_module may b
18d80 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  e..        /// N
18d90 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ULL...        //
18da0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
18db0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
18dc0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 63 61 6c         /// A cal
18dd0 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f 64  l to this method
18de0 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20   always follows 
18df0 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20  a prior call to 
18e00 78 42 65 67 69 6e 20 61 6e 64 0d 0a 20 20 20 20  xBegin and..    
18e10 20 20 20 20 2f 2f 2f 20 78 53 79 6e 63 2e 0d 0a      /// xSync...
18e20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
18e30 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
18e40 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
18e50 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
18e60 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
18e70 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
18e80 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
18e90 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
18ea0 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
18eb0 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
18ec0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
18ed0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
18ee0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
18ef0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
18f00 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
18f10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
18f20 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
18f30 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
18f40 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20  Commit(..       
18f50 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
18f60 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
18f70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
18f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fc0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18fd0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
18fe0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
18ff0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
19000 68 69 73 20 6d 65 74 68 6f 64 20 63 61 75 73 65  his method cause
19010 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
19020 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f  e transaction to
19030 20 72 6f 6c 6c 62 61 63 6b 2e 20 54 68 69 73 20   rollback. This 
19040 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
19050 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f 6e  method is option
19060 61 6c 2e 20 54 68 65 20 78 52 6f 6c 6c 62 61 63  al. The xRollbac
19070 6b 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c  k pointer of sql
19080 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20  ite3_module may 
19090 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
190a0 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f  NULL...        /
190b0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
190c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
190d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 63 61          /// A ca
190e0 6c 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f  ll to this metho
190f0 64 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73  d always follows
19100 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f   a prior call to
19110 20 78 42 65 67 69 6e 2e 0d 0a 20 20 20 20 20 20   xBegin...      
19120 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
19130 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
19140 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
19150 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
19160 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
19170 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
19180 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
19190 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
191a0 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
191b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
191c0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
191d0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
191e0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
191f0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
19200 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
19210 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
19220 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
19230 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61  rrorCode xRollba
19240 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
19250 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
19260 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
19270 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
19280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
192d0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
192e0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
192f0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
19300 6d 65 74 68 6f 64 20 70 72 6f 76 69 64 65 73 20  method provides 
19310 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20 74 68 61  notification tha
19320 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  t the virtual ta
19330 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
19340 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
19350 74 68 61 74 20 74 68 65 20 76 69 72 74 75 61 6c  that the virtual
19360 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 67   table will be g
19370 69 76 65 6e 20 61 20 6e 65 77 20 6e 61 6d 65 2e  iven a new name.
19380 20 49 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   If..        ///
19390 20 74 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74   this method ret
193a0 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 20 74  urns SQLITE_OK t
193b0 68 65 6e 20 53 51 4c 69 74 65 20 72 65 6e 61 6d  hen SQLite renam
193c0 65 73 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  es the table. If
193d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
193e0 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e  is method return
193f0 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  s an error code 
19400 74 68 65 6e 20 74 68 65 20 72 65 6e 61 6d 69 6e  then the renamin
19410 67 20 69 73 20 70 72 65 76 65 6e 74 65 64 2e 0d  g is prevented..
19420 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
19430 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
19440 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
19450 20 20 2f 2f 2f 20 54 68 65 20 78 52 65 6e 61 6d    /// The xRenam
19460 65 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  e method is requ
19470 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
19480 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
19490 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
194a0 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
194b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
194c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
194d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
194e0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
194f0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
19500 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
19510 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
19520 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
19530 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
19540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
19550 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
19560 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
19570 6e 41 72 67 22 3e 0d 0a 20 20 20 20 20 20 20 20  nArg">..        
19580 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
19590 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
195a0 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  he function bein
195b0 67 20 73 6f 75 67 68 74 2e 0d 0a 20 20 20 20 20  g sought...     
195c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
195d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
195e0 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d 65 22  ram name="zName"
195f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
19600 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
19610 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f  unction being so
19620 75 67 68 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ught...        /
19630 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
19640 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
19650 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22 3e  name="callback">
19660 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
19670 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73  on success, this
19680 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
19690 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63  be modified to c
196a0 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20  ontain the..    
196b0 20 20 20 20 2f 2f 2f 20 64 65 6c 65 67 61 74 65      /// delegate
196c0 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
196d0 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
196e0 65 20 73 70 65 63 69 66 69 65 64 20 66 75 6e 63  e specified func
196f0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
19700 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
19710 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
19720 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74  name="pClientDat
19730 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  a">..        ///
19740 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
19750 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
19760 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
19770 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20  o contain the.. 
19780 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76         /// nativ
19790 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f 69 6e  e user-data poin
197a0 74 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ter associated w
197b0 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ith..        ///
197c0 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
197d0 22 63 61 6c 6c 62 61 63 6b 22 20 2f 3e 2e 0d 0a  "callback" />...
197e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
197f0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
19800 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
19810 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
19820 6f 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69  o if the specifi
19830 65 64 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ed function was 
19840 66 6f 75 6e 64 3b 20 7a 65 72 6f 20 6f 74 68 65  found; zero othe
19850 72 77 69 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  rwise...        
19860 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
19870 20 20 20 20 20 20 20 20 69 6e 74 20 78 46 69 6e          int xFin
19880 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
19890 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
198a0 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
198b0 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d 0a 20 20     int nArg,..  
198c0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
198d0 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20   zName,..       
198e0 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 43       ref SQLiteC
198f0 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
19900 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
19910 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e  ef IntPtr pClien
19920 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20  tData..         
19930 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
19940 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19980 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
19990 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
199a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
199b0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
199c0 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 70  // This method p
199d0 72 6f 76 69 64 65 73 20 6e 6f 74 69 66 69 63 61  rovides notifica
199e0 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 76 69  tion that the vi
199f0 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
19a00 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
19a10 6e 74 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65  ntation that the
19a20 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77   virtual table w
19a30 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 61 20 6e  ill be given a n
19a40 65 77 20 6e 61 6d 65 2e 20 49 66 0d 0a 20 20 20  ew name. If..   
19a50 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65       /// this me
19a60 74 68 6f 64 20 72 65 74 75 72 6e 73 20 53 51 4c  thod returns SQL
19a70 49 54 45 5f 4f 4b 20 74 68 65 6e 20 53 51 4c 69  ITE_OK then SQLi
19a80 74 65 20 72 65 6e 61 6d 65 73 20 74 68 65 20 74  te renames the t
19a90 61 62 6c 65 2e 20 49 66 0d 0a 20 20 20 20 20 20  able. If..      
19aa0 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74 68 6f    /// this metho
19ab0 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
19ac0 6f 72 20 63 6f 64 65 20 74 68 65 6e 20 74 68 65  or code then the
19ad0 20 72 65 6e 61 6d 69 6e 67 20 69 73 20 70 72 65   renaming is pre
19ae0 76 65 6e 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  vented...       
19af0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
19b00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
19b10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
19b20 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  e xRename method
19b30 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
19b40 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
19b50 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
19b60 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
19b70 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
19b80 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
19b90 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
19ba0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
19bb0 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
19bc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
19bd0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
19be0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
19bf0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
19c00 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
19c10 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
19c20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
19c30 6d 20 6e 61 6d 65 3d 22 7a 4e 65 77 22 3e 0d 0a  m name="zNew">..
19c40 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
19c50 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
19c60 6f 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f  o the UTF-8 enco
19c70 64 65 64 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  ded string conta
19c80 69 6e 69 6e 67 20 74 68 65 20 6e 65 77 0d 0a 20  ining the new.. 
19c90 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20         /// name 
19ca0 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
19cb0 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
19cc0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
19cd0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
19ce0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
19cf0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
19d00 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
19d10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
19d20 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
19d30 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
19d40 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20   xRename(..     
19d50 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
19d60 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
19d70 20 20 49 6e 74 50 74 72 20 7a 4e 65 77 0d 0a 20    IntPtr zNew.. 
19d80 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
19d90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
19da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
19df0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
19e00 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
19e10 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 73 65         /// These
19e20 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69 64 65   methods provide
19e30 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
19e40 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
19e50 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n an..        //
19e60 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79 20 74 6f  / opportunity to
19e70 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65 73 74 65   implement neste
19e80 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  d transactions. 
19e90 54 68 65 79 20 61 72 65 20 61 6c 77 61 79 73 0d  They are always.
19ea0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 74  .        /// opt
19eb0 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c 6c 20 6f  ional and will o
19ec0 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20 69 6e  nly be called in
19ed0 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
19ee0 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74 65 72 2e  3.7.7 and later.
19ef0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
19f00 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
19f10 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
19f20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78 53 61 76     /// When xSav
19f30 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69 73 20 69  epoint(X,N) is i
19f40 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20 69 73 20  nvoked, that is 
19f50 61 20 73 69 67 6e 61 6c 20 74 6f 20 74 68 65 20  a signal to the 
19f60 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20  virtual..       
19f70 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20 74 68 61   /// table X tha
19f80 74 20 69 74 20 73 68 6f 75 6c 64 20 73 61 76 65  t it should save
19f90 20 69 74 73 20 63 75 72 72 65 6e 74 20 73 74 61   its current sta
19fa0 74 65 20 61 73 20 73 61 76 65 70 6f 69 6e 74 20  te as savepoint 
19fb0 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20 20 2f 2f  N. A..        //
19fc0 2f 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  / subsequent cal
19fd0 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  l to xRollbackTo
19fe0 28 58 2c 52 29 20 6d 65 61 6e 73 20 74 68 61 74  (X,R) means that
19ff0 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
1a000 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
1a010 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 68 6f  irtual table sho
1a020 75 6c 64 20 72 65 74 75 72 6e 20 74 6f 20 77 68  uld return to wh
1a030 61 74 20 69 74 20 77 61 73 20 77 68 65 6e 20 78  at it was when x
1a040 53 61 76 65 70 6f 69 6e 74 28 58 2c 52 29 20 77  Savepoint(X,R) w
1a050 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  as..        /// 
1a060 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20 54 68 65  last called. The
1a070 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61   call to xRollba
1a080 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c 6c 20 69  ckTo(X,R) will i
1a090 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 0d 0a 20  nvalidate all.. 
1a0a0 20 20 20 20 20 20 20 2f 2f 2f 20 73 61 76 65 70         /// savep
1a0b0 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e 52 3b 20  oints with N>R; 
1a0c0 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 76 61  none of the inva
1a0d0 6c 69 64 65 64 20 73 61 76 65 70 6f 69 6e 74 73  lided savepoints
1a0e0 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..      
1a0f0 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62 61 63    /// rolled bac
1a100 6b 20 6f 72 20 72 65 6c 65 61 73 65 64 20 77 69  k or released wi
1a110 74 68 6f 75 74 20 66 69 72 73 74 20 62 65 69 6e  thout first bein
1a120 67 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 64 20  g reinitialized 
1a130 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20 20 20 20  by a call..     
1a140 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61 76 65 70     /// to xSavep
1a150 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c 6c 20 74  oint(). A call t
1a160 6f 20 78 52 65 6c 65 61 73 65 28 58 2c 4d 29 20  o xRelease(X,M) 
1a170 69 6e 76 61 6c 69 64 61 74 65 73 20 61 6c 6c 20  invalidates all 
1a180 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20 20 20 20  savepoints..    
1a190 20 20 20 20 2f 2f 2f 20 77 68 65 72 65 20 4e 3e      /// where N>
1a1a0 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  =M...        ///
1a1b0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1a1c0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1a1d0 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f        /// None o
1a1e0 66 20 74 68 65 20 78 53 61 76 65 70 6f 69 6e 74  f the xSavepoint
1a1f0 28 29 2c 20 78 52 65 6c 65 61 73 65 28 29 2c 20  (), xRelease(), 
1a200 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 29  or xRollbackTo()
1a210 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 0d 0a 20   methods will.. 
1a220 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65 72 20         /// ever 
1a230 62 65 20 63 61 6c 6c 65 64 20 65 78 63 65 70 74  be called except
1a240 20 69 6e 20 62 65 74 77 65 65 6e 20 63 61 6c 6c   in between call
1a250 73 20 74 6f 20 78 42 65 67 69 6e 28 29 20 61 6e  s to xBegin() an
1a260 64 20 65 69 74 68 65 72 0d 0a 20 20 20 20 20 20  d either..      
1a270 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28 29 20    /// xCommit() 
1a280 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d  or xRollback()..
1a290 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1a2a0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1a2b0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1a2c0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1a2d0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
1a2e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1a2f0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1a300 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
1a310 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
1a320 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
1a330 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1a340 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1a350 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74  name="iSavepoint
1a360 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1a370 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67  This is an integ
1a380 65 72 20 69 64 65 6e 74 69 66 69 65 72 20 75 6e  er identifier un
1a390 64 65 72 20 77 68 69 63 68 20 74 68 65 20 74 68  der which the th
1a3a0 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20  e current state 
1a3b0 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
1a3c0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1a3d0 65 20 73 68 6f 75 6c 64 20 62 65 20 73 61 76 65  e should be save
1a3e0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1a3f0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1a400 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1a410 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1a420 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1a430 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1a440 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1a450 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1a460 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 61  iteErrorCode xSa
1a470 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20  vepoint(..      
1a480 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
1a490 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
1a4a0 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d   int iSavepoint.
1a4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1a4c0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1a4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a510 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1a520 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1a530 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1a540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1a550 73 65 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69  se methods provi
1a560 64 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  de the virtual t
1a570 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
1a580 69 6f 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  ion an..        
1a590 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79 20  /// opportunity 
1a5a0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65 73  to implement nes
1a5b0 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
1a5c0 2e 20 54 68 65 79 20 61 72 65 20 61 6c 77 61 79  . They are alway
1a5d0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  s..        /// o
1a5e0 70 74 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c 6c  ptional and will
1a5f0 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20   only be called 
1a600 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  in SQLite versio
1a610 6e 20 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74 65  n 3.7.7 and late
1a620 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
1a630 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1a640 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1a650 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78 53       /// When xS
1a660 61 76 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69 73  avepoint(X,N) is
1a670 20 69 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20 69   invoked, that i
1a680 73 20 61 20 73 69 67 6e 61 6c 20 74 6f 20 74 68  s a signal to th
1a690 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20  e virtual..     
1a6a0 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20 74     /// table X t
1a6b0 68 61 74 20 69 74 20 73 68 6f 75 6c 64 20 73 61  hat it should sa
1a6c0 76 65 20 69 74 73 20 63 75 72 72 65 6e 74 20 73  ve its current s
1a6d0 74 61 74 65 20 61 73 20 73 61 76 65 70 6f 69 6e  tate as savepoin
1a6e0 74 20 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20 20  t N. A..        
1a6f0 2f 2f 2f 20 73 75 62 73 65 71 75 65 6e 74 20 63  /// subsequent c
1a700 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  all to xRollback
1a710 54 6f 28 58 2c 52 29 20 6d 65 61 6e 73 20 74 68  To(X,R) means th
1a720 61 74 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  at the state of 
1a730 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1a740 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
1a750 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 74 6f 20  hould return to 
1a760 77 68 61 74 20 69 74 20 77 61 73 20 77 68 65 6e  what it was when
1a770 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 52 29   xSavepoint(X,R)
1a780 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f   was..        //
1a790 2f 20 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20 54  / last called. T
1a7a0 68 65 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c  he call to xRoll
1a7b0 62 61 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c 6c  backTo(X,R) will
1a7c0 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 0d   invalidate all.
1a7d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 61 76  .        /// sav
1a7e0 65 70 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e 52  epoints with N>R
1a7f0 3b 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  ; none of the in
1a800 76 61 6c 69 64 65 64 20 73 61 76 65 70 6f 69 6e  valided savepoin
1a810 74 73 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20  ts will be..    
1a820 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62      /// rolled b
1a830 61 63 6b 20 6f 72 20 72 65 6c 65 61 73 65 64 20  ack or released 
1a840 77 69 74 68 6f 75 74 20 66 69 72 73 74 20 62 65  without first be
1a850 69 6e 67 20 72 65 69 6e 69 74 69 61 6c 69 7a 65  ing reinitialize
1a860 64 20 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20 20  d by a call..   
1a870 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61 76       /// to xSav
1a880 65 70 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c 6c  epoint(). A call
1a890 20 74 6f 20 78 52 65 6c 65 61 73 65 28 58 2c 4d   to xRelease(X,M
1a8a0 29 20 69 6e 76 61 6c 69 64 61 74 65 73 20 61 6c  ) invalidates al
1a8b0 6c 20 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20 20  l savepoints..  
1a8c0 20 20 20 20 20 20 2f 2f 2f 20 77 68 65 72 65 20        /// where 
1a8d0 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f  N>=M...        /
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 4e 6f 6e 65          /// None
1a910 20 6f 66 20 74 68 65 20 78 53 61 76 65 70 6f 69   of the xSavepoi
1a920 6e 74 28 29 2c 20 78 52 65 6c 65 61 73 65 28 29  nt(), xRelease()
1a930 2c 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  , or xRollbackTo
1a940 28 29 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 0d  () methods will.
1a950 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65  .        /// eve
1a960 72 20 62 65 20 63 61 6c 6c 65 64 20 65 78 63 65  r be called exce
1a970 70 74 20 69 6e 20 62 65 74 77 65 65 6e 20 63 61  pt in between ca
1a980 6c 6c 73 20 74 6f 20 78 42 65 67 69 6e 28 29 20  lls to xBegin() 
1a990 61 6e 64 20 65 69 74 68 65 72 0d 0a 20 20 20 20  and either..    
1a9a0 20 20 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28      /// xCommit(
1a9b0 29 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28 29  ) or xRollback()
1a9c0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1a9d0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1a9e0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1a9f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1aa00 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
1aa10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1aa20 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
1aa30 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
1aa40 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
1aa50 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
1aa60 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1aa70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1aa80 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69  m name="iSavepoi
1aa90 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nt">..        //
1aaa0 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74  / This is an int
1aab0 65 67 65 72 20 75 73 65 64 20 74 6f 20 69 6e 64  eger used to ind
1aac0 69 63 61 74 65 20 74 68 61 74 20 61 6e 79 20 73  icate that any s
1aad0 61 76 65 64 20 73 74 61 74 65 73 20 77 69 74 68  aved states with
1aae0 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   an..        ///
1aaf0 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61   identifier grea
1ab00 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1ab10 6c 20 74 6f 20 74 68 69 73 20 73 68 6f 75 6c 64  l to this should
1ab20 20 62 65 20 64 65 6c 65 74 65 64 20 62 79 20 74   be deleted by t
1ab30 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1ab40 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1ab50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1ab60 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1ab70 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1ab80 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1ab90 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1aba0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1abb0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1abc0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1abd0 72 72 6f 72 43 6f 64 65 20 78 52 65 6c 65 61 73  rrorCode xReleas
1abe0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1abf0 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
1ac00 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
1ac10 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20  Savepoint..     
1ac20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1ac30 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ac40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ac80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1ac90 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1aca0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1acb0 20 20 20 2f 2f 2f 20 54 68 65 73 65 20 6d 65 74     /// These met
1acc0 68 6f 64 73 20 70 72 6f 76 69 64 65 20 74 68 65  hods provide the
1acd0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
1ace0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e  mplementation an
1acf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70  ..        /// op
1ad00 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 69 6d 70  portunity to imp
1ad10 6c 65 6d 65 6e 74 20 6e 65 73 74 65 64 20 74 72  lement nested tr
1ad20 61 6e 73 61 63 74 69 6f 6e 73 2e 20 54 68 65 79  ansactions. They
1ad30 20 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20   are always..   
1ad40 20 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 61       /// optiona
1ad50 6c 20 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79 20  l and will only 
1ad60 62 65 20 63 61 6c 6c 65 64 20 69 6e 20 53 51 4c  be called in SQL
1ad70 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
1ad80 37 20 61 6e 64 20 6c 61 74 65 72 2e 0d 0a 20 20  7 and later...  
1ad90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1ada0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1adb0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1adc0 2f 2f 20 57 68 65 6e 20 78 53 61 76 65 70 6f 69  // When xSavepoi
1add0 6e 74 28 58 2c 4e 29 20 69 73 20 69 6e 76 6f 6b  nt(X,N) is invok
1ade0 65 64 2c 20 74 68 61 74 20 69 73 20 61 20 73 69  ed, that is a si
1adf0 67 6e 61 6c 20 74 6f 20 74 68 65 20 76 69 72 74  gnal to the virt
1ae00 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ual..        ///
1ae10 20 74 61 62 6c 65 20 58 20 74 68 61 74 20 69 74   table X that it
1ae20 20 73 68 6f 75 6c 64 20 73 61 76 65 20 69 74 73   should save its
1ae30 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 61   current state a
1ae40 73 20 73 61 76 65 70 6f 69 6e 74 20 4e 2e 20 41  s savepoint N. A
1ae50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
1ae60 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f  bsequent call to
1ae70 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52   xRollbackTo(X,R
1ae80 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  ) means that the
1ae90 20 73 74 61 74 65 20 6f 66 20 74 68 65 0d 0a 20   state of the.. 
1aea0 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75         /// virtu
1aeb0 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20  al table should 
1aec0 72 65 74 75 72 6e 20 74 6f 20 77 68 61 74 20 69  return to what i
1aed0 74 20 77 61 73 20 77 68 65 6e 20 78 53 61 76 65  t was when xSave
1aee0 70 6f 69 6e 74 28 58 2c 52 29 20 77 61 73 0d 0a  point(X,R) was..
1aef0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 73 74          /// last
1af00 20 63 61 6c 6c 65 64 2e 20 54 68 65 20 63 61 6c   called. The cal
1af10 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  l to xRollbackTo
1af20 28 58 2c 52 29 20 77 69 6c 6c 20 69 6e 76 61 6c  (X,R) will inval
1af30 69 64 61 74 65 20 61 6c 6c 0d 0a 20 20 20 20 20  idate all..     
1af40 20 20 20 2f 2f 2f 20 73 61 76 65 70 6f 69 6e 74     /// savepoint
1af50 73 20 77 69 74 68 20 4e 3e 52 3b 20 6e 6f 6e 65  s with N>R; none
1af60 20 6f 66 20 74 68 65 20 69 6e 76 61 6c 69 64 65   of the invalide
1af70 64 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 6c  d savepoints wil
1af80 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  l be..        //
1af90 2f 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6f 72  / rolled back or
1afa0 20 72 65 6c 65 61 73 65 64 20 77 69 74 68 6f 75   released withou
1afb0 74 20 66 69 72 73 74 20 62 65 69 6e 67 20 72 65  t first being re
1afc0 69 6e 69 74 69 61 6c 69 7a 65 64 20 62 79 20 61  initialized by a
1afd0 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   call..        /
1afe0 2f 2f 20 74 6f 20 78 53 61 76 65 70 6f 69 6e 74  // to xSavepoint
1aff0 28 29 2e 20 41 20 63 61 6c 6c 20 74 6f 20 78 52  (). A call to xR
1b000 65 6c 65 61 73 65 28 58 2c 4d 29 20 69 6e 76 61  elease(X,M) inva
1b010 6c 69 64 61 74 65 73 20 61 6c 6c 20 73 61 76 65  lidates all save
1b020 70 6f 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  points..        
1b030 2f 2f 2f 20 77 68 65 72 65 20 4e 3e 3d 4d 2e 0d  /// where N>=M..
1b040 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1b050 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1b060 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1b070 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20 74 68    /// None of th
1b080 65 20 78 53 61 76 65 70 6f 69 6e 74 28 29 2c 20  e xSavepoint(), 
1b090 78 52 65 6c 65 61 73 65 28 29 2c 20 6f 72 20 78  xRelease(), or x
1b0a0 52 6f 6c 6c 62 61 63 6b 54 6f 28 29 20 6d 65 74  RollbackTo() met
1b0b0 68 6f 64 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20  hods will..     
1b0c0 20 20 20 2f 2f 2f 20 65 76 65 72 20 62 65 20 63     /// ever be c
1b0d0 61 6c 6c 65 64 20 65 78 63 65 70 74 20 69 6e 20  alled except in 
1b0e0 62 65 74 77 65 65 6e 20 63 61 6c 6c 73 20 74 6f  between calls to
1b0f0 20 78 42 65 67 69 6e 28 29 20 61 6e 64 20 65 69   xBegin() and ei
1b100 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ther..        //
1b110 2f 20 78 43 6f 6d 6d 69 74 28 29 20 6f 72 20 78  / xCommit() or x
1b120 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20 20 20  Rollback()...   
1b130 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1b140 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b150 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1b160 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1b170 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
1b180 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
1b190 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
1b1a0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
1b1b0 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
1b1c0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1b1d0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1b1e0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1b1f0 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a  ="iSavepoint">..
1b200 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1b210 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 69   is an integer i
1b220 64 65 6e 74 69 66 69 65 72 20 75 73 65 64 20 74  dentifier used t
1b230 6f 20 73 70 65 63 69 66 79 20 61 20 73 70 65 63  o specify a spec
1b240 69 66 69 63 20 73 61 76 65 64 0d 0a 20 20 20 20  ific saved..    
1b250 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 20 66 6f      /// state fo
1b260 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  r the virtual ta
1b270 62 6c 65 20 66 6f 72 20 69 74 20 74 6f 20 72 65  ble for it to re
1b280 73 74 6f 72 65 20 69 74 73 65 6c 66 20 62 61 63  store itself bac
1b290 6b 20 74 6f 2c 20 77 68 69 63 68 0d 0a 20 20 20  k to, which..   
1b2a0 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20       /// should 
1b2b0 61 6c 73 6f 20 68 61 76 65 20 74 68 65 20 65 66  also have the ef
1b2c0 66 65 63 74 20 6f 66 20 64 65 6c 65 74 69 6e 67  fect of deleting
1b2d0 20 61 6c 6c 20 73 61 76 65 64 20 73 74 61 74 65   all saved state
1b2e0 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20 20 20  s with an..     
1b2f0 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 69     /// integer i
1b300 64 65 6e 74 69 66 69 65 72 20 67 72 65 61 74 65  dentifier greate
1b310 72 20 74 68 61 6e 20 74 68 69 73 20 6f 6e 65 2e  r than this one.
1b320 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b330 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1b340 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1b350 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1b360 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1b370 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1b380 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1b390 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1b3a0 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c  eErrorCode xRoll
1b3b0 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20  backTo(..       
1b3c0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
1b3d0 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
1b3e0 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a  int iSavepoint..
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1b400 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
1b410 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
1b420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b460 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b470 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4d  #region ISQLiteM
1b480 61 6e 61 67 65 64 4d 6f 64 75 6c 65 20 49 6e 74  anagedModule Int
1b490 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f 20  erface..    /// 
1b4a0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1b4b0 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61 63  // This interfac
1b4c0 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 76  e represents a v
1b4d0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
1b4e0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 72 69 74  lementation writ
1b4f0 74 65 6e 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20  ten in..    /// 
1b500 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20  managed code... 
1b510 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1b520 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  >..    public in
1b530 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 4d  terface ISQLiteM
1b540 61 6e 61 67 65 64 4d 6f 64 75 6c 65 0d 0a 20 20  anagedModule..  
1b550 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f    {..        ///
1b560 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1b570 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
1b580 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
1b590 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 76  schema for the v
1b5a0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
1b5b0 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f   been..        /
1b5c0 2f 2f 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  // declared...  
1b5d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1b5e0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f  ary>..        bo
1b5f0 6f 6c 20 44 65 63 6c 61 72 65 64 20 7b 20 67 65  ol Declared { ge
1b600 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t; }....        
1b610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b650 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1b660 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1b670 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65  ..        /// Re
1b680 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  turns the name o
1b690 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 73 20  f the module as 
1b6a0 69 74 20 77 61 73 20 72 65 67 69 73 74 65 72 65  it was registere
1b6b0 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69 74  d with the SQLit
1b6c0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
1b6d0 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...  
1b6e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1b6f0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 73 74  ary>..        st
1b700 72 69 6e 67 20 4e 61 6d 65 20 7b 20 67 65 74 3b  ring Name { get;
1b710 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1b720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b760 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1b770 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1b780 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1b790 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1b7a0 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1b7b0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1b7c0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1b7d0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1b7e0 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74  .xCreate" /> met
1b7f0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1b800 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1b810 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1b820 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f   name="connectio
1b830 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n">..        ///
1b840 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1b850 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1b860 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1b870 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 20  ance associated 
1b880 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  with..        //
1b890 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  / the virtual ta
1b8a0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
1b8b0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1b8c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1b8d0 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74 61  ame="pClientData
1b8e0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1b8f0 54 68 65 20 6e 61 74 69 76 65 20 75 73 65 72 2d  The native user-
1b900 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73 73  data pointer ass
1b910 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
1b920 73 20 6d 6f 64 75 6c 65 2c 20 61 73 20 69 74 20  s module, as it 
1b930 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  was..        ///
1b940 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65   provided to the
1b950 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
1b960 72 61 72 79 20 77 68 65 6e 20 74 68 65 20 6e 61  rary when the na
1b970 74 69 76 65 20 6d 6f 64 75 6c 65 20 69 6e 73 74  tive module inst
1b980 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
1b990 2f 20 77 61 73 20 63 72 65 61 74 65 64 2e 0d 0a  / was created...
1b9a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1b9b0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1b9c0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
1b9d0 72 67 75 6d 65 6e 74 73 22 3e 0d 0a 20 20 20 20  rguments">..    
1b9e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75      /// The modu
1b9f0 6c 65 20 6e 61 6d 65 2c 20 64 61 74 61 62 61 73  le name, databas
1ba00 65 20 6e 61 6d 65 2c 20 76 69 72 74 75 61 6c 20  e name, virtual 
1ba10 74 61 62 6c 65 20 6e 61 6d 65 2c 20 61 6e 64 20  table name, and 
1ba20 61 6c 6c 20 6f 74 68 65 72 0d 0a 20 20 20 20 20  all other..     
1ba30 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74 73     /// arguments
1ba40 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 43   passed to the C
1ba50 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
1ba60 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  BLE statement...
1ba70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1ba80 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1ba90 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1baa0 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
1bab0 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
1bac0 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
1bad0 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
1bae0 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65  d to contain the
1baf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1bb00 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1bb10 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
1bb20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1bb30 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d  associated with.
1bb40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
1bb50 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
1bb60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1bb70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1bb80 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1bb90 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  error">..       
1bba0 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72   /// Upon failur
1bbb0 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  e, this paramete
1bbc0 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
1bbd0 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e  ed to contain an
1bbe0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
1bbf0 2f 2f 2f 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  /// message...  
1bc00 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1bc10 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1bc20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1bc30 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1bc40 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1bc50 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1bc60 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1bc70 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1bc80 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a  orCode Create(..
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1bca0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
1bcb0 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a 20 69 6e 20  nection,  /* in 
1bcc0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1bcd0 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
1bce0 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ta,           /*
1bcf0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1bd00 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
1bd10 75 6d 65 6e 74 73 2c 20 20 20 20 20 20 20 20 20  uments,         
1bd20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1bd30 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69          ref SQLi
1bd40 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
1bd50 61 62 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d  able, /* out */.
1bd60 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1bd70 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20   string error   
1bd80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1bd90 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  t */..          
1bda0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1bdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdf0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1be00 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1be10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1be20 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
1be30 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
1be40 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1be50 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
1be60 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
1be70 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
1be80 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
1be90 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1bea0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1beb0 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63  ram name="connec
1bec0 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20  tion">..        
1bed0 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1bee0 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  f="SQLiteConnect
1bef0 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ion" /> object i
1bf00 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
1bf10 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20  ed with..       
1bf20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c   /// the virtual
1bf30 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
1bf40 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1bf50 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1bf60 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44  m name="pClientD
1bf70 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ata">..        /
1bf80 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 75 73  // The native us
1bf90 65 72 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20  er-data pointer 
1bfa0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1bfb0 74 68 69 73 20 6d 6f 64 75 6c 65 2c 20 61 73 20  this module, as 
1bfc0 69 74 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20  it was..        
1bfd0 2f 2f 2f 20 70 72 6f 76 69 64 65 64 20 74 6f 20  /// provided to 
1bfe0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
1bff0 6c 69 62 72 61 72 79 20 77 68 65 6e 20 74 68 65  library when the
1c000 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 20 69   native module i
1c010 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20  nstance..       
1c020 20 2f 2f 2f 20 77 61 73 20 63 72 65 61 74 65 64   /// was created
1c030 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1c040 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1c050 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1c060 3d 22 61 72 67 75 6d 65 6e 74 73 22 3e 0d 0a 20  ="arguments">.. 
1c070 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d         /// The m
1c080 6f 64 75 6c 65 20 6e 61 6d 65 2c 20 64 61 74 61  odule name, data
1c090 62 61 73 65 20 6e 61 6d 65 2c 20 76 69 72 74 75  base name, virtu
1c0a0 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 61  al table name, a
1c0b0 6e 64 20 61 6c 6c 20 6f 74 68 65 72 0d 0a 20 20  nd all other..  
1c0c0 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65        /// argume
1c0d0 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
1c0e0 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
1c0f0 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
1c100 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1c110 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1c120 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1c130 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  ="table">..     
1c140 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
1c150 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
1c160 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
1c170 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
1c180 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1c190 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1c1a0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
1c1b0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1c1c0 63 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ce associated wi
1c1d0 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  th..        /// 
1c1e0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1c1f0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1c200 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1c210 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1c220 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
1c230 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69      /// Upon fai
1c240 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d  lure, this param
1c250 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
1c260 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  ified to contain
1c270 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
1c280 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2e 0d     /// message..
1c290 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1c2a0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1c2b0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1c2c0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
1c2d0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
1c2e0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
1c2f0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1c300 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1c310 45 72 72 6f 72 43 6f 64 65 20 43 6f 6e 6e 65 63  ErrorCode Connec
1c320 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1c330 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1c340 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a   connection,  /*
1c350 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1c360 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65      IntPtr pClie
1c370 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20 20  ntData,         
1c380 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1c390 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
1c3a0 20 61 72 67 75 6d 65 6e 74 73 2c 20 20 20 20 20   arguments,     
1c3b0 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1c3d0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1c3e0 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 6f 75 74  le table, /* out
1c3f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1c400 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
1c410 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r              /
1c420 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  * out */..      
1c430 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1c440 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1c490 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1c4a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1c4b0 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
1c4c0 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
1c4d0 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
1c4e0 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1c4f0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
1c500 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  Module.xBestInde
1c510 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  x" /> method... 
1c520 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1c530 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1c540 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1c550 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  table">..       
1c560 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1c570 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
1c580 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  lTable" /> objec
1c590 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63  t instance assoc
1c5a0 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  iated..        /
1c5b0 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72  // with this vir
1c5c0 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
1c5d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1c5e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1c5f0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65  param name="inde
1c600 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  x">..        ///
1c610 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1c620 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20  SQLiteIndex" /> 
1c630 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1c640 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74  containing all t
1c650 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1c660 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 6e 70  data for the inp
1c670 75 74 73 20 61 6e 64 20 6f 75 74 70 75 74 73 20  uts and outputs 
1c680 72 65 6c 61 74 69 6e 67 20 74 6f 20 69 6e 64 65  relating to inde
1c690 78 20 73 65 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20  x selection...  
1c6a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1c6b0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1c6c0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1c6d0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1c6e0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1c6f0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1c700 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1c710 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1c720 6f 72 43 6f 64 65 20 42 65 73 74 49 6e 64 65 78  orCode BestIndex
1c730 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
1c740 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1c750 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a  e table, /* in *
1c760 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  /..            S
1c770 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78  QLiteIndex index
1c780 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c 20           /* in, 
1c790 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
1c7a0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1c7b0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1c7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c800 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1c810 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1c820 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1c830 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1c840 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1c850 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1c860 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1c870 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74  dule.xDisconnect
1c880 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
1c890 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1c8a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1c8b0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1c8c0 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
1c8d0 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1c8e0 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
1c8f0 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
1c900 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
1c910 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
1c920 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74  / with this virt
1c930 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
1c940 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1c950 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1c960 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1c970 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1c980 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1c990 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1c9a0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1c9b0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1c9c0 43 6f 64 65 20 44 69 73 63 6f 6e 6e 65 63 74 28  Code Disconnect(
1c9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1c9e0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1c9f0 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d   table /* in */.
1ca00 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1ca10 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1ca20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1ca70 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1ca80 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1ca90 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
1caa0 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
1cab0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1cac0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
1cad0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44  eNativeModule.xD
1cae0 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65 74 68 6f  estroy" /> metho
1caf0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1cb00 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1cb10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1cb20 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
1cb30 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1cb40 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1cb50 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
1cb60 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1cb70 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
1cb80 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
1cb90 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
1cba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1cbb0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1cbc0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1cbd0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1cbe0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1cbf0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1cc00 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1cc10 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1cc20 65 45 72 72 6f 72 43 6f 64 65 20 44 65 73 74 72  eErrorCode Destr
1cc30 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oy(..           
1cc40 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
1cc50 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20  ble table /* in 
1cc60 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1cc70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1cc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ccd0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1cce0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1ccf0 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1cd00 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1cd10 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1cd20 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1cd30 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1cd40 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f  .xOpen" /> metho
1cd50 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1cd60 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1cd70 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1cd80 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
1cd90 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1cda0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1cdb0 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
1cdc0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1cdd0 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
1cde0 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
1cdf0 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
1ce00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1ce10 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1ce20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1ce30 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
1ce40 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
1ce50 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
1ce60 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
1ce70 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
1ce80 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1ce90 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1cea0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
1ceb0 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
1cec0 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
1ced0 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
1cee0 20 77 69 74 68 20 74 68 65 20 6e 65 77 6c 79 20   with the newly 
1cef0 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74  opened virtual t
1cf00 61 62 6c 65 20 63 75 72 73 6f 72 2e 0d 0a 20 20  able cursor...  
1cf10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1cf20 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1cf30 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1cf40 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1cf50 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1cf60 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1cf70 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1cf80 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1cf90 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20 20  orCode Open(..  
1cfa0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1cfb0 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
1cfc0 6c 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le,           /*
1cfd0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1cfe0 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69      ref SQLiteVi
1cff0 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1d000 20 63 75 72 73 6f 72 20 2f 2a 20 6f 75 74 20 2a   cursor /* out *
1d010 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
1d020 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1d030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d070 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1d080 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1d090 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1d0a0 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
1d0b0 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
1d0c0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1d0d0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
1d0e0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
1d0f0 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68 6f  xClose" /> metho
1d100 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1d110 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1d120 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1d130 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20  ame="cursor">.. 
1d140 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1d150 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1d160 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1d170 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  or" /> object in
1d180 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
1d190 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
1d1a0 69 74 68 20 74 68 65 20 70 72 65 76 69 6f 75 73  ith the previous
1d1b0 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61  ly opened virtua
1d1c0 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74  l table cursor t
1d1d0 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o be..        //
1d1e0 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  / used...       
1d1f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1d200 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1d210 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1d220 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1d230 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1d240 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d250 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1d260 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1d270 65 20 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20  e Close(..      
1d280 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1d290 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
1d2a0 75 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  ursor /* in */..
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1d2c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1d2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d310 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1d320 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1d330 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1d340 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
1d350 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
1d360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1d370 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
1d380 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
1d390 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
1d3a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d3b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1d3c0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1d3d0 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20  e="cursor">..   
1d3e0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1d3f0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
1d400 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1d410 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1d420 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
1d430 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
1d440 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  h the previously
1d450 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20   opened virtual 
1d460 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20  table cursor to 
1d470 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1d480 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
1d490 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1d4a0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1d4b0 6e 61 6d 65 3d 22 69 6e 64 65 78 4e 75 6d 62 65  name="indexNumbe
1d4c0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
1d4d0 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   Number used to 
1d4e0 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
1d4f0 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
1d500 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1d510 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1d520 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1d530 3d 22 69 6e 64 65 78 53 74 72 69 6e 67 22 3e 0d  ="indexString">.
1d540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 74 72  .        /// Str
1d550 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ing used to help
1d560 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
1d570 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20  lected index... 
1d580 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1d590 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1d5a0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
1d5b0 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  lues">..        
1d5c0 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 73 20 63  /// The values c
1d5d0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1d5e0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
1d5f0 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65  he selected inde
1d600 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  x...        /// 
1d610 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1d620 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1d630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1d640 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1d650 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1d660 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1d670 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1d680 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c  iteErrorCode Fil
1d690 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
1d6a0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1d6b0 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
1d6c0 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  r, /* in */..   
1d6d0 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
1d6e0 65 78 4e 75 6d 62 65 72 2c 20 20 20 20 20 20 20  exNumber,       
1d6f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
1d700 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1d710 73 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69  string indexStri
1d720 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
1d730 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
1d740 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c         SQLiteVal
1d750 75 65 5b 5d 20 76 61 6c 75 65 73 20 20 20 20 20  ue[] values     
1d760 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
1d770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1d780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1d790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1d7e0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1d7f0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1d800 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
1d810 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
1d820 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1d830 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
1d840 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
1d850 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Next" /> method.
1d860 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d870 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1d880 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1d890 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20  e="cursor">..   
1d8a0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1d8b0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
1d8c0 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1d8d0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1d8e0 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
1d8f0 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
1d900 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  h the previously
1d910 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20   opened virtual 
1d920 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20  table cursor to 
1d930 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1d940 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
1d950 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1d960 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1d970 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
1d980 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
1d990 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
1d9a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
1d9b0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1d9c0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1d9d0 4e 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20  Next(..         
1d9e0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
1d9f0 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
1da00 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  or /* in */..   
1da10 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1da20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1da30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1da70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1da80 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1da90 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
1daa0 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
1dab0 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
1dac0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
1dad0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
1dae0 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22 20  iveModule.xEof" 
1daf0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
1db00 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1db10 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1db20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72  <param name="cur
1db30 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
1db40 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1db50 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
1db60 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f  ableCursor" /> o
1db70 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a  bject instance..
1db80 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
1db90 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1dba0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1dbb0 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  d virtual table 
1dbc0 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20  cursor to be..  
1dbd0 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d        /// used..
1dbe0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1dbf0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1dc00 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1dc10 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
1dc20 72 6f 20 69 66 20 6e 6f 20 6d 6f 72 65 20 72 6f  ro if no more ro
1dc30 77 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ws are available
1dc40 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65  ; zero otherwise
1dc50 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1dc60 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1dc70 20 20 20 62 6f 6f 6c 20 45 6f 66 28 0d 0a 20 20     bool Eof(..  
1dc80 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1dc90 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1dca0 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 69 6e 20  or cursor /* in 
1dcb0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1dcc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1dcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1dd20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1dd30 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1dd40 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1dd50 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1dd60 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1dd70 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1dd80 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1dd90 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74  .xColumn" /> met
1dda0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1ddb0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1ddc0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1ddd0 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d   name="cursor">.
1dde0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1ddf0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1de00 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
1de10 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
1de20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20  instance..      
1de30 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
1de40 20 77 69 74 68 20 74 68 65 20 70 72 65 76 69 6f   with the previo
1de50 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74  usly opened virt
1de60 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
1de70 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
1de80 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20  /// used...     
1de90 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1dea0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1deb0 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78  ram name="contex
1dec0 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
1ded0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1dee0 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 22 20 2f  SQLiteContext" /
1def0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1df00 65 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  e to be used for
1df10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65  ..        /// re
1df20 74 75 72 6e 69 6e 67 20 74 68 65 20 73 70 65 63  turning the spec
1df30 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c  ified column val
1df40 75 65 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65  ue to the SQLite
1df50 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
1df60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1df70 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1df80 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
1df90 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  ndex">..        
1dfa0 2f 2f 2f 20 54 68 65 20 7a 65 72 6f 2d 62 61 73  /// The zero-bas
1dfb0 65 64 20 69 6e 64 65 78 20 63 6f 72 72 65 73 70  ed index corresp
1dfc0 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 63 6f  onding to the co
1dfd0 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20  lumn containing 
1dfe0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1dff0 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65 74   value to be ret
1e000 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  urned...        
1e010 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1e020 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1e030 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1e040 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1e050 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1e060 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1e070 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1e080 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1e090 20 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20   Column(..      
1e0a0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1e0b0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
1e0c0 75 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d  ursor, /* in */.
1e0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1e0e0 69 74 65 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65  iteContext conte
1e0f0 78 74 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  xt,           /*
1e100 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1e110 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 20 20      int index   
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e130 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
1e140 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1e150 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1e160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1e1b0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1e1c0 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1e1d0 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20  od is called in 
1e1e0 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d  response to the.
1e1f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
1e200 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
1e210 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77  ativeModule.xRow
1e220 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  Id" /> method...
1e230 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1e240 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1e250 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e260 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
1e270 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
1e280 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
1e290 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
1e2a0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1e2b0 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
1e2c0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1e2d0 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  the previously o
1e2e0 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61  pened virtual ta
1e2f0 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65  ble cursor to be
1e300 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73  ..        /// us
1e310 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
1e320 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1e330 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1e340 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
1e350 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
1e360 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
1e370 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
1e380 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
1e390 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20  n the unique..  
1e3a0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
1e3b0 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72  r row identifier
1e3c0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
1e3d0 20 72 6f 77 20 66 6f 72 20 74 68 65 20 73 70 65   row for the spe
1e3e0 63 69 66 69 65 64 20 63 75 72 73 6f 72 2e 0d 0a  cified cursor...
1e3f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1e400 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1e410 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1e420 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1e430 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1e440 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1e450 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1e460 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1e470 72 72 6f 72 43 6f 64 65 20 52 6f 77 49 64 28 0d  rrorCode RowId(.
1e480 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1e490 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
1e4a0 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a  ursor cursor, /*
1e4b0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1e4c0 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
1e4d0 49 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Id              
1e4e0 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1e500 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1e510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e550 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1e560 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1e570 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1e580 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
1e590 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
1e5a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1e5b0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
1e5c0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70  NativeModule.xUp
1e5d0 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  date" /> method.
1e5e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e5f0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1e600 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1e610 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
1e620 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
1e630 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
1e640 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
1e650 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
1e660 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
1e670 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
1e680 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1e690 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1e6a0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1e6b0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
1e6c0 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20  alues">..       
1e6d0 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f   /// The array o
1e6e0 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
1e6f0 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62 6a  iteValue" /> obj
1e700 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20 63 6f  ect instances co
1e710 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20  ntaining..      
1e720 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77 20 6f 72    /// the new or
1e730 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c 75 6d 6e   modified column
1e740 20 76 61 6c 75 65 73 2c 20 69 66 20 61 6e 79 2e   values, if any.
1e750 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e760 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1e770 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e780 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20  "rowId">..      
1e790 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
1e7a0 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  ss, this paramet
1e7b0 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
1e7c0 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  ied to contain t
1e7d0 68 65 20 75 6e 69 71 75 65 0d 0a 20 20 20 20 20  he unique..     
1e7e0 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 72     /// integer r
1e7f0 6f 77 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f  ow identifier fo
1e800 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 77  r the row that w
1e810 61 73 20 69 6e 73 65 72 74 65 64 2c 20 69 66 20  as inserted, if 
1e820 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  any...        //
1e830 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1e840 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1e850 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1e860 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1e870 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1e880 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1e890 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1e8a0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 55  QLiteErrorCode U
1e8b0 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  pdate(..        
1e8c0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1e8d0 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
1e8e0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1e8f0 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b      SQLiteValue[
1e900 5d 20 76 61 6c 75 65 73 2c 20 20 20 20 20 2f 2a  ] values,     /*
1e910 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1e920 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
1e930 49 64 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  Id            /*
1e940 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20   out */..       
1e950 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
1e960 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e9b0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1e9c0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1e9d0 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
1e9e0 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
1e9f0 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
1ea00 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
1ea10 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
1ea20 6f 64 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e  odule.xBegin" />
1ea30 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
1ea40 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1ea50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1ea60 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
1ea70 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1ea80 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
1ea90 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1eaa0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
1eab0 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
1eac0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
1ead0 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
1eae0 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1eaf0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1eb00 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1eb10 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1eb20 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1eb30 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1eb40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1eb50 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1eb60 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1eb70 20 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20   Begin(..       
1eb80 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
1eb90 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a  alTable table /*
1eba0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1ebb0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1ebc0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1ebd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec00 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1ec10 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1ec20 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1ec30 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1ec40 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1ec50 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1ec60 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1ec70 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1ec80 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20 6d  dule.xSync" /> m
1ec90 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
1eca0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1ecb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1ecc0 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
1ecd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1ece0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
1ecf0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
1ed00 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
1ed10 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
1ed20 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
1ed30 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
1ed40 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
1ed50 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1ed60 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1ed70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1ed80 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1ed90 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1eda0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1edb0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1edc0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
1edd0 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ync(..          
1ede0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1edf0 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e  able table /* in
1ee00 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1ee10 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ee70 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1ee80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
1ee90 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
1eea0 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
1eeb0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
1eec0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
1eed0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
1eee0 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65  e.xCommit" /> me
1eef0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
1ef00 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1ef10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1ef20 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d  m name="table">.
1ef30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1ef40 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1ef50 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
1ef60 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1ef70 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  ce associated.. 
1ef80 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20         /// with 
1ef90 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62  this virtual tab
1efa0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
1efb0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1efc0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1efd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
1efe0 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
1eff0 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
1f000 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
1f010 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
1f020 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f  LiteErrorCode Co
1f030 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  mmit(..         
1f040 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
1f050 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69  Table table /* i
1f060 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1f070 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1f080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f0d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1f0e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1f0f0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
1f100 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
1f110 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1f120 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
1f130 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
1f140 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f 3e  le.xRollback" />
1f150 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
1f160 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1f170 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1f180 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
1f190 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1f1a0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
1f1b0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1f1c0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
1f1d0 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
1f1e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
1f1f0 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
1f200 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1f210 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1f220 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1f230 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1f240 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1f250 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1f260 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1f270 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1f280 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1f290 20 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20   Rollback(..    
1f2a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
1f2b0 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
1f2c0 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
1f2d0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1f2e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f330 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1f340 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1f350 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
1f360 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
1f370 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
1f380 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
1f390 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
1f3a0 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  eModule.xFindFun
1f3b0 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  ction" /> method
1f3c0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1f3d0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1f3e0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1f3f0 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
1f400 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1f410 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
1f420 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
1f430 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
1f440 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
1f450 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
1f460 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
1f470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1f480 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1f490 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1f4a0 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d  argumentCount">.
1f4b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1f4c0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
1f4d0 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63  ents to the func
1f4e0 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f 75 67 68  tion being sough
1f4f0 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
1f500 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1f510 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1f520 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20  e="name">..     
1f530 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
1f540 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
1f550 62 65 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20  being sought... 
1f560 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1f570 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1f580 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
1f590 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20  nction">..      
1f5a0 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
1f5b0 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  ss, this paramet
1f5c0 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
1f5d0 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  ied to contain t
1f5e0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1f5f0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
1f600 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6f 62  eFunction" /> ob
1f610 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65  ject instance re
1f620 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 0d 0a 20  sponsible for.. 
1f630 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
1f640 6d 65 6e 74 69 6e 67 20 74 68 65 20 73 70 65 63  menting the spec
1f650 69 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 2e 0d  ified function..
1f660 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1f670 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1f680 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1f690 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20  pClientData">.. 
1f6a0 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
1f6b0 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
1f6c0 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
1f6d0 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74  modified to cont
1f6e0 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ain the..       
1f6f0 20 2f 2f 2f 20 6e 61 74 69 76 65 20 75 73 65 72   /// native user
1f700 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73  -data pointer as
1f710 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20  sociated with.. 
1f720 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1f730 6d 72 65 66 20 6e 61 6d 65 3d 22 66 75 6e 63 74  mref name="funct
1f740 69 6f 6e 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20  ion" />...      
1f750 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1f760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1f770 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1f780 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
1f790 68 65 20 73 70 65 63 69 66 69 65 64 20 66 75 6e  he specified fun
1f7a0 63 74 69 6f 6e 20 77 61 73 20 66 6f 75 6e 64 3b  ction was found;
1f7b0 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e   zero otherwise.
1f7c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1f7d0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1f7e0 20 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63 74    bool FindFunct
1f7f0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1f800 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1f810 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20 20 2f  able table,    /
1f820 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
1f830 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e       int argumen
1f840 74 43 6f 75 6e 74 2c 20 20 20 20 20 20 20 20 20  tCount,         
1f850 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1f860 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
1f870 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  ame,            
1f880 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
1f890 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53             ref S
1f8a0 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
1f8b0 6e 63 74 69 6f 6e 2c 20 2f 2a 20 6f 75 74 20 2a  nction, /* out *
1f8c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
1f8d0 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e  ef IntPtr pClien
1f8e0 74 44 61 74 61 20 20 20 20 20 20 20 2f 2a 20 6f  tData       /* o
1f8f0 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
1f900 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
1f910 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f950 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1f960 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1f970 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1f980 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
1f990 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65  lled in response
1f9a0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
1f9b0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
1f9c0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
1f9d0 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20  ule.xRename" /> 
1f9e0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
1f9f0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1fa00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1fa10 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
1fa20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1fa30 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
1fa40 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1fa50 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1fa60 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
1fa70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
1fa80 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
1fa90 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
1faa0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1fab0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1fac0 6e 61 6d 65 3d 22 6e 65 77 4e 61 6d 65 22 3e 0d  name="newName">.
1fad0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1fae0 20 6e 65 77 20 6e 61 6d 65 20 66 6f 72 20 74 68   new name for th
1faf0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
1fb00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1fb10 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1fb20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1fb30 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1fb40 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1fb50 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1fb60 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1fb70 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1fb80 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6e 61 6d  eErrorCode Renam
1fb90 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1fba0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1fbb0 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20  le table, /* in 
1fbc0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1fbd0 73 74 72 69 6e 67 20 6e 65 77 4e 61 6d 65 20 20  string newName  
1fbe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
1fbf0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1fc00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1fc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fc60 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1fc70 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1fc80 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1fc90 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1fca0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1fcb0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1fcc0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1fcd0 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20  .xSavepoint" /> 
1fce0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
1fcf0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1fd00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1fd10 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
1fd20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1fd30 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
1fd40 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1fd50 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1fd60 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
1fd70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
1fd80 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
1fd90 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
1fda0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1fdb0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1fdc0 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74 22  name="savepoint"
1fdd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1fde0 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65  his is an intege
1fdf0 72 20 69 64 65 6e 74 69 66 69 65 72 20 75 6e 64  r identifier und
1fe00 65 72 20 77 68 69 63 68 20 74 68 65 20 74 68 65  er which the the
1fe10 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f   current state o
1fe20 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  f..        /// t
1fe30 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
1fe40 20 73 68 6f 75 6c 64 20 62 65 20 73 61 76 65 64   should be saved
1fe50 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1fe60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1fe70 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1fe80 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
1fe90 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
1fea0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
1feb0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1fec0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
1fed0 74 65 45 72 72 6f 72 43 6f 64 65 20 53 61 76 65  teErrorCode Save
1fee0 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  point(..        
1fef0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1ff00 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
1ff10 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1ff20 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e      int savepoin
1ff30 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t             /*
1ff40 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1ff50 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1ff60 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1ffb0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1ffc0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1ffd0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1ffe0 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1fff0 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
20000 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
20010 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
20020 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f  dule.xRelease" /
20030 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
20040 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
20050 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
20060 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
20070 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
20080 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
20090 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
200a0 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
200b0 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
200c0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
200d0 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c  ith this virtual
200e0 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
200f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
20100 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
20110 6d 20 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e  m name="savepoin
20120 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
20130 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65   This is an inte
20140 67 65 72 20 75 73 65 64 20 74 6f 20 69 6e 64 69  ger used to indi
20150 63 61 74 65 20 74 68 61 74 20 61 6e 79 20 73 61  cate that any sa
20160 76 65 64 20 73 74 61 74 65 73 20 77 69 74 68 20  ved states with 
20170 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  an..        /// 
20180 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61 74  identifier great
20190 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
201a0 20 74 6f 20 74 68 69 73 20 73 68 6f 75 6c 64 20   to this should 
201b0 62 65 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  be deleted by th
201c0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
201d0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
201e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
201f0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
20200 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
20210 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
20220 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
20230 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
20240 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
20250 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
20260 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73 65 28  rorCode Release(
20270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
20280 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
20290 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f   table, /* in */
202a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
202b0 74 20 73 61 76 65 70 6f 69 6e 74 20 20 20 20 20  t savepoint     
202c0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
202d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
202e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
202f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20330 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
20340 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20350 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
20360 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
20370 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
20380 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
20390 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
203a0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
203b0 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d  RollbackTo" /> m
203c0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
203d0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
203e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
203f0 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
20400 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
20410 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
20420 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
20430 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
20440 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
20450 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
20460 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
20470 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
20480 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
20490 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
204a0 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74 22 3e  ame="savepoint">
204b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
204c0 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  is is an integer
204d0 20 69 64 65 6e 74 69 66 69 65 72 20 75 73 65 64   identifier used
204e0 20 74 6f 20 73 70 65 63 69 66 79 20 61 20 73 70   to specify a sp
204f0 65 63 69 66 69 63 20 73 61 76 65 64 0d 0a 20 20  ecific saved..  
20500 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 20        /// state 
20510 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
20520 74 61 62 6c 65 20 66 6f 72 20 69 74 20 74 6f 20  table for it to 
20530 72 65 73 74 6f 72 65 20 69 74 73 65 6c 66 20 62  restore itself b
20540 61 63 6b 20 74 6f 2c 20 77 68 69 63 68 0d 0a 20  ack to, which.. 
20550 20 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c         /// shoul
20560 64 20 61 6c 73 6f 20 68 61 76 65 20 74 68 65 20  d also have the 
20570 65 66 66 65 63 74 20 6f 66 20 64 65 6c 65 74 69  effect of deleti
20580 6e 67 20 61 6c 6c 20 73 61 76 65 64 20 73 74 61  ng all saved sta
20590 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20  tes with an..   
205a0 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72       /// integer
205b0 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61   identifier grea
205c0 74 65 72 20 74 68 61 6e 20 74 68 69 73 20 6f 6e  ter than this on
205d0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
205e0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
205f0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
20600 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
20610 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
20620 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
20630 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
20640 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
20650 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c  iteErrorCode Rol
20660 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
20670 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
20680 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20  ualTable table, 
20690 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
206a0 20 20 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f        int savepo
206b0 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20  int             
206c0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
206d0 20 20 20 20 20 20 29 3b 0d 0a 20 20 20 20 7d 0d        );..    }.
206e0 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
206f0 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
20700 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
20750 6e 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 53  n SQLiteMemory S
20760 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20 20 20  tatic Class..   
20770 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
20780 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
20790 73 73 20 63 6f 6e 74 61 69 6e 73 20 73 74 61 74  ss contains stat
207a0 69 63 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20  ic methods that 
207b0 61 72 65 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f  are used to allo
207c0 63 61 74 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 6d  cate,..    /// m
207d0 61 6e 69 70 75 6c 61 74 65 2c 20 61 6e 64 20 66  anipulate, and f
207e0 72 65 65 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72  ree native memor
207f0 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
20800 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
20810 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  brary...    /// 
20820 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
20830 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
20840 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 65 6d 6f  class SQLiteMemo
20850 72 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ry..    {..     
20860 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
20870 74 65 20 44 61 74 61 0d 0a 23 69 66 20 54 52 41  te Data..#if TRA
20880 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d  CK_MEMORY_BYTES.
20890 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
208a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
208b0 2f 2f 2f 20 54 68 69 73 20 6f 62 6a 65 63 74 20  /// This object 
208c0 69 6e 73 74 61 6e 63 65 20 69 73 20 75 73 65 64  instance is used
208d0 20 74 6f 20 73 79 6e 63 68 72 6f 6e 69 7a 65 20   to synchronize 
208e0 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 6f 74  access to the ot
208f0 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  her..        ///
20900 20 73 74 61 74 69 63 20 66 69 65 6c 64 73 20 6f   static fields o
20910 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20  f this class... 
20920 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
20930 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
20940 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
20950 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20  ject syncRoot = 
20960 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d  new object();...
20970 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
20980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
209d0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
209e0 20 20 20 2f 2f 2f 20 54 68 65 20 74 6f 74 61 6c     /// The total
209f0 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 73 74   number of outst
20a00 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20 62 79  anding memory by
20a10 74 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  tes allocated by
20a20 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
20a30 2f 2f 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  // class using t
20a40 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
20a50 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
20a60 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
20a70 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
20a80 20 73 74 61 74 69 63 20 69 6e 74 20 62 79 74 65   static int byte
20a90 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 0d 0a 20  sAllocated;.... 
20aa0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20af0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
20b00 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
20b10 20 2f 2f 2f 20 54 68 65 20 6d 61 78 69 6d 75 6d   /// The maximum
20b20 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 73 74   number of outst
20b30 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20 62 79  anding memory by
20b40 74 65 73 20 65 76 65 72 20 61 6c 6c 6f 63 61 74  tes ever allocat
20b50 65 64 20 62 79 0d 0a 20 20 20 20 20 20 20 20 2f  ed by..        /
20b60 2f 2f 20 74 68 69 73 20 63 6c 61 73 73 20 75 73  // this class us
20b70 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 63  ing the SQLite c
20b80 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...  
20b90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
20ba0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
20bb0 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
20bc0 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c   maximumBytesAll
20bd0 6f 63 61 74 65 64 3b 0d 0a 23 65 6e 64 69 66 0d  ocated;..#endif.
20be0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
20bf0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
20c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20c50 20 20 23 72 65 67 69 6f 6e 20 4d 65 6d 6f 72 79    #region Memory
20c60 20 41 6c 6c 6f 63 61 74 69 6f 6e 20 48 65 6c 70   Allocation Help
20c70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
20c80 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
20c90 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
20ca0 6c 6c 6f 63 61 74 65 73 20 61 74 20 6c 65 61 73  llocates at leas
20cb0 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
20cc0 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
20cd0 6f 66 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79  of native memory
20ce0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
20cf0 61 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  a the SQLite cor
20d00 65 20 6c 69 62 72 61 72 79 20 73 71 6c 69 74 65  e library sqlite
20d10 33 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74  3_malloc() funct
20d20 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 73 0d  ion and returns.
20d30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
20d40 20 72 65 73 75 6c 74 69 6e 67 20 6e 61 74 69 76   resulting nativ
20d50 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20 20  e pointer...    
20d60 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
20d70 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
20d80 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 69 7a  <param name="siz
20d90 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
20da0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
20db0 79 74 65 73 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ytes to allocate
20dc0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20dd0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
20de0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
20df0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
20e00 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
20e10 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
20e20 62 6c 6f 63 6b 20 6f 66 20 6d 65 6d 6f 72 79 20  block of memory 
20e30 6f 66 20 61 74 20 6c 65 61 73 74 20 74 68 65 0d  of at least the.
20e40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65  .        /// spe
20e50 63 69 66 69 65 64 20 73 69 7a 65 20 2d 4f 52 2d  cified size -OR-
20e60 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
20e70 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 69 66 20 74  tr.Zero" /> if t
20e80 68 65 20 6d 65 6d 6f 72 79 20 63 6f 75 6c 64 0d  he memory could.
20e90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f 74  .        /// not
20ea0 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e 0d 0a   be allocated...
20eb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
20ec0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
20ed0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e  public static In
20ee0 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 28 69 6e  tPtr Allocate(in
20ef0 74 20 73 69 7a 65 29 0d 0a 20 20 20 20 20 20 20  t size)..       
20f00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20f10 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79 20 3d  IntPtr pMemory =
20f20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
20f30 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61 6c  hods.sqlite3_mal
20f40 6c 6f 63 28 73 69 7a 65 29 3b 0d 0a 0d 0a 23 69  loc(size);....#i
20f50 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42  f TRACK_MEMORY_B
20f60 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20 20 20  YTES..          
20f70 20 20 69 66 20 28 70 4d 65 6d 6f 72 79 20 21 3d    if (pMemory !=
20f80 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
20f90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
20fb0 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20 53 69  t blockSize = Si
20fc0 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d 0a  ze(pMemory);....
20fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fe0 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20 3e 20  if (blockSize > 
20ff0 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
21000 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21010 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
21020 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20  (syncRoot)..    
21030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21040 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21050 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 73             bytes
21060 41 6c 6c 6f 63 61 74 65 64 20 2b 3d 20 62 6c 6f  Allocated += blo
21070 63 6b 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20  ckSize;....     
21080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21090 20 20 20 69 66 20 28 62 79 74 65 73 41 6c 6c 6f     if (bytesAllo
210a0 63 61 74 65 64 20 3e 20 6d 61 78 69 6d 75 6d 42  cated > maximumB
210b0 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 29 0d 0a  ytesAllocated)..
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210d0 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 69              maxi
210e0 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65  mumBytesAllocate
210f0 64 20 3d 20 62 79 74 65 73 41 6c 6c 6f 63 61 74  d = bytesAllocat
21100 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
21110 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
21120 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
21130 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
21140 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
21150 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 6f      return pMemo
21160 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ry;..        }..
21170 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
21180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
211d0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
211e0 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64      /// Gets and
211f0 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 63 74   returns the act
21200 75 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20  ual size of the 
21210 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79  specified memory
21220 20 62 6c 6f 63 6b 20 74 68 61 74 0d 0a 20 20 20   block that..   
21230 20 20 20 20 20 2f 2f 2f 20 77 61 73 20 70 72 65       /// was pre
21240 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64  viously obtained
21250 20 66 72 6f 6d 20 74 68 65 20 3c 73 65 65 20 63   from the <see c
21260 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65 22 20 2f  ref="Allocate" /
21270 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
21280 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
21290 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
212a0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 4d 65 6d  param name="pMem
212b0 6f 72 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ory">..        /
212c0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
212d0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d 65 6d  inter to the mem
212e0 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f  ory block previo
212f0 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72  usly obtained fr
21300 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  om the..        
21310 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 41  /// <see cref="A
21320 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68  llocate" /> meth
21330 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
21340 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
21350 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
21360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21370 65 20 61 63 74 75 61 6c 20 73 69 7a 65 2c 20 69  e actual size, i
21380 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20  n bytes, of the 
21390 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 73 70 65  memory block spe
213a0 63 69 66 69 65 64 20 76 69 61 20 74 68 65 0d 0a  cified via the..
213b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69          /// nati
213c0 76 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20  ve pointer...   
213d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
213e0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
213f0 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 53  lic static int S
21400 69 7a 65 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f  ize(IntPtr pMemo
21410 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ry)..        {..
21420 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
21430 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
21440 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
21450 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
21460 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a 65  ite3_malloc_size
21470 5f 69 6e 74 65 72 6f 70 28 70 4d 65 6d 6f 72 79  _interop(pMemory
21480 29 3b 0d 0a 23 65 6c 69 66 20 54 52 41 43 4b 5f  );..#elif TRACK_
21490 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20  MEMORY_BYTES..  
214a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
214b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43            // HAC
214c0 4b 3a 20 4f 6b 2c 20 77 65 20 63 61 6e 6e 6f 74  K: Ok, we cannot
214d0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73   determine the s
214e0 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ize of the memor
214f0 79 20 62 6c 6f 63 6b 3b 0d 0a 20 20 20 20 20 20  y block;..      
21500 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
21510 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 20 74  herefore, just t
21520 72 61 63 6b 20 6e 75 6d 62 65 72 20 6f 66 20 61  rack number of a
21530 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 6e 73 74 65  llocations inste
21540 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ad...           
21550 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
21560 20 72 65 74 75 72 6e 20 28 70 4d 65 6d 6f 72 79   return (pMemory
21570 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
21580 20 3f 20 31 20 3a 20 30 3b 0d 0a 23 65 6c 73 65   ? 1 : 0;..#else
21590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
215a0 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d  turn 0;..#endif.
215b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
215c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
215d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21610 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
21620 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
21630 2f 2f 2f 20 46 72 65 65 73 20 61 20 6d 65 6d 6f  /// Frees a memo
21640 72 79 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f 75  ry block previou
21650 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  sly obtained fro
21660 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  m the..        /
21670 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 41 6c  // <see cref="Al
21680 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  locate" /> metho
21690 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
216a0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
216b0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
216c0 61 6d 65 3d 22 70 4d 65 6d 6f 72 79 22 3e 0d 0a  ame="pMemory">..
216d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
216e0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
216f0 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c 6f  o the memory blo
21700 63 6b 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 62  ck previously ob
21710 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d  tained from the.
21720 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
21730 65 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65  e cref="Allocate
21740 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
21750 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
21760 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  m>..        publ
21770 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 46  ic static void F
21780 72 65 65 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f  ree(IntPtr pMemo
21790 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ry)..        {..
217a0 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59  #if TRACK_MEMORY
217b0 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20  _BYTES..        
217c0 20 20 20 20 69 66 20 28 70 4d 65 6d 6f 72 79 20      if (pMemory 
217d0 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
217e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21800 69 6e 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20  int blockSize = 
21810 53 69 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a  Size(pMemory);..
21820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21830 20 20 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20    if (blockSize 
21840 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
21850 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63               loc
21870 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
218a0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
218b0 65 73 41 6c 6c 6f 63 61 74 65 64 20 2d 3d 20 62  esAllocated -= b
218c0 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 20 20 20 20 20  lockSize;..     
218d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
218e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
218f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
21900 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
21910 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
21920 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
21930 6c 69 74 65 33 5f 66 72 65 65 28 70 4d 65 6d 6f  lite3_free(pMemo
21940 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
21950 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
21960 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
21970 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
21980 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
219d0 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
219e0 69 74 65 53 74 72 69 6e 67 20 53 74 61 74 69 63  iteString Static
219f0 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20   Class..    /// 
21a00 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
21a10 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 63 6f  // This class co
21a20 6e 74 61 69 6e 73 20 73 74 61 74 69 63 20 6d 65  ntains static me
21a30 74 68 6f 64 73 20 74 68 61 74 20 61 72 65 20 75  thods that are u
21a40 73 65 64 20 74 6f 20 64 65 61 6c 20 77 69 74 68  sed to deal with
21a50 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f   native..    ///
21a60 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f   UTF-8 string po
21a70 69 6e 74 65 72 73 20 74 6f 20 62 65 20 75 73 65  inters to be use
21a80 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69 74  d with the SQLit
21a90 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
21aa0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
21ab0 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
21ac0 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53  l static class S
21ad0 51 4c 69 74 65 53 74 72 69 6e 67 0d 0a 20 20 20  QLiteString..   
21ae0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
21af0 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
21b00 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  tants..        /
21b10 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
21b20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
21b30 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 6f  s the maximum po
21b40 73 73 69 62 6c 65 20 6c 65 6e 67 74 68 20 66 6f  ssible length fo
21b50 72 20 74 68 65 20 6e 61 74 69 76 65 20 55 54 46  r the native UTF
21b60 2d 38 20 65 6e 63 6f 64 65 64 0d 0a 20 20 20 20  -8 encoded..    
21b70 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20      /// strings 
21b80 75 73 65 64 20 77 69 74 68 20 74 68 65 20 53 51  used with the SQ
21b90 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
21ba0 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
21bb0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
21bc0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
21bd0 69 63 20 69 6e 74 20 54 68 69 72 74 79 42 69 74  ic int ThirtyBit
21be0 73 20 3d 20 30 78 33 66 66 66 66 66 66 66 3b 0d  s = 0x3fffffff;.
21bf0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
21c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
21c50 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
21c60 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73       /// This is
21c70 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
21c80 45 6e 63 6f 64 69 6e 67 22 20 2f 3e 20 6f 62 6a  Encoding" /> obj
21c90 65 63 74 20 69 6e 73 74 61 6e 63 65 20 75 73 65  ect instance use
21ca0 64 20 74 6f 20 68 61 6e 64 6c 65 0d 0a 20 20 20  d to handle..   
21cb0 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 73       /// convers
21cc0 69 6f 6e 73 20 66 72 6f 6d 2f 74 6f 20 55 54 46  ions from/to UTF
21cd0 2d 38 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  -8...        ///
21ce0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
21cf0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
21d00 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 45 6e 63  tic readonly Enc
21d10 6f 64 69 6e 67 20 55 74 66 38 45 6e 63 6f 64 69  oding Utf8Encodi
21d20 6e 67 20 3d 20 45 6e 63 6f 64 69 6e 67 2e 55 54  ng = Encoding.UT
21d30 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  F8;..        #en
21d40 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
21d50 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21da0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54        #region UT
21db0 46 2d 38 20 45 6e 63 6f 64 69 6e 67 20 48 65 6c  F-8 Encoding Hel
21dc0 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
21dd0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
21de0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
21df0 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65  Converts the spe
21e00 63 69 66 69 65 64 20 6d 61 6e 61 67 65 64 20 73  cified managed s
21e10 74 72 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 55  tring into the U
21e20 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 61 6e  TF-8 encoding an
21e30 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  d..        /// r
21e40 65 74 75 72 6e 73 20 74 68 65 20 61 72 72 61 79  eturns the array
21e50 20 6f 66 20 62 79 74 65 73 20 63 6f 6e 74 61 69   of bytes contai
21e60 6e 69 6e 67 20 69 74 73 20 72 65 70 72 65 73 65  ning its represe
21e70 6e 74 61 74 69 6f 6e 20 69 6e 20 74 68 61 74 0d  ntation in that.
21e80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 6e 63  .        /// enc
21e90 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  oding...        
21ea0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
21eb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
21ec0 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e  am name="value">
21ed0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21ee0 65 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67  e managed string
21ef0 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20   to convert...  
21f00 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
21f10 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
21f20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
21f30 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79     /// The array
21f40 20 6f 66 20 62 79 74 65 73 20 63 6f 6e 74 61 69   of bytes contai
21f50 6e 69 6e 67 20 74 68 65 20 72 65 70 72 65 73 65  ning the represe
21f60 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ntation of the m
21f70 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20  anaged..        
21f80 2f 2f 2f 20 73 74 72 69 6e 67 20 69 6e 20 74 68  /// string in th
21f90 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67  e UTF-8 encoding
21fa0 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61   or null upon fa
21fb0 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  ilure...        
21fc0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
21fd0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
21fe0 74 61 74 69 63 20 62 79 74 65 5b 5d 20 47 65 74  tatic byte[] Get
21ff0 55 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72  Utf8BytesFromStr
22000 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ing(..          
22010 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0d 0a    string value..
22020 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
22030 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22040 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
22050 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
22060 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
22070 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
22080 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 74 66        return Utf
22090 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 42 79 74  8Encoding.GetByt
220a0 65 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  es(value);..    
220b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
220c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
220d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22100 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22110 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
22120 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
22130 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65 63  onverts the spec
22140 69 66 69 65 64 20 61 72 72 61 79 20 6f 66 20 62  ified array of b
22150 79 74 65 73 20 72 65 70 72 65 73 65 6e 74 69 6e  ytes representin
22160 67 20 61 20 73 74 72 69 6e 67 20 69 6e 20 74 68  g a string in th
22170 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  e..        /// U
22180 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 61 6e  TF-8 encoding an
22190 64 20 72 65 74 75 72 6e 73 20 61 20 6d 61 6e 61  d returns a mana
221a0 67 65 64 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20  ged string...   
221b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
221c0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
221d0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 79   <param name="by
221e0 74 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tes">..        /
221f0 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20  // The array of 
22200 62 79 74 65 73 20 74 6f 20 63 6f 6e 76 65 72 74  bytes to convert
22210 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
22220 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
22230 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
22240 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
22250 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20 6f  managed string o
22260 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c  r null upon fail
22270 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
22280 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
22290 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
222a0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53 74  tic string GetSt
222b0 72 69 6e 67 46 72 6f 6d 55 74 66 38 42 79 74 65  ringFromUtf8Byte
222c0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
222d0 62 79 74 65 5b 5d 20 62 79 74 65 73 0d 0a 20 20  byte[] bytes..  
222e0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
222f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22300 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d      if (bytes ==
22310 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22320 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
22330 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ull;....#if !PLA
22340 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
22350 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
22360 20 20 20 20 72 65 74 75 72 6e 20 55 74 66 38 45      return Utf8E
22370 6e 63 6f 64 69 6e 67 2e 47 65 74 53 74 72 69 6e  ncoding.GetStrin
22380 67 28 62 79 74 65 73 29 3b 0d 0a 23 65 6c 73 65  g(bytes);..#else
22390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
223a0 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e  turn Utf8Encodin
223b0 67 2e 47 65 74 53 74 72 69 6e 67 28 62 79 74 65  g.GetString(byte
223c0 73 2c 20 30 2c 20 62 79 74 65 73 2e 4c 65 6e 67  s, 0, bytes.Leng
223d0 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  th);..#endif..  
223e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
223f0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
22400 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22450 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
22460 6e 20 55 54 46 2d 38 20 53 74 72 69 6e 67 20 48  n UTF-8 String H
22470 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
22480 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
22490 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
224a0 2f 20 50 72 6f 62 65 73 20 61 20 6e 61 74 69 76  / Probes a nativ
224b0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 73  e pointer to a s
224c0 74 72 69 6e 67 20 69 6e 20 74 68 65 20 55 54 46  tring in the UTF
224d0 2d 38 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20  -8 encoding for 
224e0 69 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  its..        ///
224f0 20 74 65 72 6d 69 6e 61 74 69 6e 67 20 4e 55 4c   terminating NUL
22500 20 63 68 61 72 61 63 74 65 72 2c 20 77 69 74 68   character, with
22510 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  in the specified
22520 20 6c 65 6e 67 74 68 20 6c 69 6d 69 74 2e 0d 0a   length limit...
22530 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
22540 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
22550 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
22560 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20  "pValue">..     
22570 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
22580 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64  e NUL-terminated
22590 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e   string pointer.
225a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
225b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
225c0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
225d0 22 6c 69 6d 69 74 22 3e 0d 0a 20 20 20 20 20 20  "limit">..      
225e0 20 20 2f 2f 2f 20 54 68 65 20 6d 61 78 69 6d 75    /// The maximu
225f0 6d 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  m length of the 
22600 6e 61 74 69 76 65 20 73 74 72 69 6e 67 2c 20 69  native string, i
22610 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 20 20  n bytes...      
22620 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
22630 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
22640 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
22650 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  // The length of
22660 20 74 68 65 20 6e 61 74 69 76 65 20 73 74 72 69   the native stri
22670 6e 67 2c 20 69 6e 20 62 79 74 65 73 20 2d 4f 52  ng, in bytes -OR
22680 2d 20 7a 65 72 6f 20 69 66 20 74 68 65 20 6c 65  - zero if the le
22690 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ngth..        //
226a0 2f 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 64  / could not be d
226b0 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20  etermined...    
226c0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
226d0 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
226e0 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 50 72  ic static int Pr
226f0 6f 62 65 46 6f 72 55 74 66 38 42 79 74 65 4c 65  obeForUtf8ByteLe
22700 6e 67 74 68 28 0d 0a 20 20 20 20 20 20 20 20 20  ngth(..         
22710 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65     IntPtr pValue
22720 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
22730 6e 74 20 6c 69 6d 69 74 0d 0a 20 20 20 20 20 20  nt limit..      
22740 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
22750 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22760 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0d  int length = 0;.
22770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
22780 66 20 28 28 70 56 61 6c 75 65 20 21 3d 20 49 6e  f ((pValue != In
22790 74 50 74 72 2e 5a 65 72 6f 29 20 26 26 20 28 6c  tPtr.Zero) && (l
227a0 69 6d 69 74 20 3e 20 30 29 29 0d 0a 20 20 20 20  imit > 0))..    
227b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
227c0 20 20 20 20 20 20 20 20 20 20 20 64 6f 0d 0a 20             do.. 
227d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
227e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
227f0 20 20 20 20 20 20 69 66 20 28 4d 61 72 73 68 61        if (Marsha
22800 6c 2e 52 65 61 64 42 79 74 65 28 70 56 61 6c 75  l.ReadByte(pValu
22810 65 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29  e, length) == 0)
22820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22830 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
22840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22850 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67          if (leng
22860 74 68 20 3e 3d 20 6c 69 6d 69 74 29 0d 0a 20 20  th >= limit)..  
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a        break;....
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228a0 20 20 20 20 6c 65 6e 67 74 68 2b 2b 3b 0d 0a 20      length++;.. 
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
228c0 20 77 68 69 6c 65 20 28 74 72 75 65 29 3b 0d 0a   while (true);..
228d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
228e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
228f0 75 72 6e 20 6c 65 6e 67 74 68 3b 0d 0a 20 20 20  urn length;..   
22900 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22910 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22950 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22960 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
22970 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
22980 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65  Converts the spe
22990 63 69 66 69 65 64 20 6e 61 74 69 76 65 20 4e 55  cified native NU
229a0 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  L-terminated UTF
229b0 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  -8 string pointe
229c0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  r..        /// i
229d0 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 73 74  nto a managed st
229e0 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ring...        /
229f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
22a00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
22a10 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e  m name="pValue">
22a20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
22a30 65 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72  e native NUL-ter
22a40 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
22a50 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a 20  ring pointer... 
22a60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
22a70 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
22a80 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
22a90 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61      /// The mana
22aa0 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20 6e 75  ged string or nu
22ab0 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e  ll upon failure.
22ac0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
22ad0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
22ae0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
22af0 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f  string StringFro
22b00 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20  mUtf8IntPtr(..  
22b10 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
22b20 20 70 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20   pValue..       
22b30 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
22b40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
22b50 65 74 75 72 6e 20 53 74 72 69 6e 67 46 72 6f 6d  eturn StringFrom
22b60 55 74 66 38 49 6e 74 50 74 72 28 70 56 61 6c 75  Utf8IntPtr(pValu
22b70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
22b80 20 20 20 20 50 72 6f 62 65 46 6f 72 55 74 66 38      ProbeForUtf8
22b90 42 79 74 65 4c 65 6e 67 74 68 28 70 56 61 6c 75  ByteLength(pValu
22ba0 65 2c 20 54 68 69 72 74 79 42 69 74 73 29 29 3b  e, ThirtyBits));
22bb0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
22bc0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22c10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
22c20 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
22c30 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74 68   /// Converts th
22c40 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 74 69  e specified nati
22c50 76 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ve UTF-8 string 
22c60 70 6f 69 6e 74 65 72 20 6f 66 20 74 68 65 20 73  pointer of the s
22c70 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20  pecified..      
22c80 20 20 2f 2f 2f 20 6c 65 6e 67 74 68 20 69 6e 74    /// length int
22c90 6f 20 61 20 6d 61 6e 61 67 65 64 20 73 74 72 69  o a managed stri
22ca0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ng...        ///
22cb0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
22cc0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
22cd0 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a  name="pValue">..
22ce0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
22cf0 6e 61 74 69 76 65 20 55 54 46 2d 38 20 73 74 72  native UTF-8 str
22d00 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20  ing pointer...  
22d10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
22d20 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
22d30 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e  <param name="len
22d40 67 74 68 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  gth">..        /
22d50 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  // The length of
22d60 20 74 68 65 20 6e 61 74 69 76 65 20 73 74 72 69   the native stri
22d70 6e 67 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20  ng, in bytes... 
22d80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
22d90 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
22da0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
22db0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61      /// The mana
22dc0 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20 6e 75  ged string or nu
22dd0 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e  ll upon failure.
22de0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
22df0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
22e00 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
22e10 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f  string StringFro
22e20 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20  mUtf8IntPtr(..  
22e30 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
22e40 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20   pValue,..      
22e50 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
22e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
22e70 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
22e80 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
22e90 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
22ea0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
22eb0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
22ec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22ed0 69 66 20 28 6c 65 6e 67 74 68 20 3e 20 30 29 0d  if (length > 0).
22ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f00 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e  byte[] bytes = n
22f10 65 77 20 62 79 74 65 5b 6c 65 6e 67 74 68 5d 3b  ew byte[length];
22f20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22f30 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
22f40 28 70 56 61 6c 75 65 2c 20 62 79 74 65 73 2c 20  (pValue, bytes, 
22f50 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  0, length);.... 
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22f70 65 74 75 72 6e 20 47 65 74 53 74 72 69 6e 67 46  eturn GetStringF
22f80 72 6f 6d 55 74 66 38 42 79 74 65 73 28 62 79 74  romUtf8Bytes(byt
22f90 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  es);..          
22fa0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22fb0 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
22fc0 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 20  .Empty;..       
22fd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
22fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23020 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23030 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
23040 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76          /// Conv
23050 65 72 74 73 20 74 68 65 20 73 70 65 63 69 66 69  erts the specifi
23060 65 64 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e  ed managed strin
23070 67 20 69 6e 74 6f 20 61 20 6e 61 74 69 76 65 20  g into a native 
23080 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 0d 0a  NUL-terminated..
23090 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54 46 2d          /// UTF-
230a0 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
230b0 20 75 73 69 6e 67 20 6d 65 6d 6f 72 79 20 6f 62   using memory ob
230c0 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20  tained from the 
230d0 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..   
230e0 20 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79       /// library
230f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
23100 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
23110 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
23120 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20  me="value">..   
23130 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e       /// The man
23140 61 67 65 64 20 73 74 72 69 6e 67 20 74 6f 20 63  aged string to c
23150 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20  onvert...       
23160 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
23170 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
23180 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
23190 2f 20 54 68 65 20 6e 61 74 69 76 65 20 4e 55 4c  / The native NUL
231a0 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
231b0 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
231c0 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
231d0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
231e0 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 75 70 6f 6e  tr.Zero" /> upon
231f0 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
23200 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
23210 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
23220 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20  c static IntPtr 
23230 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
23240 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ring(..         
23250 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0d     string value.
23260 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23270 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23280 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
23290 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
232a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
232b0 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  n IntPtr.Zero;..
232c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
232d0 74 50 74 72 20 72 65 73 75 6c 74 20 3d 20 49 6e  tPtr result = In
232e0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
232f0 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
23300 79 74 65 73 20 3d 20 47 65 74 55 74 66 38 42 79  ytes = GetUtf8By
23310 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 76 61  tesFromString(va
23320 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
23330 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d       if (bytes =
23340 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
23350 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23360 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
23370 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
23380 6c 65 6e 67 74 68 20 3d 20 62 79 74 65 73 2e 4c  length = bytes.L
23390 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
233a0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
233b0 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f  QLiteMemory.Allo
233c0 63 61 74 65 28 6c 65 6e 67 74 68 20 2b 20 31 29  cate(length + 1)
233d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
233e0 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 49   if (result == I
233f0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23410 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  urn IntPtr.Zero;
23420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23430 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 62 79 74  Marshal.Copy(byt
23440 65 73 2c 20 30 2c 20 72 65 73 75 6c 74 2c 20 6c  es, 0, result, l
23450 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 20  ength);..       
23460 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69       Marshal.Wri
23470 74 65 42 79 74 65 28 72 65 73 75 6c 74 2c 20 6c  teByte(result, l
23480 65 6e 67 74 68 2c 20 30 29 3b 0d 0a 0d 0a 20 20  ength, 0);....  
23490 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
234a0 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
234b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
234c0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
234d0 20 20 20 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 2f 2f  ////////////////
23510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23520 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54        #region UT
23530 46 2d 38 20 53 74 72 69 6e 67 20 41 72 72 61 79  F-8 String Array
23540 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d   Helper Methods.
23550 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
23560 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
23570 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6c  /// Converts a l
23580 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20  ogical array of 
23590 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69  native NUL-termi
235a0 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
235b0 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
235c0 70 6f 69 6e 74 65 72 73 20 69 6e 74 6f 20 61 6e  pointers into an
235d0 20 61 72 72 61 79 20 6f 66 20 6d 61 6e 61 67 65   array of manage
235e0 64 20 73 74 72 69 6e 67 73 2e 0d 0a 20 20 20 20  d strings...    
235f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
23600 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
23610 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
23620 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  c">..        ///
23630 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   The number of e
23640 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 6c  lements in the l
23650 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20  ogical array of 
23660 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
23670 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74  /// NUL-terminat
23680 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
23690 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20 20  pointers...     
236a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
236b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
236c0 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e  ram name="argv">
236d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
236e0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
236f0 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61 6c 20   to the logical 
23700 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20  array of native 
23710 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 0d 0a  NUL-terminated..
23720 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54 46 2d          /// UTF-
23730 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
23740 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20  s to convert... 
23750 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
23760 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
23770 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
23780 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
23790 79 20 6f 66 20 6d 61 6e 61 67 65 64 20 73 74 72  y of managed str
237a0 69 6e 67 73 20 6f 72 20 6e 75 6c 6c 20 75 70 6f  ings or null upo
237b0 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20  n failure...    
237c0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
237d0 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
237e0 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
237f0 5b 5d 20 53 74 72 69 6e 67 41 72 72 61 79 46 72  [] StringArrayFr
23800 6f 6d 55 74 66 38 53 69 7a 65 41 6e 64 49 6e 74  omUtf8SizeAndInt
23810 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
23820 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
23830 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
23840 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 20 20  argv..          
23850 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
23860 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23870 61 72 67 63 20 3c 20 30 29 0d 0a 20 20 20 20 20  argc < 0)..     
23880 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23890 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
238a0 20 20 20 20 20 20 20 69 66 20 28 61 72 67 76 20         if (argv 
238b0 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
238c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
238d0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
238e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
238f0 69 6e 67 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e  ing[] result = n
23900 65 77 20 73 74 72 69 6e 67 5b 61 72 67 63 5d 3b  ew string[argc];
23910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23920 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
23930 20 30 2c 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d   0, offset = 0;.
23940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23950 20 20 20 20 20 69 6e 64 65 78 20 3c 20 72 65 73       index < res
23960 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 20  ult.Length;..   
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 69 6e 64 65 78 2b 2b 2c 20 6f 66 66 73 65 74   index++, offset
23990 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 29   += IntPtr.Size)
239a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
239b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239c0 20 49 6e 74 50 74 72 20 70 41 72 67 20 3d 20 53   IntPtr pArg = S
239d0 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61  QLiteMarshal.Rea
239e0 64 49 6e 74 50 74 72 28 61 72 67 76 2c 20 6f 66  dIntPtr(argv, of
239f0 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
23a00 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
23a10 5b 69 6e 64 65 78 5d 20 3d 20 28 70 41 72 67 20  [index] = (pArg 
23a20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  != IntPtr.Zero) 
23a30 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
23a40 20 20 20 20 20 20 20 53 74 72 69 6e 67 46 72 6f         StringFro
23a50 6d 55 74 66 38 49 6e 74 50 74 72 28 70 41 72 67  mUtf8IntPtr(pArg
23a60 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  ) : null;..     
23a70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23a80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
23a90 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
23aa0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
23ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23af0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23b00 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
23b10 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65         /// Conve
23b20 72 74 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20  rts an array of 
23b30 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 73 20  managed strings 
23b40 69 6e 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66  into an array of
23b50 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20   native..       
23b60 20 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e 61   /// NUL-termina
23b70 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
23b80 20 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20   pointers...    
23b90 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
23ba0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
23bb0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
23bc0 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ues">..        /
23bd0 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20  // The array of 
23be0 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 73 20  managed strings 
23bf0 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
23c00 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
23c10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
23c20 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
23c30 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
23c40 6f 66 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65  of native NUL-te
23c50 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
23c60 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 73 20 6f  tring pointers o
23c70 72 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20  r null..        
23c80 2f 2f 2f 20 75 70 6f 6e 20 66 61 69 6c 75 72 65  /// upon failure
23c90 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
23ca0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
23cb0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
23cc0 20 49 6e 74 50 74 72 5b 5d 20 55 74 66 38 49 6e   IntPtr[] Utf8In
23cd0 74 50 74 72 41 72 72 61 79 46 72 6f 6d 53 74 72  tPtrArrayFromStr
23ce0 69 6e 67 41 72 72 61 79 28 0d 0a 20 20 20 20 20  ingArray(..     
23cf0 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
23d00 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20  values..        
23d10 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
23d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
23d30 20 28 76 61 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c   (values == null
23d40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23d50 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
23d60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
23d70 6e 74 50 74 72 5b 5d 20 72 65 73 75 6c 74 20 3d  ntPtr[] result =
23d80 20 6e 65 77 20 49 6e 74 50 74 72 5b 76 61 6c 75   new IntPtr[valu
23d90 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20  es.Length];.... 
23da0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
23db0 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
23dc0 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65  ndex < result.Le
23dd0 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20  result[index] = 
23e00 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
23e10 72 69 6e 67 28 76 61 6c 75 65 73 5b 69 6e 64 65  ring(values[inde
23e20 78 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x]);....        
23e30 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
23e40 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
23e50 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
23e60 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
23e70 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
23e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23ed0 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
23ee0 65 42 79 74 65 73 20 53 74 61 74 69 63 20 43 6c  eBytes Static Cl
23ef0 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
23f00 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
23f10 54 68 69 73 20 63 6c 61 73 73 20 63 6f 6e 74 61  This class conta
23f20 69 6e 73 20 73 74 61 74 69 63 20 6d 65 74 68 6f  ins static metho
23f30 64 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ds that are used
23f40 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 6e 61   to deal with na
23f50 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 70 6f  tive..    /// po
23f60 69 6e 74 65 72 73 20 74 6f 20 6d 65 6d 6f 72 79  inters to memory
23f70 20 62 6c 6f 63 6b 73 20 74 68 61 74 20 6c 6f 67   blocks that log
23f80 69 63 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 61  ically contain a
23f90 72 72 61 79 73 20 6f 66 20 62 79 74 65 73 20 74  rrays of bytes t
23fa0 6f 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20 75 73  o be..    /// us
23fb0 65 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69  ed with the SQLi
23fc0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
23fd0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
23fe0 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
23ff0 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  al static class 
24000 53 51 4c 69 74 65 42 79 74 65 73 0d 0a 20 20 20  SQLiteBytes..   
24010 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
24020 69 6f 6e 20 42 79 74 65 20 41 72 72 61 79 20 48  ion Byte Array H
24030 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
24040 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
24050 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
24060 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6e 61 74  / Converts a nat
24070 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  ive pointer to a
24080 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f   logical array o
24090 66 20 62 79 74 65 73 20 6f 66 20 74 68 65 0d 0a  f bytes of the..
240a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63          /// spec
240b0 69 66 69 65 64 20 6c 65 6e 67 74 68 20 69 6e 74  ified length int
240c0 6f 20 61 20 6d 61 6e 61 67 65 64 20 62 79 74 65  o a managed byte
240d0 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 20   array...       
240e0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
240f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
24100 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65  ram name="pValue
24110 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
24120 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
24130 65 72 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61  er to the logica
24140 6c 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73  l array of bytes
24150 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20   to convert...  
24160 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
24170 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
24180 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e  <param name="len
24190 67 74 68 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  gth">..        /
241a0 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 2c 20 69  // The length, i
241b0 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20  n bytes, of the 
241c0 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66  logical array of
241d0 20 62 79 74 65 73 20 74 6f 20 63 6f 6e 76 65 72   bytes to conver
241e0 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
241f0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
24200 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
24210 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
24220 20 6d 61 6e 61 67 65 64 20 62 79 74 65 20 61 72   managed byte ar
24230 72 61 79 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e  ray or null upon
24240 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
24250 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
24260 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
24270 63 20 73 74 61 74 69 63 20 62 79 74 65 5b 5d 20  c static byte[] 
24280 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20  FromIntPtr(..   
24290 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
242a0 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20  pValue,..       
242b0 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 0d       int length.
242c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
242d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
242e0 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75         if (pValu
242f0 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e == IntPtr.Zero
24300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24310 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
24320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
24330 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29 0d  f (length == 0).
24340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24350 20 72 65 74 75 72 6e 20 6e 65 77 20 62 79 74 65   return new byte
24360 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [0];....        
24370 20 20 20 20 62 79 74 65 5b 5d 20 72 65 73 75 6c      byte[] resul
24380 74 20 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65 6e  t = new byte[len
24390 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth];....       
243a0 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
243b0 79 28 70 56 61 6c 75 65 2c 20 72 65 73 75 6c 74  y(pValue, result
243c0 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d  , 0, length);...
243d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
243e0 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
243f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24400 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
24410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24440 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
24450 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
24460 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
24470 43 6f 6e 76 65 72 74 73 20 61 20 6d 61 6e 61 67  Converts a manag
24480 65 64 20 62 79 74 65 20 61 72 72 61 79 20 69 6e  ed byte array in
24490 74 6f 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e  to a native poin
244a0 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63 61 6c  ter to a logical
244b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72  ..        /// ar
244c0 72 61 79 20 6f 66 20 62 79 74 65 73 2e 0d 0a 20  ray of bytes... 
244d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
244e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
244f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
24500 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  value">..       
24510 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65 64   /// The managed
24520 20 62 79 74 65 20 61 72 72 61 79 20 74 6f 20 63   byte array to c
24530 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20  onvert...       
24540 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
24550 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
24560 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
24570 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
24580 6e 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63 61  nter to a logica
24590 6c 20 62 79 74 65 20 61 72 72 61 79 20 6f 72 20  l byte array or 
245a0 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72  null upon failur
245b0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
245c0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
245d0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
245e0 63 20 49 6e 74 50 74 72 20 54 6f 49 6e 74 50 74  c IntPtr ToIntPt
245f0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
24600 62 79 74 65 5b 5d 20 76 61 6c 75 65 0d 0a 20 20  byte[] value..  
24610 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
24620 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24630 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
24640 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24650 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
24660 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
24670 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
24680 65 6e 67 74 68 20 3d 20 76 61 6c 75 65 2e 4c 65  ength = value.Le
24690 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ngth;....       
246a0 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20       if (length 
246b0 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
246c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
246d0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
246e0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
246f0 20 72 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65   result = SQLite
24700 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28  Memory.Allocate(
24710 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20  length);....    
24720 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
24730 6c 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  lt == IntPtr.Zer
24740 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
24750 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74      return IntPt
24760 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
24770 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
24780 6f 70 79 28 76 61 6c 75 65 2c 20 30 2c 20 72 65  opy(value, 0, re
24790 73 75 6c 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  sult, length);..
247a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
247b0 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
247c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
247d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
247e0 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
247f0 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
24800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24840 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
24850 67 69 6f 6e 20 53 51 4c 69 74 65 4d 61 72 73 68  gion SQLiteMarsh
24860 61 6c 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d  al Static Class.
24870 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
24880 61 74 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74  atic class SQLit
24890 65 4d 61 72 73 68 61 6c 0d 0a 20 20 20 20 7b 0d  eMarshal..    {.
248a0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
248b0 20 49 6e 74 50 74 72 20 48 65 6c 70 65 72 20 4d   IntPtr Helper M
248c0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
248d0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
248e0 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72         /// Retur
248f0 6e 73 20 61 20 6e 65 77 20 3c 73 65 65 20 63 72  ns a new <see cr
24900 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f  ef="IntPtr" /> o
24910 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 62  bject instance b
24920 61 73 65 64 20 6f 6e 20 74 68 65 0d 0a 20 20 20  ased on the..   
24930 20 20 20 20 20 2f 2f 2f 20 73 70 65 63 69 66 69       /// specifi
24940 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  ed <see cref="In
24950 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tPtr" /> object 
24960 69 6e 73 74 61 6e 63 65 20 61 6e 64 20 61 6e 20  instance and an 
24970 69 6e 74 65 67 65 72 0d 0a 20 20 20 20 20 20 20  integer..       
24980 20 2f 2f 2f 20 6f 66 66 73 65 74 2e 0d 0a 20 20   /// offset...  
24990 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
249a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
249b0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
249c0 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20  ointer">..      
249d0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
249e0 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20  ref="IntPtr" /> 
249f0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
24a00 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
24a10 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f   base..        /
24a20 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  // memory locati
24a30 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
24a40 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
24a50 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
24a60 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20  me="offset">..  
24a70 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
24a80 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f  teger offset fro
24a90 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72  m the base memor
24aa0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
24ab0 74 68 65 20 6e 65 77 0d 0a 20 20 20 20 20 20 20  the new..       
24ac0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
24ad0 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63  IntPtr" /> objec
24ae0 74 20 69 6e 73 74 61 6e 63 65 20 73 68 6f 75 6c  t instance shoul
24af0 64 20 70 6f 69 6e 74 20 74 6f 2e 0d 0a 20 20 20  d point to...   
24b00 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
24b10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
24b20 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
24b30 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73    /// The new <s
24b40 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22  ee cref="IntPtr"
24b50 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
24b60 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
24b70 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
24b80 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
24b90 74 69 63 20 49 6e 74 50 74 72 20 49 6e 74 50 74  tic IntPtr IntPt
24ba0 72 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20 20  rForOffset(..   
24bb0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
24bc0 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20  pointer,..      
24bd0 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
24be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
24bf0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
24c00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
24c10 65 77 20 49 6e 74 50 74 72 28 70 6f 69 6e 74 65  ew IntPtr(pointe
24c20 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6f 66  r.ToInt64() + of
24c30 66 73 65 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  fset);..        
24c40 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
24c50 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
24c60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ca0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24cb0 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 61 72 73      #region Mars
24cc0 68 61 6c 20 52 65 61 64 20 48 65 6c 70 65 72 20  hal Read Helper 
24cd0 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
24ce0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
24cf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 61 64          /// Read
24d00 73 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 49  s a <see cref="I
24d10 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20 66  nt32" /> value f
24d20 72 6f 6d 20 74 68 65 20 73 70 65 63 69 66 69 65  rom the specifie
24d30 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20  d memory..      
24d40 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d    /// location..
24d50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
24d60 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
24d70 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
24d80 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20  ="pointer">..   
24d90 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
24da0 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
24db0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
24dc0 63 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  ce representing 
24dd0 74 68 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20  the base..      
24de0 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63    /// memory loc
24df0 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
24e00 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
24e10 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
24e20 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d   name="offset">.
24e30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
24e40 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20   integer offset 
24e50 66 72 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65  from the base me
24e60 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68  mory location wh
24e70 65 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ere the..       
24e80 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
24e90 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20  Int32" /> value 
24ea0 74 6f 20 62 65 20 72 65 61 64 20 69 73 20 6c 6f  to be read is lo
24eb0 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  cated...        
24ec0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
24ed0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
24ee0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
24ef0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
24f00 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20  Int32" /> value 
24f10 61 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  at the specified
24f20 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
24f30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
24f40 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
24f50 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
24f60 20 69 6e 74 20 52 65 61 64 49 6e 74 33 32 28 0d   int ReadInt32(.
24f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
24f80 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20  Ptr pointer,..  
24f90 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66            int of
24fa0 66 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20  fset..          
24fb0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
24fc0 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
24fd0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24ff0 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  rn Marshal.ReadI
25000 6e 74 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66  nt32(pointer, of
25010 66 73 65 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  fset);..#else.. 
25020 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25030 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  n Marshal.ReadIn
25040 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  t32(IntPtrForOff
25050 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
25060 73 65 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  set));..#endif..
25070 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25080 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
250d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
250e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
250f0 2f 2f 20 52 65 61 64 73 20 61 20 3c 73 65 65 20  // Reads a <see 
25100 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e  cref="Double" />
25110 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
25120 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79  specified memory
25130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f  ..        /// lo
25140 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
25150 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
25160 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
25170 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65  ram name="pointe
25180 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
25190 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
251a0 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63  IntPtr" /> objec
251b0 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65  t instance repre
251c0 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65  senting the base
251d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
251e0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  mory location...
251f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
25200 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
25210 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f  / <param name="o
25220 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20  ffset">..       
25230 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
25240 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
25250 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63   base memory loc
25260 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d  ation where the.
25270 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
25280 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20  e cref="Double" 
25290 2f 3e 20 74 6f 20 62 65 20 72 65 61 64 20 69 73  /> to be read is
252a0 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20   located...     
252b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
252c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
252d0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
252e0 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
252f0 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20 76 61  f="Double" /> va
25300 6c 75 65 20 61 74 20 74 68 65 20 73 70 65 63 69  lue at the speci
25310 66 69 65 64 20 6d 65 6d 6f 72 79 20 6c 6f 63 61  fied memory loca
25320 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
25330 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
25340 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
25350 61 74 69 63 20 64 6f 75 62 6c 65 20 52 65 61 64  atic double Read
25360 44 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20 20 20  Double(..       
25370 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e       IntPtr poin
25380 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ter,..          
25390 20 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20    int offset..  
253a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
253b0 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
253c0 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
253d0 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
253e0 20 20 20 20 72 65 74 75 72 6e 20 42 69 74 43 6f      return BitCo
253f0 6e 76 65 72 74 65 72 2e 49 6e 74 36 34 42 69 74  nverter.Int64Bit
25400 73 54 6f 44 6f 75 62 6c 65 28 4d 61 72 73 68 61  sToDouble(Marsha
25410 6c 2e 52 65 61 64 49 6e 74 36 34 28 0d 0a 20 20  l.ReadInt64(..  
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6f                po
25430 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29 3b  inter, offset));
25440 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
25450 20 20 20 20 20 72 65 74 75 72 6e 20 42 69 74 43       return BitC
25460 6f 6e 76 65 72 74 65 72 2e 54 6f 44 6f 75 62 6c  onverter.ToDoubl
25470 65 28 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 47  e(BitConverter.G
25480 65 74 42 79 74 65 73 28 0d 0a 20 20 20 20 20 20  etBytes(..      
25490 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
254a0 6c 2e 52 65 61 64 49 6e 74 36 34 28 49 6e 74 50  l.ReadInt64(IntP
254b0 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e  trForOffset(poin
254c0 74 65 72 2c 20 6f 66 66 73 65 74 29 29 29 2c 20  ter, offset))), 
254d0 30 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  0);..#endif..   
254e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
254f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25530 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25540 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
25550 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
25560 52 65 61 64 73 20 61 6e 20 3c 73 65 65 20 63 72  Reads an <see cr
25570 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76  ef="IntPtr" /> v
25580 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 73 70  alue from the sp
25590 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a  ecified memory..
255a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61          /// loca
255b0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
255c0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
255d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
255e0 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22  m name="pointer"
255f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
25600 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  he <see cref="In
25610 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tPtr" /> object 
25620 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73 65  instance represe
25630 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a  nting the base..
25640 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f          /// memo
25650 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  ry location...  
25660 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
25670 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
25680 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66  <param name="off
25690 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  set">..        /
256a0 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f  // The integer o
256b0 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
256c0 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  ase memory locat
256d0 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a 20  ion where the.. 
256e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
256f0 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
25700 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65 61   value to be rea
25710 64 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20  d is located... 
25720 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
25730 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
25740 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
25750 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
25760 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f   cref="IntPtr" /
25770 3e 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 73  > value at the s
25780 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 20  pecified memory 
25790 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  location...     
257a0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
257b0 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
257c0 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20  c static IntPtr 
257d0 52 65 61 64 49 6e 74 50 74 72 28 0d 0a 20 20 20  ReadIntPtr(..   
257e0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
257f0 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20  pointer,..      
25800 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
25810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
25820 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
25830 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
25840 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
25850 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
25860 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
25870 72 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  r(pointer, offse
25880 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  t);..#else..    
25890 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
258a0 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
258b0 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  r(IntPtrForOffse
258c0 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
258d0 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  t));..#endif..  
258e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
258f0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
25900 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
25950 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
25960 6e 20 4d 61 72 73 68 61 6c 20 57 72 69 74 65 20  n Marshal Write 
25970 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
25980 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
25990 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
259a0 2f 2f 20 57 72 69 74 65 73 20 61 6e 20 3c 73 65  // Writes an <se
259b0 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f  e cref="Int32" /
259c0 3e 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20 73  > value to the s
259d0 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d  pecified memory.
259e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63  .        /// loc
259f0 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
25a00 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
25a10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
25a20 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72  am name="pointer
25a30 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
25a40 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
25a50 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ntPtr" /> object
25a60 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73   instance repres
25a70 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d  enting the base.
25a80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d  .        /// mem
25a90 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20  ory location... 
25aa0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
25ab0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
25ac0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66   <param name="of
25ad0 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  fset">..        
25ae0 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20  /// The integer 
25af0 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
25b00 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61  base memory loca
25b10 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a  tion where the..
25b20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
25b30 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
25b40 20 76 61 6c 75 65 20 74 6f 20 62 65 20 77 72 69   value to be wri
25b50 74 74 65 6e 20 69 73 20 6c 6f 63 61 74 65 64 2e  tten is located.
25b60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
25b70 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
25b80 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
25b90 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20  "value">..      
25ba0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
25bb0 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76  ref="Int32" /> v
25bc0 61 6c 75 65 20 74 6f 20 77 72 69 74 65 2e 0d 0a  alue to write...
25bd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
25be0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
25bf0 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
25c00 20 57 72 69 74 65 49 6e 74 33 32 28 0d 0a 20 20   WriteInt32(..  
25c10 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
25c20 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20   pointer,..     
25c30 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
25c40 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
25c50 69 6e 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  int value..     
25c60 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
25c70 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
25c80 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
25c90 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
25ca0 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e   Marshal.WriteIn
25cb0 74 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  t32(pointer, off
25cc0 73 65 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  set, value);..#e
25cd0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
25ce0 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e   Marshal.WriteIn
25cf0 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  t32(IntPtrForOff
25d00 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
25d10 73 65 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  set), value);..#
25d20 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
25d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
25d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
25d90 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
25da0 20 20 20 20 20 20 2f 2f 2f 20 57 72 69 74 65 73        /// Writes
25db0 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f   a <see cref="Do
25dc0 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74  uble" /> value t
25dd0 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified 
25de0 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  memory..        
25df0 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20  /// location... 
25e00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
25e10 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
25e20 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
25e30 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20  pointer">..     
25e40 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
25e50 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
25e60 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
25e70 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
25e80 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20  e base..        
25e90 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  /// memory locat
25ea0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
25eb0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
25ec0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
25ed0 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20  ame="offset">.. 
25ee0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69         /// The i
25ef0 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72  nteger offset fr
25f00 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f  om the base memo
25f10 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72  ry location wher
25f20 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  e the..        /
25f30 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f  // <see cref="Do
25f40 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74  uble" /> value t
25f50 6f 20 62 65 20 77 72 69 74 74 65 6e 20 69 73 20  o be written is 
25f60 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20  located...      
25f70 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
25f80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
25f90 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e  am name="value">
25fa0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
25fb0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75  e <see cref="Dou
25fc0 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  ble" /> value to
25fd0 20 77 72 69 74 65 2e 0d 0a 20 20 20 20 20 20 20   write...       
25fe0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
25ff0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
26000 61 74 69 63 20 76 6f 69 64 20 57 72 69 74 65 44  atic void WriteD
26010 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  ouble(..        
26020 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74      IntPtr point
26030 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
26040 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20   int offset,..  
26050 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
26060 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
26070 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
26080 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
26090 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
260a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
260b0 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 36 34  rshal.WriteInt64
260c0 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
260d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
260e0 20 20 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e     BitConverter.
260f0 44 6f 75 62 6c 65 54 6f 49 6e 74 36 34 42 69 74  DoubleToInt64Bit
26100 73 28 76 61 6c 75 65 29 29 3b 0d 0a 23 65 6c 73  s(value));..#els
26110 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  e..            M
26120 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 36  arshal.WriteInt6
26130 34 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  4(IntPtrForOffse
26140 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
26150 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
26160 20 20 20 20 20 42 69 74 43 6f 6e 76 65 72 74 65       BitConverte
26170 72 2e 54 6f 49 6e 74 36 34 28 42 69 74 43 6f 6e  r.ToInt64(BitCon
26180 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
26190 76 61 6c 75 65 29 2c 20 30 29 29 3b 0d 0a 23 65  value), 0));..#e
261a0 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
261b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
261c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26200 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
26210 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
26220 20 20 20 20 20 2f 2f 2f 20 57 72 69 74 65 73 20       /// Writes 
26230 61 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  a <see cref="Int
26240 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  Ptr" /> value to
26250 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d   the specified m
26260 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f  emory..        /
26270 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  // location...  
26280 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
26290 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
262a0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
262b0 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20  ointer">..      
262c0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
262d0 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20  ref="IntPtr" /> 
262e0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
262f0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
26300 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f   base..        /
26310 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  // memory locati
26320 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
26330 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
26340 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
26350 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20  me="offset">..  
26360 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
26370 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f  teger offset fro
26380 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72  m the base memor
26390 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65  y location where
263a0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
263b0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  / <see cref="Int
263c0 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  Ptr" /> value to
263d0 20 62 65 20 77 72 69 74 74 65 6e 20 69 73 20 6c   be written is l
263e0 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ocated...       
263f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
26400 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
26410 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
26420 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
26430 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
26440 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20  tr" /> value to 
26450 77 72 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  write...        
26460 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
26470 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
26480 74 69 63 20 76 6f 69 64 20 57 72 69 74 65 49 6e  tic void WriteIn
26490 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
264a0 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65     IntPtr pointe
264b0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
264c0 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20  int offset,..   
264d0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
264e0 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
264f0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
26500 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
26510 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
26520 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72  .            Mar
26530 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72  shal.WriteIntPtr
26540 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
26550 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
26560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
26570 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74  rshal.WriteIntPt
26580 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  r(IntPtrForOffse
26590 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
265a0 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  t), value);..#en
265b0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
265c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
265d0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
265e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26620 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
26630 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49   #region SQLiteI
26640 6e 64 65 78 20 48 65 6c 70 65 72 20 4d 65 74 68  ndex Helper Meth
26650 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
26660 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
26670 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73      /// Converts
26680 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65   a native pointe
26690 72 20 74 6f 20 61 20 6e 61 74 69 76 65 20 73 71  r to a native sq
266a0 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
266b0 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20   structure..    
266c0 20 20 20 20 2f 2f 2f 20 69 6e 74 6f 20 61 20 6e      /// into a n
266d0 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ew <see cref="SQ
266e0 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f 62  LiteIndex" /> ob
266f0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
26700 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
26710 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
26720 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
26730 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20  "pIndex">..     
26740 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
26750 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
26760 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
26770 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63  index_info struc
26780 74 75 72 65 20 74 6f 0d 0a 20 20 20 20 20 20 20  ture to..       
26790 20 2f 2f 2f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20   /// convert... 
267a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
267b0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
267c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e   <param name="in
267d0 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  dex">..        /
267e0 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
267f0 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
26800 77 69 6c 6c 20 62 65 20 6d 6f 64 69 66 69 65 64  will be modified
26810 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20   to contain the 
26820 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f  newly..        /
26830 2f 2f 20 63 72 65 61 74 65 64 20 3c 73 65 65 20  // created <see 
26840 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
26850 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  x" /> object ins
26860 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
26870 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
26880 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
26890 74 69 63 20 76 6f 69 64 20 49 6e 64 65 78 46 72  tic void IndexFr
268a0 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  omIntPtr(..     
268b0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 49         IntPtr pI
268c0 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndex,..         
268d0 20 20 20 72 65 66 20 53 51 4c 69 74 65 49 6e 64     ref SQLiteInd
268e0 65 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20  ex index..      
268f0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
26900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26910 69 66 20 28 70 49 6e 64 65 78 20 3d 3d 20 49 6e  if (pIndex == In
26920 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
26930 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26940 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
26950 20 20 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20     int offset = 
26960 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
26970 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e    int nConstrain
26980 74 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49  t = ReadInt32(pI
26990 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
269a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
269b0 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69  fset += sizeof(i
269c0 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
269d0 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 73      IntPtr pCons
269e0 74 72 61 69 6e 74 20 3d 20 52 65 61 64 49 6e 74  traint = ReadInt
269f0 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  Ptr(pIndex, offs
26a00 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
26a10 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e      offset += In
26a20 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20  tPtr.Size;....  
26a30 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4f            int nO
26a40 72 64 65 72 42 79 20 3d 20 52 65 61 64 49 6e 74  rderBy = ReadInt
26a50 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65  32(pIndex, offse
26a60 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
26a70 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a     offset += siz
26a80 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20  eof(int);....   
26a90 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
26aa0 70 4f 72 64 65 72 42 79 20 3d 20 52 65 61 64 49  pOrderBy = ReadI
26ab0 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66  ntPtr(pIndex, of
26ac0 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
26ad0 20 20 20 20 20 20 69 6e 64 65 78 20 3d 20 6e 65        index = ne
26ae0 77 20 53 51 4c 69 74 65 49 6e 64 65 78 28 6e 43  w SQLiteIndex(nC
26af0 6f 6e 73 74 72 61 69 6e 74 2c 20 6e 4f 72 64 65  onstraint, nOrde
26b00 72 42 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rBy);....       
26b10 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43       int sizeOfC
26b20 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 20 3d 20  onstraintType = 
26b30 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74  Marshal.SizeOf(t
26b40 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20  ypeof(..        
26b50 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
26b60 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
26b70 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
26b80 61 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  aint));....     
26b90 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
26ba0 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b  iConstraint = 0;
26bb0 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e   iConstraint < n
26bc0 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e  Constraint; iCon
26bd0 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20  straint++)..    
26be0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26bf0 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
26c00 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
26c10 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
26c20 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69  straint constrai
26c30 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
26c40 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e            new Un
26c50 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
26c60 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
26c70 63 6f 6e 73 74 72 61 69 6e 74 28 29 3b 0d 0a 0d  constraint();...
26c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c90 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74   Marshal.PtrToSt
26ca0 72 75 63 74 75 72 65 28 49 6e 74 50 74 72 46 6f  ructure(IntPtrFo
26cb0 72 4f 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61  rOffset(pConstra
26cc0 69 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  int,..          
26cd0 20 20 20 20 20 20 20 20 20 20 69 43 6f 6e 73 74            iConst
26ce0 72 61 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f  raint * sizeOfCo
26cf0 6e 73 74 72 61 69 6e 74 54 79 70 65 29 2c 20 63  nstraintType), c
26d00 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 0d 0a 20  onstraint);.... 
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26d20 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73  ndex.Inputs.Cons
26d30 74 72 61 69 6e 74 73 5b 69 43 6f 6e 73 74 72 61  traints[iConstra
26d40 69 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20  int] =..        
26d50 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
26d60 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
26d70 72 61 69 6e 74 28 63 6f 6e 73 74 72 61 69 6e 74  raint(constraint
26d80 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
26d90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26da0 20 69 6e 74 20 73 69 7a 65 4f 66 4f 72 64 65 72   int sizeOfOrder
26db0 42 79 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c  ByType = Marshal
26dc0 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d  .SizeOf(typeof(.
26dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26de0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
26df0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
26e00 65 78 5f 6f 72 64 65 72 62 79 29 29 3b 0d 0a 0d  ex_orderby));...
26e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
26e20 20 28 69 6e 74 20 69 4f 72 64 65 72 42 79 20 3d   (int iOrderBy =
26e30 20 30 3b 20 69 4f 72 64 65 72 42 79 20 3c 20 6e   0; iOrderBy < n
26e40 4f 72 64 65 72 42 79 3b 20 69 4f 72 64 65 72 42  OrderBy; iOrderB
26e50 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  y++)..          
26e60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26e70 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
26e80 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
26e90 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f  _index_orderby o
26ea0 72 64 65 72 42 79 20 3d 0d 0a 20 20 20 20 20 20  rderBy =..      
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
26ec0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
26ed0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
26ee0 64 65 78 5f 6f 72 64 65 72 62 79 28 29 3b 0d 0a  dex_orderby();..
26ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26f00 20 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53    Marshal.PtrToS
26f10 74 72 75 63 74 75 72 65 28 49 6e 74 50 74 72 46  tructure(IntPtrF
26f20 6f 72 4f 66 66 73 65 74 28 70 4f 72 64 65 72 42  orOffset(pOrderB
26f30 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
26f40 20 20 20 20 20 20 20 20 69 4f 72 64 65 72 42 79          iOrderBy
26f50 20 2a 20 73 69 7a 65 4f 66 4f 72 64 65 72 42 79   * sizeOfOrderBy
26f60 54 79 70 65 29 2c 20 6f 72 64 65 72 42 79 29 3b  Type), orderBy);
26f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26f80 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73      index.Inputs
26f90 2e 4f 72 64 65 72 42 79 73 5b 69 4f 72 64 65 72  .OrderBys[iOrder
26fa0 42 79 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  By] =..         
26fb0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
26fc0 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42  QLiteIndexOrderB
26fd0 79 28 6f 72 64 65 72 42 79 29 3b 0d 0a 20 20 20  y(orderBy);..   
26fe0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26ff0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27000 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27040 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
27050 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
27060 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 50  >..        /// P
27070 6f 70 75 6c 61 74 65 73 20 74 68 65 20 6f 75 74  opulates the out
27080 70 75 74 73 20 6f 66 20 61 20 70 72 65 2d 61 6c  puts of a pre-al
27090 6c 6f 63 61 74 65 64 20 6e 61 74 69 76 65 20 73  located native s
270a0 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
270b0 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  o..        /// s
270c0 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 61  tructure using a
270d0 6e 20 65 78 69 73 74 69 6e 67 20 3c 73 65 65 20  n existing <see 
270e0 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
270f0 78 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20  x" /> object..  
27100 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
27110 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
27120 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
27130 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
27140 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
27150 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65         /// The e
27160 78 69 73 74 69 6e 67 20 3c 73 65 65 20 63 72 65  xisting <see cre
27170 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20  f="SQLiteIndex" 
27180 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
27190 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
271a0 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6f         /// the o
271b0 75 74 70 75 74 20 64 61 74 61 20 74 6f 20 75 73  utput data to us
271c0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
271d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
271e0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
271f0 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20  e="pIndex">..   
27200 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
27210 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
27220 68 65 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 64  he pre-allocated
27230 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
27240 69 6e 64 65 78 5f 69 6e 66 6f 0d 0a 20 20 20 20  index_info..    
27250 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72      /// structur
27260 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
27270 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
27280 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
27290 76 6f 69 64 20 49 6e 64 65 78 54 6f 49 6e 74 50  void IndexToIntP
272a0 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
272b0 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64   SQLiteIndex ind
272c0 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ex,..           
272d0 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a   IntPtr pIndex..
272e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
272f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27300 20 20 20 20 20 20 69 66 20 28 28 69 6e 64 65 78        if ((index
27310 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e   == null) || (in
27320 64 65 78 2e 49 6e 70 75 74 73 20 3d 3d 20 6e 75  dex.Inputs == nu
27330 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  ll) ||..        
27340 20 20 20 20 20 20 20 20 28 69 6e 64 65 78 2e 49          (index.I
27350 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  nputs.Constraint
27360 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20  s == null) ||.. 
27370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
27380 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 20 3d 3d  index.Outputs ==
27390 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20   null) ||..     
273a0 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 64 65             (inde
273b0 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72  x.Outputs.Constr
273c0 61 69 6e 74 55 73 61 67 65 73 20 3d 3d 20 6e 75  aintUsages == nu
273d0 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
273e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
273f0 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20       return;..  
27400 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27410 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
27420 49 6e 64 65 78 20 3d 3d 20 49 6e 74 50 74 72 2e  Index == IntPtr.
27430 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
27440 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
27450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
27460 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d  t offset = 0;...
27470 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
27480 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 52   nConstraint = R
27490 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c  eadInt32(pIndex,
274a0 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
274b0 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 43 6f           if (nCo
274c0 6e 73 74 72 61 69 6e 74 20 21 3d 20 69 6e 64 65  nstraint != inde
274d0 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61  x.Inputs.Constra
274e0 69 6e 74 73 2e 4c 65 6e 67 74 68 29 0d 0a 20 20  ints.Length)..  
274f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27500 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
27510 20 20 20 20 20 69 66 20 28 6e 43 6f 6e 73 74 72       if (nConstr
27520 61 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e 4f 75  aint != index.Ou
27530 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
27540 55 73 61 67 65 73 2e 4c 65 6e 67 74 68 29 0d 0a  Usages.Length)..
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27560 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
27570 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
27580 20 73 69 7a 65 6f 66 28 69 6e 74 29 20 2b 20 49   sizeof(int) + I
27590 6e 74 50 74 72 2e 53 69 7a 65 20 2b 20 73 69 7a  ntPtr.Size + siz
275a0 65 6f 66 28 69 6e 74 29 20 2b 20 49 6e 74 50 74  eof(int) + IntPt
275b0 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20  r.Size;....     
275c0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
275d0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20 3d  onstraintUsage =
275e0 20 52 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64   ReadIntPtr(pInd
275f0 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ex, offset);....
27600 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
27610 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74  sizeOfConstraint
27620 55 73 61 67 65 54 79 70 65 20 3d 20 4d 61 72 73  UsageType = Mars
27630 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f  hal.SizeOf(typeo
27640 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f(..            
27650 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
27660 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
27670 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74  index_constraint
27680 5f 75 73 61 67 65 29 29 3b 0d 0a 0d 0a 20 20 20  _usage));....   
27690 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
276a0 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20  t iConstraint = 
276b0 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c  0; iConstraint <
276c0 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43   nConstraint; iC
276d0 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20  onstraint++)..  
276e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
27700 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
27710 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
27720 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20  onstraint_usage 
27730 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20  constraintUsage 
27740 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
27750 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73 61 66         new Unsaf
27760 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
27770 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
27780 73 74 72 61 69 6e 74 5f 75 73 61 67 65 28 0d 0a  straint_usage(..
27790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277a0 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75          index.Ou
277b0 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
277c0 55 73 61 67 65 73 5b 69 43 6f 6e 73 74 72 61 69  Usages[iConstrai
277d0 6e 74 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt]);....       
277e0 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
277f0 2e 53 74 72 75 63 74 75 72 65 54 6f 50 74 72 28  .StructureToPtr(
27800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27810 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
27820 55 73 61 67 65 2c 20 49 6e 74 50 74 72 46 6f 72  Usage, IntPtrFor
27830 4f 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61 69  Offset(pConstrai
27840 6e 74 55 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  ntUsage,..      
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43                iC
27860 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a 65  onstraint * size
27870 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  OfConstraintUsag
27880 65 54 79 70 65 29 2c 20 66 61 6c 73 65 29 3b 0d  eType), false);.
27890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
278a0 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73     index.Outputs
278b0 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  .ConstraintUsage
278c0 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20 3d  s[iConstraint] =
278d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
278e0 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
278f0 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
27900 73 61 67 65 28 63 6f 6e 73 74 72 61 69 6e 74 55  sage(constraintU
27910 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
27920 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27930 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49       offset += I
27940 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20  ntPtr.Size;.... 
27950 20 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65             Write
27960 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66  Int32(pIndex, of
27970 66 73 65 74 2c 20 69 6e 64 65 78 2e 4f 75 74 70  fset, index.Outp
27980 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65 72 29  uts.IndexNumber)
27990 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
279a0 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f   offset += sizeo
279b0 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  f(int);....     
279c0 20 20 20 20 20 20 20 57 72 69 74 65 49 6e 74 50         WriteIntP
279d0 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65  tr(pIndex, offse
279e0 74 2c 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e  t, SQLiteString.
279f0 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
27a00 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ring(..         
27a10 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74         index.Out
27a20 70 75 74 73 2e 49 6e 64 65 78 53 74 72 69 6e 67  puts.IndexString
27a30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
27a40 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74     offset += Int
27a50 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20  Ptr.Size;....   
27a60 20 20 20 20 20 20 20 20 20 57 72 69 74 65 49 6e           WriteIn
27a70 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  t32(pIndex, offs
27a80 65 74 2c 20 31 29 3b 20 2f 2a 20 4e 4f 54 45 3a  et, 1); /* NOTE:
27a90 20 57 65 20 6a 75 73 74 20 61 6c 6c 6f 63 61 74   We just allocat
27aa0 65 64 20 69 74 2e 20 2a 2f 0d 0a 0d 0a 20 20 20  ed it. */....   
27ab0 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
27ac0 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d  += sizeof(int);.
27ad0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 57  ...            W
27ae0 72 69 74 65 49 6e 74 33 32 28 70 49 6e 64 65 78  riteInt32(pIndex
27af0 2c 20 6f 66 66 73 65 74 2c 20 69 6e 64 65 78 2e  , offset, index.
27b00 4f 75 74 70 75 74 73 2e 4f 72 64 65 72 42 79 43  Outputs.OrderByC
27b10 6f 6e 73 75 6d 65 64 29 3b 0d 0a 0d 0a 20 20 20  onsumed);....   
27b20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
27b30 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d  += sizeof(int);.
27b40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 57  ...            W
27b50 72 69 74 65 44 6f 75 62 6c 65 28 70 49 6e 64 65  riteDouble(pInde
27b60 78 2c 20 6f 66 66 73 65 74 2c 20 69 6e 64 65 78  x, offset, index
27b70 2e 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74  .Outputs.Estimat
27b80 65 64 43 6f 73 74 29 3b 0d 0a 20 20 20 20 20 20  edCost);..      
27b90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
27ba0 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
27bb0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
27bc0 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
27bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c10 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
27c20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 42 61   SQLiteModule Ba
27c30 73 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  se Class..    //
27c40 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
27c50 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
27c60 72 65 70 72 65 73 65 6e 74 73 20 61 20 6d 61 6e  represents a man
27c70 61 67 65 64 20 76 69 72 74 75 61 6c 20 74 61 62  aged virtual tab
27c80 6c 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  le module implem
27c90 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  entation...    /
27ca0 2f 2f 20 49 74 20 69 73 20 6e 6f 74 20 73 65 61  // It is not sea
27cb0 6c 65 64 20 61 6e 64 20 6d 75 73 74 20 62 65 20  led and must be 
27cc0 75 73 65 64 20 61 73 20 74 68 65 20 62 61 73 65  used as the base
27cd0 20 63 6c 61 73 73 20 66 6f 72 20 61 6e 79 0d 0a   class for any..
27ce0 20 20 20 20 2f 2f 2f 20 75 73 65 72 2d 64 65 66      /// user-def
27cf0 69 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61 62  ined virtual tab
27d00 6c 65 20 6d 6f 64 75 6c 65 20 63 6c 61 73 73 65  le module classe
27d10 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e  s implemented in
27d20 20 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a   managed code...
27d30 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
27d40 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 61  y>..    public a
27d50 62 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51  bstract class SQ
27d60 4c 69 74 65 4d 6f 64 75 6c 65 20 3a 0d 0a 20 20  LiteModule :..  
27d70 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74            ISQLit
27d80 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2c 20  eManagedModule, 
27d90 2f 2a 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  /*ISQLiteNativeM
27da0 6f 64 75 6c 65 2c 2a 2f 0d 0a 20 20 20 20 20 20  odule,*/..      
27db0 20 20 20 20 20 20 49 44 69 73 70 6f 73 61 62 6c        IDisposabl
27dc0 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45 44 20  e /* NOT SEALED 
27dd0 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  */..    {..     
27de0 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
27df0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 50 72  eNativeModule Pr
27e00 69 76 61 74 65 20 43 6c 61 73 73 0d 0a 20 20 20  ivate Class..   
27e10 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
27e20 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
27e30 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3a 0d 0a  NativeModule :..
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e50 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
27e60 75 6c 65 2c 20 49 44 69 73 70 6f 73 61 62 6c 65  ule, IDisposable
27e70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
27e80 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
27e90 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
27ea0 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
27eb0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
27ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54             /// T
27ed0 68 69 73 20 69 73 20 74 68 65 20 76 61 6c 75 65  his is the value
27ee0 20 74 68 61 74 20 69 73 20 61 6c 77 61 79 73 20   that is always 
27ef0 75 73 65 64 20 66 6f 72 20 74 68 65 20 22 6c 6f  used for the "lo
27f00 67 45 72 72 6f 72 73 22 0d 0a 20 20 20 20 20 20  gErrors"..      
27f10 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65        /// parame
27f20 74 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f  ter to the vario
27f30 75 73 20 73 74 61 74 69 63 20 65 72 72 6f 72 20  us static error 
27f40 68 61 6e 64 6c 69 6e 67 20 6d 65 74 68 6f 64 73  handling methods
27f50 20 70 72 6f 76 69 64 65 64 0d 0a 20 20 20 20 20   provided..     
27f60 20 20 20 20 20 20 20 2f 2f 2f 20 62 79 20 74 68         /// by th
27f70 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
27f80 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 63 6c  iteModule" /> cl
27f90 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ass...          
27fa0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
27fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
27fc0 69 76 61 74 65 20 63 6f 6e 73 74 20 62 6f 6f 6c  ivate const bool
27fd0 20 44 65 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72   DefaultLogError
27fe0 73 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  s = true;....   
27ff0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
28000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28050 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
28060 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
28070 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  is the error mes
28080 73 61 67 65 20 74 65 78 74 20 75 73 65 64 20 77  sage text used w
28090 68 65 6e 20 74 68 65 20 63 6f 6e 74 61 69 6e 65  hen the containe
280a0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  d..            /
280b0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
280c0 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f  LiteModule" /> o
280d0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 69  bject instance i
280e0 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0d  s not available.
280f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28100 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e 2e   for any reason.
28110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28120 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
28130 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
28140 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4d  e const string M
28150 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
28160 65 45 72 72 6f 72 4d 65 73 73 61 67 65 20 3d 0d  eErrorMessage =.
28170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28180 20 22 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 20   "native module 
28190 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6e  implementation n
281a0 6f 74 20 61 76 61 69 6c 61 62 6c 65 22 3b 0d 0a  ot available";..
281b0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
281c0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
281d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
281e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28210 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28220 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
28230 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20   Private Data.. 
28240 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28250 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
28260 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
28270 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d  ee cref="SQLiteM
28280 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  odule" /> object
28290 20 69 6e 73 74 61 6e 63 65 20 75 73 65 64 20 74   instance used t
282a0 6f 20 70 72 6f 76 69 64 65 0d 0a 20 20 20 20 20  o provide..     
282b0 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 20 69 6d         /// an im
282c0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
282d0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
282e0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
282f0 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  le" />..        
28300 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63      /// interfac
28310 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
28320 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
28330 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
28340 61 74 65 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ate SQLiteModule
28350 20 6d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20   module;..      
28360 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
28370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
283d0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
283e0 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
283f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28400 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
28410 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
28420 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
28430 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e  e of this class.
28440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28450 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
28460 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
28470 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
28480 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e">..           
28490 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
284a0 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
284b0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
284c0 61 6e 63 65 20 75 73 65 64 20 74 6f 20 70 72 6f  ance used to pro
284d0 76 69 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20  vide..          
284e0 20 20 2f 2f 2f 20 61 6e 20 69 6d 70 6c 65 6d 65    /// an impleme
284f0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c  ntation of the <
28500 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
28510 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f  eNativeModule" /
28520 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28530 2f 2f 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20  // interface... 
28540 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28550 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
28560 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
28570 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 0d  teNativeModule(.
28580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28590 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f   SQLiteModule mo
285a0 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  dule..          
285b0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
285c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
285d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 6f 64          this.mod
285e0 75 6c 65 20 3d 20 6d 6f 64 75 6c 65 3b 0d 0a 20  ule = module;.. 
285f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
28600 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
28610 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
28620 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28660 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28670 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
28680 72 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65  rivate Static Me
28690 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
286a0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
286b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
286c0 2f 20 53 65 74 73 20 74 68 65 20 74 61 62 6c 65  / Sets the table
286d0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
286e0 6f 20 6f 6e 65 20 74 68 61 74 20 69 6e 64 69 63  o one that indic
286f0 61 74 65 73 20 74 68 65 20 6e 61 74 69 76 65 0d  ates the native.
28700 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28710 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
28720 74 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 76  tation is not av
28730 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...      
28740 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
28750 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
28760 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
28770 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
28780 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
28790 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
287a0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
287b0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
287c0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ture...         
287d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
287e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
287f0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
28800 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
28810 76 61 6c 75 65 20 6f 66 20 3c 73 65 65 20 63 72  value of <see cr
28820 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72 43  ef="SQLiteErrorC
28830 6f 64 65 2e 45 72 72 6f 72 22 20 2f 3e 2e 0d 0a  ode.Error" />...
28840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28850 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
28860 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28870 73 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72  static SQLiteErr
28880 6f 72 43 6f 64 65 20 4d 6f 64 75 6c 65 4e 6f 74  orCode ModuleNot
28890 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
288a0 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ror(..          
288b0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
288c0 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
288d0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
288e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
288f0 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
28900 72 6f 72 28 6e 75 6c 6c 2c 20 70 56 74 61 62 2c  ror(null, pVtab,
28910 20 44 65 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72   DefaultLogError
28920 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
28930 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f          ModuleNo
28940 74 41 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d  tAvailableErrorM
28950 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20  essage);....    
28960 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28970 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
28980 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
28990 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
289a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
289b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
289f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28a00 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
28a10 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74        /// Sets t
28a20 68 65 20 74 61 62 6c 65 20 65 72 72 6f 72 20 6d  he table error m
28a30 65 73 73 61 67 65 20 74 6f 20 6f 6e 65 20 74 68  essage to one th
28a40 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  at indicates the
28a50 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20   native..       
28a60 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20       /// module 
28a70 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
28a80 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2e  s not available.
28a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28aa0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
28ab0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
28ac0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
28ad0 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  or">..          
28ae0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
28af0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
28b00 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
28b10 73 6f 72 20 64 65 72 69 76 65 64 0d 0a 20 20 20  sor derived..   
28b20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72           /// str
28b30 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
28b40 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
28b50 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28b60 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
28b70 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68            /// Th
28b80 65 20 76 61 6c 75 65 20 6f 66 20 3c 73 65 65 20  e value of <see 
28b90 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f  cref="SQLiteErro
28ba0 72 43 6f 64 65 2e 45 72 72 6f 72 22 20 2f 3e 2e  rCode.Error" />.
28bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28bc0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
28bd0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
28be0 65 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 45  e static SQLiteE
28bf0 72 72 6f 72 43 6f 64 65 20 4d 6f 64 75 6c 65 4e  rrorCode ModuleN
28c00 6f 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f  otAvailableCurso
28c10 72 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20  rError(..       
28c20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
28c30 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
28c40 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
28c50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28c60 20 20 20 20 20 20 20 20 20 20 20 53 65 74 43 75             SetCu
28c70 72 73 6f 72 45 72 72 6f 72 28 6e 75 6c 6c 2c 20  rsorError(null, 
28c80 70 43 75 72 73 6f 72 2c 20 44 65 66 61 75 6c 74  pCursor, Default
28c90 4c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20  LogErrors,..    
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cb0 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
28cc0 6c 65 45 72 72 6f 72 4d 65 73 73 61 67 65 29 3b  leErrorMessage);
28cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28ce0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
28cf0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
28d00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
28d20 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
28d30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28d80 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
28d90 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  on ISQLiteNative
28da0 4d 6f 64 75 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  Module Members..
28db0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28dc0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
28dd0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
28de0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
28df0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
28e00 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65  e.xCreate" /> me
28e10 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
28e20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
28e30 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28e40 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28e50 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  pDb">..         
28e60 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
28e70 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
28e80 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
28e90 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
28ea0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
28eb0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
28ec0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
28ed0 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22 3e  ram name="pAux">
28ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28ef0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
28f00 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
28f10 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
28f20 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
28f30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
28f40 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
28f50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
28f60 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20  ame="argc">..   
28f70 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
28f80 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
28f90 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
28fa0 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
28fb0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
28fc0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
28fd0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28fe0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28ff0 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20  argv">..        
29000 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29010 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29020 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29030 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Create" /> metho
29040 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
29050 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
29060 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
29070 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
29080 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
29090 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
290a0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
290b0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
290c0 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
290d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
290e0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
290f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
29100 20 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d   name="pError">.
29110 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29120 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
29130 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
29140 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22  eModule.xCreate"
29150 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
29160 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
29170 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
29180 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
29190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
291a0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
291b0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
291c0 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
291d0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
291e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
291f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
29200 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
29210 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 72  iteErrorCode xCr
29220 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
29230 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44         IntPtr pD
29240 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
29250 20 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c      IntPtr pAux,
29260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29270 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
29280 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
29290 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20  Ptr argv,..     
292a0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
292b0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
292d0 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d  f IntPtr pError.
292e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
292f0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
29300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29310 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
29320 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
29330 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
29340 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
29350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
29360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29370 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53        pError = S
29380 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
29390 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
293a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
293b0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c             Modul
293c0 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72  eNotAvailableErr
293d0 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  orMessage);.... 
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293f0 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
29400 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
29410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29420 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29430 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
29440 64 75 6c 65 2e 78 43 72 65 61 74 65 28 0d 0a 20  dule.xCreate(.. 
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29460 20 20 20 70 44 62 2c 20 70 41 75 78 2c 20 61 72     pDb, pAux, ar
29470 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20 70 56  gc, argv, ref pV
29480 74 61 62 2c 20 72 65 66 20 70 45 72 72 6f 72 29  tab, ref pError)
29490 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
294a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
294b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
29500 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
29510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29520 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
29530 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
29540 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
29550 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
29560 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
29570 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
29580 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
29590 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20  m name="pDb">.. 
295a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
295b0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
295c0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
295d0 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20  odule.xConnect" 
295e0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
295f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
29600 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
29610 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
29620 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20  e="pAux">..     
29630 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
29640 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
29650 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
29660 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
29670 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
29680 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
29690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
296a0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
296b0 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  rgc">..         
296c0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
296d0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
296e0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
296f0 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
29700 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
29710 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
29720 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
29730 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22  aram name="argv"
29740 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29750 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
29760 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
29770 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65  iveModule.xConne
29780 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  ct" /> method...
29790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
297a0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
297b0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
297c0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
297d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
297e0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
297f0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
29800 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
29810 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
29820 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
29830 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
29840 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
29850 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20  me="pError">..  
29860 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
29870 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
29880 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
29890 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
298a0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
298b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
298c0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
298d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
298e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
298f0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
29900 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
29910 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
29920 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
29930 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
29940 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
29950 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
29960 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e  teErrorCode xCon
29970 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
29980 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44         IntPtr pD
29990 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
299a0 20 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c      IntPtr pAux,
299b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
299c0 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
299d0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
299e0 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20  Ptr argv,..     
299f0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
29a00 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
29a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29a20 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d  f IntPtr pError.
29a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a40 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
29a50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29a60 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
29a70 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
29a80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
29a90 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
29aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
29ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ac0 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53        pError = S
29ad0 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
29ae0 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
29af0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29b00 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c             Modul
29b10 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72  eNotAvailableErr
29b20 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  orMessage);.... 
29b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b40 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
29b50 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
29b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29b80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
29b90 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a  dule.xConnect(..
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bb0 20 20 20 20 70 44 62 2c 20 70 41 75 78 2c 20 61      pDb, pAux, a
29bc0 72 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20 70  rgc, argv, ref p
29bd0 56 74 61 62 2c 20 72 65 66 20 70 45 72 72 6f 72  Vtab, ref pError
29be0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
29bf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29c00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29c50 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
29c60 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29c70 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
29c80 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
29c90 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
29ca0 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ndex" /> method.
29cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29cc0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
29cd0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
29ce0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
29cf0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
29d00 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29d10 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29d20 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74  tiveModule.xBest
29d30 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
29d40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29d50 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
29d60 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
29d70 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65 78  ram name="pIndex
29d80 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
29d90 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29da0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29db0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74  tiveModule.xBest
29dc0 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
29dd0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29de0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
29df0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
29e00 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
29e10 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29e20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29e30 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29e40 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65  BestIndex" /> me
29e50 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
29e60 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
29e70 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
29e80 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
29e90 72 43 6f 64 65 20 78 42 65 73 74 49 6e 64 65 78  rCode xBestIndex
29ea0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29eb0 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c     IntPtr pVtab,
29ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ed0 20 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d    IntPtr pIndex.
29ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29ef0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
29f00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29f10 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
29f20 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
29f30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
29f40 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
29f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f60 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
29f70 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
29f80 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
29f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29fa0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
29fb0 78 42 65 73 74 49 6e 64 65 78 28 70 56 74 61 62  xBestIndex(pVtab
29fc0 2c 20 70 49 6e 64 65 78 29 3b 0d 0a 20 20 20 20  , pIndex);..    
29fd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29fe0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
29ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2a030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a040 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2a050 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2a060 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2a070 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2a080 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f  e.xDisconnect" /
2a090 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2a0a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2a0b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2a0c0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2a0d0 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
2a0e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2a0f0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2a100 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2a110 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22  ule.xDisconnect"
2a120 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2a130 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2a140 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2a150 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2a160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a170 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2a180 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2a190 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e  veModule.xDiscon
2a1a0 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
2a1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a1c0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2a1d0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2a1e0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2a1f0 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20   xDisconnect(.. 
2a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2a210 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
2a220 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2a230 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a250 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2a260 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a270 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2a280 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a2a0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2a2b0 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2a2c0 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a2e0 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 44 69 73  turn module.xDis
2a2f0 63 6f 6e 6e 65 63 74 28 70 56 74 61 62 29 3b 0d  connect(pVtab);.
2a300 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2a310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a360 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2a370 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2a380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a390 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2a3a0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2a3b0 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22  Module.xDestroy"
2a3c0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2a3d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
2a3e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2a3f0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2a400 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
2a410 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2a420 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2a430 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2a440 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22 20  odule.xDestroy" 
2a450 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2a460 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2a470 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2a480 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2a490 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a4a0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2a4b0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2a4c0 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79  eModule.xDestroy
2a4d0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2a4e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2a4f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2a500 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2a510 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44 65  iteErrorCode xDe
2a520 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20  stroy(..        
2a530 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2a540 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
2a550 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2a560 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a570 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2a580 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2a5a0 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2a5b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2a5c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2a5d0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2a5e0 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2a5f0 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
2a600 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2a610 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 28 70 56  dule.xDestroy(pV
2a620 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tab);..         
2a630 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a640 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a680 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a690 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2a6a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2a6b0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2a6c0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2a6d0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70  NativeModule.xOp
2a6e0 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  en" /> method...
2a6f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a700 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2a710 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2a720 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
2a730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a740 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2a750 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2a760 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20  veModule.xOpen" 
2a770 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2a780 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2a790 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2a7a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2a7b0 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20  e="pCursor">..  
2a7c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2a7d0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2a7e0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2a7f0 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d  dule.xOpen" /> m
2a800 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2a810 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2a820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a830 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2a840 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2a850 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2a860 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2a870 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65  ule.xOpen" /> me
2a880 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2a890 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
2a8a0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
2a8b0 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
2a8c0 72 43 6f 64 65 20 78 4f 70 65 6e 28 0d 0a 20 20  rCode xOpen(..  
2a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2a8e0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
2a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2a900 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
2a910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a920 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2a930 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a940 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2a950 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2a960 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2a970 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a990 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2a9a0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2a9b0 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2a9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a9d0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2a9e0 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 72 65 66  xOpen(pVtab, ref
2a9f0 20 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20   pCursor);..    
2aa00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2aa10 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2aa60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2aa70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2aa80 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2aa90 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2aaa0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2aab0 65 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74  e.xClose" /> met
2aac0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2aad0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2aae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2aaf0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2ab00 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
2ab10 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2ab20 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2ab30 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2ab40 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68  .xClose" /> meth
2ab50 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2ab60 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2ab70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ab80 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2ab90 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2aba0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2abb0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2abc0 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68  .xClose" /> meth
2abd0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2abe0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2abf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2ac00 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
2ac10 6f 64 65 20 78 43 6c 6f 73 65 28 0d 0a 20 20 20  ode xClose(..   
2ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2ac30 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
2ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2ac50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ac70 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2ac80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ac90 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2aca0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2acc0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2acd0 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72  vailableCursorEr
2ace0 72 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d  ror(pCursor);...
2acf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ad00 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
2ad10 43 6c 6f 73 65 28 70 43 75 72 73 6f 72 29 3b 0d  Close(pCursor);.
2ad20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ad30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ad40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2ad90 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2adb0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2adc0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2add0 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2ade0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2adf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2ae00 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2ae10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2ae20 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a  ame="pCursor">..
2ae30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ae40 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2ae50 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2ae60 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2ae70 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2ae80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2ae90 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2aea0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2aeb0 65 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20 20 20  e="idxNum">..   
2aec0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2aed0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2aee0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2aef0 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20  ule.xFilter" /> 
2af00 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2af10 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2af20 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2af30 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2af40 69 64 78 53 74 72 22 3e 0d 0a 20 20 20 20 20 20  idxStr">..      
2af50 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2af60 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2af70 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2af80 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74  .xFilter" /> met
2af90 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2afa0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2afb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2afc0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
2afd0 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c">..           
2afe0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2aff0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2b000 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c  ativeModule.xFil
2b010 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ter" /> method..
2b020 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b030 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2b040 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2b050 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a  m name="argv">..
2b060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b070 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b080 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b090 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2b0a0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2b0b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2b0c0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2b0d0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2b0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b0f0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2b100 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2b110 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22  eModule.xFilter"
2b120 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2b130 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2b140 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2b150 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2b160 74 65 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c  teErrorCode xFil
2b170 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
2b180 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
2b190 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  rsor,..         
2b1a0 20 20 20 20 20 20 20 69 6e 74 20 69 64 78 4e 75         int idxNu
2b1b0 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m,..            
2b1c0 20 20 20 20 49 6e 74 50 74 72 20 69 64 78 53 74      IntPtr idxSt
2b1d0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2b1e0 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
2b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2b200 6e 74 50 74 72 20 61 72 67 76 0d 0a 20 20 20 20  ntPtr argv..    
2b210 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2b220 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2b240 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2b250 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b260 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2b270 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b290 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2b2a0 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72  ailableCursorErr
2b2b0 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  or(pCursor);....
2b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2d0 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 46  return module.xF
2b2e0 69 6c 74 65 72 28 70 43 75 72 73 6f 72 2c 20 69  ilter(pCursor, i
2b2f0 64 78 4e 75 6d 2c 20 69 64 78 53 74 72 2c 20 61  dxNum, idxStr, a
2b300 72 67 63 2c 20 61 72 67 76 29 3b 0d 0a 20 20 20  rgc, argv);..   
2b310 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b320 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2b330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2b370 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b380 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2b390 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2b3a0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2b3b0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2b3c0 6c 65 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74  le.xNext" /> met
2b3d0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2b3e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2b3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b400 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2b410 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
2b420 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2b430 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2b440 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2b450 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f  .xNext" /> metho
2b460 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2b470 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2b480 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2b490 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2b4a0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2b4b0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2b4c0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2b4d0 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64  xNext" /> method
2b4e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b4f0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2b500 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2b510 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2b520 65 20 78 4e 65 78 74 28 0d 0a 20 20 20 20 20 20  e xNext(..      
2b530 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2b540 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20   pCursor..      
2b550 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2b560 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2b580 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2b590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b5a0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2b5b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b5c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b5d0 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
2b5e0 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72  lableCursorError
2b5f0 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20  (pCursor);....  
2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b610 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 4e 65 78  turn module.xNex
2b620 74 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20  t(pCursor);..   
2b630 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b640 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2b650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2b690 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b6a0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2b6b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2b6c0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2b6d0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2b6e0 6c 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68  le.xEof" /> meth
2b6f0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2b700 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2b710 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b720 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
2b730 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
2b740 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2b750 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2b760 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2b770 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  xEof" /> method.
2b780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b790 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2b7a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2b7b0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2b7c0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2b7d0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2b7e0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45  eNativeModule.xE
2b7f0 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  of" /> method...
2b800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b810 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2b820 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69          public i
2b830 6e 74 20 78 45 6f 66 28 0d 0a 20 20 20 20 20 20  nt xEof(..      
2b840 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2b850 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20   pCursor..      
2b860 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2b870 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2b890 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2b8a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b8b0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2b8c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b8d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
2b8f0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2b900 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75  eCursorError(pCu
2b910 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rsor);..        
2b920 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b930 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  rn 1;..         
2b940 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b950 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b960 72 6e 20 6d 6f 64 75 6c 65 2e 78 45 6f 66 28 70  rn module.xEof(p
2b970 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20  Cursor);..      
2b980 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b990 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b9e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2b9f0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ba00 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2ba10 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2ba20 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2ba30 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68  xColumn" /> meth
2ba40 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2ba50 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2ba60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ba70 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
2ba80 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
2ba90 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2baa0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2bab0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2bac0 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68  xColumn" /> meth
2bad0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2bae0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2baf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2bb00 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6f 6e  param name="pCon
2bb10 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  text">..        
2bb20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2bb30 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2bb40 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2bb50 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f  Column" /> metho
2bb60 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2bb70 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2bb80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2bb90 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78  aram name="index
2bba0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2bbb0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2bbc0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2bbd0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
2bbe0 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  mn" /> method...
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2bc00 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2bc10 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2bc20 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2bc30 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2bc40 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2bc50 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c  ativeModule.xCol
2bc60 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  umn" /> method..
2bc70 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bc80 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2bc90 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2bca0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2bcb0 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20  xColumn(..      
2bcc0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2bcd0 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20   pCursor,..     
2bce0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2bcf0 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  r pContext,..   
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2bd10 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20   index..        
2bd20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2bd30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2bd40 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2bd50 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2bd60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd70 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2bd80 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2bd90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2bda0 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2bdb0 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70  bleCursorError(p
2bdc0 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  Cursor);....    
2bdd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2bde0 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  rn module.xColum
2bdf0 6e 28 70 43 75 72 73 6f 72 2c 20 70 43 6f 6e 74  n(pCursor, pCont
2be00 65 78 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  ext, index);..  
2be10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2be20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2be30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2be70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2be80 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2be90 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2bea0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2beb0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2bec0 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d  ule.xRowId" /> m
2bed0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2bee0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2bef0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2bf00 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2bf10 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
2bf20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2bf30 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2bf40 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2bf50 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d 65  le.xRowId" /> me
2bf60 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2bf70 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2bf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bf90 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f   <param name="ro
2bfa0 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  wId">..         
2bfb0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2bfc0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2bfd0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2bfe0 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  owId" /> method.
2bff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c000 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2c010 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2c020 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2c030 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2c040 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2c050 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2c060 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  owId" /> method.
2c070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c080 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2c090 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2c0a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2c0b0 20 78 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20   xRowId(..      
2c0c0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2c0d0 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20   pCursor,..     
2c0e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c             ref l
2c0f0 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20  ong rowId..     
2c100 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2c110 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c120 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c130 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2c140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c150 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2c160 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c180 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2c190 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f  ilableCursorErro
2c1a0 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  r(pCursor);.... 
2c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c1c0 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f  eturn module.xRo
2c1d0 77 49 64 28 70 43 75 72 73 6f 72 2c 20 72 65 66  wId(pCursor, ref
2c1e0 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20   rowId);..      
2c1f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c200 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2c210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c250 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2c260 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2c270 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2c280 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2c290 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2c2a0 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68  xUpdate" /> meth
2c2b0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c2c0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2c2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c2e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
2c2f0 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  tab">..         
2c300 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2c310 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2c320 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55  eNativeModule.xU
2c330 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  pdate" /> method
2c340 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c350 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2c360 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2c370 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
2c380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c390 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2c3a0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2c3b0 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65  veModule.xUpdate
2c3c0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2c3d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2c3e0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2c3f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2c400 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20  ame="argv">..   
2c410 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2c420 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2c430 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2c440 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20  ule.xUpdate" /> 
2c450 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2c460 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2c470 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c480 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2c490 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20  rowId">..       
2c4a0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2c4b0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2c4c0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2c4d0 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68  xUpdate" /> meth
2c4e0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c4f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2c500 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c510 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2c520 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2c530 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2c540 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2c550 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74  .xUpdate" /> met
2c560 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2c570 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2c580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2c590 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
2c5a0 43 6f 64 65 20 78 55 70 64 61 74 65 28 0d 0a 20  Code xUpdate(.. 
2c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2c5c0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2c5e0 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20  t argc,..       
2c5f0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2c600 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20  argv,..         
2c610 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20         ref long 
2c620 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20  rowId..         
2c630 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2c640 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c650 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
2c660 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c680 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
2c690 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2c6a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c6b0 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2c6c0 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  leTableError(pVt
2c6d0 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
2c6e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
2c6f0 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 28 70 56  odule.xUpdate(pV
2c700 74 61 62 2c 20 61 72 67 63 2c 20 61 72 67 76 2c  tab, argc, argv,
2c710 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20   ref rowId);..  
2c720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c730 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2c740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2c780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c790 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2c7a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2c7b0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2c7c0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2c7d0 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d  ule.xBegin" /> m
2c7e0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2c7f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c800 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2c810 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2c820 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
2c830 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2c840 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2c850 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2c860 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68  .xBegin" /> meth
2c870 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c880 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2c890 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c8a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2c8b0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2c8c0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2c8d0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2c8e0 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68  .xBegin" /> meth
2c8f0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c900 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2c910 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2c920 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
2c930 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a 20 20 20  ode xBegin(..   
2c940 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2c950 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
2c960 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2c970 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c980 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c990 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2c9a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c9b0 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2c9c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c9e0 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2c9f0 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72  ilableTableError
2ca00 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ca20 72 6e 20 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e  rn module.xBegin
2ca30 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20  (pVtab);..      
2ca40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ca50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ca60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2caa0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2cab0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2cac0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2cad0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2cae0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2caf0 78 53 79 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64  xSync" /> method
2cb00 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2cb10 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2cb20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2cb30 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
2cb40 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
2cb50 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2cb60 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2cb70 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e  ativeModule.xSyn
2cb80 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  c" /> method... 
2cb90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2cba0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2cbb0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2cbc0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2cbd0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2cbe0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2cbf0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63  tiveModule.xSync
2cc00 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2cc10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2cc20 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2cc30 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2cc40 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 79  iteErrorCode xSy
2cc50 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nc(..           
2cc60 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
2cc70 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b..             
2cc80 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2cc90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cca0 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2ccb0 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ccd0 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2cce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ccf0 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2cd00 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61  leNotAvailableTa
2cd10 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b  bleError(pVtab);
2cd20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cd30 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c      return modul
2cd40 65 2e 78 53 79 6e 63 28 70 56 74 61 62 29 3b 0d  e.xSync(pVtab);.
2cd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2cd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2cd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdb0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2cdc0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2cdd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2cde0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2cdf0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2ce00 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20  Module.xCommit" 
2ce10 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2ce20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2ce30 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2ce40 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2ce50 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
2ce60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2ce70 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2ce80 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2ce90 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e  dule.xCommit" />
2cea0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2ceb0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2cec0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2ced0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2cee0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2cef0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2cf00 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2cf10 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f  odule.xCommit" /
2cf20 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2cf30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2cf40 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2cf50 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
2cf60 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6d 6d 69  ErrorCode xCommi
2cf70 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2cf80 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
2cf90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cfa0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2cfb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2cfc0 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70      // CheckDisp
2cfd0 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
2cfe0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2cff0 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d010 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c      return Modul
2d020 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62  eNotAvailableTab
2d030 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d  leError(pVtab);.
2d040 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d050 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
2d060 2e 78 43 6f 6d 6d 69 74 28 70 56 74 61 62 29 3b  .xCommit(pVtab);
2d070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2d080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2d090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2d0e0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2d0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d100 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2d110 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2d120 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
2d130 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  k" /> method... 
2d140 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d150 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2d160 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2d170 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
2d180 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d190 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2d1a0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2d1b0 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
2d1c0 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  k" /> method... 
2d1d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d1e0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2d1f0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2d200 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2d210 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d220 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d230 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
2d240 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  back" /> method.
2d250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d260 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2d270 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2d280 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2d290 20 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20   xRollback(..   
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2d2b0 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
2d2c0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2d2d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2d2f0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2d300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d310 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2d320 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2d330 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2d340 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2d350 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72  ilableTableError
2d360 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
2d370 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d380 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  rn module.xRollb
2d390 61 63 6b 28 70 56 74 61 62 29 3b 0d 0a 20 20 20  ack(pVtab);..   
2d3a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d3b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2d3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2d400 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d410 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2d420 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2d430 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2d440 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2d450 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
2d460 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2d470 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2d480 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2d490 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2d4a0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2d4b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d4c0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2d4d0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2d4e0 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
2d4f0 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  tion" /> method.
2d500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d510 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2d520 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2d530 61 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 22 3e 0d  am name="nArg">.
2d540 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d550 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2d560 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2d570 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  eModule.xFindFun
2d580 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  ction" /> method
2d590 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2d5a0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2d5b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2d5c0 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d 65 22  ram name="zName"
2d5d0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2d5e0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2d5f0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2d600 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  iveModule.xFindF
2d610 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68  unction" /> meth
2d620 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d630 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2d640 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d650 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c  param name="call
2d660 62 61 63 6b 22 3e 0d 0a 20 20 20 20 20 20 20 20  back">..        
2d670 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2d680 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2d690 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2d6a0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e  FindFunction" />
2d6b0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2d6c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2d6d0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2d6e0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2d6f0 22 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a  "pClientData">..
2d700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d710 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2d720 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2d730 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
2d740 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  tion" /> method.
2d750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d760 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2d770 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2d780 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2d790 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2d7a0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2d7b0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
2d7c0 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  indFunction" /> 
2d7d0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2d7e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2d7f0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2d800 20 70 75 62 6c 69 63 20 69 6e 74 20 78 46 69 6e   public int xFin
2d810 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
2d820 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2d830 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
2d840 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
2d850 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Arg,..          
2d860 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 61        IntPtr zNa
2d870 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2d880 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 43       ref SQLiteC
2d890 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
2d8a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d8b0 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43     ref IntPtr pC
2d8c0 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20  lientData..     
2d8d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2d8e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2d900 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2d910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d920 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2d930 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2d940 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d960 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2d970 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  leTableError(pVt
2d980 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ab);..          
2d990 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d9a0 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
2d9b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d9c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d9d0 20 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e   module.xFindFun
2d9e0 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
2d9f0 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61              pVta
2da00 62 2c 20 6e 41 72 67 2c 20 7a 4e 61 6d 65 2c 20  b, nArg, zName, 
2da10 72 65 66 20 63 61 6c 6c 62 61 63 6b 2c 20 72 65  ref callback, re
2da20 66 20 70 43 6c 69 65 6e 74 44 61 74 61 29 3b 0d  f pClientData);.
2da30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2da40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da90 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2daa0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2dab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2dac0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2dad0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2dae0 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20  Module.xRename" 
2daf0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2db00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2db10 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2db20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2db30 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
2db40 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2db50 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2db60 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2db70 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e  dule.xRename" />
2db80 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2db90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2dba0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2dbb0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2dbc0 22 7a 4e 65 77 22 3e 0d 0a 20 20 20 20 20 20 20  "zNew">..       
2dbd0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2dbe0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2dbf0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2dc00 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68  xRename" /> meth
2dc10 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2dc20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2dc30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2dc40 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2dc50 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2dc60 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2dc70 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2dc80 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74  .xRename" /> met
2dc90 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2dca0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2dcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2dcc0 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
2dcd0 43 6f 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20  Code xRename(.. 
2dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2dcf0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
2dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2dd10 74 50 74 72 20 7a 4e 65 77 0d 0a 20 20 20 20 20  tPtr zNew..     
2dd20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2dd30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2dd50 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2dd60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dd70 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2dd80 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2dda0 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2ddb0 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72  ilableTableError
2ddc0 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
2ddd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2dde0 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d  rn module.xRenam
2ddf0 65 28 70 56 74 61 62 2c 20 7a 4e 65 77 29 3b 0d  e(pVtab, zNew);.
2de00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2de10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2de20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de60 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2de70 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2de80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2de90 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2dea0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2deb0 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  Module.xSavepoin
2dec0 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2ded0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2dee0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2def0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2df00 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
2df10 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2df20 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2df30 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2df40 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69  eModule.xSavepoi
2df50 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  nt" /> method...
2df60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2df70 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2df80 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2df90 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e   name="iSavepoin
2dfa0 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t">..           
2dfb0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2dfc0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2dfd0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76  ativeModule.xSav
2dfe0 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f  epoint" /> metho
2dff0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2e000 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2e010 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2e020 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2e030 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2e040 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2e050 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2e060 78 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d  xSavepoint" /> m
2e070 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2e080 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2e090 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2e0a0 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2e0b0 6f 72 43 6f 64 65 20 78 53 61 76 65 70 6f 69 6e  orCode xSavepoin
2e0c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2e0d0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
2e0e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e0f0 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e     int iSavepoin
2e100 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
2e110 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2e120 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e130 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2e140 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2e150 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e160 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2e170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e180 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2e190 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61  leNotAvailableTa
2e1a0 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b  bleError(pVtab);
2e1b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e1c0 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c      return modul
2e1d0 65 2e 78 53 61 76 65 70 6f 69 6e 74 28 70 56 74  e.xSavepoint(pVt
2e1e0 61 62 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  ab, iSavepoint);
2e1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e250 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2e260 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2e270 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e280 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2e290 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2e2a0 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65  eModule.xRelease
2e2b0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2e2c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2e2d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2e2e0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2e2f0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2e300 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e310 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2e320 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2e330 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22  Module.xRelease"
2e340 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2e350 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2e360 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2e370 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2e380 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e  me="iSavepoint">
2e390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e3a0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2e3b0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2e3c0 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73  veModule.xReleas
2e3d0 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
2e3e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e3f0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2e400 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2e410 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2e420 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2e430 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2e440 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65  tiveModule.xRele
2e450 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ase" /> method..
2e460 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e470 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2e480 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2e490 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2e4a0 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20  xRelease(..     
2e4b0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2e4c0 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
2e4d0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53            int iS
2e4e0 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20  avepoint..      
2e4f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e500 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
2e520 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2e530 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e540 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2e550 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e560 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e570 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
2e580 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
2e590 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
2e5a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e5b0 6e 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73  n module.xReleas
2e5c0 65 28 70 56 74 61 62 2c 20 69 53 61 76 65 70 6f  e(pVtab, iSavepo
2e5d0 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  int);..         
2e5e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e5f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2e600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e630 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e640 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2e650 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2e660 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2e670 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2e680 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  NativeModule.xRo
2e690 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74  llbackTo" /> met
2e6a0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2e6b0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2e6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e6d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2e6e0 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
2e6f0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2e700 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2e710 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2e720 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d  RollbackTo" /> m
2e730 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2e740 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2e750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e760 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
2e770 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20  Savepoint">..   
2e780 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2e790 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2e7a0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2e7b0 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22  ule.xRollbackTo"
2e7c0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2e7d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2e7e0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2e7f0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2e800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e810 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2e820 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2e830 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61  veModule.xRollba
2e840 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ckTo" /> method.
2e850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e860 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2e870 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2e880 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2e890 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20   xRollbackTo(.. 
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2e8b0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
2e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2e8d0 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20  t iSavepoint..  
2e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2e8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e910 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2e920 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2e930 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2e940 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e960 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
2e970 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
2e980 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
2e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e9a0 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f  eturn module.xRo
2e9b0 6c 6c 62 61 63 6b 54 6f 28 70 56 74 61 62 2c 20  llbackTo(pVtab, 
2e9c0 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20 20  iSavepoint);..  
2e9d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2e9e0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2e9f0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
2ea00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2ea10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2ea50 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
2ea60 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72  isposable Member
2ea70 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
2ea80 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2ea90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69            /// Di
2eaa0 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f  sposes of this o
2eab0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
2eac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ead0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2eae0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2eaf0 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
2eb00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
2eb20 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
2eb40 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69  C.SuppressFinali
2eb50 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20  ze(this);..     
2eb60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2eb70 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2eb80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2eb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2ebe0 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
2ebf0 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22  osable "Pattern"
2ec00 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
2ec10 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
2ec20 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
2ec30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2ec40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ec50 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20       /// Throws 
2ec60 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62  an <see cref="Ob
2ec70 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
2ec80 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74 68 69  ption" /> if thi
2ec90 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20  s object..      
2eca0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
2ecb0 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 70  ce has been disp
2ecc0 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  osed...         
2ecd0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2ece0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
2ecf0 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
2ed00 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74  kDisposed() /* t
2ed10 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
2ed20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f       {..#if THRO
2ed30 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20  W_ON_DISPOSED.. 
2ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ed50 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20  f (disposed)..  
2ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2ed70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed80 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f       throw new O
2ed90 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
2eda0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
2edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edc0 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 4e 61   typeof(SQLiteNa
2edd0 74 69 76 65 4d 6f 64 75 6c 65 29 2e 4e 61 6d 65  tiveModule).Name
2ede0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2edf0 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
2ee00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2ee20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2ee60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ee70 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2ee80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69            /// Di
2ee90 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f  sposes of this o
2eea0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
2eeb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2eec0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2eed0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2eee0 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73  ram name="dispos
2eef0 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  ing">..         
2ef00 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
2ef10 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69  if this method i
2ef20 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  s being called f
2ef30 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20  rom the..       
2ef40 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
2ef50 65 66 3d 22 44 69 73 70 6f 73 65 28 29 22 20 2f  ef="Dispose()" /
2ef60 3e 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20  > method.  Zero 
2ef70 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69  if this method i
2ef80 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20  s being..       
2ef90 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 20       /// called 
2efa0 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 69 7a  from the finaliz
2efb0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...           
2efc0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2efd0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2efe0 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
2eff0 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
2f000 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
2f010 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
2f020 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f030 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
2f040 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
2f050 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f070 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d  /if (disposing).
2f080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f090 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
2f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f0b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2f0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f0f0 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
2f100 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
2f110 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f130 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2f140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f150 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
2f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f180 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2f190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2f1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f1c0 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
2f1d0 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
2f1e0 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
2f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f200 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2f210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f220 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f240 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2f250 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2f260 54 68 65 20 6d 6f 64 75 6c 65 20 69 73 20 6e 6f  The module is no
2f270 74 20 6f 77 6e 65 64 20 62 79 20 75 73 3b 20 74  t owned by us; t
2f280 68 65 72 65 66 6f 72 65 2c 20 64 6f 20 6e 6f 74  herefore, do not
2f290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f2a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
2f2b0 69 73 70 6f 73 65 20 69 74 2e 0d 0a 20 20 20 20  ispose it...    
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2f2e0 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
2f2f0 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le != null)..   
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f310 20 20 20 20 20 6d 6f 64 75 6c 65 20 3d 20 6e 75       module = nu
2f320 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
2f330 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
2f340 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
2f350 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2f360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2f370 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2f380 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2f390 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2f3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2f3e0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2f3f0 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
2f400 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2f410 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2f420 20 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73     /// Finalizes
2f430 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
2f440 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
2f450 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2f460 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2f470 7e 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ~SQLiteNativeMod
2f480 75 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ule()..         
2f490 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f4a0 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
2f4b0 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
2f4c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2f4d0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
2f4e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2f4f0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2f500 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2f510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f550 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2f560 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
2f570 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nts..        ///
2f580 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2f590 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61      /// The defa
2f5a0 75 6c 74 20 65 73 74 69 6d 61 74 65 64 20 63 6f  ult estimated co
2f5b0 73 74 20 66 6f 72 20 75 73 65 20 77 69 74 68 20  st for use with 
2f5c0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
2f5d0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2f5e0 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
2f5f0 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d  .BestIndex" /> m
2f600 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2f610 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2f620 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2f630 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
2f640 64 6f 75 62 6c 65 20 44 65 66 61 75 6c 74 45 73  double DefaultEs
2f650 74 69 6d 61 74 65 64 43 6f 73 74 20 3d 20 64 6f  timatedCost = do
2f660 75 62 6c 65 2e 4d 61 78 56 61 6c 75 65 3b 0d 0a  uble.MaxValue;..
2f670 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2f680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
2f6d0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2f6e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61      /// The defa
2f6f0 75 6c 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  ult version of t
2f700 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
2f710 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  3_module structu
2f720 72 65 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20  re in use...    
2f730 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2f740 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
2f750 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
2f760 6e 6c 79 20 69 6e 74 20 44 65 66 61 75 6c 74 4d  nly int DefaultM
2f770 6f 64 75 6c 65 56 65 72 73 69 6f 6e 20 3d 20 32  oduleVersion = 2
2f780 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
2f790 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2f7a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2f7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f7e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2f7f0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
2f800 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20  ate Data..      
2f810 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2f820 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
2f830 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  s field is used 
2f840 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6e 61 74  to store the nat
2f850 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ive sqlite3_modu
2f860 6c 65 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20  le structure..  
2f870 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69        /// associ
2f880 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  ated with this o
2f890 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
2f8a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
2f8b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2f8c0 20 70 72 69 76 61 74 65 20 55 6e 73 61 66 65 4e   private UnsafeN
2f8d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2f8e0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6e 61 74 69  ite3_module nati
2f8f0 76 65 4d 6f 64 75 6c 65 3b 0d 0a 0d 0a 20 20 20  veModule;....   
2f900 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2f910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f950 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  #if PLATFORM_COM
2f960 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
2f970 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2f980 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2f990 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20  / This field is 
2f9a0 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65  used to hold the
2f9b0 20 62 6c 6f 63 6b 20 6f 66 20 6e 61 74 69 76 65   block of native
2f9c0 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 63 6f 6e   memory that con
2f9d0 74 61 69 6e 73 0d 0a 20 20 20 20 20 20 20 20 2f  tains..        /
2f9e0 2f 2f 20 74 68 65 20 6e 61 74 69 76 65 20 73 71  // the native sq
2f9f0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72  lite3_module str
2fa00 75 63 74 75 72 65 20 61 73 73 6f 63 69 61 74 65  ucture associate
2fa10 64 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65  d with this obje
2fa20 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ct..        /// 
2fa30 69 6e 73 74 61 6e 63 65 20 77 68 65 6e 20 72 75  instance when ru
2fa40 6e 6e 69 6e 67 20 6f 6e 20 74 68 65 20 2e 4e 45  nning on the .NE
2fa50 54 20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65 77  T Compact Framew
2fa60 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ork...        //
2fa70 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2fa80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e        private In
2fa90 74 50 74 72 20 70 4e 61 74 69 76 65 4d 6f 64 75  tPtr pNativeModu
2faa0 6c 65 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  le;..#endif.... 
2fab0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2fb00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2fb10 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2fb20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
2fb30 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2fb40 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2fb50 6c 65 20 69 6e 73 74 61 6e 63 65 73 20 61 73 73  le instances ass
2fb60 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
2fb70 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 6d   /// with this m
2fb80 6f 64 75 6c 65 2e 20 20 54 68 65 20 6e 61 74 69  odule.  The nati
2fb90 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
2fba0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
2fbb0 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20 20  erived..        
2fbc0 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20 69 73  /// structure is
2fbd0 20 75 73 65 64 20 74 6f 20 6b 65 79 20 69 6e 74   used to key int
2fbe0 6f 20 74 68 69 73 20 63 6f 6c 6c 65 63 74 69 6f  o this collectio
2fbf0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
2fc00 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2fc10 20 20 20 20 70 72 69 76 61 74 65 20 44 69 63 74      private Dict
2fc20 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20 53  ionary<IntPtr, S
2fc30 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
2fc40 65 3e 20 74 61 62 6c 65 73 3b 0d 0a 0d 0a 20 20  e> tables;....  
2fc50 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2fc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2fca0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
2fcb0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2fcc0 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69  /// This field i
2fcd0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2fce0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
2fcf0 65 20 63 75 72 73 6f 72 20 69 6e 73 74 61 6e 63  e cursor instanc
2fd00 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  es..        /// 
2fd10 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2fd20 74 68 69 73 20 6d 6f 64 75 6c 65 2e 20 20 54 68  this module.  Th
2fd30 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
2fd40 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
2fd50 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61   /// sqlite3_vta
2fd60 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64  b_cursor derived
2fd70 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
2fd80 65 64 20 74 6f 20 6b 65 79 20 69 6e 74 6f 20 74  ed to key into t
2fd90 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
2fda0 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20   collection...  
2fdb0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2fdc0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
2fdd0 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79  ivate Dictionary
2fde0 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56  <IntPtr, SQLiteV
2fdf0 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
2fe00 72 3e 20 63 75 72 73 6f 72 73 3b 0d 0a 0d 0a 20  r> cursors;.... 
2fe10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fe20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2fe60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2fe70 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2fe80 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
2fe90 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2fea0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2feb0 6c 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 73 74  le function inst
2fec0 61 6e 63 65 73 0d 0a 20 20 20 20 20 20 20 20 2f  ances..        /
2fed0 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
2fee0 74 68 20 74 68 69 73 20 6d 6f 64 75 6c 65 2e 20  th this module. 
2fef0 20 54 68 65 20 63 61 73 65 2d 69 6e 73 65 6e 73   The case-insens
2ff00 69 74 69 76 65 20 66 75 6e 63 74 69 6f 6e 20 6e  itive function n
2ff10 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ame..        ///
2ff20 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20   and the number 
2ff30 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 28 77 69  of arguments (wi
2ff40 74 68 20 2d 31 20 6d 65 61 6e 69 6e 67 20 22 61  th -1 meaning "a
2ff50 6e 79 22 29 20 61 72 65 20 75 73 65 64 20 74 6f  ny") are used to
2ff60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
2ff70 6e 73 74 72 75 63 74 20 74 68 65 20 73 74 72 69  nstruct the stri
2ff80 6e 67 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ng that is used 
2ff90 74 6f 20 6b 65 79 20 69 6e 74 6f 20 74 68 69 73  to key into this
2ffa0 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20   collection...  
2ffb0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2ffc0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
2ffd0 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79  ivate Dictionary
2ffe0 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 46  <string, SQLiteF
2fff0 75 6e 63 74 69 6f 6e 3e 20 66 75 6e 63 74 69 6f  unction> functio
30000 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ns;..        #en
30010 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
30020 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
30030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
30070 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
30080 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
30090 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
300a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
300b0 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
300c0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
300d0 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
300e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
300f0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
30100 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
30110 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  me">..        //
30120 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
30130 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 69 73 20  e module.  This 
30140 70 61 72 61 6d 65 74 65 72 20 63 61 6e 6e 6f 74  parameter cannot
30150 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20   be null...     
30160 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
30170 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
30180 53 51 4c 69 74 65 4d 6f 64 75 6c 65 28 73 74 72  SQLiteModule(str
30190 69 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20  ing name)..     
301a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
301b0 20 20 69 66 20 28 6e 61 6d 65 20 3d 3d 20 6e 75    if (name == nu
301c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
301d0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
301e0 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
301f0 74 69 6f 6e 28 22 6e 61 6d 65 22 29 3b 0d 0a 0d  tion("name");...
30200 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
30210 73 2e 6e 61 6d 65 20 3d 20 6e 61 6d 65 3b 0d 0a  s.name = name;..
30220 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
30230 2e 74 61 62 6c 65 73 20 3d 20 6e 65 77 20 44 69  .tables = new Di
30240 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c  ctionary<IntPtr,
30250 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
30260 62 6c 65 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20  ble>();..       
30270 20 20 20 20 20 74 68 69 73 2e 63 75 72 73 6f 72       this.cursor
30280 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
30290 72 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74  ry<IntPtr, SQLit
302a0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
302b0 73 6f 72 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20  sor>();..       
302c0 20 20 20 20 20 74 68 69 73 2e 66 75 6e 63 74 69       this.functi
302d0 6f 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  ons = new Dictio
302e0 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
302f0 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d  iteFunction>();.
30300 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
30310 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
30320 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
30330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30370 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
30380 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 4d 65  gion Internal Me
30390 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
303a0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
303b0 20 20 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65        /// Create
303c0 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
303d0 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f  e native sqlite_
303e0 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65  module structure
303f0 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20   using the..    
30400 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72      /// configur
30410 65 64 20 28 6f 72 20 64 65 66 61 75 6c 74 29 20  ed (or default) 
30420 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
30430 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
30440 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
30450 69 6e 74 65 72 66 61 63 65 20 69 6d 70 6c 65 6d  interface implem
30460 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
30470 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
30480 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
30490 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
304a0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
304b0 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73   sqlite_module s
304c0 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 74  tructure using t
304d0 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 28 6f  he configured (o
304e0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  r..        /// d
304f0 65 66 61 75 6c 74 29 20 3c 73 65 65 20 63 72 65  efault) <see cre
30500 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
30510 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72  Module" /> inter
30520 66 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  face..        //
30530 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
30540 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
30550 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
30560 20 20 20 69 6e 74 65 72 6e 61 6c 20 55 6e 73 61     internal Unsa
30570 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
30580 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 43  sqlite3_module C
30590 72 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  reateNativeModul
305a0 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e()..        {..
305b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
305c0 72 6e 20 43 72 65 61 74 65 4e 61 74 69 76 65 4d  rn CreateNativeM
305d0 6f 64 75 6c 65 28 47 65 74 4e 61 74 69 76 65 4d  odule(GetNativeM
305e0 6f 64 75 6c 65 49 6d 70 6c 28 29 29 3b 0d 0a 20  oduleImpl());.. 
305f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30600 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23  ///////////....#
30650 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  if PLATFORM_COMP
30660 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
30670 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
30680 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
30690 20 43 72 65 61 74 65 73 20 61 6e 64 20 72 65 74   Creates and ret
306a0 75 72 6e 73 20 61 20 6d 65 6d 6f 72 79 20 62 6c  urns a memory bl
306b0 6f 63 6b 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ock obtained fro
306c0 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  m the SQLite cor
306d0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  e..        /// l
306e0 69 62 72 61 72 79 20 75 73 65 64 20 74 6f 20 73  ibrary used to s
306f0 74 6f 72 65 20 74 68 65 20 6e 61 74 69 76 65 20  tore the native 
30700 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73  sqlite3_module s
30710 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
30720 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  s..        /// o
30730 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 77  bject instance w
30740 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74  hen running on t
30750 68 65 20 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20  he .NET Compact 
30760 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  Framework...    
30770 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
30780 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
30790 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
307a0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
307b0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
307c0 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
307d0 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65  module structure
307e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
307f0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
30800 20 20 20 69 6e 74 65 72 6e 61 6c 20 49 6e 74 50     internal IntP
30810 74 72 20 43 72 65 61 74 65 4e 61 74 69 76 65 4d  tr CreateNativeM
30820 6f 64 75 6c 65 49 6e 74 65 72 6f 70 28 29 0d 0a  oduleInterop()..
30830 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30840 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 74 69         if (pNati
30850 76 65 4d 6f 64 75 6c 65 20 3d 3d 20 49 6e 74 50  veModule == IntP
30860 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
30870 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30880 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
30890 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
308a0 48 41 43 4b 3a 20 4e 6f 20 65 61 73 79 20 77 61  HACK: No easy wa
308b0 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  y to determine t
308c0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6e  he size of the n
308d0 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 20  ative..         
308e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
308f0 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74  sqlite_module st
30900 72 75 63 74 75 72 65 20 77 68 65 6e 20 72 75 6e  ructure when run
30910 6e 69 6e 67 20 6f 6e 20 74 68 65 20 2e 4e 45 54  ning on the .NET
30920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30930 20 20 2f 2f 20 20 20 20 20 20 20 43 6f 6d 70 61    //       Compa
30940 63 74 20 46 72 61 6d 65 77 6f 72 6b 3b 20 74 68  ct Framework; th
30950 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 20 62 61  erefore, just ba
30960 73 65 20 74 68 65 20 73 69 7a 65 0d 0a 20 20 20  se the size..   
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
30980 20 20 20 20 20 20 6f 6e 20 77 68 61 74 20 77 65        on what we
30990 20 6b 6e 6f 77 3a 0d 0a 20 20 20 20 20 20 20 20   know:..        
309a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
309b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
309c0 20 20 20 20 20 54 68 65 72 65 20 69 73 20 6f 6e       There is on
309d0 65 20 69 6e 74 65 67 65 72 20 6d 65 6d 62 65 72  e integer member
309e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
309f0 20 20 20 2f 2f 20 20 20 20 20 20 20 54 68 65 72     //       Ther
30a00 65 20 61 72 65 20 32 32 20 66 75 6e 63 74 69 6f  e are 22 functio
30a10 6e 20 70 6f 69 6e 74 65 72 20 6d 65 6d 62 65 72  n pointer member
30a20 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
30a30 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
30a40 20 20 20 20 20 20 20 20 70 4e 61 74 69 76 65 4d          pNativeM
30a50 6f 64 75 6c 65 20 3d 20 53 51 4c 69 74 65 4d 65  odule = SQLiteMe
30a60 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28 0d 0a  mory.Allocate(..
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a80 20 20 20 20 73 69 7a 65 6f 66 28 69 6e 74 29 20      sizeof(int) 
30a90 2b 20 28 32 32 20 2a 20 49 6e 74 50 74 72 2e 53  + (22 * IntPtr.S
30aa0 69 7a 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ize));....      
30ab0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4e            if (pN
30ac0 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 3d 20 49  ativeModule == I
30ad0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
30ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30af0 20 74 68 72 6f 77 20 6e 65 77 20 4f 75 74 4f 66   throw new OutOf
30b00 4d 65 6d 6f 72 79 45 78 63 65 70 74 69 6f 6e 28  MemoryException(
30b10 22 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22  "sqlite3_module"
30b20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30b30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30b40 20 72 65 74 75 72 6e 20 70 4e 61 74 69 76 65 4d   return pNativeM
30b50 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  odule;..        
30b60 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
30b70 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
30b80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
30b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
30be0 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68  ion Private Meth
30bf0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
30c00 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
30c10 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
30c20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
30c30 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f 6d 6f  native sqlite_mo
30c40 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 20 75  dule structure u
30c50 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  sing the..      
30c60 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 65 64 20    /// specified 
30c70 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
30c80 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
30c90 2f 3e 20 69 6e 74 65 72 66 61 63 65 0d 0a 20 20  /> interface..  
30ca0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
30cb0 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
30cc0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
30cd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
30ce0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
30cf0 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
30d00 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
30d10 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
30d20 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61  dule" /> interfa
30d30 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ce implementatio
30d40 6e 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n to..        //
30d50 2f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  / use...        
30d60 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
30d70 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
30d80 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
30d90 20 54 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   The native sqli
30da0 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74  te_module struct
30db0 75 72 65 20 75 73 69 6e 67 20 74 68 65 20 73 70  ure using the sp
30dc0 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20  ecified..       
30dd0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
30de0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
30df0 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63  ule" /> interfac
30e00 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
30e10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
30e20 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
30e30 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61 66     private Unsaf
30e40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
30e50 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 43 72  qlite3_module Cr
30e60 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  eateNativeModule
30e70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
30e80 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
30e90 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20  le module..     
30ea0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
30eb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30ec0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 20   nativeModule = 
30ed0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
30ee0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
30ef0 6d 6f 64 75 6c 65 28 29 3b 0d 0a 20 20 20 20 20  module();..     
30f00 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
30f10 75 6c 65 2e 69 56 65 72 73 69 6f 6e 20 3d 20 44  ule.iVersion = D
30f20 65 66 61 75 6c 74 4d 6f 64 75 6c 65 56 65 72 73  efaultModuleVers
30f30 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ion;....        
30f40 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 21      if (module !
30f50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30f60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30f70 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
30f80 64 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20 6e  dule.xCreate = n
30f90 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
30fa0 65 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28 0d  ethods.xCreate(.
30fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30fc0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 72 65 61      module.xCrea
30fd0 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
30fe0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
30ff0 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20  dule.xConnect = 
31000 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31010 4d 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74  Methods.xConnect
31020 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31030 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43         module.xC
31040 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20  onnect);....    
31050 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31060 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e  veModule.xBestIn
31070 64 65 78 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  dex = new Unsafe
31080 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42  NativeMethods.xB
31090 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20  estIndex(..     
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
310b0 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
310c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
310d0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
310e0 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d  le.xDisconnect =
310f0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
31100 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e  eMethods.xDiscon
31110 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
31120 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
31130 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d  e.xDisconnect);.
31140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31150 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31160 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20 55  xDestroy = new U
31170 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
31180 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20 20  ds.xDestroy(..  
31190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311a0 20 20 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f    module.xDestro
311b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
311c0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
311d0 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65 77 20  ule.xOpen = new 
311e0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
311f0 6f 64 73 2e 78 4f 70 65 6e 28 0d 0a 20 20 20 20  ods.xOpen(..    
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 29 3b 0d 0a  module.xOpen);..
31220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31230 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
31240 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55 6e 73 61  Close = new Unsa
31250 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
31260 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20  xClose(..       
31270 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
31280 75 6c 65 2e 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a  ule.xClose);....
31290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312a0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  nativeModule.xFi
312b0 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61 66  lter = new Unsaf
312c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
312d0 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20  Filter(..       
312e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
312f0 75 6c 65 2e 78 46 69 6c 74 65 72 29 3b 0d 0a 0d  ule.xFilter);...
31300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31310 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e   nativeModule.xN
31320 65 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ext = new Unsafe
31330 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e  NativeMethods.xN
31340 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ext(..          
31350 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
31360 2e 78 4e 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  .xNext);....    
31370 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31380 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20  veModule.xEof = 
31390 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
313a0 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 6d 6f 64  Methods.xEof(mod
313b0 75 6c 65 2e 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20  ule.xEof);....  
313c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
313d0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
313e0 6d 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  mn = new UnsafeN
313f0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
31400 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  lumn(..         
31410 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
31420 65 2e 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20  e.xColumn);.... 
31430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
31440 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77  ativeModule.xRow
31450 49 64 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  Id = new UnsafeN
31460 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f  ativeMethods.xRo
31470 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  wId(..          
31480 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
31490 2e 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20  .xRowId);....   
314a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
314b0 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74  iveModule.xUpdat
314c0 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
314d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 55 70 64  tiveMethods.xUpd
314e0 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
314f0 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
31500 2e 78 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20  .xUpdate);....  
31510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
31520 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69  tiveModule.xBegi
31530 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
31540 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 67  tiveMethods.xBeg
31550 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in(..           
31560 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
31570 78 42 65 67 69 6e 29 3b 0d 0a 0d 0a 20 20 20 20  xBegin);....    
31580 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31590 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d  veModule.xSync =
315a0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
315b0 65 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 0d  eMethods.xSync(.
315c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
315d0 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53 79 6e       module.xSyn
315e0 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  c);....         
315f0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31600 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e 65  ule.xCommit = ne
31610 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
31620 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a  thods.xCommit(..
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31640 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d      module.xComm
31650 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  it);....        
31660 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
31670 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d  dule.xRollback =
31680 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
31690 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61  eMethods.xRollba
316a0 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
316b0 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
316c0 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  xRollback);.... 
316d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
316e0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
316f0 64 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20  dFunction = new 
31700 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
31710 6f 64 73 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ods.xFindFunctio
31720 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
31730 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
31740 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a  FindFunction);..
31750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31760 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
31770 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73  Rename = new Uns
31780 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
31790 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20  .xRename(..     
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
317b0 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 29 3b 0d  odule.xRename);.
317c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
317d0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
317e0 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 6e 65 77  xSavepoint = new
317f0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
31800 68 6f 64 73 2e 78 53 61 76 65 70 6f 69 6e 74 28  hods.xSavepoint(
31810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31820 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53 61        module.xSa
31830 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20  vepoint);....   
31840 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
31850 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61  iveModule.xRelea
31860 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  se = new UnsafeN
31870 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65  ativeMethods.xRe
31880 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20  lease(..        
31890 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
318a0 6c 65 2e 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d  le.xRelease);...
318b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
318c0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
318d0 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20  ollbackTo = new 
318e0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
318f0 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28  ods.xRollbackTo(
31900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31910 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 6f        module.xRo
31920 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20 20 20  llbackTo);..    
31930 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
31940 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
31950 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31960 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31970 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
31980 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
31990 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 72 65 61  iveMethods.xCrea
319a0 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
319b0 20 20 20 20 20 20 20 20 20 78 43 72 65 61 74 65           xCreate
319c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
319d0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
319e0 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20 6e 65  le.xConnect = ne
319f0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
31a00 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74 28 0d  thods.xConnect(.
31a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31a20 20 20 20 20 20 78 43 6f 6e 6e 65 63 74 29 3b 0d       xConnect);.
31a30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31a40 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31a50 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65 77  xBestIndex = new
31a60 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
31a70 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78 28  hods.xBestIndex(
31a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31a90 20 20 20 20 20 20 78 42 65 73 74 49 6e 64 65 78        xBestIndex
31aa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31ab0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
31ac0 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d  le.xDisconnect =
31ad0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
31ae0 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e  eMethods.xDiscon
31af0 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
31b00 20 20 20 20 20 20 20 20 20 20 20 78 44 69 73 63             xDisc
31b10 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20  onnect);....    
31b20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31b30 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f  veModule.xDestro
31b40 79 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  y = new UnsafeNa
31b50 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 65 73  tiveMethods.xDes
31b60 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20  troy(..         
31b70 20 20 20 20 20 20 20 20 20 20 20 78 44 65 73 74             xDest
31b80 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  roy);....       
31b90 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
31ba0 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65  odule.xOpen = ne
31bb0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
31bc0 74 68 6f 64 73 2e 78 4f 70 65 6e 28 78 4f 70 65  thods.xOpen(xOpe
31bd0 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
31be0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
31bf0 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55  e.xClose = new U
31c00 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
31c10 64 73 2e 78 43 6c 6f 73 65 28 78 43 6c 6f 73 65  ds.xClose(xClose
31c20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31c30 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
31c40 6c 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65 77  le.xFilter = new
31c50 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
31c60 68 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a 20  hods.xFilter(.. 
31c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c80 20 20 20 78 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a     xFilter);....
31c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ca0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65  nativeModule.xNe
31cb0 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  xt = new UnsafeN
31cc0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e 65  ativeMethods.xNe
31cd0 78 74 28 78 4e 65 78 74 29 3b 0d 0a 20 20 20 20  xt(xNext);..    
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31cf0 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20  veModule.xEof = 
31d00 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31d10 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 78 45 6f  Methods.xEof(xEo
31d20 66 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  f);....         
31d30 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31d40 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65  ule.xColumn = ne
31d50 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
31d60 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a  thods.xColumn(..
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d80 20 20 20 20 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d      xColumn);...
31d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31da0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
31db0 6f 77 49 64 20 3d 20 6e 65 77 20 55 6e 73 61 66  owId = new Unsaf
31dc0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
31dd0 52 6f 77 49 64 28 78 52 6f 77 49 64 29 3b 0d 0a  RowId(xRowId);..
31de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31df0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
31e00 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55 6e 73  Update = new Uns
31e10 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
31e20 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20  .xUpdate(..     
31e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
31e40 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  Update);....    
31e50 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31e60 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20  veModule.xBegin 
31e70 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
31e80 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 67 69 6e  veMethods.xBegin
31e90 28 78 42 65 67 69 6e 29 3b 0d 0a 20 20 20 20 20  (xBegin);..     
31ea0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
31eb0 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d 20  eModule.xSync = 
31ec0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31ed0 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 78 53  Methods.xSync(xS
31ee0 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ync);....       
31ef0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
31f00 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20  odule.xCommit = 
31f10 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31f20 4d 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28  Methods.xCommit(
31f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31f40 20 20 20 20 20 20 78 43 6f 6d 6d 69 74 29 3b 0d        xCommit);.
31f50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31f60 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31f70 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20  xRollback = new 
31f80 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
31f90 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a  ods.xRollback(..
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fb0 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d      xRollback);.
31fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31fd0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31fe0 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20  xFindFunction = 
31ff0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
32000 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64 46 75 6e  Methods.xFindFun
32010 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
32020 20 20 20 20 20 20 20 20 20 20 20 20 78 46 69 6e              xFin
32030 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20  dFunction);.... 
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
32050 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e  ativeModule.xRen
32060 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ame = new Unsafe
32070 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52  NativeMethods.xR
32080 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  ename(..        
32090 20 20 20 20 20 20 20 20 20 20 20 20 78 52 65 6e              xRen
320a0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
320b0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
320c0 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74  odule.xSavepoint
320d0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
320e0 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61 76 65  iveMethods.xSave
320f0 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  point(..        
32100 20 20 20 20 20 20 20 20 20 20 20 20 78 53 61 76              xSav
32110 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  epoint);....    
32120 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
32130 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73  veModule.xReleas
32140 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
32150 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6c  tiveMethods.xRel
32160 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  ease(..         
32170 20 20 20 20 20 20 20 20 20 20 20 78 52 65 6c 65             xRele
32180 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ase);....       
32190 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
321a0 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54  odule.xRollbackT
321b0 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  o = new UnsafeNa
321c0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c  tiveMethods.xRol
321d0 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
321e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 52                xR
321f0 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20 20  ollbackTo);..   
32200 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32210 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32220 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a   nativeModule;..
32230 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32240 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
32250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32290 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
322a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
322b0 2f 2f 20 43 72 65 61 74 65 73 20 61 20 63 6f 70  // Creates a cop
322c0 79 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69  y of the specifi
322d0 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
322e0 3c 73 65 65 20 63 72 65 66 3d 22 55 6e 73 61 66  <see cref="Unsaf
322f0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
32300 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22 20 2f  qlite3_module" /
32310 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
32320 65 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e,..        /// 
32330 75 73 69 6e 67 20 64 65 66 61 75 6c 74 20 69 6d  using default im
32340 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f  plementations fo
32350 72 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20  r the contained 
32360 64 65 6c 65 67 61 74 65 73 20 77 68 65 6e 0d 0a  delegates when..
32370 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 65 63 65          /// nece
32380 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  ssary...        
32390 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
323a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
323b0 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
323c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
323d0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 55 6e  he <see cref="Un
323e0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
323f0 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  s.sqlite3_module
32400 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20  " /> object..   
32410 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63       /// instanc
32420 65 20 74 6f 20 63 6f 70 79 2e 0d 0a 20 20 20 20  e to copy...    
32430 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
32440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
32450 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
32460 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73 65   /// The new <se
32470 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65 4e 61  e cref="UnsafeNa
32480 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
32490 74 65 33 5f 6d 6f 64 75 6c 65 22 20 2f 3e 20 6f  te3_module" /> o
324a0 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f  bject..        /
324b0 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  // instance...  
324c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
324d0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
324e0 69 76 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69  ivate UnsafeNati
324f0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
32500 33 5f 6d 6f 64 75 6c 65 20 43 6f 70 79 4e 61 74  3_module CopyNat
32510 69 76 65 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20  iveModule(..    
32520 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
32530 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
32540 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 6f 64 75 6c  te3_module modul
32550 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
32560 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
32570 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
32580 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
32590 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6e 65 77 4d  ite3_module newM
325a0 6f 64 75 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20  odule =..       
325b0 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73           new Uns
325c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
325d0 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 28  .sqlite3_module(
325e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
325f0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 69 56 65 72    newModule.iVer
32600 73 69 6f 6e 20 3d 20 6d 6f 64 75 6c 65 2e 69 56  sion = module.iV
32610 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20  ersion;....     
32620 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
32630 2e 78 43 72 65 61 74 65 20 3d 20 6e 65 77 20 55  .xCreate = new U
32640 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32650 64 73 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20  ds.xCreate(..   
32660 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f               (mo
32670 64 75 6c 65 2e 78 43 72 65 61 74 65 20 21 3d 20  dule.xCreate != 
32680 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
32690 43 72 65 61 74 65 20 3a 20 78 43 72 65 61 74 65  Create : xCreate
326a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
326b0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 6f 6e    newModule.xCon
326c0 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  nect = new Unsaf
326d0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
326e0 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  Connect(..      
326f0 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
32700 65 2e 78 43 6f 6e 6e 65 63 74 20 21 3d 20 6e 75  e.xConnect != nu
32710 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43 6f  ll) ? module.xCo
32720 6e 6e 65 63 74 20 3a 20 78 43 6f 6e 6e 65 63 74  nnect : xConnect
32730 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32740 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 42 65 73    newModule.xBes
32750 74 49 6e 64 65 78 20 3d 20 6e 65 77 20 55 6e 73  tIndex = new Uns
32760 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
32770 2e 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20  .xBestIndex(..  
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
32790 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
327a0 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
327b0 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 20 3a 20  le.xBestIndex : 
327c0 78 42 65 73 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a  xBestIndex);....
327d0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
327e0 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63  odule.xDisconnec
327f0 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
32800 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 69 73  tiveMethods.xDis
32810 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  connect(..      
32820 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
32830 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 21 3d  e.xDisconnect !=
32840 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
32850 78 44 69 73 63 6f 6e 6e 65 63 74 20 3a 0d 0a 20  xDisconnect :.. 
32860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
32870 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a  Disconnect);....
32880 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
32890 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20 3d  odule.xDestroy =
328a0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
328b0 65 4d 65 74 68 6f 64 73 2e 78 44 65 73 74 72 6f  eMethods.xDestro
328c0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
328d0 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 44 65 73      (module.xDes
328e0 74 72 6f 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  troy != null) ? 
328f0 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20  module.xDestroy 
32900 3a 20 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a  : xDestroy);....
32910 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
32920 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65  odule.xOpen = ne
32930 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
32940 74 68 6f 64 73 2e 78 4f 70 65 6e 28 0d 0a 20 20  thods.xOpen(..  
32950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
32960 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 21 3d 20 6e  odule.xOpen != n
32970 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 4f  ull) ? module.xO
32980 70 65 6e 20 3a 20 78 4f 70 65 6e 29 3b 0d 0a 0d  pen : xOpen);...
32990 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
329a0 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3d 20  Module.xClose = 
329b0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
329c0 4d 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65 28 0d  Methods.xClose(.
329d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
329e0 20 28 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20   (module.xClose 
329f0 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
32a00 65 2e 78 43 6c 6f 73 65 20 3a 20 78 43 6c 6f 73  e.xClose : xClos
32a10 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
32a20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 46 69     newModule.xFi
32a30 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61 66  lter = new Unsaf
32a40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
32a50 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20  Filter(..       
32a60 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
32a70 2e 78 46 69 6c 74 65 72 20 21 3d 20 6e 75 6c 6c  .xFilter != null
32a80 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74  ) ? module.xFilt
32a90 65 72 20 3a 20 78 46 69 6c 74 65 72 29 3b 0d 0a  er : xFilter);..
32aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
32ab0 77 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 3d 20  wModule.xNext = 
32ac0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
32ad0 4d 65 74 68 6f 64 73 2e 78 4e 65 78 74 28 0d 0a  Methods.xNext(..
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32af0 28 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 21 3d  (module.xNext !=
32b00 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
32b10 78 4e 65 78 74 20 3a 20 78 4e 65 78 74 29 3b 0d  xNext : xNext);.
32b20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ...            n
32b30 65 77 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20  ewModule.xEof = 
32b40 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
32b50 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 0d 0a 20  Methods.xEof(.. 
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
32b70 6d 6f 64 75 6c 65 2e 78 45 6f 66 20 21 3d 20 6e  module.xEof != n
32b80 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 45  ull) ? module.xE
32b90 6f 66 20 3a 20 78 45 6f 66 29 3b 0d 0a 0d 0a 20  of : xEof);.... 
32ba0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f             newMo
32bb0 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e  dule.xColumn = n
32bc0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32bd0 65 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d  ethods.xColumn(.
32be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32bf0 20 28 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e   (module.xColumn
32c00 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
32c10 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3a 20 78 43 6f  le.xColumn : xCo
32c20 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lumn);....      
32c30 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e        newModule.
32c40 78 52 6f 77 49 64 20 3d 20 6e 65 77 20 55 6e 73  xRowId = new Uns
32c50 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
32c60 2e 78 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20  .xRowId(..      
32c70 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
32c80 65 2e 78 52 6f 77 49 64 20 21 3d 20 6e 75 6c 6c  e.xRowId != null
32c90 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 6f 77 49  ) ? module.xRowI
32ca0 64 20 3a 20 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a  d : xRowId);....
32cb0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
32cc0 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 20 3d 20  odule.xUpdate = 
32cd0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
32ce0 4d 65 74 68 6f 64 73 2e 78 55 70 64 61 74 65 28  Methods.xUpdate(
32cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32d00 20 20 28 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74    (module.xUpdat
32d10 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  e != null) ? mod
32d20 75 6c 65 2e 78 55 70 64 61 74 65 20 3a 20 78 55  ule.xUpdate : xU
32d30 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  pdate);....     
32d40 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
32d50 2e 78 42 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e  .xBegin = new Un
32d60 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
32d70 73 2e 78 42 65 67 69 6e 28 0d 0a 20 20 20 20 20  s.xBegin(..     
32d80 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
32d90 6c 65 2e 78 42 65 67 69 6e 20 21 3d 20 6e 75 6c  le.xBegin != nul
32da0 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 42 65 67  l) ? module.xBeg
32db0 69 6e 20 3a 20 78 42 65 67 69 6e 29 3b 0d 0a 0d  in : xBegin);...
32dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
32dd0 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d 20 6e  Module.xSync = n
32de0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32df0 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 0d 0a 20  ethods.xSync(.. 
32e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
32e10 6d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 21 3d 20  module.xSync != 
32e20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
32e30 53 79 6e 63 20 3a 20 78 53 79 6e 63 29 3b 0d 0a  Sync : xSync);..
32e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
32e50 77 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20  wModule.xCommit 
32e60 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
32e70 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69  veMethods.xCommi
32e80 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
32e90 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43 6f 6d      (module.xCom
32ea0 6d 69 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  mit != null) ? m
32eb0 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3a 20  odule.xCommit : 
32ec0 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20  xCommit);....   
32ed0 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
32ee0 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e  le.xRollback = n
32ef0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32f00 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b  ethods.xRollback
32f10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32f20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c     (module.xRoll
32f30 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  back != null) ? 
32f40 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  module.xRollback
32f50 20 3a 20 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a   : xRollback);..
32f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
32f70 77 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  wModule.xFindFun
32f80 63 74 69 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61  ction = new Unsa
32f90 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
32fa0 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  xFindFunction(..
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fc0 28 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  (module.xFindFun
32fd0 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f  ction != null) ?
32fe0 20 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e   module.xFindFun
32ff0 63 74 69 6f 6e 20 3a 0d 0a 20 20 20 20 20 20 20  ction :..       
33000 20 20 20 20 20 20 20 20 20 78 46 69 6e 64 46 75           xFindFu
33010 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  nction);....    
33020 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
33030 65 2e 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20  e.xRename = new 
33040 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
33050 6f 64 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20  ods.xRename(..  
33060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
33070 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 21 3d  odule.xRename !=
33080 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
33090 78 52 65 6e 61 6d 65 20 3a 20 78 52 65 6e 61 6d  xRename : xRenam
330a0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
330b0 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 53 61     newModule.xSa
330c0 76 65 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e  vepoint = new Un
330d0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
330e0 73 2e 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20  s.xSavepoint(.. 
330f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
33100 6d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  module.xSavepoin
33110 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  t != null) ? mod
33120 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 20 3a  ule.xSavepoint :
33130 20 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d   xSavepoint);...
33140 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
33150 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 20  Module.xRelease 
33160 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
33170 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6c 65 61  veMethods.xRelea
33180 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
33190 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52 65       (module.xRe
331a0 6c 65 61 73 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  lease != null) ?
331b0 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65   module.xRelease
331c0 20 3a 20 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d   : xRelease);...
331d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
331e0 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
331f0 54 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  To = new UnsafeN
33200 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f  ativeMethods.xRo
33210 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20  llbackTo(..     
33220 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
33230 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 21  le.xRollbackTo !
33240 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65  = null) ? module
33250 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3a 0d 0a  .xRollbackTo :..
33260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33270 78 52 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 0d  xRollbackTo);...
33280 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
33290 75 72 6e 20 6e 65 77 4d 6f 64 75 6c 65 3b 0d 0a  urn newModule;..
332a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
332b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
332c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
33300 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
33310 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
33320 2f 2f 20 43 61 6c 6c 73 20 6f 6e 65 20 6f 66 20  // Calls one of 
33330 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
33340 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
33350 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20   methods...     
33360 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
33370 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
33380 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 72 65 61  param name="crea
33390 74 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  te">..        //
333a0 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 63 61  / Non-zero to ca
333b0 6c 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ll the <see cref
333c0 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
333d0 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f  Module.Create" /
333e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
333f0 65 74 68 6f 64 3b 20 6f 74 68 65 72 77 69 73 65  ethod; otherwise
33400 2c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  , the <see cref=
33410 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
33420 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f  odule.Connect" /
33430 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
33440 65 74 68 6f 64 20 77 69 6c 6c 20 62 65 20 63 61  ethod will be ca
33450 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lled...        /
33460 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
33470 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
33480 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20  name="pDb">..   
33490 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
334a0 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
334b0 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d  nection handle..
334c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
334d0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
334e0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
334f0 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  pAux">..        
33500 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c  /// The original
33510 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
33520 76 61 6c 75 65 20 74 68 61 74 20 77 61 73 20 70  value that was p
33530 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a  rovided to the..
33540 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
33550 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
33560 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 63 72 65  e(), sqlite3_cre
33570 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 20  ate_module_v2() 
33580 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
33590 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64  sqlite3_create_d
335a0 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65  isposable_module
335b0 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20  () functions... 
335c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
335d0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
335e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
335f0 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gc">..        //
33600 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
33610 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74  arguments from t
33620 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41  he CREATE VIRTUA
33630 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
33640 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
33650 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
33660 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
33670 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20  e="argv">..     
33680 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79     /// The array
33690 20 6f 66 20 73 74 72 69 6e 67 20 61 72 67 75 6d   of string argum
336a0 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52  ents from the CR
336b0 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
336c0 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  LE..        /// 
336d0 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
336e0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
336f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
33700 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
33710 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
33720 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
33730 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73  is parameter mus
33740 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f  t be modified to
33750 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e 65   point to the ne
33760 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  wly..        ///
33770 20 63 72 65 61 74 65 64 20 6e 61 74 69 76 65 20   created native 
33780 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
33790 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
337a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
337b0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
337c0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
337d0 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20  pError">..      
337e0 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75    /// Upon failu
337f0 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  re, this paramet
33800 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
33810 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ied to point to 
33820 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  the error..     
33830 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c 20     /// message, 
33840 77 69 74 68 20 74 68 65 20 75 6e 64 65 72 6c 79  with the underly
33850 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76 69 6e  ing memory havin
33860 67 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20  g been obtained 
33870 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20  from the..      
33880 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61    /// sqlite3_ma
33890 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e  lloc() function.
338a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
338b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
338c0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
338d0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
338e0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
338f0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
33900 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
33910 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
33920 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  te SQLiteErrorCo
33930 64 65 20 43 72 65 61 74 65 4f 72 43 6f 6e 6e 65  de CreateOrConne
33940 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
33950 20 62 6f 6f 6c 20 63 72 65 61 74 65 2c 0d 0a 20   bool create,.. 
33960 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
33970 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20  r pDb,..        
33980 20 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c      IntPtr pAux,
33990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
339a0 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20  t argc,..       
339b0 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76       IntPtr argv
339c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
339d0 65 66 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c  ef IntPtr pVtab,
339e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
339f0 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d  f IntPtr pError.
33a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
33a10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33a20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
33a30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33a40 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
33a50 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 53 51 4c  g fileName = SQL
33a60 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67  iteString.String
33a70 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 0d  FromUtf8IntPtr(.
33a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33a90 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
33aa0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
33ab0 5f 64 62 5f 66 69 6c 65 6e 61 6d 65 28 70 44 62  _db_filename(pDb
33ac0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 3b  , IntPtr.Zero));
33ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33ae0 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
33af0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
33b00 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c  ection = new SQL
33b10 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a  iteConnection(..
33b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b30 20 20 20 20 20 20 20 20 70 44 62 2c 20 66 69 6c          pDb, fil
33b40 65 4e 61 6d 65 2c 20 66 61 6c 73 65 29 29 0d 0a  eName, false))..
33b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33b70 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
33b80 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20  tualTable table 
33b90 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
33ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
33bb0 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c  ing error = null
33bc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33bd0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 72           if ((cr
33be0 65 61 74 65 20 26 26 20 43 72 65 61 74 65 28 63  eate && Create(c
33bf0 6f 6e 6e 65 63 74 69 6f 6e 2c 20 70 41 75 78 2c  onnection, pAux,
33c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
33c20 4c 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e  LiteString.Strin
33c30 67 41 72 72 61 79 46 72 6f 6d 55 74 66 38 53 69  gArrayFromUtf8Si
33c40 7a 65 41 6e 64 49 6e 74 50 74 72 28 61 72 67 63  zeAndIntPtr(argc
33c50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
33c70 72 67 76 29 2c 20 72 65 66 20 74 61 62 6c 65 2c  rgv), ref table,
33c80 20 72 65 66 20 65 72 72 6f 72 29 20 3d 3d 20 53   ref error) == S
33c90 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
33ca0 6b 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  k) ||..         
33cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
33cc0 21 63 72 65 61 74 65 20 26 26 20 43 6f 6e 6e 65  !create && Conne
33cd0 63 74 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 70  ct(connection, p
33ce0 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Aux,..          
33cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d00 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53    SQLiteString.S
33d10 74 72 69 6e 67 41 72 72 61 79 46 72 6f 6d 55 74  tringArrayFromUt
33d20 66 38 53 69 7a 65 41 6e 64 49 6e 74 50 74 72 28  f8SizeAndIntPtr(
33d30 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20  argc,..         
33d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d50 20 20 20 61 72 67 76 29 2c 20 72 65 66 20 74 61     argv), ref ta
33d60 62 6c 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20  ble, ref error) 
33d70 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
33d80 64 65 2e 4f 6b 29 29 0d 0a 20 20 20 20 20 20 20  de.Ok))..       
33d90 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33db0 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c          if (tabl
33dc0 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
33dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33de0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e00 20 20 20 70 56 74 61 62 20 3d 20 54 61 62 6c 65     pVtab = Table
33e10 54 6f 49 6e 74 50 74 72 28 74 61 62 6c 65 29 3b  ToIntPtr(table);
33e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
33e40 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
33e50 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20  Code.Ok;..      
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
33e80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
33e90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
33ea0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ec0 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72            pError
33ed0 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
33ee0 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
33ef0 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ring(..         
33f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f10 20 20 20 20 20 20 20 22 6e 6f 20 74 61 62 6c 65         "no table
33f20 20 77 61 73 20 63 72 65 61 74 65 64 22 29 3b 0d   was created");.
33f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33f40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
33f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
33f70 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
33f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72              pErr
33fb0 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  or = SQLiteStrin
33fc0 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
33fd0 53 74 72 69 6e 67 28 65 72 72 6f 72 29 3b 0d 0a  String(error);..
33fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ff0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
34000 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
34010 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
34020 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
34030 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
34040 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
34050 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
34060 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34070 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51       pError = SQ
34080 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
34090 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
340a0 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
340b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
340c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
340d0 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
340e0 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
340f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34100 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
34110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34140 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34150 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
34160 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
34170 61 6c 6c 73 20 6f 6e 65 20 6f 66 20 74 68 65 20  alls one of the 
34180 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 69  virtual table fi
34190 6e 61 6c 69 7a 61 74 69 6f 6e 20 6d 65 74 68 6f  nalization metho
341a0 64 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ds...        ///
341b0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
341c0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
341d0 6e 61 6d 65 3d 22 64 65 73 74 72 6f 79 22 3e 0d  name="destroy">.
341e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
341f0 2d 7a 65 72 6f 20 74 6f 20 63 61 6c 6c 20 74 68  -zero to call th
34200 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
34210 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
34220 65 2e 44 65 73 74 72 6f 79 22 20 2f 3e 0d 0a 20  e.Destroy" />.. 
34230 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
34240 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68  d; otherwise, th
34250 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
34260 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
34270 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 44  eManagedModule.D
34280 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  isconnect" /> me
34290 74 68 6f 64 20 77 69 6c 6c 20 62 65 0d 0a 20 20  thod will be..  
342a0 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64        /// called
342b0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
342c0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
342d0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
342e0 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
342f0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
34300 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
34310 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
34320 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
34330 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
34340 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
34350 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
34360 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
34370 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
34380 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
34390 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
343a0 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
343b0 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  te SQLiteErrorCo
343c0 64 65 20 44 65 73 74 72 6f 79 4f 72 44 69 73 63  de DestroyOrDisc
343d0 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
343e0 20 20 20 20 20 62 6f 6f 6c 20 64 65 73 74 72 6f       bool destro
343f0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
34400 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
34410 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
34420 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34430 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
34440 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34450 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
34460 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
34470 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50   = TableFromIntP
34480 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  tr(pVtab);....  
34490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
344a0 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29   (table != null)
344b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
344c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
344d0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 64 65           if ((de
344e0 73 74 72 6f 79 20 26 26 20 28 44 65 73 74 72 6f  stroy && (Destro
344f0 79 28 74 61 62 6c 65 29 20 3d 3d 20 53 51 4c 69  y(table) == SQLi
34500 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29  teErrorCode.Ok))
34510 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
34520 20 20 20 20 20 20 20 20 20 20 20 20 20 28 21 64               (!d
34530 65 73 74 72 6f 79 20 26 26 20 28 44 69 73 63 6f  estroy && (Disco
34540 6e 6e 65 63 74 28 74 61 62 6c 65 29 20 3d 3d 20  nnect(table) == 
34550 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
34560 4f 6b 29 29 29 0d 0a 20 20 20 20 20 20 20 20 20  Ok)))..         
34570 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34590 20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 73        if (tables
345a0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
345b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345c0 20 20 20 20 20 20 20 74 61 62 6c 65 73 2e 52 65         tables.Re
345d0 6d 6f 76 65 28 70 56 74 61 62 29 3b 0d 0a 0d 0a  move(pVtab);....
345e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
34600 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
34610 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
34620 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
34630 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
34640 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
34650 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
34660 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20  Exception e) /* 
34670 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68  NOTE: Must catch
34680 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20   ALL. */..      
34690 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
346a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
346b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
346c0 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f  NOTE: At this po
346d0 69 6e 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  int, there is no
346e0 20 77 61 79 20 74 6f 20 72 65 70 6f 72 74 20 74   way to report t
346f0 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  he error..      
34700 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
34710 20 20 20 63 6f 6e 64 69 74 69 6f 6e 20 62 61 63     condition bac
34720 6b 20 74 6f 20 74 68 65 20 63 61 6c 6c 65 72 3b  k to the caller;
34730 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use 
34740 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
34750 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 6f       //       lo
34760 67 67 69 6e 67 20 66 61 63 69 6c 69 74 79 20 69  gging facility i
34770 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20  nstead...       
34780 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
34790 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
347a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
347b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
347c0 20 20 20 20 20 20 20 20 20 69 66 20 28 4c 6f 67           if (Log
347d0 45 78 63 65 70 74 69 6f 6e 73 29 0d 0a 20 20 20  Exceptions)..   
347e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74              /* t
34810 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
34820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34830 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
34840 73 73 61 67 65 28 53 51 4c 69 74 65 42 61 73 65  ssage(SQLiteBase
34850 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e  .COR_E_EXCEPTION
34860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
34880 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c  tring.Format(Cul
34890 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
348a0 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
348b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348c0 20 20 20 20 20 20 22 43 61 75 67 68 74 20 65 78        "Caught ex
348d0 63 65 70 74 69 6f 6e 20 69 6e 20 5c 22 7b 30 7d  ception in \"{0}
348e0 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 31 7d 22 2c  \" method: {1}",
348f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
34910 73 74 72 6f 79 20 3f 20 22 78 44 65 73 74 72 6f  stroy ? "xDestro
34920 79 22 20 3a 20 22 78 44 69 73 63 6f 6e 6e 65 63  y" : "xDisconnec
34930 74 22 2c 20 65 29 29 3b 0d 0a 20 20 20 20 20 20  t", e));..      
34940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
34950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34960 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
34970 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
34980 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349a0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
349b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
349c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
349d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
349e0 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
349f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34a00 20 20 20 20 20 20 20 20 46 72 65 65 54 61 62 6c          FreeTabl
34a10 65 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20  e(pVtab);..     
34a20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34a30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
34a40 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
34a50 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
34a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
34a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
34ac0 72 65 67 69 6f 6e 20 53 74 61 74 69 63 20 45 72  region Static Er
34ad0 72 6f 72 20 48 61 6e 64 6c 69 6e 67 20 48 65 6c  ror Handling Hel
34ae0 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
34af0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
34b00 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
34b10 41 72 72 61 6e 67 65 73 20 66 6f 72 20 74 68 65  Arranges for the
34b20 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f 72   specified error
34b30 20 6d 65 73 73 61 67 65 20 74 6f 20 62 65 20 70   message to be p
34b40 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 0d 0a  laced into the..
34b50 20 20 20 20 20 20 20 20 2f 2f 2f 20 7a 45 72 72          /// zErr
34b60 4d 73 67 20 66 69 65 6c 64 20 6f 66 20 61 20 73  Msg field of a s
34b70 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
34b80 76 65 64 20 73 74 72 75 63 74 75 72 65 2c 20 66  ved structure, f
34b90 72 65 65 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  reeing the..    
34ba0 20 20 20 20 2f 2f 2f 20 65 78 69 73 74 69 6e 67      /// existing
34bb0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2c 20   error message, 
34bc0 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20  if any...       
34bd0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
34be0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
34bf0 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
34c00 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
34c10 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
34c20 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
34c30 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
34c40 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20  to be used...   
34c50 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
34c60 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
34c70 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
34c80 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
34c90 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
34ca0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
34cb0 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
34cc0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
34cd0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
34ce0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
34cf0 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72  aram name="logEr
34d00 72 6f 72 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  rors">..        
34d10 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
34d20 74 68 69 73 20 65 72 72 6f 72 20 6d 65 73 73 61  this error messa
34d30 67 65 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62  ge should also b
34d40 65 20 6c 6f 67 67 65 64 20 75 73 69 6e 67 20 74  e logged using t
34d50 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
34d60 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
34d70 65 4c 6f 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d  eLog" /> class..
34d80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
34d90 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
34da0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
34db0 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  error">..       
34dc0 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20 6d   /// The error m
34dd0 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20 20  essage...       
34de0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
34df0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
34e00 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
34e10 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20  / Non-zero upon 
34e20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  success...      
34e30 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
34e40 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
34e50 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 65  e static bool Se
34e60 74 54 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20 20  tTableError(..  
34e70 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
34e80 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a  Module module,..
34e90 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
34ea0 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
34eb0 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 67 45         bool logE
34ec0 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20 20 20  rrors,..        
34ed0 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72      string error
34ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
34ef0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
34f00 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
34f10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
34f20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34f30 6c 6f 67 45 72 72 6f 72 73 29 0d 0a 20 20 20 20  logErrors)..    
34f40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f60 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
34f70 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72  Message(SQLiteEr
34f80 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 2c 0d 0a  rorCode.Error,..
34f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fa0 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
34fb0 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
34fc0 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
34fd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34fe0 20 20 20 20 20 20 20 20 20 20 20 22 56 69 72 74             "Virt
34ff0 75 61 6c 20 74 61 62 6c 65 20 65 72 72 6f 72 3a  ual table error:
35000 20 7b 30 7d 22 2c 20 65 72 72 6f 72 29 29 3b 20   {0}", error)); 
35010 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
35020 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
35030 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35040 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
35050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
35060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35070 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
35080 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
35090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
350a0 20 28 70 56 74 61 62 20 3d 3d 20 49 6e 74 50 74   (pVtab == IntPt
350b0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
350c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
350d0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
350e0 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
350f0 20 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 20 2b   = IntPtr.Size +
35100 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 20   sizeof(int);.. 
35110 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
35120 72 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74  r pError = SQLit
35130 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74  eMarshal.ReadInt
35140 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65  Ptr(pVtab, offse
35150 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
35160 20 20 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d     if (pError !=
35170 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
35180 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
35190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
351a0 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
351b0 70 45 72 72 6f 72 29 3b 20 70 45 72 72 6f 72 20  pError); pError 
351c0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
351d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351e0 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72  SQLiteMarshal.Wr
351f0 69 74 65 49 6e 74 50 74 72 28 70 56 74 61 62 2c  iteIntPtr(pVtab,
35200 20 6f 66 66 73 65 74 2c 20 70 45 72 72 6f 72 29   offset, pError)
35210 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
35220 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35230 69 66 20 28 65 72 72 6f 72 20 3d 3d 20 6e 75 6c  if (error == nul
35240 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
35250 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
35260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35270 62 6f 6f 6c 20 73 75 63 63 65 73 73 20 3d 20 66  bool success = f
35280 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
35290 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
352a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
352b0 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20           pError 
352c0 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
352d0 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
352e0 69 6e 67 28 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ing(error);..   
352f0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
35300 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65  iteMarshal.Write
35310 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66  IntPtr(pVtab, of
35320 66 73 65 74 2c 20 70 45 72 72 6f 72 29 3b 0d 0a  fset, pError);..
35330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35340 73 75 63 63 65 73 73 20 3d 20 74 72 75 65 3b 0d  success = true;.
35350 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
35360 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
35370 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
35380 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35390 20 20 20 20 69 66 20 28 21 73 75 63 63 65 73 73      if (!success
353a0 20 26 26 20 28 70 45 72 72 6f 72 20 21 3d 20 49   && (pError != I
353b0 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20  ntPtr.Zero))..  
353c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
353d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
353e0 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72       SQLiteMemor
353f0 79 2e 46 72 65 65 28 70 45 72 72 6f 72 29 3b 0d  y.Free(pError);.
35400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35410 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e       pError = In
35420 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
35430 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35440 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35450 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
35460 72 6e 20 73 75 63 63 65 73 73 3b 0d 0a 20 20 20  rn success;..   
35470 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35480 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
35490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
354d0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
354e0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
354f0 41 72 72 61 6e 67 65 73 20 66 6f 72 20 74 68 65  Arranges for the
35500 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f 72   specified error
35510 20 6d 65 73 73 61 67 65 20 74 6f 20 62 65 20 70   message to be p
35520 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 0d 0a  laced into the..
35530 20 20 20 20 20 20 20 20 2f 2f 2f 20 7a 45 72 72          /// zErr
35540 4d 73 67 20 66 69 65 6c 64 20 6f 66 20 61 20 73  Msg field of a s
35550 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
35560 76 65 64 20 73 74 72 75 63 74 75 72 65 2c 20 66  ved structure, f
35570 72 65 65 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  reeing the..    
35580 20 20 20 20 2f 2f 2f 20 65 78 69 73 74 69 6e 67      /// existing
35590 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2c 20   error message, 
355a0 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20  if any...       
355b0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
355c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
355d0 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
355e0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
355f0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
35600 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
35610 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
35620 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20  to be used...   
35630 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
35640 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
35650 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
35660 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
35670 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
35680 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
35690 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
356a0 73 74 61 6e 63 65 20 75 73 65 64 20 74 6f 0d 0a  stance used to..
356b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 6f 6b          /// look
356c0 75 70 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f  up the native po
356d0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
356e0 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
356f0 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
35700 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
35710 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
35720 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 6f 67  <param name="log
35730 45 72 72 6f 72 73 22 3e 0d 0a 20 20 20 20 20 20  Errors">..      
35740 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
35750 66 20 74 68 69 73 20 65 72 72 6f 72 20 6d 65 73  f this error mes
35760 73 61 67 65 20 73 68 6f 75 6c 64 20 61 6c 73 6f  sage should also
35770 20 62 65 20 6c 6f 67 67 65 64 20 75 73 69 6e 67   be logged using
35780 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
35790 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
357a0 69 74 65 4c 6f 67 22 20 2f 3e 20 63 6c 61 73 73  iteLog" /> class
357b0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
357c0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
357d0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
357e0 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20  ="error">..     
357f0 20 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72     /// The error
35800 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20   message...     
35810 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
35820 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
35830 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
35840 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f  /// Non-zero upo
35850 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20  n success...    
35860 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
35870 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  s>..        priv
35880 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
35890 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 0d 0a  SetTableError(..
358a0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
358b0 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c  teModule module,
358c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
358d0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
358e0 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
358f0 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 67 45 72 72       bool logErr
35900 6f 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ors,..          
35910 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a    string error..
35920 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
35930 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35940 20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 20        if (table 
35950 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
35960 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35970 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
35980 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
35990 74 61 62 20 3d 20 74 61 62 6c 65 2e 4e 61 74 69  tab = table.Nati
359a0 76 65 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  veHandle;....   
359b0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74           if (pVt
359c0 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ab == IntPtr.Zer
359d0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
359e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
359f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35a00 20 72 65 74 75 72 6e 20 53 65 74 54 61 62 6c 65   return SetTable
35a10 45 72 72 6f 72 28 6d 6f 64 75 6c 65 2c 20 70 56  Error(module, pV
35a20 74 61 62 2c 20 6c 6f 67 45 72 72 6f 72 73 2c 20  tab, logErrors, 
35a30 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
35a40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
35a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
35aa0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
35ab0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72 61          /// Arra
35ac0 6e 67 65 73 20 66 6f 72 20 74 68 65 20 73 70 65  nges for the spe
35ad0 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73  cified error mes
35ae0 73 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63 65  sage to be place
35af0 64 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20  d into the..    
35b00 20 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20      /// zErrMsg 
35b10 66 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69 74  field of a sqlit
35b20 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
35b30 73 74 72 75 63 74 75 72 65 2c 20 66 72 65 65 69  structure, freei
35b40 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ng the..        
35b50 2f 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72 72  /// existing err
35b60 6f 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61  or message, if a
35b70 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ny...        ///
35b80 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
35b90 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
35ba0 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
35bb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
35bc0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
35bd0 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65  eModule" /> obje
35be0 63 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62  ct instance to b
35bf0 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  e used...       
35c00 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
35c10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
35c20 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
35c30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
35c40 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
35c50 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
35c60 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
35c70 69 76 65 64 20 73 74 72 75 63 74 75 72 65 0d 0a  ived structure..
35c80 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64          /// used
35c90 20 74 6f 20 67 65 74 20 74 68 65 20 6e 61 74 69   to get the nati
35ca0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
35cb0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
35cc0 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20 20  erived..        
35cd0 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  /// structure...
35ce0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
35cf0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
35d00 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
35d10 6f 67 45 72 72 6f 72 73 22 3e 0d 0a 20 20 20 20  ogErrors">..    
35d20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
35d30 20 69 66 20 74 68 69 73 20 65 72 72 6f 72 20 6d   if this error m
35d40 65 73 73 61 67 65 20 73 68 6f 75 6c 64 20 61 6c  essage should al
35d50 73 6f 20 62 65 20 6c 6f 67 67 65 64 20 75 73 69  so be logged usi
35d60 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ng the..        
35d70 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
35d80 51 4c 69 74 65 4c 6f 67 22 20 2f 3e 20 63 6c 61  QLiteLog" /> cla
35d90 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
35da0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
35db0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
35dc0 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
35dd0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 72 72       /// The err
35de0 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20  or message...   
35df0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
35e00 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
35e10 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
35e20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75    /// Non-zero u
35e30 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20  pon success...  
35e40 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
35e50 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
35e60 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
35e70 6c 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72  l SetCursorError
35e80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
35e90 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
35ea0 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
35eb0 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c   IntPtr pCursor,
35ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
35ed0 6f 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20  ol logErrors,.. 
35ee0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
35ef0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
35f00 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
35f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
35f20 66 20 28 70 43 75 72 73 6f 72 20 3d 3d 20 49 6e  f (pCursor == In
35f30 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
35f40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
35f50 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
35f60 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
35f70 70 56 74 61 62 20 3d 20 54 61 62 6c 65 46 72 6f  pVtab = TableFro
35f80 6d 43 75 72 73 6f 72 28 6d 6f 64 75 6c 65 2c 20  mCursor(module, 
35f90 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20  pCursor);....   
35fa0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74           if (pVt
35fb0 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ab == IntPtr.Zer
35fc0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
35fd0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
35fe0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35ff0 20 72 65 74 75 72 6e 20 53 65 74 54 61 62 6c 65   return SetTable
36000 45 72 72 6f 72 28 6d 6f 64 75 6c 65 2c 20 70 56  Error(module, pV
36010 74 61 62 2c 20 6c 6f 67 45 72 72 6f 72 73 2c 20  tab, logErrors, 
36020 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
36030 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
36040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36080 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
36090 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
360a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72 61          /// Arra
360b0 6e 67 65 73 20 66 6f 72 20 74 68 65 20 73 70 65  nges for the spe
360c0 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73  cified error mes
360d0 73 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63 65  sage to be place
360e0 64 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20  d into the..    
360f0 20 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20      /// zErrMsg 
36100 66 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69 74  field of a sqlit
36110 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
36120 73 74 72 75 63 74 75 72 65 2c 20 66 72 65 65 69  structure, freei
36130 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ng the..        
36140 2f 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72 72  /// existing err
36150 6f 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61  or message, if a
36160 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ny...        ///
36170 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
36180 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
36190 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
361a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
361b0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
361c0 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65  eModule" /> obje
361d0 63 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62  ct instance to b
361e0 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  e used...       
361f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
36200 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
36210 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e  m name="cursor">
36220 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
36230 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
36240 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
36250 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ursor" /> object
36260 20 69 6e 73 74 61 6e 63 65 20 75 73 65 64 20 74   instance used t
36270 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  o..        /// l
36280 6f 6f 6b 75 70 20 74 68 65 20 6e 61 74 69 76 65  ookup the native
36290 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
362a0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
362b0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
362c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
362d0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
362e0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
362f0 6c 6f 67 45 72 72 6f 72 73 22 3e 0d 0a 20 20 20  logErrors">..   
36300 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
36310 6f 20 69 66 20 74 68 69 73 20 65 72 72 6f 72 20  o if this error 
36320 6d 65 73 73 61 67 65 20 73 68 6f 75 6c 64 20 61  message should a
36330 6c 73 6f 20 62 65 20 6c 6f 67 67 65 64 20 75 73  lso be logged us
36340 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
36350 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
36360 53 51 4c 69 74 65 4c 6f 67 22 20 2f 3e 20 63 6c  SQLiteLog" /> cl
36370 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ass...        //
36380 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
36390 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
363a0 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20  ame="error">..  
363b0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 72        /// The er
363c0 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  ror message...  
363d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
363e0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
363f0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
36400 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
36410 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20  upon success... 
36420 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
36430 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
36440 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
36450 6f 6c 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f  ol SetCursorErro
36460 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
36470 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
36480 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ule,..          
36490 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
364a0 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
364b0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
364c0 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d  bool logErrors,.
364d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
364e0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
364f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
36500 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36510 20 69 66 20 28 63 75 72 73 6f 72 20 3d 3d 20 6e   if (cursor == n
36520 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
36530 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
36540 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
36550 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f     IntPtr pCurso
36560 72 20 3d 20 63 75 72 73 6f 72 2e 4e 61 74 69 76  r = cursor.Nativ
36570 65 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20  eHandle;....    
36580 20 20 20 20 20 20 20 20 69 66 20 28 70 43 75 72          if (pCur
36590 73 6f 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  sor == IntPtr.Ze
365a0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
365b0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
365c0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
365d0 20 20 72 65 74 75 72 6e 20 53 65 74 43 75 72 73    return SetCurs
365e0 6f 72 45 72 72 6f 72 28 6d 6f 64 75 6c 65 2c 20  orError(module, 
365f0 70 43 75 72 73 6f 72 2c 20 6c 6f 67 45 72 72 6f  pCursor, logErro
36600 72 73 2c 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  rs, error);..   
36610 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
36620 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
36630 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
36640 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
36650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36690 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
366a0 67 69 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d  gion Protected M
366b0 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
366c0 23 72 65 67 69 6f 6e 20 4d 6f 64 75 6c 65 20 48  #region Module H
366d0 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
366e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
366f0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
36700 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72  / Gets and retur
36710 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ns the <see cref
36720 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
36730 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66  odule" /> interf
36740 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ace..        ///
36750 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
36760 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
36770 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74  creating the nat
36780 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ive sqlite3_modu
36790 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
367a0 73 74 72 75 63 74 75 72 65 2e 20 20 44 65 72 69  structure.  Deri
367b0 76 65 64 20 63 6c 61 73 73 65 73 20 6d 61 79 20  ved classes may 
367c0 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 6d 65  override this me
367d0 74 68 6f 64 20 74 6f 20 73 75 70 70 6c 79 20 61  thod to supply a
367e0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  n..        /// a
367f0 6c 74 65 72 6e 61 74 65 20 69 6d 70 6c 65 6d 65  lternate impleme
36800 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ntation for the 
36810 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
36820 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
36830 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
36840 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20  interface...    
36850 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
36860 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
36870 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
36880 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
36890 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
368a0 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e  iveModule" /> in
368b0 74 65 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e  terface implemen
368c0 74 61 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20  tation to..     
368d0 20 20 20 2f 2f 2f 20 62 65 20 75 73 65 64 20 77     /// be used w
368e0 68 65 6e 20 70 6f 70 75 6c 61 74 69 6e 67 20 74  hen populating t
368f0 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
36900 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  3_module structu
36910 72 65 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20  re.  If..       
36920 20 2f 2f 2f 20 74 68 65 20 72 65 74 75 72 6e 65   /// the returne
36930 64 20 76 61 6c 75 65 20 69 73 20 6e 75 6c 6c 2c  d value is null,
36940 20 74 68 65 20 70 72 69 76 61 74 65 20 6d 65 74   the private met
36950 68 6f 64 73 20 70 72 6f 76 69 64 65 64 20 62 79  hods provided by
36960 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
36970 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
36980 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 63 6c  iteModule" /> cl
36990 61 73 73 20 61 6e 64 20 72 65 6c 61 74 69 6e 67  ass and relating
369a0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
369b0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
369c0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
369d0 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63  ule" /> interfac
369e0 65 20 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  e  will be used 
369f0 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
36a00 63 72 65 61 74 65 20 74 68 65 20 6e 65 63 65 73  create the neces
36a10 73 61 72 79 20 64 65 6c 65 67 61 74 65 73 2e 0d  sary delegates..
36a20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
36a30 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
36a40 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
36a50 61 6c 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  al ISQLiteNative
36a60 4d 6f 64 75 6c 65 20 47 65 74 4e 61 74 69 76 65  Module GetNative
36a70 4d 6f 64 75 6c 65 49 6d 70 6c 28 29 0d 0a 20 20  ModuleImpl()..  
36a80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36a90 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
36aa0 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 73 65 20 74  ; /* NOTE: Use t
36ab0 68 65 20 62 75 69 6c 74 2d 69 6e 20 64 65 66 61  he built-in defa
36ac0 75 6c 74 20 64 65 6c 65 67 61 74 65 73 2e 20 2a  ult delegates. *
36ad0 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  /..        }....
36ae0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
36af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
36b30 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
36b40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
36b50 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e    /// Creates an
36b60 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73  d returns the <s
36b70 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
36b80 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e  NativeModule" />
36b90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
36ba0 74 65 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e  terface implemen
36bb0 74 61 74 69 6f 6e 20 63 6f 72 72 65 73 70 6f 6e  tation correspon
36bc0 64 69 6e 67 20 74 6f 20 74 68 65 20 63 75 72 72  ding to the curr
36bd0 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ent..        ///
36be0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
36bf0 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a  teModule" /> obj
36c00 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
36c10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
36c20 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
36c30 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
36c40 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
36c50 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
36c60 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e  NativeModule" />
36c70 20 69 6e 74 65 72 66 61 63 65 20 69 6d 70 6c 65   interface imple
36c80 6d 65 6e 74 61 74 69 6f 6e 0d 0a 20 20 20 20 20  mentation..     
36c90 20 20 20 2f 2f 2f 20 63 6f 72 72 65 73 70 6f 6e     /// correspon
36ca0 64 69 6e 67 20 74 6f 20 74 68 65 20 63 75 72 72  ding to the curr
36cb0 65 6e 74 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ent <see cref="S
36cc0 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
36cd0 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
36ce0 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  /// instance... 
36cf0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
36d00 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
36d10 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
36d20 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   ISQLiteNativeMo
36d30 64 75 6c 65 20 43 72 65 61 74 65 4e 61 74 69 76  dule CreateNativ
36d40 65 4d 6f 64 75 6c 65 49 6d 70 6c 28 29 0d 0a 20  eModuleImpl().. 
36d50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36d60 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
36d70 20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64   SQLiteNativeMod
36d80 75 6c 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ule(this);..    
36d90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
36da0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
36db0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
36dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
36e00 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
36e10 4e 61 74 69 76 65 20 54 61 62 6c 65 20 48 65 6c  Native Table Hel
36e20 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
36e30 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
36e40 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
36e50 41 6c 6c 6f 63 61 74 65 73 20 61 20 6e 61 74 69  Allocates a nati
36e60 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  ve sqlite3_vtab 
36e70 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
36e80 65 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 0d  e and returns a.
36e90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74  .        /// nat
36ea0 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  ive pointer to i
36eb0 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
36ec0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
36ed0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
36ee0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
36ef0 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
36f00 74 6f 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69  to a native sqli
36f10 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
36f20 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
36f30 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
36f40 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  ns>..        pro
36f50 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 49  tected virtual I
36f60 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 54 61  ntPtr AllocateTa
36f70 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ble()..        {
36f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
36f90 74 20 73 69 7a 65 20 3d 20 4d 61 72 73 68 61 6c  t size = Marshal
36fa0 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d  .SizeOf(typeof(.
36fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36fc0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
36fd0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 74 61  hods.sqlite3_vta
36fe0 62 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  b));....        
36ff0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
37000 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65  eMemory.Allocate
37010 28 73 69 7a 65 29 3b 0d 0a 20 20 20 20 20 20 20  (size);..       
37020 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
37030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37070 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
37080 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
37090 20 20 20 20 20 20 20 20 2f 2f 2f 20 5a 65 72 6f          /// Zero
370a0 73 20 6f 75 74 20 74 68 65 20 66 69 65 6c 64 73  s out the fields
370b0 20 6f 66 20 61 20 6e 61 74 69 76 65 20 73 71 6c   of a native sql
370c0 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
370d0 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
370e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
370f0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
37100 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
37110 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
37120 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
37130 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
37140 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61  tive sqlite3_vta
37150 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
37160 75 72 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ure to..        
37170 2f 2f 2f 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20  /// zero...     
37180 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
37190 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
371a0 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20  ed virtual void 
371b0 5a 65 72 6f 54 61 62 6c 65 28 0d 0a 20 20 20 20  ZeroTable(..    
371c0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
371d0 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
371e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
371f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
37200 70 56 74 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e  pVtab == IntPtr.
37210 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
37220 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
37230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
37240 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d  t offset = 0;...
37250 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
37260 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65  iteMarshal.Write
37270 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66  IntPtr(pVtab, of
37280 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 5a 65 72  fset, IntPtr.Zer
37290 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  o);....         
372a0 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74     offset += Int
372b0 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20  Ptr.Size;....   
372c0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
372d0 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 33  arshal.WriteInt3
372e0 32 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c  2(pVtab, offset,
372f0 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
37300 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69      offset += si
37310 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20  zeof(int);....  
37320 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
37330 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74  Marshal.WriteInt
37340 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65  Ptr(pVtab, offse
37350 74 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  t, IntPtr.Zero);
37360 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
37370 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
37380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
373c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
373d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
373e0 20 2f 2f 2f 20 46 72 65 65 73 20 61 20 6e 61 74   /// Frees a nat
373f0 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ive sqlite3_vtab
37400 20 73 74 72 75 63 74 75 72 65 20 75 73 69 6e 67   structure using
37410 20 74 68 65 20 70 72 6f 76 69 64 65 64 20 6e 61   the provided na
37420 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tive..        //
37430 2f 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  / pointer to it.
37440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
37450 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
37460 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
37470 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
37480 20 20 20 20 2f 2f 2f 20 41 20 6e 61 74 69 76 65      /// A native
37490 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 6e 61   pointer to a na
374a0 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61  tive sqlite3_vta
374b0 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
374c0 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
374d0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
374e0 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
374f0 72 74 75 61 6c 20 76 6f 69 64 20 46 72 65 65 54  rtual void FreeT
37500 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  able(..         
37510 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
37520 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
37530 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37540 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
37550 72 72 6f 72 28 70 56 74 61 62 2c 20 6e 75 6c 6c  rror(pVtab, null
37560 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
37570 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
37580 65 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20  e(pVtab);..     
37590 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
375a0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
375b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
375c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
375d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
375e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
375f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
37600 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e         #region N
37610 61 74 69 76 65 20 43 75 72 73 6f 72 20 48 65 6c  ative Cursor Hel
37620 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
37630 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
37640 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
37650 41 6c 6c 6f 63 61 74 65 73 20 61 20 6e 61 74 69  Allocates a nati
37660 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ve sqlite3_vtab_
37670 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73  cursor derived s
37680 74 72 75 63 74 75 72 65 20 61 6e 64 0d 0a 20 20  tructure and..  
37690 20 20 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e        /// return
376a0 73 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  s a native point
376b0 65 72 20 74 6f 20 69 74 2e 0d 0a 20 20 20 20 20  er to it...     
376c0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
376d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
376e0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
376f0 20 20 2f 2f 2f 20 41 20 6e 61 74 69 76 65 20 70    /// A native p
37700 6f 69 6e 74 65 72 20 74 6f 20 61 20 6e 61 74 69  ointer to a nati
37710 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ve sqlite3_vtab_
37720 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73  cursor derived s
37730 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
37740 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
37750 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  >..        prote
37760 63 74 65 64 20 76 69 72 74 75 61 6c 20 49 6e 74  cted virtual Int
37770 50 74 72 20 41 6c 6c 6f 63 61 74 65 43 75 72 73  Ptr AllocateCurs
37780 6f 72 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  or()..        {.
37790 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
377a0 20 73 69 7a 65 20 3d 20 4d 61 72 73 68 61 6c 2e   size = Marshal.
377b0 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a  SizeOf(typeof(..
377c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377d0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
377e0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 74 61 62  ods.sqlite3_vtab
377f0 5f 63 75 72 73 6f 72 29 29 3b 0d 0a 0d 0a 20 20  _cursor));....  
37800 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37810 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c   SQLiteMemory.Al
37820 6c 6f 63 61 74 65 28 73 69 7a 65 29 3b 0d 0a 20  locate(size);.. 
37830 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
37840 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
37850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
37890 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
378a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
378b0 2f 20 46 72 65 65 73 20 61 20 6e 61 74 69 76 65  / Frees a native
378c0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
378d0 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 75  rsor structure u
378e0 73 69 6e 67 20 74 68 65 20 70 72 6f 76 69 64 65  sing the provide
378f0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  d..        /// n
37900 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
37910 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f   it...        //
37920 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
37930 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
37940 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e   name="pCursor">
37950 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
37960 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
37970 6f 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69 74  o a native sqlit
37980 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
37990 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
379a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
379b0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
379c0 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
379d0 61 6c 20 76 6f 69 64 20 46 72 65 65 43 75 72 73  al void FreeCurs
379e0 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or(..           
379f0 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
37a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
37a10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37a20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
37a30 6f 72 79 2e 46 72 65 65 28 70 43 75 72 73 6f 72  ory.Free(pCursor
37a40 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
37a50 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
37a60 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
37a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37ab0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
37ac0 23 72 65 67 69 6f 6e 20 53 74 61 74 69 63 20 54  #region Static T
37ad0 61 62 6c 65 20 4c 6f 6f 6b 75 70 20 4d 65 74 68  able Lookup Meth
37ae0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
37af0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
37b00 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20 61 6e      /// Reads an
37b10 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 61  d returns the na
37b20 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
37b30 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
37b40 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20   derived..      
37b50 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20    /// structure 
37b60 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6e 61 74  based on the nat
37b70 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
37b80 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  he sqlite3_vtab_
37b90 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  cursor..        
37ba0 2f 2f 2f 20 64 65 72 69 76 65 64 20 73 74 72 75  /// derived stru
37bb0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
37bc0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
37bd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
37be0 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
37bf0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
37c00 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
37c10 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f  LiteModule" /> o
37c20 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
37c30 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20  o be used...    
37c40 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
37c50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
37c60 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
37c70 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
37c80 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
37c90 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
37ca0 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
37cb0 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
37cc0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66  e..        /// f
37cd0 72 6f 6d 20 77 68 69 63 68 20 74 6f 20 72 65 61  rom which to rea
37ce0 64 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69  d the native poi
37cf0 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
37d00 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab d