System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a62e857918ede944a194a65e64ae20e3e6b7a3dc:


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 53 79 73 74 65 6d 2e 44  e cref="System.D
0980: 6f 75 62 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20  ouble" />..     
0990: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20     /// value... 
09a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
09b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
09c0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
09d0: 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  value">..       
09e0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
09f0: 65 66 3d 22 53 79 73 74 65 6d 2e 44 6f 75 62 6c  ef="System.Doubl
0a00: 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75  e" /> value to u
0a10: 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
0a20: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
0a30: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
0a40: 65 74 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 20  etDouble(double 
0a50: 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  value)..        
0a60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
0a70: 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49  f (pContext == I
0a80: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
0a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
0aa0: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
0ab0: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
0ac0: 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  ();....#if !PLAT
0ad0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
0ae0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
0af0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
0b00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
0b10: 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 70 43 6f  esult_double(pCo
0b20: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
0b30: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
0b40: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
0b50: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
0b60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
0b70: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e  result_double_in
0b80: 74 65 72 6f 70 28 70 43 6f 6e 74 65 78 74 2c 20  terop(pContext, 
0b90: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
0ba0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
0bb0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
0bc0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
0bd0: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
0be0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0bf0: 20 20 20 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 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0c40: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
0c50: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
0c60: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
0c70: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
0c80: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
0c90: 72 65 66 3d 22 53 79 73 74 65 6d 2e 49 6e 74 33  ref="System.Int3
0ca0: 32 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  2" />..        /
0cb0: 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  // value...     
0cc0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0cd0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
0ce0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
0cf0: 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
0d00: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
0d10: 53 79 73 74 65 6d 2e 49 6e 74 33 32 22 20 2f 3e  System.Int32" />
0d20: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d 0a   value to use...
0d30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
0d40: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
0d50: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 49 6e 74  blic void SetInt
0d60: 28 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20  (int value)..   
0d70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0d80: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
0d90: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
0da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0db0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
0dc0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
0dd0: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
0de0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
0df0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
0e00: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 70  te3_result_int(p
0e10: 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  Context, value);
0e20: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
0e30: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0e80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
0e90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
0ea0: 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f   /// Sets the co
0eb0: 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20  ntext result to 
0ec0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 3c 73  the specified <s
0ed0: 65 65 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e  ee cref="System.
0ee0: 49 6e 74 36 34 22 20 2f 3e 0d 0a 20 20 20 20 20  Int64" />..     
0ef0: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20     /// value... 
0f00: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
0f10: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
0f20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0f30: 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  value">..       
0f40: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
0f50: 65 66 3d 22 53 79 73 74 65 6d 2e 49 6e 74 36 34  ef="System.Int64
0f60: 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75 73  " /> value to us
0f70: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
0f80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
0f90: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
0fa0: 74 49 6e 74 36 34 28 6c 6f 6e 67 20 76 61 6c 75  tInt64(long valu
0fb0: 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
0fc0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
0fd0: 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74  Context == IntPt
0fe0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
0ff0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1000: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
1010: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
1020: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
1030: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
1040: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  K..            U
1050: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1060: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
1070: 74 5f 69 6e 74 36 34 28 70 43 6f 6e 74 65 78 74  t_int64(pContext
1080: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
1090: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
10a0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  D..            U
10b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10c0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
10d0: 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  t_int64_interop(
10e0: 70 43 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61  pContext, ref va
10f0: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
1100: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1110: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
1120: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
1130: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
1140: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1190: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
11a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
11b0: 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20         /// Sets 
11c0: 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75  the context resu
11d0: 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  lt to the specif
11e0: 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ied <see cref="S
11f0: 79 73 74 65 6d 2e 53 74 72 69 6e 67 22 20 2f 3e  ystem.String" />
1200: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61  ..        /// va
1210: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
1220: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1230: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1240: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a   name="value">..
1250: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1260: 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74 65  <see cref="Syste
1270: 6d 2e 53 74 72 69 6e 67 22 20 2f 3e 20 76 61 6c  m.String" /> val
1280: 75 65 20 74 6f 20 75 73 65 2e 20 20 54 68 69 73  ue to use.  This
1290: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 0d 0a   value will be..
12a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76          /// conv
12b0: 65 72 74 65 64 20 74 6f 20 74 68 65 20 55 54 46  erted to the UTF
12c0: 2d 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f  -8 encoding prio
12d0: 72 20 74 6f 20 62 65 69 6e 67 20 75 73 65 64 2e  r to being used.
12e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
12f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1300: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 53  public void SetS
1310: 74 72 69 6e 67 28 73 74 72 69 6e 67 20 76 61 6c  tring(string val
1320: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ue)..        {..
1330: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1340: 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50  pContext == IntP
1350: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1360: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1370: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
1380: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
1390: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13a0: 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 53  byte[] bytes = S
13b0: 51 4c 69 74 65 53 74 72 69 6e 67 2e 47 65 74 55  QLiteString.GetU
13c0: 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72 69  tf8BytesFromStri
13d0: 6e 67 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20  ng(value);....  
13e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 79            if (by
13f0: 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  tes == null)..  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1410: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
1420: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 76  NullException("v
1430: 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  alue");....     
1440: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
1450: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1460: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 0d  e3_result_text(.
1470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1480: 20 70 43 6f 6e 74 65 78 74 2c 20 62 79 74 65 73   pContext, bytes
1490: 2c 20 62 79 74 65 73 2e 4c 65 6e 67 74 68 2c 20  , bytes.Length, 
14a0: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
14b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
14d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1510: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1520: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1530: 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74  // Sets the cont
1540: 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68  ext result to th
1550: 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65  e specified <see
1560: 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 53 74   cref="System.St
1570: 72 69 6e 67 22 20 2f 3e 0d 0a 20 20 20 20 20 20  ring" />..      
1580: 20 20 2f 2f 2f 20 76 61 6c 75 65 20 63 6f 6e 74    /// value cont
1590: 61 69 6e 69 6e 67 20 61 6e 20 65 72 72 6f 72 20  aining an error 
15a0: 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20  message...      
15b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
15c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
15d0: 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
15e0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
15f0: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
1600: 79 73 74 65 6d 2e 53 74 72 69 6e 67 22 20 2f 3e  ystem.String" />
1610: 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 69 6e   value containin
1620: 67 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  g the error mess
1630: 61 67 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  age..        ///
1640: 20 74 65 78 74 2e 20 20 54 68 69 73 20 76 61 6c   text.  This val
1650: 75 65 20 77 69 6c 6c 20 62 65 20 63 6f 6e 76 65  ue will be conve
1660: 72 74 65 64 20 74 6f 20 74 68 65 20 55 54 46 2d  rted to the UTF-
1670: 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f 72  8 encoding prior
1680: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
1690: 20 62 65 69 6e 67 20 75 73 65 64 2e 0d 0a 20 20   being used...  
16a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
16b0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  m>..        publ
16c0: 69 63 20 76 6f 69 64 20 53 65 74 45 72 72 6f 72  ic void SetError
16d0: 28 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a  (string value)..
16e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16f0: 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74         if (pCont
1700: 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ext == IntPtr.Ze
1710: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
1720: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
1730: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
1740: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20  xception();.... 
1750: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
1760: 5d 20 62 79 74 65 73 20 3d 20 53 51 4c 69 74 65  ] bytes = SQLite
1770: 53 74 72 69 6e 67 2e 47 65 74 55 74 66 38 42 79  String.GetUtf8By
1780: 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 76 61  tesFromString(va
1790: 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
17a0: 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d       if (bytes =
17b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
17c0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
17d0: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
17e0: 78 63 65 70 74 69 6f 6e 28 22 76 61 6c 75 65 22  xception("value"
17f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1800: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
1810: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
1820: 73 75 6c 74 5f 65 72 72 6f 72 28 0d 0a 20 20 20  sult_error(..   
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f               pCo
1840: 6e 74 65 78 74 2c 20 62 79 74 65 73 2c 20 62 79  ntext, bytes, by
1850: 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  tes.Length);..  
1860: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1870: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
18d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
18e0: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
18f0: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
1900: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
1910: 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72  ref="SQLiteError
1920: 43 6f 64 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20  Code" />..      
1930: 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20    /// value...  
1940: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1950: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1960: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
1970: 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  alue">..        
1980: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1990: 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  f="SQLiteErrorCo
19a0: 64 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20  de" /> value to 
19b0: 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  use...        //
19c0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
19d0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
19e0: 53 65 74 45 72 72 6f 72 43 6f 64 65 28 53 51 4c  SetErrorCode(SQL
19f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 76 61 6c  iteErrorCode val
1a00: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ue)..        {..
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a20: 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50  pContext == IntP
1a30: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1a40: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1a50: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
1a60: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
1a70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1a90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
1aa0: 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65 28 70 43  lt_error_code(pC
1ab0: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
1ac0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1ad0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1b20: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1b30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1b40: 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e  /// Sets the con
1b50: 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 63  text result to c
1b60: 6f 6e 74 61 69 6e 20 74 68 65 20 65 72 72 6f 72  ontain the error
1b70: 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 54 4f 4f   code SQLITE_TOO
1b80: 42 49 47 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  BIG...        //
1b90: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1ba0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
1bb0: 64 20 53 65 74 45 72 72 6f 72 54 6f 6f 42 69 67  d SetErrorTooBig
1bc0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
1bd0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
1be0: 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74  Context == IntPt
1bf0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1c00: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1c10: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
1c20: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
1c30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
1c40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1c50: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
1c60: 74 5f 65 72 72 6f 72 5f 74 6f 6f 62 69 67 28 70  t_error_toobig(p
1c70: 43 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 20  Context);..     
1c80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ce0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1cf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65  ..        /// Se
1d00: 74 73 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72  ts the context r
1d10: 65 73 75 6c 74 20 74 6f 20 63 6f 6e 74 61 69 6e  esult to contain
1d20: 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
1d30: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 0d 0a 20  SQLITE_NOMEM... 
1d40: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1d50: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
1d60: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72  ublic void SetEr
1d70: 72 6f 72 4e 6f 4d 65 6d 6f 72 79 28 29 0d 0a 20  rorNoMemory().. 
1d80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d90: 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65        if (pConte
1da0: 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  xt == IntPtr.Zer
1db0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
1dc0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
1dd0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
1de0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20  ception();....  
1df0: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
1e00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1e10: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
1e20: 6f 72 5f 6e 6f 6d 65 6d 28 70 43 6f 6e 74 65 78  or_nomem(pContex
1e30: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  t);..        }..
1e40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e90: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1ea0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1eb0: 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65      /// Sets the
1ec0: 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20   context result 
1ed0: 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64  to the specified
1ee0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74   <see cref="Syst
1ef0: 65 6d 2e 42 79 74 65 22 20 2f 3e 0d 0a 20 20 20  em.Byte" />..   
1f00: 20 20 20 20 20 2f 2f 2f 20 61 72 72 61 79 20 76       /// array v
1f10: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
1f20: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1f30: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1f40: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
1f50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1f60: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74   <see cref="Syst
1f70: 65 6d 2e 42 79 74 65 22 20 2f 3e 20 61 72 72 61  em.Byte" /> arra
1f80: 79 20 76 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d  y value to use..
1f90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1fa0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70  aram>..        p
1fb0: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 42 6c  ublic void SetBl
1fc0: 6f 62 28 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  ob(byte[] value)
1fd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1fe0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
1ff0: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
2000: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
2010: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
2020: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
2030: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
2040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2050: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
2060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2070: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
2080: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
2090: 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  ("value");....  
20a0: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
20b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
20c0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f  lite3_result_blo
20d0: 62 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b(..            
20e0: 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20 76 61      pContext, va
20f0: 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  lue, value.Lengt
2100: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
2110: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2120: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2170: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2180: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2190: 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63    /// Sets the c
21a0: 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f  ontext result to
21b0: 20 61 20 42 4c 4f 42 20 6f 66 20 7a 65 72 6f 73   a BLOB of zeros
21c0: 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
21d0: 64 20 73 69 7a 65 2e 0d 0a 20 20 20 20 20 20 20  d size...       
21e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
21f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
2200: 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
2210: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
2220: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 7a 65 72  he number of zer
2230: 6f 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 66  o bytes to use f
2240: 6f 72 20 74 68 65 20 42 4c 4f 42 20 63 6f 6e 74  or the BLOB cont
2250: 65 78 74 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20  ext result...   
2260: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2270: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
2280: 63 20 76 6f 69 64 20 53 65 74 5a 65 72 6f 42 6c  c void SetZeroBl
2290: 6f 62 28 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  ob(int value).. 
22a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22b0: 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65        if (pConte
22c0: 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  xt == IntPtr.Zer
22d0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
22e0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
22f0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
2300: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20  ception();....  
2310: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
2320: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2330: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72  lite3_result_zer
2340: 6f 62 6c 6f 62 28 70 43 6f 6e 74 65 78 74 2c 20  oblob(pContext, 
2350: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
2360: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
23d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73          /// Sets
23e0: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73   the context res
23f0: 75 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69  ult to the speci
2400: 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  fied <see cref="
2410: 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 2e  SQLiteValue" />.
2420: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2430: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2440: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2450: 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20  e="value">..    
2460: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
2470: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c   cref="SQLiteVal
2480: 75 65 22 20 2f 3e 20 74 6f 20 75 73 65 2e 0d 0a  ue" /> to use...
2490: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
24a0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
24b0: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
24c0: 75 65 28 53 51 4c 69 74 65 56 61 6c 75 65 20 76  ue(SQLiteValue v
24d0: 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  alue)..        {
24e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24f0: 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e   (pContext == In
2500: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
2510: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2520: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
2530: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
2540: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2550: 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
2560: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2570: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2580: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
2590: 70 74 69 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d  ption("value");.
25a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
25b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
25c0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
25d0: 74 5f 76 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  t_value(..      
25e0: 20 20 20 20 20 20 20 20 20 20 70 43 6f 6e 74 65            pConte
25f0: 78 74 2c 20 76 61 6c 75 65 2e 4e 61 74 69 76 65  xt, value.Native
2600: 48 61 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20  Handle);..      
2610: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2620: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
2630: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2640: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2690: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
26a0: 20 53 51 4c 69 74 65 56 61 6c 75 65 20 48 65 6c   SQLiteValue Hel
26b0: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f  per Class..    /
26c0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
26d0: 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
26e0: 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 76 61   represents a va
26f0: 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  lue from the SQL
2700: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
2710: 20 74 68 61 74 20 63 61 6e 20 62 65 0d 0a 20 20   that can be..  
2720: 20 20 2f 2f 2f 20 70 61 73 73 65 64 20 74 6f 20    /// passed to 
2730: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  the sqlite3_valu
2740: 65 5f 2a 28 29 20 61 6e 64 20 61 73 73 6f 63 69  e_*() and associ
2750: 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d  ated functions..
2760: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2770: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
2780: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c  sealed class SQL
2790: 69 74 65 56 61 6c 75 65 20 3a 20 49 53 51 4c 69  iteValue : ISQLi
27a0: 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a  teNativeHandle..
27b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
27c0: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44  region Private D
27d0: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ata..        ///
27e0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
27f0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
2800: 76 65 20 76 61 6c 75 65 20 68 61 6e 64 6c 65 2e  ve value handle.
2810: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2820: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2830: 20 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72    private IntPtr
2840: 20 70 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20   pValue;..      
2850: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2860: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28b0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
28c0: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
28d0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
28e0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
28f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
2900: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
2910: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
2920: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
2930: 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20 20 20  fied native..   
2940: 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 68       /// value h
2950: 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  andle...        
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2980: 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22  am name="pValue"
2990: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
29a0: 68 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20  he native value 
29b0: 68 61 6e 64 6c 65 20 74 6f 20 75 73 65 2e 0d 0a  handle to use...
29c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
29d0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  ram>..        in
29e0: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 56 61 6c  ternal SQLiteVal
29f0: 75 65 28 49 6e 74 50 74 72 20 70 56 61 6c 75 65  ue(IntPtr pValue
2a00: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2a10: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70            this.p
2a20: 56 61 6c 75 65 20 3d 20 70 56 61 6c 75 65 3b 0d  Value = pValue;.
2a30: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2a40: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2a50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2ab0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
2ac0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
2ad0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2ae0: 20 20 20 20 20 2f 2f 2f 20 49 6e 76 61 6c 69 64       /// Invalid
2af0: 61 74 65 73 20 74 68 65 20 6e 61 74 69 76 65 20  ates the native 
2b00: 76 61 6c 75 65 20 68 61 6e 64 6c 65 2c 20 74 68  value handle, th
2b10: 65 72 65 62 79 20 70 72 65 76 65 6e 74 69 6e 67  ereby preventing
2b20: 20 66 75 72 74 68 65 72 0d 0a 20 20 20 20 20 20   further..      
2b30: 20 20 2f 2f 2f 20 61 63 63 65 73 73 20 74 6f 20    /// access to 
2b40: 69 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 62 6a  it from this obj
2b50: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
2b60: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2b70: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
2b80: 72 69 76 61 74 65 20 76 6f 69 64 20 50 72 65 76  rivate void Prev
2b90: 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73 28  entNativeAccess(
2ba0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2bb0: 20 20 20 20 20 20 20 20 20 20 70 56 61 6c 75 65            pValue
2bc0: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
2bd0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2be0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2bf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2c50: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
2c60: 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72 73  veHandle Members
2c70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2c80: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2c90: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
2ca0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69   underlying SQLi
2cb0: 74 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65  te native handle
2cc0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2cd0: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
2ce0: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
2cf0: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
2d00: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2d10: 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 74 50       public IntP
2d20: 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d  tr NativeHandle.
2d30: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2d40: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
2d50: 74 75 72 6e 20 70 56 61 6c 75 65 3b 20 7d 0d 0a  turn pValue; }..
2d60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2d70: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2d80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2de0: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
2df0: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70  rties..        p
2e00: 72 69 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 73  rivate bool pers
2e10: 69 73 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  isted;..        
2e20: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2e30: 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72         /// Retur
2e40: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
2e50: 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
2e60: 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20   value has been 
2e70: 73 75 63 63 65 73 73 66 75 6c 6c 79 0d 0a 20 20  successfully..  
2e80: 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73        /// persis
2e90: 74 65 64 20 61 73 20 61 20 6d 61 6e 61 67 65 64  ted as a managed
2ea0: 20 76 61 6c 75 65 20 77 69 74 68 69 6e 20 74 68   value within th
2eb0: 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
2ec0: 63 65 20 28 69 2e 65 2e 20 74 68 65 0d 0a 20 20  ce (i.e. the..  
2ed0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
2ee0: 72 65 66 3d 22 56 61 6c 75 65 22 20 2f 3e 20 70  ref="Value" /> p
2ef0: 72 6f 70 65 72 74 79 20 6d 61 79 20 74 68 65 6e  roperty may then
2f00: 20 62 65 20 72 65 61 64 20 73 75 63 63 65 73 73   be read success
2f10: 66 75 6c 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20  fully)...       
2f20: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2f30: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2f40: 62 6f 6f 6c 20 50 65 72 73 69 73 74 65 64 0d 0a  bool Persisted..
2f50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f60: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2f70: 75 72 6e 20 70 65 72 73 69 73 74 65 64 3b 20 7d  urn persisted; }
2f80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2f90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2fe0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2ff0: 65 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0d  e object value;.
3000: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
3010: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3020: 2f 2f 2f 20 49 66 20 74 68 65 20 6d 61 6e 61 67  /// If the manag
3030: 65 64 20 76 61 6c 75 65 20 66 6f 72 20 74 68 69  ed value for thi
3040: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
3050: 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  e is available (
3060: 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20 20 20  i.e. it..       
3070: 20 2f 2f 2f 20 68 61 73 20 62 65 65 6e 20 70 72   /// has been pr
3080: 65 76 69 6f 75 73 6c 79 20 70 65 72 73 69 73 74  eviously persist
3090: 65 64 20 76 69 61 20 74 68 65 20 3c 73 65 65 20  ed via the <see 
30a0: 63 72 65 66 3d 22 50 65 72 73 69 73 74 22 2f 3e  cref="Persist"/>
30b0: 29 20 6d 65 74 68 6f 64 2c 0d 0a 20 20 20 20 20  ) method,..     
30c0: 20 20 20 2f 2f 2f 20 74 68 61 74 20 76 61 6c 75     /// that valu
30d0: 65 20 69 73 20 72 65 74 75 72 6e 65 64 3b 20 6f  e is returned; o
30e0: 74 68 65 72 77 69 73 65 2c 20 61 6e 20 65 78 63  therwise, an exc
30f0: 65 70 74 69 6f 6e 20 69 73 20 74 68 72 6f 77 6e  eption is thrown
3100: 2e 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  .  The..        
3110: 2f 2f 2f 20 72 65 74 75 72 6e 65 64 20 76 61 6c  /// returned val
3120: 75 65 20 6d 61 79 20 62 65 20 6e 75 6c 6c 2e 0d  ue may be null..
3130: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
3140: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
3150: 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20 56   public object V
3160: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  alue..        {.
3170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
3180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31a0: 20 69 66 20 28 21 70 65 72 73 69 73 74 65 64 29   if (!persisted)
31b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31d0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
31e0: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
31f0: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
3200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3210: 20 20 20 20 20 20 20 22 76 61 6c 75 65 20 77 61         "value wa
3220: 73 20 6e 6f 74 20 70 65 72 73 69 73 74 65 64 22  s not persisted"
3230: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3250: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3260: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
3270: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
3280: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
3290: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
32a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
32f0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
3300: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
3310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3320: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65  ..        /// Ge
3330: 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  ts and returns t
3340: 68 65 20 74 79 70 65 20 61 66 66 69 6e 69 74 79  he type affinity
3350: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3360: 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20   this value...  
3370: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
3380: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
3390: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
33a0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 79 70       /// The typ
33b0: 65 20 61 66 66 69 6e 69 74 79 20 61 73 73 6f 63  e affinity assoc
33c0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
33d0: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...        
33e0: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
33f0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54          public T
3400: 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 54  ypeAffinity GetT
3410: 79 70 65 41 66 66 69 6e 69 74 79 28 29 0d 0a 20  ypeAffinity().. 
3420: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3430: 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65        if (pValue
3440: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
3450: 20 72 65 74 75 72 6e 20 54 79 70 65 41 66 66 69   return TypeAffi
3460: 6e 69 74 79 2e 4e 6f 6e 65 3b 0d 0a 20 20 20 20  nity.None;..    
3470: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
3480: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3490: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
34a0: 5f 74 79 70 65 28 70 56 61 6c 75 65 29 3b 0d 0a  _type(pValue);..
34b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
34d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3510: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
3520: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
3530: 2f 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75  // Gets and retu
3540: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
3550: 66 20 62 79 74 65 73 20 61 73 73 6f 63 69 61 74  f bytes associat
3560: 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61 6c  ed with this val
3570: 75 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 20 20  ue, if..        
3580: 2f 2f 2f 20 69 74 20 72 65 66 65 72 73 20 74 6f  /// it refers to
3590: 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64   a UTF-8 encoded
35a0: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...      
35b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
35c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
35d0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
35e0: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
35f0: 6f 66 20 62 79 74 65 73 20 61 73 73 6f 63 69 61  of bytes associa
3600: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61  ted with this va
3610: 6c 75 65 2e 20 20 54 68 65 20 72 65 74 75 72 6e  lue.  The return
3620: 65 64 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ed value..      
3630: 20 20 2f 2f 2f 20 6d 61 79 20 62 65 20 7a 65 72    /// may be zer
3640: 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  o...        /// 
3650: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
3660: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47      public int G
3670: 65 74 42 79 74 65 73 28 29 0d 0a 20 20 20 20 20  etBytes()..     
3680: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3690: 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20    if (pValue == 
36a0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
36b0: 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  urn 0;..        
36c0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
36d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
36e0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
36f0: 65 73 28 70 56 61 6c 75 65 29 3b 0d 0a 20 20 20  es(pValue);..   
3700: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3710: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3760: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
3770: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
3780: 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73  Gets and returns
3790: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
37a0: 53 79 73 74 65 6d 2e 49 6e 74 33 32 22 20 2f 3e  System.Int32" />
37b0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
37c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
37d0: 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  is value...     
37e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
37f0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
3800: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
3810: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
3820: 72 65 66 3d 22 53 79 73 74 65 6d 2e 49 6e 74 33  ref="System.Int3
3830: 32 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64  2" /> associated
3840: 20 77 69 74 68 20 74 68 69 73 20 76 61 6c 75 65   with this value
3850: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
3860: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
3870: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65     public int Ge
3880: 74 49 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20  tInt()..        
3890: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
38a0: 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74  f (pValue == Int
38b0: 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e  Ptr.Zero) return
38c0: 20 64 65 66 61 75 6c 74 28 69 6e 74 29 3b 0d 0a   default(int);..
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
38e0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
38f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
3900: 61 6c 75 65 5f 69 6e 74 28 70 56 61 6c 75 65 29  alue_int(pValue)
3910: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
3920: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3970: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
3980: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
3990: 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64 20 72    /// Gets and r
39a0: 65 74 75 72 6e 73 20 74 68 65 20 3c 73 65 65 20  eturns the <see 
39b0: 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 49 6e 74  cref="System.Int
39c0: 36 34 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65  64" /> associate
39d0: 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  d with..        
39e0: 2f 2f 2f 20 74 68 69 73 20 76 61 6c 75 65 2e 0d  /// this value..
39f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
3a00: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
3a10: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
3a20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
3a30: 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74 65  <see cref="Syste
3a40: 6d 2e 49 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f  m.Int64" /> asso
3a50: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
3a60: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
3a70: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
3a80: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
3a90: 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 29 0d  long GetInt64().
3aa0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
3ab0: 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
3ac0: 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
3ad0: 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  o) return defaul
3ae0: 74 28 6c 6f 6e 67 29 3b 0d 0a 0d 0a 23 69 66 20  t(long);....#if 
3af0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
3b00: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
3b10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
3b20: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3b30: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
3b40: 5f 69 6e 74 36 34 28 70 56 61 6c 75 65 29 3b 0d  _int64(pValue);.
3b50: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
3b60: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
3b70: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b       long value;
3b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
3b90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3ba0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
3bb0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 56  int64_interop(pV
3bc0: 61 6c 75 65 2c 20 6f 75 74 20 76 61 6c 75 65 29  alue, out value)
3bd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
3be0: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
3bf0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3c00: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
3c10: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
3c20: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
3c30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3c40: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3c90: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
3ca0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
3cb0: 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72  / Gets and retur
3cc0: 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ns the <see cref
3cd0: 3d 22 53 79 73 74 65 6d 2e 44 6f 75 62 6c 65 22  ="System.Double"
3ce0: 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77   /> associated w
3cf0: 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ith..        ///
3d00: 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20   this value...  
3d10: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
3d20: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
3d30: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
3d40: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
3d50: 65 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 44  e cref="System.D
3d60: 6f 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63 69  ouble" /> associ
3d70: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76  ated with this v
3d80: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
3d90: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
3da0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 64 6f         public do
3db0: 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 29  uble GetDouble()
3dc0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3dd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61           if (pVa
3de0: 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  lue == IntPtr.Ze
3df0: 72 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61 75  ro) return defau
3e00: 6c 74 28 64 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 23  lt(double);....#
3e10: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
3e20: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
3e30: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3e40: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
3e50: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
3e60: 6c 75 65 5f 64 6f 75 62 6c 65 28 70 56 61 6c 75  lue_double(pValu
3e70: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
3e80: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
3e90: 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20           double 
3ea0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
3eb0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
3ec0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3ed0: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74  value_double_int
3ee0: 65 72 6f 70 28 70 56 61 6c 75 65 2c 20 6f 75 74  erop(pValue, out
3ef0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
3f00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
3f10: 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ue;..#else..    
3f20: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
3f30: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
3f40: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
3f50: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
3f60: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
3f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
3fc0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3fd0: 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e       /// Gets an
3fe0: 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73  d returns the <s
3ff0: 65 65 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e  ee cref="System.
4000: 53 74 72 69 6e 67 22 20 2f 3e 20 61 73 73 6f 63  String" /> assoc
4010: 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20  iated with..    
4020: 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 76 61 6c      /// this val
4030: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
4040: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
4050: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
4060: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
4070: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
4080: 79 73 74 65 6d 2e 53 74 72 69 6e 67 22 20 2f 3e  ystem.String" />
4090: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
40a0: 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20 54 68   this value.  Th
40b0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
40c0: 61 6c 75 65 20 69 73 20 63 6f 6e 76 65 72 74 65  alue is converte
40d0: 64 20 66 72 6f 6d 20 74 68 65 20 55 54 46 2d 38  d from the UTF-8
40e0: 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f 72 20   encoding prior 
40f0: 74 6f 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65  to being returne
4100: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
4110: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4120: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
4130: 67 20 47 65 74 53 74 72 69 6e 67 28 29 0d 0a 20  g GetString().. 
4140: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4150: 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65        if (pValue
4160: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
4170: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
4180: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4190: 6e 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53  n SQLiteString.S
41a0: 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74  tringFromUtf8Int
41b0: 50 74 72 28 70 56 61 6c 75 65 2c 20 47 65 74 42  Ptr(pValue, GetB
41c0: 79 74 65 73 28 29 29 3b 0d 0a 20 20 20 20 20 20  ytes());..      
41d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
41e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4200: 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
4230: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4240: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74  .        /// Get
4250: 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
4260: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73  e <see cref="Sys
4270: 74 65 6d 2e 42 79 74 65 22 20 2f 3e 20 61 72 72  tem.Byte" /> arr
4280: 61 79 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  ay associated.. 
4290: 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20         /// with 
42a0: 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20  this value...   
42b0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
42c0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
42d0: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
42e0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
42f0: 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 42 79   cref="System.By
4300: 74 65 22 20 2f 3e 20 61 72 72 61 79 20 61 73 73  te" /> array ass
4310: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
4320: 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  s value...      
4330: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
4340: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
4350: 20 62 79 74 65 5b 5d 20 47 65 74 42 6c 6f 62 28   byte[] GetBlob(
4360: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
4370: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56            if (pV
4380: 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  alue == IntPtr.Z
4390: 65 72 6f 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c  ero) return null
43a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
43b0: 65 74 75 72 6e 20 53 51 4c 69 74 65 4d 61 72 73  eturn SQLiteMars
43c0: 68 61 6c 2e 42 79 74 65 73 46 72 6f 6d 49 6e 74  hal.BytesFromInt
43d0: 50 74 72 28 70 56 61 6c 75 65 2c 20 47 65 74 42  Ptr(pValue, GetB
43e0: 79 74 65 73 28 29 29 3b 0d 0a 20 20 20 20 20 20  ytes());..      
43f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
4400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4440: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
4450: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4460: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 73 65  .        /// Use
4470: 73 20 74 68 65 20 6e 61 74 69 76 65 20 76 61 6c  s the native val
4480: 75 65 20 68 61 6e 64 6c 65 20 74 6f 20 6f 62 74  ue handle to obt
4490: 61 69 6e 20 61 6e 64 20 73 74 6f 72 65 20 74 68  ain and store th
44a0: 65 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 0d  e managed value.
44b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72  .        /// for
44c0: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
44d0: 74 61 6e 63 65 2c 20 74 68 75 73 20 73 61 76 69  tance, thus savi
44e0: 6e 67 20 69 74 20 66 6f 72 20 6c 61 74 65 72 20  ng it for later 
44f0: 75 73 65 2e 20 20 54 68 65 20 74 79 70 65 0d 0a  use.  The type..
4500: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74          /// of t
4510: 68 65 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65  he managed value
4520: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
4530: 79 20 74 68 65 20 74 79 70 65 20 61 66 66 69 6e  y the type affin
4540: 69 74 79 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ity of the..    
4550: 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 76      /// native v
4560: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 74 79  alue.  If the ty
4570: 70 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 6e  pe affinity is n
4580: 6f 74 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79  ot recognized by
4590: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
45a0: 2f 2f 20 6d 65 74 68 6f 64 2c 20 6e 6f 20 77 6f  // method, no wo
45b0: 72 6b 20 69 73 20 64 6f 6e 65 20 61 6e 64 20 66  rk is done and f
45c0: 61 6c 73 65 20 69 73 20 72 65 74 75 72 6e 65 64  alse is returned
45d0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
45e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
45f0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
4600: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ..        /// No
4610: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61  n-zero if the na
4620: 74 69 76 65 20 76 61 6c 75 65 20 77 61 73 20 70  tive value was p
4630: 65 72 73 69 73 74 65 64 20 73 75 63 63 65 73 73  ersisted success
4640: 66 75 6c 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20  fully...        
4650: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
4660: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
4670: 6f 6f 6c 20 50 65 72 73 69 73 74 28 29 0d 0a 20  ool Persist().. 
4680: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4690: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 47 65        switch (Ge
46a0: 74 54 79 70 65 41 66 66 69 6e 69 74 79 28 29 29  tTypeAffinity())
46b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
46c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
46d0: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
46e0: 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64  ty.Uninitialized
46f0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
4700: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4720: 20 20 76 61 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0d    value = null;.
4730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4740: 20 20 20 20 20 20 20 20 20 50 72 65 76 65 6e 74           Prevent
4750: 4e 61 74 69 76 65 41 63 63 65 73 73 28 29 3b 0d  NativeAccess();.
4760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4770: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4780: 28 70 65 72 73 69 73 74 65 64 20 3d 20 74 72 75  (persisted = tru
4790: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
47a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
47c0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
47d0: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  t64:..          
47e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4800: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 47 65 74       value = Get
4810: 49 6e 74 36 34 28 29 3b 0d 0a 20 20 20 20 20 20  Int64();..      
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4830: 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76 65 41    PreventNativeA
4840: 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20  ccess();..      
4850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4860: 20 20 72 65 74 75 72 6e 20 28 70 65 72 73 69 73    return (persis
4870: 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20  ted = true);..  
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4890: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
48a0: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
48b0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
48c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
48f0: 61 6c 75 65 20 3d 20 47 65 74 44 6f 75 62 6c 65  alue = GetDouble
4900: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4910: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 65               Pre
4920: 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73  ventNativeAccess
4930: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4950: 75 72 6e 20 28 70 65 72 73 69 73 74 65 64 20 3d  urn (persisted =
4960: 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20   true);..       
4970: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4990: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
49a0: 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20 20 20  y.Text:..       
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49d0: 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20          value = 
49e0: 47 65 74 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  GetString();..  
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74        PreventNat
4a10: 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20  iveAccess();..  
4a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65        return (pe
4a40: 72 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b  rsisted = true);
4a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4a60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4a70: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79           case Ty
4a80: 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a  peAffinity.Blob:
4a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4aa0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ac0: 20 76 61 6c 75 65 20 3d 20 47 65 74 42 79 74 65   value = GetByte
4ad0: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
4af0: 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73  eventNativeAcces
4b00: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4b20: 74 75 72 6e 20 28 70 65 72 73 69 73 74 65 64 20  turn (persisted 
4b30: 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  = true);..      
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b60: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
4b70: 74 79 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20  ty.Null:..      
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ba0: 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d           value =
4bb0: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a   DBNull.Value;..
4bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bd0: 20 20 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e          PreventN
4be0: 61 74 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a  ativeAccess();..
4bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c00: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
4c10: 70 65 72 73 69 73 74 65 64 20 3d 20 74 72 75 65  persisted = true
4c20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4c30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4c40: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
4c50: 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt:..           
4c60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c80: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
4c90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4ca0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4cb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4cc0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
4cd0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
4ce0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
4cf0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
4d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d40: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
4d50: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
4d60: 72 61 69 6e 74 4f 70 20 45 6e 75 6d 65 72 61 74  raintOp Enumerat
4d70: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ion..    /// <su
4d80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4d90: 54 68 65 73 65 20 61 72 65 20 74 68 65 20 61 6c  These are the al
4da0: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
4db0: 20 74 68 65 20 6f 70 65 72 61 74 6f 72 73 20 74   the operators t
4dc0: 68 61 74 20 61 72 65 20 70 61 72 74 20 6f 66 20  hat are part of 
4dd0: 61 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 73 74  a..    /// const
4de0: 72 61 69 6e 74 20 74 65 72 6d 20 69 6e 20 74 68  raint term in th
4df0: 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
4e00: 66 20 61 20 71 75 65 72 79 20 74 68 61 74 20 75  f a query that u
4e10: 73 65 73 20 61 20 76 69 72 74 75 61 6c 0d 0a 20  ses a virtual.. 
4e20: 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e 0d 0a 20     /// table... 
4e30: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4e40: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e  >..    public en
4e50: 75 6d 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  um SQLiteIndexCo
4e60: 6e 73 74 72 61 69 6e 74 4f 70 20 3a 20 62 79 74  nstraintOp : byt
4e70: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
4e80: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4e90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
4ea0: 73 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e  s value represen
4eb0: 74 73 20 74 68 65 20 65 71 75 61 6c 69 74 79 20  ts the equality 
4ec0: 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20  operator...     
4ed0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4ee0: 3e 0d 0a 20 20 20 20 20 20 20 20 45 71 75 61 6c  >..        Equal
4ef0: 54 6f 20 3d 20 32 2c 0d 0a 0d 0a 20 20 20 20 20  To = 2,....     
4f00: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
4f10: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
4f20: 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73 65  is value represe
4f30: 6e 74 73 20 74 68 65 20 67 72 65 61 74 65 72 20  nts the greater 
4f40: 74 68 61 6e 20 6f 70 65 72 61 74 6f 72 2e 0d 0a  than operator...
4f50: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
4f60: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
4f70: 47 72 65 61 74 65 72 54 68 61 6e 20 3d 20 34 2c  GreaterThan = 4,
4f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
4f90: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
4fa0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75     /// This valu
4fb0: 65 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  e represents the
4fc0: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
4fd0: 75 61 6c 20 74 6f 20 6f 70 65 72 61 74 6f 72 2e  ual to operator.
4fe0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
4ff0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
5000: 20 20 4c 65 73 73 54 68 61 6e 4f 72 45 71 75 61    LessThanOrEqua
5010: 6c 54 6f 20 3d 20 38 2c 0d 0a 0d 0a 20 20 20 20  lTo = 8,....    
5020: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5030: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
5040: 68 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73  his value repres
5050: 65 6e 74 73 20 74 68 65 20 6c 65 73 73 20 74 68  ents the less th
5060: 61 6e 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20  an operator...  
5070: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
5080: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 4c 65  ary>..        Le
5090: 73 73 54 68 61 6e 20 3d 20 31 36 2c 0d 0a 0d 0a  ssThan = 16,....
50a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
50b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
50c0: 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72 65  // This value re
50d0: 70 72 65 73 65 6e 74 73 20 74 68 65 20 67 72 65  presents the gre
50e0: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
50f0: 61 6c 20 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d  al to operator..
5100: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
5110: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
5120: 20 47 72 65 61 74 65 72 54 68 61 6e 4f 72 45 71   GreaterThanOrEq
5130: 75 61 6c 54 6f 20 3d 20 33 32 2c 0d 0a 0d 0a 20  ualTo = 32,.... 
5140: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
5150: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
5160: 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72 65 70  / This value rep
5170: 72 65 73 65 6e 74 73 20 74 68 65 20 4d 41 54 43  resents the MATC
5180: 48 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20  H operator...   
5190: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
51a0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 4d 61 74  ry>..        Mat
51b0: 63 68 20 3d 20 36 34 0d 0a 20 20 20 20 7d 0d 0a  ch = 64..    }..
51c0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
51d0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
51e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5220: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
5230: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
5240: 74 72 61 69 6e 74 20 48 65 6c 70 65 72 20 43 6c  traint Helper Cl
5250: 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
5260: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5270: 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65  This class repre
5280: 73 65 6e 74 73 20 74 68 65 20 6e 61 74 69 76 65  sents the native
5290: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63   sqlite3_index_c
52a0: 6f 6e 73 74 72 61 69 6e 74 20 73 74 72 75 63 74  onstraint struct
52b0: 75 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 72 6f  ure..    /// fro
52c0: 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  m the SQLite cor
52d0: 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...    
52e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
52f0: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
5300: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e  d class SQLiteIn
5310: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 0d 0a 20  dexConstraint.. 
5320: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
5330: 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43  egion Internal C
5340: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
5350: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
5360: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
5370: 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e  Constructs an in
5380: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
5390: 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73  lass using the s
53a0: 70 65 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d  pecified native.
53b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
53c0: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
53d0: 72 61 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e  raint structure.
53e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
53f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
5400: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5410: 65 3d 22 63 6f 6e 73 74 72 61 69 6e 74 22 3e 0d  e="constraint">.
5420: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
5430: 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
5440: 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74  index_constraint
5450: 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 75 73   structure to us
5460: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
5470: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
5480: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
5490: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
54a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  (..            U
54b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
54c0: 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
54d0: 5f 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73  _constraint cons
54e0: 74 72 61 69 6e 74 0d 0a 20 20 20 20 20 20 20 20  traint..        
54f0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
5500: 20 20 20 3a 20 74 68 69 73 28 63 6f 6e 73 74 72     : this(constr
5510: 61 69 6e 74 2e 69 43 6f 6c 75 6d 6e 2c 20 63 6f  aint.iColumn, co
5520: 6e 73 74 72 61 69 6e 74 2e 6f 70 2c 20 63 6f 6e  nstraint.op, con
5530: 73 74 72 61 69 6e 74 2e 75 73 61 62 6c 65 2c 0d  straint.usable,.
5540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5550: 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 69      constraint.i
5560: 54 65 72 6d 4f 66 66 73 65 74 29 0d 0a 20 20 20  TermOffset)..   
5570: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5580: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
5590: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
55a0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
55b0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
55c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5600: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
5610: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
5620: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
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: 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e  Constructs an in
5660: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
5670: 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73  lass using the s
5680: 70 65 63 69 66 69 65 64 20 66 69 65 6c 64 0d 0a  pecified field..
5690: 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75          /// valu
56a0: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  es...        ///
56b0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
56c0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
56d0: 6e 61 6d 65 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d  name="iColumn">.
56e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c  .        /// Col
56f0: 75 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68 61 6e 64  umn on left-hand
5700: 20 73 69 64 65 20 6f 66 20 63 6f 6e 73 74 72 61   side of constra
5710: 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  int...        //
5720: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
5730: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5740: 61 6d 65 3d 22 6f 70 22 3e 0d 0a 20 20 20 20 20  ame="op">..     
5750: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 61 69 6e     /// Constrain
5760: 74 20 6f 70 65 72 61 74 6f 72 20 28 3c 73 65 65  t operator (<see
5770: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
5780: 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 22 20  exConstraintOp" 
5790: 2f 3e 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  />)...        //
57a0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
57b0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
57c0: 61 6d 65 3d 22 75 73 61 62 6c 65 22 3e 0d 0a 20  ame="usable">.. 
57d0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20         /// True 
57e0: 69 66 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  if this constrai
57f0: 6e 74 20 69 73 20 75 73 61 62 6c 65 2e 0d 0a 20  nt is usable... 
5800: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
5810: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
5820: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 54   <param name="iT
5830: 65 72 6d 4f 66 66 73 65 74 22 3e 0d 0a 20 20 20  ermOffset">..   
5840: 20 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e       /// Used in
5850: 74 65 72 6e 61 6c 6c 79 20 2d 20 3c 73 65 65 20  ternally - <see 
5860: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
5870: 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49  agedModule.BestI
5880: 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20  ndex" />..      
5890: 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 69 67 6e    /// should ign
58a0: 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ore...        //
58b0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
58c0: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
58d0: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
58e0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
58f0: 69 6e 74 20 69 43 6f 6c 75 6d 6e 2c 0d 0a 20 20  int iColumn,..  
5900: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
5910: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f  IndexConstraintO
5920: 70 20 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20  p op,..         
5930: 20 20 20 62 79 74 65 20 75 73 61 62 6c 65 2c 0d     byte usable,.
5940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
5950: 20 69 54 65 72 6d 4f 66 66 73 65 74 0d 0a 20 20   iTermOffset..  
5960: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
5970: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5980: 20 20 20 20 74 68 69 73 2e 69 43 6f 6c 75 6d 6e      this.iColumn
5990: 20 3d 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20   = iColumn;..   
59a0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 70           this.op
59b0: 20 3d 20 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20   = op;..        
59c0: 20 20 20 20 74 68 69 73 2e 75 73 61 62 6c 65 20      this.usable 
59d0: 3d 20 75 73 61 62 6c 65 3b 0d 0a 20 20 20 20 20  = usable;..     
59e0: 20 20 20 20 20 20 20 74 68 69 73 2e 69 54 65 72         this.iTer
59f0: 6d 4f 66 66 73 65 74 20 3d 20 69 54 65 72 6d 4f  mOffset = iTermO
5a00: 66 66 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20  ffset;..        
5a10: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
5a20: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
5a30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5a80: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
5a90: 63 20 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20  c Fields..      
5aa0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5ab0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c  .        /// Col
5ac0: 75 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68 61 6e 64  umn on left-hand
5ad0: 20 73 69 64 65 20 6f 66 20 63 6f 6e 73 74 72 61   side of constra
5ae0: 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  int...        //
5af0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
5b00: 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74        public int
5b10: 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20   iColumn;....   
5b20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
5b70: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
5b80: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
5b90: 2f 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70 65  / Constraint ope
5ba0: 72 61 74 6f 72 20 28 3c 73 65 65 20 63 72 65 66  rator (<see cref
5bb0: 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  ="SQLiteIndexCon
5bc0: 73 74 72 61 69 6e 74 4f 70 22 20 2f 3e 29 2e 0d  straintOp" />)..
5bd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
5be0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
5bf0: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e   public SQLiteIn
5c00: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20  dexConstraintOp 
5c10: 6f 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  op;....        /
5c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5c80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65          /// True
5c90: 20 69 66 20 74 68 69 73 20 63 6f 6e 73 74 72 61   if this constra
5ca0: 69 6e 74 20 69 73 20 75 73 61 62 6c 65 2e 0d 0a  int is usable...
5cb0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
5cc0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
5cd0: 70 75 62 6c 69 63 20 62 79 74 65 20 75 73 61 62  public byte usab
5ce0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  le;....        /
5cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d30: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5d40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5d50: 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 73 65 64          /// Used
5d60: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2d 20 3c 73   internally - <s
5d70: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
5d80: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65  ManagedModule.Be
5d90: 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20  stIndex" />..   
5da0: 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20       /// should 
5db0: 69 67 6e 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20  ignore...       
5dc0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5dd0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
5de0: 69 6e 74 20 69 54 65 72 6d 4f 66 66 73 65 74 3b  int iTermOffset;
5df0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
5e00: 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
5e10: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
5e20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5e70: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
5e80: 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79  LiteIndexOrderBy
5e90: 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20   Helper Class.. 
5ea0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5eb0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63  ..    /// This c
5ec0: 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20  lass represents 
5ed0: 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74  the native sqlit
5ee0: 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79  e3_index_orderby
5ef0: 20 73 74 72 75 63 74 75 72 65 20 66 72 6f 6d 0d   structure from.
5f00: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 53 51 4c  .    /// the SQL
5f10: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
5f20: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
5f30: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
5f40: 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  c sealed class S
5f50: 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42  QLiteIndexOrderB
5f60: 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  y..    {..      
5f70: 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e    #region Intern
5f80: 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  al Constructors.
5f90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
5fa0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
5fb0: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
5fc0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
5fd0: 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  is class using t
5fe0: 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 74  he specified nat
5ff0: 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ive..        ///
6000: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f   sqlite3_index_o
6010: 72 64 65 72 62 79 20 73 74 72 75 63 74 75 72 65  rderby structure
6020: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
6030: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
6040: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6050: 6d 65 3d 22 6f 72 64 65 72 42 79 22 3e 0d 0a 20  me="orderBy">.. 
6060: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
6070: 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e  ative sqlite3_in
6080: 64 65 78 5f 6f 72 64 65 72 62 79 20 73 74 72 75  dex_orderby stru
6090: 63 74 75 72 65 20 74 6f 20 75 73 65 2e 0d 0a 20  cture to use... 
60a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
60b0: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  am>..        int
60c0: 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65  ernal SQLiteInde
60d0: 78 4f 72 64 65 72 42 79 28 0d 0a 20 20 20 20 20  xOrderBy(..     
60e0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
60f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6100: 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79  e3_index_orderby
6110: 20 6f 72 64 65 72 42 79 0d 0a 20 20 20 20 20 20   orderBy..      
6120: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
6130: 20 20 20 20 20 3a 20 74 68 69 73 28 6f 72 64 65       : this(orde
6140: 72 42 79 2e 69 43 6f 6c 75 6d 6e 2c 20 6f 72 64  rBy.iColumn, ord
6150: 65 72 42 79 2e 64 65 73 63 29 0d 0a 20 20 20 20  erBy.desc)..    
6160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6170: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
6180: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
6190: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
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 23 72  //....        #r
6200: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
6210: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
6220: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
6230: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
6240: 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73  onstructs an ins
6250: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c  tance of this cl
6260: 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70  ass using the sp
6270: 65 63 69 66 69 65 64 20 66 69 65 6c 64 0d 0a 20  ecified field.. 
6280: 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65         /// value
6290: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
62a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
62b0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
62c0: 61 6d 65 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a  ame="iColumn">..
62d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75          /// Colu
62e0: 6d 6e 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20 20  mn number...    
62f0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6300: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
6310: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 63 22  aram name="desc"
6320: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
6330: 72 75 65 20 66 6f 72 20 44 45 53 43 2e 20 20 46  rue for DESC.  F
6340: 61 6c 73 65 20 66 6f 72 20 41 53 43 2e 0d 0a 20  alse for ASC... 
6350: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
6360: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  am>..        pri
6370: 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78  vate SQLiteIndex
6380: 4f 72 64 65 72 42 79 28 0d 0a 20 20 20 20 20 20  OrderBy(..      
6390: 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d        int iColum
63a0: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
63b0: 62 79 74 65 20 64 65 73 63 0d 0a 20 20 20 20 20  byte desc..     
63c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
63d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
63e0: 20 74 68 69 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20   this.iColumn = 
63f0: 69 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20 20 20  iColumn;..      
6400: 20 20 20 20 20 20 74 68 69 73 2e 64 65 73 63 20        this.desc 
6410: 3d 20 64 65 73 63 3b 0d 0a 20 20 20 20 20 20 20  = desc;..       
6420: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
6430: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
6440: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6490: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
64a0: 69 63 20 46 69 65 6c 64 73 0d 0a 20 20 20 20 20  ic Fields..     
64b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
64c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
64d0: 6c 75 6d 6e 20 6e 75 6d 62 65 72 2e 0d 0a 20 20  lumn number...  
64e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
64f0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
6500: 62 6c 69 63 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  blic int iColumn
6510: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
6520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6560: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
6570: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6580: 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 66        /// True f
6590: 6f 72 20 44 45 53 43 2e 20 20 46 61 6c 73 65 20  or DESC.  False 
65a0: 66 6f 72 20 41 53 43 2e 0d 0a 20 20 20 20 20 20  for ASC...      
65b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
65c0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
65d0: 20 62 79 74 65 20 64 65 73 63 3b 0d 0a 20 20 20   byte desc;..   
65e0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
65f0: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
6600: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
6610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6660: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49   #region SQLiteI
6670: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73  ndexConstraintUs
6680: 61 67 65 20 48 65 6c 70 65 72 20 43 6c 61 73 73  age Helper Class
6690: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
66a0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
66b0: 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e  s class represen
66c0: 74 73 20 74 68 65 20 6e 61 74 69 76 65 20 73 71  ts the native sq
66d0: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
66e0: 74 72 61 69 6e 74 5f 75 73 61 67 65 0d 0a 20 20  traint_usage..  
66f0: 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20    /// structure 
6700: 66 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20  from the SQLite 
6710: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
6720: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
6730: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65  >..    public se
6740: 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74  aled class SQLit
6750: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
6760: 55 73 61 67 65 0d 0a 20 20 20 20 7b 0d 0a 20 20  Usage..    {..  
6770: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e        #region In
6780: 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74  ternal Construct
6790: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ors..        ///
67a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
67b0: 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
67c0: 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
67d0: 66 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69  f this class usi
67e0: 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ng the specified
67f0: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20   native..       
6800: 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64   /// sqlite3_ind
6810: 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73  ex_constraint_us
6820: 61 67 65 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  age structure...
6830: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
6840: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
6850: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6860: 22 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  "constraintUsage
6870: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
6880: 54 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74  The native sqlit
6890: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
68a0: 69 6e 74 5f 75 73 61 67 65 20 73 74 72 75 63 74  int_usage struct
68b0: 75 72 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20  ure to use...   
68c0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
68d0: 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  >..        inter
68e0: 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 43  nal SQLiteIndexC
68f0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 0d  onstraintUsage(.
6900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
6910: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6920: 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
6930: 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20  onstraint_usage 
6940: 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 0d  constraintUsage.
6950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
6960: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
6970: 69 73 28 63 6f 6e 73 74 72 61 69 6e 74 55 73 61  is(constraintUsa
6980: 67 65 2e 61 72 67 76 49 6e 64 65 78 2c 20 63 6f  ge.argvIndex, co
6990: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2e 6f 6d  nstraintUsage.om
69a0: 69 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  it)..        {..
69b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
69c0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
69d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
69e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
69f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6a40: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
6a50: 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74  rivate Construct
6a60: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ors..        ///
6a70: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
6a80: 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
6a90: 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
6aa0: 66 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69  f this class usi
6ab0: 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ng the specified
6ac0: 20 66 69 65 6c 64 0d 0a 20 20 20 20 20 20 20 20   field..        
6ad0: 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  /// values...   
6ae0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
6af0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
6b00: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
6b10: 67 76 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20  gvIndex">..     
6b20: 20 20 20 2f 2f 2f 20 49 66 20 67 72 65 61 74 65     /// If greate
6b30: 72 20 74 68 61 6e 20 30 2c 20 63 6f 6e 73 74 72  r than 0, constr
6b40: 61 69 6e 74 20 69 73 20 70 61 72 74 20 6f 66 20  aint is part of 
6b50: 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72 2e  argv to xFilter.
6b60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
6b70: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
6b80: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6b90: 22 6f 6d 69 74 22 3e 0d 0a 20 20 20 20 20 20 20  "omit">..       
6ba0: 20 2f 2f 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65   /// Do not code
6bb0: 20 61 20 74 65 73 74 20 66 6f 72 20 74 68 69 73   a test for this
6bc0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20   constraint...  
6bd0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
6be0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  m>..        priv
6bf0: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 43  ate SQLiteIndexC
6c00: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 0d  onstraintUsage(.
6c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
6c20: 20 61 72 67 76 49 6e 64 65 78 2c 0d 0a 20 20 20   argvIndex,..   
6c30: 20 20 20 20 20 20 20 20 20 62 79 74 65 20 6f 6d           byte om
6c40: 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..            
6c50: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6c60: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 61            this.a
6c70: 72 67 76 49 6e 64 65 78 20 3d 20 61 72 67 76 49  rgvIndex = argvI
6c80: 6e 64 65 78 3b 0d 0a 20 20 20 20 20 20 20 20 20  ndex;..         
6c90: 20 20 20 74 68 69 73 2e 6f 6d 69 74 20 3d 20 6f     this.omit = o
6ca0: 6d 69 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  mit;..        }.
6cb0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
6cc0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
6cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d10: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6d20: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
6d30: 20 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20   Fields..       
6d40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6d50: 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 67          /// If g
6d60: 72 65 61 74 65 72 20 74 68 61 6e 20 30 2c 20 63  reater than 0, c
6d70: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 70 61 72  onstraint is par
6d80: 74 20 6f 66 20 61 72 67 76 20 74 6f 20 78 46 69  t of argv to xFi
6d90: 6c 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lter...        /
6da0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6db0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e         public in
6dc0: 74 20 61 72 67 76 49 6e 64 65 78 3b 0d 0a 0d 0a  t argvIndex;....
6dd0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6e20: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
6e30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
6e40: 20 20 2f 2f 2f 20 44 6f 20 6e 6f 74 20 63 6f 64    /// Do not cod
6e50: 65 20 61 20 74 65 73 74 20 66 6f 72 20 74 68 69  e a test for thi
6e60: 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20  s constraint... 
6e70: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
6e80: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
6e90: 75 62 6c 69 63 20 62 79 74 65 20 6f 6d 69 74 3b  ublic byte omit;
6ea0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
6eb0: 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
6ec0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
6ed0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
6ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6f20: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
6f30: 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20  LiteIndexInputs 
6f40: 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20  Helper Class..  
6f50: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6f60: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
6f70: 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74  ass represents t
6f80: 68 65 20 76 61 72 69 6f 75 73 20 69 6e 70 75 74  he various input
6f90: 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  s provided by th
6fa0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20  e SQLite core.. 
6fb0: 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 20 74     /// library t
6fc0: 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
6fd0: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
6fe0: 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22  odule.BestIndex"
6ff0: 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
7000: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7010: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c  .    public seal
7020: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49  ed class SQLiteI
7030: 6e 64 65 78 49 6e 70 75 74 73 0d 0a 20 20 20 20  ndexInputs..    
7040: 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
7050: 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73  on Internal Cons
7060: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
7070: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
7080: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
7090: 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
70a0: 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
70b0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
70c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
70d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
70e0: 61 6d 65 3d 22 6e 43 6f 6e 73 74 72 61 69 6e 74  ame="nConstraint
70f0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
7100: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73  The number of <s
7110: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
7120: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 22 20  ndexConstraint" 
7130: 2f 3e 20 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d  /> instances to.
7140: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 65  .        /// pre
7150: 2d 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20  -allocate space 
7160: 66 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  for...        //
7170: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
7180: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
7190: 61 6d 65 3d 22 6e 4f 72 64 65 72 42 79 22 3e 0d  ame="nOrderBy">.
71a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
71b0: 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20   number of <see 
71c0: 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
71d0: 78 4f 72 64 65 72 42 79 22 20 2f 3e 20 69 6e 73  xOrderBy" /> ins
71e0: 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20 20 20  tances to..     
71f0: 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63     /// pre-alloc
7200: 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a  ate space for...
7210: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
7220: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  ram>..        in
7230: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64  ternal SQLiteInd
7240: 65 78 49 6e 70 75 74 73 28 69 6e 74 20 6e 43 6f  exInputs(int nCo
7250: 6e 73 74 72 61 69 6e 74 2c 20 69 6e 74 20 6e 4f  nstraint, int nO
7260: 72 64 65 72 42 79 29 0d 0a 20 20 20 20 20 20 20  rderBy)..       
7270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7280: 63 6f 6e 73 74 72 61 69 6e 74 73 20 3d 20 6e 65  constraints = ne
7290: 77 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  w SQLiteIndexCon
72a0: 73 74 72 61 69 6e 74 5b 6e 43 6f 6e 73 74 72 61  straint[nConstra
72b0: 69 6e 74 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  int];..         
72c0: 20 20 20 6f 72 64 65 72 42 79 73 20 3d 20 6e 65     orderBys = ne
72d0: 77 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  w SQLiteIndexOrd
72e0: 65 72 42 79 5b 6e 4f 72 64 65 72 42 79 5d 3b 0d  erBy[nOrderBy];.
72f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
7300: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7310: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
7320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7360: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
7370: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
7380: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
7390: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e  private SQLiteIn
73a0: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20  dexConstraint[] 
73b0: 63 6f 6e 73 74 72 61 69 6e 74 73 3b 0d 0a 20 20  constraints;..  
73c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
73d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
73e0: 20 41 6e 20 61 72 72 61 79 20 6f 66 20 3c 73 65   An array of <se
73f0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
7400: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f  dexConstraint" /
7410: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
7420: 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  es,..        ///
7430: 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67   each containing
7440: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75 70   information sup
7450: 70 6c 69 65 64 20 62 79 20 74 68 65 20 53 51 4c  plied by the SQL
7460: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
7470: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7480: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7490: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
74a0: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 5b  IndexConstraint[
74b0: 5d 20 43 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20  ] Constraints.. 
74c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
74d0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
74e0: 72 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 3b 20  rn constraints; 
74f0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
7500: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7550: 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
7560: 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72  te SQLiteIndexOr
7570: 64 65 72 42 79 5b 5d 20 6f 72 64 65 72 42 79 73  derBy[] orderBys
7580: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
7590: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
75a0: 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f    /// An array o
75b0: 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
75c0: 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 22  iteIndexOrderBy"
75d0: 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
75e0: 6e 63 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f  nces,..        /
75f0: 2f 2f 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69  // each containi
7600: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73  ng information s
7610: 75 70 70 6c 69 65 64 20 62 79 20 74 68 65 20 53  upplied by the S
7620: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
7630: 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry...        ///
7640: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
7650: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
7660: 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 5b 5d  teIndexOrderBy[]
7670: 20 4f 72 64 65 72 42 79 73 0d 0a 20 20 20 20 20   OrderBys..     
7680: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7690: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6f    get { return o
76a0: 72 64 65 72 42 79 73 3b 20 7d 0d 0a 20 20 20 20  rderBys; }..    
76b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
76c0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
76d0: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
76e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
76f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7730: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
7740: 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75  on SQLiteIndexOu
7750: 74 70 75 74 73 20 48 65 6c 70 65 72 20 43 6c 61  tputs Helper Cla
7760: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
7770: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
7780: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
7790: 65 6e 74 73 20 74 68 65 20 76 61 72 69 6f 75 73  ents the various
77a0: 20 6f 75 74 70 75 74 73 20 70 72 6f 76 69 64 65   outputs provide
77b0: 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20  d to the SQLite 
77c0: 63 6f 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69  core..    /// li
77d0: 62 72 61 72 79 20 62 79 20 74 68 65 20 3c 73 65  brary by the <se
77e0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
77f0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73  anagedModule.Bes
7800: 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f  tIndex" /> metho
7810: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
7820: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
7830: 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  ic sealed class 
7840: 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75  SQLiteIndexOutpu
7850: 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ts..    {..     
7860: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72     #region Inter
7870: 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  nal Constructors
7880: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
7890: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
78a0: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
78b0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
78c0: 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
78d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
78e0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
78f0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f  <param name="nCo
7900: 6e 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20  nstraint">..    
7910: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
7920: 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d  er of <see cref=
7930: 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73  "SQLiteIndexCons
7940: 74 72 61 69 6e 74 55 73 61 67 65 22 20 2f 3e 20  traintUsage" /> 
7950: 69 6e 73 74 61 6e 63 65 73 0d 0a 20 20 20 20 20  instances..     
7960: 20 20 20 2f 2f 2f 20 74 6f 20 70 72 65 2d 61 6c     /// to pre-al
7970: 6c 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72  locate space for
7980: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7990: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
79a0: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
79b0: 49 6e 64 65 78 4f 75 74 70 75 74 73 28 69 6e 74  IndexOutputs(int
79c0: 20 6e 43 6f 6e 73 74 72 61 69 6e 74 29 0d 0a 20   nConstraint).. 
79d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
79e0: 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
79f0: 55 73 61 67 65 73 20 3d 20 6e 65 77 20 53 51 4c  Usages = new SQL
7a00: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
7a10: 6e 74 55 73 61 67 65 5b 6e 43 6f 6e 73 74 72 61  ntUsage[nConstra
7a20: 69 6e 74 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d  int];..        }
7a30: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
7a40: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7aa0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
7ab0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
7ac0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
7ad0: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
7ae0: 69 6e 74 55 73 61 67 65 5b 5d 20 63 6f 6e 73 74  intUsage[] const
7af0: 72 61 69 6e 74 55 73 61 67 65 73 3b 0d 0a 20 20  raintUsages;..  
7b00: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
7b10: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
7b20: 20 41 6e 20 61 72 72 61 79 20 6f 66 20 3c 73 65   An array of <se
7b30: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
7b40: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  dexConstraintUsa
7b50: 67 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20  ge" /> object.. 
7b60: 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61         /// insta
7b70: 6e 63 65 73 2c 20 65 61 63 68 20 63 6f 6e 74 61  nces, each conta
7b80: 69 6e 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  ining informatio
7b90: 6e 20 74 6f 20 62 65 20 73 75 70 70 6c 69 65 64  n to be supplied
7ba0: 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 0d 0a   to the SQLite..
7bb0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72 65          /// core
7bc0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
7bd0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7be0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
7bf0: 63 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  c SQLiteIndexCon
7c00: 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 20 43  straintUsage[] C
7c10: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 0d  onstraintUsages.
7c20: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7c30: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
7c40: 74 75 72 6e 20 63 6f 6e 73 74 72 61 69 6e 74 55  turn constraintU
7c50: 73 61 67 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20  sages; }..      
7c60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
7c70: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
7cc0: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 69 6e    private int in
7cd0: 64 65 78 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20  dexNumber;..    
7ce0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7cf0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
7d00: 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 68 65  umber used to he
7d10: 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20  lp identify the 
7d20: 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 20  selected index. 
7d30: 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
7d40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61  ..        /// la
7d50: 74 65 72 20 62 65 20 70 72 6f 76 69 64 65 64 20  ter be provided 
7d60: 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
7d70: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
7d80: 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22 20 2f  Module.Filter" /
7d90: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
7da0: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
7db0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7dc0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69          public i
7dd0: 6e 74 20 49 6e 64 65 78 4e 75 6d 62 65 72 0d 0a  nt IndexNumber..
7de0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7df0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
7e00: 75 72 6e 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b  urn indexNumber;
7e10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7e20: 73 65 74 20 7b 20 69 6e 64 65 78 4e 75 6d 62 65  set { indexNumbe
7e30: 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  r = value; }..  
7e40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7e50: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7ea0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
7eb0: 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67  ring indexString
7ec0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
7ed0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
7ee0: 20 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65    /// String use
7ef0: 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69  d to help identi
7f00: 66 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  fy the selected 
7f10: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 76 61 6c  index.  This val
7f20: 75 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  ue will..       
7f30: 20 2f 2f 2f 20 6c 61 74 65 72 20 62 65 20 70 72   /// later be pr
7f40: 6f 76 69 64 65 64 20 74 6f 20 74 68 65 20 3c 73  ovided to the <s
7f50: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
7f60: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69  ManagedModule.Fi
7f70: 6c 74 65 72 22 20 2f 3e 0d 0a 20 20 20 20 20 20  lter" />..      
7f80: 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20    /// method... 
7f90: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
7fa0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
7fb0: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 49 6e 64  ublic string Ind
7fc0: 65 78 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20  exString..      
7fd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7fe0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e   get { return in
7ff0: 64 65 78 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20  dexString; }..  
8000: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
8010: 69 6e 64 65 78 53 74 72 69 6e 67 20 3d 20 76 61  indexString = va
8020: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
8030: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
8040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8080: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8090: 70 72 69 76 61 74 65 20 69 6e 74 20 6e 65 65 64  private int need
80a0: 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e  ToFreeIndexStrin
80b0: 67 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  g;..        /// 
80c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
80d0: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
80e0: 69 66 20 74 68 65 20 69 6e 64 65 78 20 73 74 72  if the index str
80f0: 69 6e 67 20 6d 75 73 74 20 62 65 20 66 72 65 65  ing must be free
8100: 64 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20  d by the SQLite 
8110: 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  core..        //
8120: 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  / library...    
8130: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8140: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
8150: 69 63 20 69 6e 74 20 4e 65 65 64 54 6f 46 72 65  ic int NeedToFre
8160: 65 49 6e 64 65 78 53 74 72 69 6e 67 0d 0a 20 20  eIndexString..  
8170: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8180: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
8190: 6e 20 6e 65 65 64 54 6f 46 72 65 65 49 6e 64 65  n needToFreeInde
81a0: 78 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20  xString; }..    
81b0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 65          set { ne
81c0: 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72  edToFreeIndexStr
81d0: 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ing = value; }..
81e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
81f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
8240: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
8250: 69 6e 74 20 6f 72 64 65 72 42 79 43 6f 6e 73 75  int orderByConsu
8260: 6d 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  med;..        //
8270: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8280: 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66       /// True if
8290: 20 6f 75 74 70 75 74 20 69 73 20 61 6c 72 65 61   output is alrea
82a0: 64 79 20 6f 72 64 65 72 65 64 2e 0d 0a 20 20 20  dy ordered...   
82b0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
82c0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
82d0: 6c 69 63 20 69 6e 74 20 4f 72 64 65 72 42 79 43  lic int OrderByC
82e0: 6f 6e 73 75 6d 65 64 0d 0a 20 20 20 20 20 20 20  onsumed..       
82f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8300: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6f 72 64  get { return ord
8310: 65 72 42 79 43 6f 6e 73 75 6d 65 64 3b 20 7d 0d  erByConsumed; }.
8320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
8330: 20 7b 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d   { orderByConsum
8340: 65 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ed = value; }.. 
8350: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8360: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
83b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 64         private d
83c0: 6f 75 62 6c 65 20 65 73 74 69 6d 61 74 65 64 43  ouble estimatedC
83d0: 6f 73 74 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ost;..        //
83e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
83f0: 20 20 20 20 20 2f 2f 2f 20 45 73 74 69 6d 61 74       /// Estimat
8400: 65 64 20 63 6f 73 74 20 6f 66 20 75 73 69 6e 67  ed cost of using
8410: 20 74 68 69 73 20 69 6e 64 65 78 2e 0d 0a 20 20   this index...  
8420: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
8430: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
8440: 62 6c 69 63 20 64 6f 75 62 6c 65 20 45 73 74 69  blic double Esti
8450: 6d 61 74 65 64 43 6f 73 74 0d 0a 20 20 20 20 20  matedCost..     
8460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8470: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 65    get { return e
8480: 73 74 69 6d 61 74 65 64 43 6f 73 74 3b 20 7d 0d  stimatedCost; }.
8490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
84a0: 20 7b 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74   { estimatedCost
84b0: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
84c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
84d0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
84e0: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
84f0: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
8500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8540: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
8550: 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 20  ion SQLiteIndex 
8560: 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20  Helper Class..  
8570: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8580: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
8590: 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74  ass represents t
85a0: 68 65 20 76 61 72 69 6f 75 73 20 69 6e 70 75 74  he various input
85b0: 73 20 61 6e 64 20 6f 75 74 70 75 74 73 20 75 73  s and outputs us
85c0: 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20  ed with the..   
85d0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
85e0: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
85f0: 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20  dule.BestIndex" 
8600: 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
8610: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8620: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
8630: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e  d class SQLiteIn
8640: 64 65 78 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  dex..    {..    
8650: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65      #region Inte
8660: 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72  rnal Constructor
8670: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
8680: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8690: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
86a0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
86b0: 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
86c0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
86d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
86e0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 43   <param name="nC
86f0: 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20  onstraint">..   
8700: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d       /// The num
8710: 62 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66  ber of <see cref
8720: 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  ="SQLiteIndexCon
8730: 73 74 72 61 69 6e 74 22 20 2f 3e 20 28 61 6e 64  straint" /> (and
8740: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
8750: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
8760: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73  ndexConstraintUs
8770: 61 67 65 22 20 2f 3e 29 20 69 6e 73 74 61 6e 63  age" />) instanc
8780: 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  es to..        /
8790: 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20  // pre-allocate 
87a0: 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20  space for...    
87b0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
87c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
87d0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 4f 72 64 65  aram name="nOrde
87e0: 72 42 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rBy">..        /
87f0: 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
8800: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
8810: 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 22 20  teIndexOrderBy" 
8820: 2f 3e 20 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d  /> instances to.
8830: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 65  .        /// pre
8840: 2d 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20  -allocate space 
8850: 66 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  for...        //
8860: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
8870: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c      internal SQL
8880: 69 74 65 49 6e 64 65 78 28 0d 0a 20 20 20 20 20  iteIndex(..     
8890: 20 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e 73         int nCons
88a0: 74 72 61 69 6e 74 2c 0d 0a 20 20 20 20 20 20 20  traint,..       
88b0: 20 20 20 20 20 69 6e 74 20 6e 4f 72 64 65 72 42       int nOrderB
88c0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
88d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
88e0: 20 20 20 20 20 20 20 20 20 69 6e 70 75 74 73 20           inputs 
88f0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65  = new SQLiteInde
8900: 78 49 6e 70 75 74 73 28 6e 43 6f 6e 73 74 72 61  xInputs(nConstra
8910: 69 6e 74 2c 20 6e 4f 72 64 65 72 42 79 29 3b 0d  int, nOrderBy);.
8920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 75 74  .            out
8930: 70 75 74 73 20 3d 20 6e 65 77 20 53 51 4c 69 74  puts = new SQLit
8940: 65 49 6e 64 65 78 4f 75 74 70 75 74 73 28 6e 43  eIndexOutputs(nC
8950: 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 20 20 20  onstraint);..   
8960: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8970: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
8980: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
89d0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
89e0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
89f0: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
8a00: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 49  ate SQLiteIndexI
8a10: 6e 70 75 74 73 20 69 6e 70 75 74 73 3b 0d 0a 20  nputs inputs;.. 
8a20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
8a30: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
8a40: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
8a50: 22 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75  "SQLiteIndexInpu
8a60: 74 73 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ts" /> object in
8a70: 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e  stance containin
8a80: 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  g..        /// t
8a90: 68 65 20 69 6e 70 75 74 73 20 74 6f 20 74 68 65  he inputs to the
8aa0: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
8ab0: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
8ac0: 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a  .BestIndex" />..
8ad0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68          /// meth
8ae0: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
8af0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8b00: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
8b10: 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20 49 6e  teIndexInputs In
8b20: 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  puts..        {.
8b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
8b40: 20 7b 20 72 65 74 75 72 6e 20 69 6e 70 75 74 73   { return inputs
8b50: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
8b60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bb0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
8bc0: 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78  vate SQLiteIndex
8bd0: 4f 75 74 70 75 74 73 20 6f 75 74 70 75 74 73 3b  Outputs outputs;
8be0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
8bf0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
8c00: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
8c10: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f  ef="SQLiteIndexO
8c20: 75 74 70 75 74 73 22 20 2f 3e 20 6f 62 6a 65 63  utputs" /> objec
8c30: 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61  t instance conta
8c40: 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f  ining..        /
8c50: 2f 2f 20 74 68 65 20 6f 75 74 70 75 74 73 20 66  // the outputs f
8c60: 72 6f 6d 20 74 68 65 20 3c 73 65 65 20 63 72 65  rom the <see cre
8c70: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
8c80: 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65  dModule.BestInde
8c90: 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  x" />..        /
8ca0: 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  // method...    
8cb0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8cc0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
8cd0: 69 63 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75  ic SQLiteIndexOu
8ce0: 74 70 75 74 73 20 4f 75 74 70 75 74 73 0d 0a 20  tputs Outputs.. 
8cf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8d00: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
8d10: 72 6e 20 6f 75 74 70 75 74 73 3b 20 7d 0d 0a 20  rn outputs; }.. 
8d20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8d30: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
8d40: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
8d50: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
8d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8da0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
8db0: 65 67 69 6f 6e 20 53 51 4c 69 74 65 56 69 72 74  egion SQLiteVirt
8dc0: 75 61 6c 54 61 62 6c 65 20 42 61 73 65 20 43 6c  ualTable Base Cl
8dd0: 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
8de0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
8df0: 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65  This class repre
8e00: 73 65 6e 74 73 20 61 20 6d 61 6e 61 67 65 64 20  sents a managed 
8e10: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
8e20: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 49  plementation.  I
8e30: 74 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e 6f  t is..    /// no
8e40: 74 20 73 65 61 6c 65 64 20 61 6e 64 20 73 68 6f  t sealed and sho
8e50: 75 6c 64 20 62 65 20 75 73 65 64 20 61 73 20 74  uld be used as t
8e60: 68 65 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f  he base class fo
8e70: 72 20 61 6e 79 20 75 73 65 72 2d 64 65 66 69 6e  r any user-defin
8e80: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 76 69 72 74  ed..    /// virt
8e90: 75 61 6c 20 74 61 62 6c 65 73 20 69 6d 70 6c 65  ual tables imple
8ea0: 6d 65 6e 74 65 64 20 69 6e 20 6d 61 6e 61 67 65  mented in manage
8eb0: 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f  d code...    ///
8ec0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8ed0: 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53 51   public class SQ
8ee0: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
8ef0: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
8f00: 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e  ISQLiteNativeHan
8f10: 64 6c 65 2c 20 49 44 69 73 70 6f 73 61 62 6c 65  dle, IDisposable
8f20: 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45 44 20 2a   /* NOT SEALED *
8f30: 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  /..    {..      
8f40: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
8f50: 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  e Constants..   
8f60: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
8f70: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
8f80: 54 68 65 20 69 6e 64 65 78 20 77 69 74 68 69 6e  The index within
8f90: 20 74 68 65 20 61 72 72 61 79 20 6f 66 20 73 74   the array of st
8fa0: 72 69 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74  rings provided t
8fb0: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
8fc0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
8fd0: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
8fe0: 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e  le.Create" /> an
8ff0: 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  d..        /// <
9000: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
9010: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43  eManagedModule.C
9020: 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
9030: 64 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ds containing th
9040: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
9050: 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  ame of the modul
9060: 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
9070: 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c  his virtual tabl
9080: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
9090: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
90a0: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
90b0: 74 20 69 6e 74 20 4d 6f 64 75 6c 65 4e 61 6d 65  t int ModuleName
90c0: 49 6e 64 65 78 20 3d 20 30 3b 0d 0a 0d 0a 20 20  Index = 0;....  
90d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
9120: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
9130: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
9140: 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20 77 69  /// The index wi
9150: 74 68 69 6e 20 74 68 65 20 61 72 72 61 79 20 6f  thin the array o
9160: 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69 64  f strings provid
9170: 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ed to the..     
9180: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
9190: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
91a0: 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f  Module.Create" /
91b0: 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f  > and..        /
91c0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
91d0: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
91e0: 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  le.Connect" /> m
91f0: 65 74 68 6f 64 73 20 63 6f 6e 74 61 69 6e 69 6e  ethods containin
9200: 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
9210: 2f 2f 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  // name of the d
9220: 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69  atabase containi
9230: 6e 67 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  ng this virtual 
9240: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
9250: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9260: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
9270: 63 6f 6e 73 74 20 69 6e 74 20 44 61 74 61 62 61  const int Databa
9280: 73 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 31 3b  seNameIndex = 1;
9290: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
92a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
92f0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9300: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
9310: 64 65 78 20 77 69 74 68 69 6e 20 74 68 65 20 61  dex within the a
9320: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
9330: 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d  provided to the.
9340: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
9350: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
9360: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65  anagedModule.Cre
9370: 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20  ate" /> and..   
9380: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
9390: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
93a0: 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74  edModule.Connect
93b0: 22 20 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f 6e  " /> methods con
93c0: 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20  taining the..   
93d0: 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66       /// name of
93e0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
93f0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
9400: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
9410: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
9420: 73 74 20 69 6e 74 20 54 61 62 6c 65 4e 61 6d 65  st int TableName
9430: 49 6e 64 65 78 20 3d 20 32 3b 0d 0a 20 20 20 20  Index = 2;..    
9440: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
9450: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
9460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
94b0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
94c0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
94d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
94e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
94f0: 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
9500: 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
9510: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
9520: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9530: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9540: 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 73 22 3e  ame="arguments">
9550: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
9560: 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 72 61 79  e original array
9570: 20 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76   of strings prov
9580: 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20  ided to the..   
9590: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
95a0: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
95b0: 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22  edModule.Create"
95c0: 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20   /> and..       
95d0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
95e0: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
95f0: 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e  dule.Connect" />
9600: 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20   methods...     
9610: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
9620: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
9630: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
9640: 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
9650: 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
9660: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
9670: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
9680: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
9690: 61 72 67 75 6d 65 6e 74 73 20 3d 20 61 72 67 75  arguments = argu
96a0: 6d 65 6e 74 73 3b 0d 0a 20 20 20 20 20 20 20 20  ments;..        
96b0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
96c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
96d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9710: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9720: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
9730: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
9740: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
9750: 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74  tring[] argument
9760: 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s;..        /// 
9770: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
9780: 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69     /// The origi
9790: 6e 61 6c 20 61 72 72 61 79 20 6f 66 20 73 74 72  nal array of str
97a0: 69 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74 6f  ings provided to
97b0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
97c0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
97d0: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
97e0: 65 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e 64  e.Create" /> and
97f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
9800: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
9810: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f  ManagedModule.Co
9820: 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
9830: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
9840: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9850: 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75      public virtu
9860: 61 6c 20 73 74 72 69 6e 67 5b 5d 20 41 72 67 75  al string[] Argu
9870: 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 7b  ments..        {
9880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
9890: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
98a0: 64 28 29 3b 20 72 65 74 75 72 6e 20 61 72 67 75  d(); return argu
98b0: 6d 65 6e 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20  ments; }..      
98c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
98d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9910: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9920: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
9930: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
9940: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64   name of the mod
9950: 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ule implementing
9960: 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
9970: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
9980: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9990: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
99a0: 74 75 61 6c 20 73 74 72 69 6e 67 20 4d 6f 64 75  tual string Modu
99b0: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
99c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
99d0: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
99e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
99f0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9a00: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9a10: 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
9a20: 61 72 67 75 6d 65 6e 74 73 20 3d 20 41 72 67 75  arguments = Argu
9a30: 6d 65 6e 74 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  ments;....      
9a40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61            if ((a
9a50: 72 67 75 6d 65 6e 74 73 20 21 3d 20 6e 75 6c 6c  rguments != null
9a60: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
9a70: 20 20 20 20 20 20 20 20 20 20 28 61 72 67 75 6d            (argum
9a80: 65 6e 74 73 2e 4c 65 6e 67 74 68 20 3e 20 4d 6f  ents.Length > Mo
9a90: 64 75 6c 65 4e 61 6d 65 49 6e 64 65 78 29 29 0d  duleNameIndex)).
9aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ab0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9ac0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61          return a
9ad0: 72 67 75 6d 65 6e 74 73 5b 4d 6f 64 75 6c 65 4e  rguments[ModuleN
9ae0: 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  ameIndex];..    
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
9b10: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
9b20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9b40: 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
9b50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9b60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9b70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9b80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bc0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9bd0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9be0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
9bf0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
9c00: 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69  atabase containi
9c10: 6e 67 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  ng this virtual 
9c20: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
9c30: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9c40: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
9c50: 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20 44 61  irtual string Da
9c60: 74 61 62 61 73 65 4e 61 6d 65 0d 0a 20 20 20 20  tabaseName..    
9c70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9c80: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
9c90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9ca0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9cb0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
9cc0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9cd0: 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20 3d 20  g[] arguments = 
9ce0: 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20 20  Arguments;....  
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9d00: 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21 3d 20   ((arguments != 
9d10: 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61                (a
9d30: 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68 20  rguments.Length 
9d40: 3e 20 44 61 74 61 62 61 73 65 4e 61 6d 65 49 6e  > DatabaseNameIn
9d50: 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20  dex))..         
9d60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9d80: 74 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 44  turn arguments[D
9d90: 61 74 61 62 61 73 65 4e 61 6d 65 49 6e 64 65 78  atabaseNameIndex
9da0: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
9db0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9dc0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9df0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e10: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9e20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
9e30: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
9e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e60: 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
9e90: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
9ea0: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
9eb0: 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  of the virtual t
9ec0: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
9ed0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9ee0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69         public vi
9ef0: 72 74 75 61 6c 20 73 74 72 69 6e 67 20 54 61 62  rtual string Tab
9f00: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
9f10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
9f20: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
9f30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9f40: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9f50: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9f60: 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
9f70: 61 72 67 75 6d 65 6e 74 73 20 3d 20 41 72 67 75  arguments = Argu
9f80: 6d 65 6e 74 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  ments;....      
9f90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61            if ((a
9fa0: 72 67 75 6d 65 6e 74 73 20 21 3d 20 6e 75 6c 6c  rguments != null
9fb0: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
9fc0: 20 20 20 20 20 20 20 20 20 20 28 61 72 67 75 6d            (argum
9fd0: 65 6e 74 73 2e 4c 65 6e 67 74 68 20 3e 20 54 61  ents.Length > Ta
9fe0: 62 6c 65 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a  bleNameIndex))..
9ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a000: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a010: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72         return ar
a020: 67 75 6d 65 6e 74 73 5b 54 61 62 6c 65 4e 61 6d  guments[TableNam
a030: 65 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  eIndex];..      
a040: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a050: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
a060: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
a070: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a080: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a090: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
a0a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a0b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a0c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
a0d0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
a0e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a130: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
a140: 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  blic Methods..  
a150: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
a160: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
a170: 20 41 74 74 65 6d 70 74 73 20 74 6f 20 72 65 63   Attempts to rec
a180: 6f 72 64 20 74 68 65 20 72 65 6e 61 6d 69 6e 67  ord the renaming
a190: 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   of the virtual 
a1a0: 74 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64  table associated
a1b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
a1c0: 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  th this object i
a1d0: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
a1e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
a1f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
a200: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
a210: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
a220: 68 65 20 6e 65 77 20 6e 61 6d 65 20 66 6f 72 20  he new name for 
a230: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
a240: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
a250: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
a260: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
a270: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
a280: 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65  -zero upon succe
a290: 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
a2a0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
a2b0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
a2c0: 75 61 6c 20 62 6f 6f 6c 20 52 65 6e 61 6d 65 28  ual bool Rename(
a2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
a2e0: 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20 20 20  ring name..     
a2f0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
a300: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a310: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a320: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a330: 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20   if ((arguments 
a340: 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 72               (ar
a360: 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68 20 3e  guments.Length >
a370: 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 29   TableNameIndex)
a380: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
a390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a3a0: 20 20 61 72 67 75 6d 65 6e 74 73 5b 54 61 62 6c    arguments[Tabl
a3b0: 65 4e 61 6d 65 49 6e 64 65 78 5d 20 3d 20 6e 61  eNameIndex] = na
a3c0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
a3d0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
a3e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a3f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a400: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
a410: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a420: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a430: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a480: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
a490: 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  on ISQLiteNative
a4a0: 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  Handle Members..
a4b0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
a4c0: 49 6e 74 50 74 72 20 6e 61 74 69 76 65 48 61 6e  IntPtr nativeHan
a4d0: 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dle;..        //
a4e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
a4f0: 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73       /// Returns
a500: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
a510: 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 68 61  SQLite native ha
a520: 6e 64 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  ndle associated 
a530: 77 69 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20  with this..     
a540: 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e     /// object in
a550: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
a560: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
a570: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
a580: 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20 4e  virtual IntPtr N
a590: 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20  ativeHandle..   
a5a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a5b0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
a5c0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
a5d0: 6e 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 20  n nativeHandle; 
a5e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  }..            i
a5f0: 6e 74 65 72 6e 61 6c 20 73 65 74 20 7b 20 6e 61  nternal set { na
a600: 74 69 76 65 48 61 6e 64 6c 65 20 3d 20 76 61 6c  tiveHandle = val
a610: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  ue; }..        }
a620: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
a630: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a680: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a690: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
a6a0: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
a6b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
a6c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
a6d0: 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20 74  // Disposes of t
a6e0: 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
a6f0: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
a700: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
a710: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
a720: 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20  d Dispose()..   
a730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a740: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65      Dispose(true
a750: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a760: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
a770: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
a780: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
a790: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
a7a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a7f0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
a800: 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74  IDisposable "Pat
a810: 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20  tern" Members.. 
a820: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
a830: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
a840: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
a850: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
a860: 2f 20 54 68 72 6f 77 73 20 61 6e 20 3c 73 65 65  / Throws an <see
a870: 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 4f 62   cref="System.Ob
a880: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
a890: 70 74 69 6f 6e 22 2f 3e 20 69 66 20 74 68 69 73  ption"/> if this
a8a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62  ..        /// ob
a8b0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 68 61  ject instance ha
a8c0: 73 20 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e  s been disposed.
a8d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
a8e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
a8f0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
a900: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
a910: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
a920: 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57      {..#if THROW
a930: 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20  _ON_DISPOSED..  
a940: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
a950: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
a960: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a970: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
a980: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
a990: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9b0: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 56 69 72  typeof(SQLiteVir
a9c0: 74 75 61 6c 54 61 62 6c 65 29 2e 4e 61 6d 65 29  tualTable).Name)
a9d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a9e0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
a9f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
aa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
aa50: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
aa60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73  .        /// Dis
aa70: 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62  poses of this ob
aa80: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
aa90: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
aaa0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
aab0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
aac0: 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20  "disposing">..  
aad0: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
aae0: 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f  ro if this metho
aaf0: 64 20 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65  d is being calle
ab00: 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20  d from the..    
ab10: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
ab20: 66 3d 22 44 69 73 70 6f 73 65 28 29 22 20 2f 3e  f="Dispose()" />
ab30: 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20 69   method.  Zero i
ab40: 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73  f this method is
ab50: 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 0d 0a 20   being called.. 
ab60: 20 20 20 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20         /// from 
ab70: 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a  the finalizer...
ab80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
ab90: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ram>..        pr
aba0: 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
abb0: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f  void Dispose(boo
abc0: 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20  l disposing)..  
abd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
abe0: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
abf0: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
ac00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ac10: 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73      //if (dispos
ac20: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
ac30: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
ac40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
ac50: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ac60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac70: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
ac80: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
ac90: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
aca0: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
acb0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
acc0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
acd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ace0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ad00: 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  /}....          
ad10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ad20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
ad40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ad50: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
ad60: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
ad70: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
ad80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ad90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ada0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adc0: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
add0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ade0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
adf0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
ae00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae50: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
ae60: 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d  gion Destructor.
ae70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
ae80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
ae90: 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68  /// Finalizes th
aea0: 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
aeb0: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
aec0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
aed0: 20 20 20 20 20 7e 53 51 4c 69 74 65 56 69 72 74       ~SQLiteVirt
aee0: 75 61 6c 54 61 62 6c 65 28 29 0d 0a 20 20 20 20  ualTable()..    
aef0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
af00: 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65     Dispose(false
af10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
af20: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
af30: 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
af40: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
afa0: 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
afb0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
afc0: 73 6f 72 20 42 61 73 65 20 43 6c 61 73 73 0d 0a  sor Base Class..
afd0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
afe0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
aff0: 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
b000: 20 61 20 6d 61 6e 61 67 65 64 20 76 69 72 74 75   a managed virtu
b010: 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  al table cursor 
b020: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
b030: 0a 20 20 20 20 2f 2f 2f 20 49 74 20 69 73 20 6e  .    /// It is n
b040: 6f 74 20 73 65 61 6c 65 64 20 61 6e 64 20 73 68  ot sealed and sh
b050: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 61 73 20  ould be used as 
b060: 74 68 65 20 62 61 73 65 20 63 6c 61 73 73 20 66  the base class f
b070: 6f 72 20 61 6e 79 0d 0a 20 20 20 20 2f 2f 2f 20  or any..    /// 
b080: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 76 69 72  user-defined vir
b090: 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
b0a0: 72 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e  r implemented in
b0b0: 20 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a   managed code...
b0c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b0d0: 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 63  y>..    public c
b0e0: 6c 61 73 73 20 53 51 4c 69 74 65 56 69 72 74 75  lass SQLiteVirtu
b0f0: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 3a 0d  alTableCursor :.
b100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51  .            ISQ
b110: 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65  LiteNativeHandle
b120: 2c 20 49 44 69 73 70 6f 73 61 62 6c 65 20 2f 2a  , IDisposable /*
b130: 20 4e 4f 54 20 53 45 41 4c 45 44 20 2a 2f 0d 0a   NOT SEALED */..
b140: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
b150: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
b160: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
b170: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
b180: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
b190: 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73  onstructs an ins
b1a0: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c  tance of this cl
b1b0: 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ass...        //
b1c0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
b1d0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
b1e0: 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a   name="table">..
b1f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
b200: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
b210: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
b220: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
b230: 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
b240: 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
b250: 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
b260: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
b270: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
b280: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
b290: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
b2a0: 73 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  sor(..          
b2b0: 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
b2c0: 61 62 6c 65 20 74 61 62 6c 65 0d 0a 20 20 20 20  able table..    
b2d0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
b2e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b2f0: 20 20 74 68 69 73 2e 74 61 62 6c 65 20 3d 20 74    this.table = t
b300: 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  able;..        }
b310: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
b320: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b370: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b380: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
b390: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
b3a0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
b3b0: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
b3c0: 20 74 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20   table;..       
b3d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
b3e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
b3f0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
b400: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
b410: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
b420: 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
b430: 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
b440: 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
b450: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
b460: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
b470: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
b480: 74 75 61 6c 20 53 51 4c 69 74 65 56 69 72 74 75  tual SQLiteVirtu
b490: 61 6c 54 61 62 6c 65 20 54 61 62 6c 65 0d 0a 20  alTable Table.. 
b4a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b4b0: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
b4c0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
b4d0: 75 72 6e 20 74 61 62 6c 65 3b 20 7d 0d 0a 20 20  urn table; }..  
b4e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b4f0: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
b530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b540: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 69 6e        private in
b550: 74 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b 0d 0a  t indexNumber;..
b560: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
b570: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
b580: 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74  // Number used t
b590: 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
b5a0: 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
b5b0: 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ex.  This value 
b5c0: 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  will..        //
b5d0: 2f 20 62 65 20 73 65 74 20 76 69 61 20 74 68 65  / be set via the
b5e0: 20 3c 73 65 65 20 63 72 65 66 3d 22 46 69 6c 74   <see cref="Filt
b5f0: 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  er" /> method...
b600: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
b610: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
b620: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 69  public virtual i
b630: 6e 74 20 49 6e 64 65 78 4e 75 6d 62 65 72 0d 0a  nt IndexNumber..
b640: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b650: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
b660: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
b670: 74 75 72 6e 20 69 6e 64 65 78 4e 75 6d 62 65 72  turn indexNumber
b680: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
b690: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
b6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
b6f0: 76 61 74 65 20 73 74 72 69 6e 67 20 69 6e 64 65  vate string inde
b700: 78 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20  xString;..      
b710: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
b720: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 74 72  .        /// Str
b730: 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ing used to help
b740: 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
b750: 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54  lected index.  T
b760: 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a  his value will..
b770: 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 73          /// be s
b780: 65 74 20 76 69 61 20 74 68 65 20 3c 73 65 65 20  et via the <see 
b790: 63 72 65 66 3d 22 46 69 6c 74 65 72 22 20 2f 3e  cref="Filter" />
b7a0: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
b7b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
b7c0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
b7d0: 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20   virtual string 
b7e0: 49 6e 64 65 78 53 74 72 69 6e 67 0d 0a 20 20 20  IndexString..   
b7f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b800: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
b810: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
b820: 6e 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 20 7d  n indexString; }
b830: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
b840: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b890: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
b8a0: 65 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20  e SQLiteValue[] 
b8b0: 76 61 6c 75 65 73 3b 0d 0a 20 20 20 20 20 20 20  values;..       
b8c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
b8d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
b8e0: 76 61 6c 75 65 73 20 75 73 65 64 20 74 6f 20 66  values used to f
b8f0: 69 6c 74 65 72 20 74 68 65 20 72 6f 77 73 20 72  ilter the rows r
b900: 65 74 75 72 6e 65 64 20 76 69 61 20 74 68 69 73  eturned via this
b910: 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 0d 0a   cursor object..
b920: 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74          /// inst
b930: 61 6e 63 65 2e 20 20 54 68 69 73 20 76 61 6c 75  ance.  This valu
b940: 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 76 69  e will be set vi
b950: 61 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  a the <see cref=
b960: 22 46 69 6c 74 65 72 22 20 2f 3e 0d 0a 20 20 20  "Filter" />..   
b970: 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e       /// method.
b980: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
b990: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
b9a0: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
b9b0: 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 56   SQLiteValue[] V
b9c0: 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 7b  alues..        {
b9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
b9e0: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
b9f0: 64 28 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 75  d(); return valu
ba00: 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  es; }..        }
ba10: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
ba20: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
ba30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ba80: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 6f 74 65     #region Prote
ba90: 63 74 65 64 20 4d 65 74 68 6f 64 73 0d 0a 20 20  cted Methods..  
baa0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
bab0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
bac0: 20 41 74 74 65 6d 70 74 73 20 74 6f 20 70 65 72   Attempts to per
bad0: 73 69 73 74 20 74 68 65 20 73 70 65 63 69 66 69  sist the specifi
bae0: 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
baf0: 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62  LiteValue" /> ob
bb00: 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
bb10: 2f 20 69 6e 73 74 61 6e 63 65 73 20 69 6e 20 6f  / instances in o
bb20: 72 64 65 72 20 74 6f 20 6d 61 6b 65 20 74 68 65  rder to make the
bb30: 6d 20 61 76 61 69 6c 61 62 6c 65 20 61 66 74 65  m available afte
bb40: 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  r the..        /
bb50: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
bb60: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
bb70: 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  le.Filter" /> me
bb80: 74 68 6f 64 20 72 65 74 75 72 6e 73 2e 0d 0a 20  thod returns... 
bb90: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
bba0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
bbb0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
bbc0: 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20  values">..      
bbd0: 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
bbe0: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
bbf0: 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62  LiteValue" /> ob
bc00: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20 74  ject instances t
bc10: 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o be..        //
bc20: 2f 20 70 65 72 73 69 73 74 65 64 2e 0d 0a 20 20  / persisted...  
bc30: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
bc40: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
bc50: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
bc60: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
bc70: 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  r of <see cref="
bc80: 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 20  SQLiteValue" /> 
bc90: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73  object instances
bca0: 20 74 68 61 74 20 77 65 72 65 0d 0a 20 20 20 20   that were..    
bcb0: 20 20 20 20 2f 2f 2f 20 73 75 63 63 65 73 73 66      /// successf
bcc0: 75 6c 6c 79 20 70 65 72 73 69 73 74 65 64 2e 0d  ully persisted..
bcd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
bce0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
bcf0: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
bd00: 61 6c 20 69 6e 74 20 54 72 79 50 65 72 73 69 73  al int TryPersis
bd10: 74 56 61 6c 75 65 73 28 0d 0a 20 20 20 20 20 20  tValues(..      
bd20: 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75        SQLiteValu
bd30: 65 5b 5d 20 76 61 6c 75 65 73 0d 0a 20 20 20 20  e[] values..    
bd40: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
bd50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bd60: 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30    int result = 0
bd70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
bd80: 20 69 66 20 28 76 61 6c 75 65 73 20 21 3d 20 6e   if (values != n
bd90: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
bda0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bdb0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 53 51       foreach (SQ
bdc0: 4c 69 74 65 56 61 6c 75 65 20 76 61 6c 75 65 20  LiteValue value 
bdd0: 69 6e 20 76 61 6c 75 65 73 29 0d 0a 20 20 20 20  in values)..    
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be00: 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
be10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
be30: 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
be40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be50: 69 66 20 28 76 61 6c 75 65 2e 50 65 72 73 69 73  if (value.Persis
be60: 74 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t())..          
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
be80: 73 75 6c 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  sult++;..       
be90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
bea0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
beb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
bec0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
bed0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
bee0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
bef0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bf00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
bf40: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
bf50: 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
bf60: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
bf70: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
bf80: 54 68 69 73 20 6d 65 74 68 6f 64 20 73 68 6f 75  This method shou
bf90: 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 62 65 20 75  ld normally be u
bfa0: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
bfb0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
bfc0: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
bfd0: 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22 20  dModule.Filter" 
bfe0: 2f 3e 20 6d 65 74 68 6f 64 20 69 6e 20 6f 72 64  /> method in ord
bff0: 65 72 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  er to..        /
c000: 2f 2f 20 70 65 72 66 6f 72 6d 20 66 69 6c 74 65  // perform filte
c010: 72 69 6e 67 20 6f 66 20 74 68 65 20 72 65 73 75  ring of the resu
c020: 6c 74 20 72 6f 77 73 20 61 6e 64 2f 6f 72 20 74  lt rows and/or t
c030: 6f 20 72 65 63 6f 72 64 20 74 68 65 20 66 69 6c  o record the fil
c040: 74 65 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  tering..        
c050: 2f 2f 2f 20 63 72 69 74 65 72 69 61 20 70 72 6f  /// criteria pro
c060: 76 69 64 65 64 20 62 79 20 74 68 65 20 53 51 4c  vided by the SQL
c070: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
c080: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
c090: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
c0a0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
c0b0: 6d 65 3d 22 69 6e 64 65 78 4e 75 6d 62 65 72 22  me="indexNumber"
c0c0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
c0d0: 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 68 65  umber used to he
c0e0: 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20  lp identify the 
c0f0: 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d  selected index..
c100: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
c110: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
c120: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
c130: 69 6e 64 65 78 53 74 72 69 6e 67 22 3e 0d 0a 20  indexString">.. 
c140: 20 20 20 20 20 20 20 2f 2f 2f 20 53 74 72 69 6e         /// Strin
c150: 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  g used to help i
c160: 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
c170: 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20  cted index...   
c180: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
c190: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
c1a0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
c1b0: 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  es">..        //
c1c0: 2f 20 54 68 65 20 76 61 6c 75 65 73 20 63 6f 72  / The values cor
c1d0: 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 65 61  responding to ea
c1e0: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
c1f0: 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e   selected index.
c200: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
c210: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
c220: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 76  public virtual v
c230: 6f 69 64 20 46 69 6c 74 65 72 28 0d 0a 20 20 20  oid Filter(..   
c240: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
c250: 65 78 4e 75 6d 62 65 72 2c 0d 0a 20 20 20 20 20  exNumber,..     
c260: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
c270: 64 65 78 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  dexString,..    
c280: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61          SQLiteVa
c290: 6c 75 65 5b 5d 20 76 61 6c 75 65 73 0d 0a 20 20  lue[] values..  
c2a0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
c2b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c2c0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
c2d0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
c2e0: 20 20 20 20 69 66 20 28 28 76 61 6c 75 65 73 20      if ((values 
c2f0: 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
c300: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 72               (Tr
c310: 79 50 65 72 73 69 73 74 56 61 6c 75 65 73 28 76  yPersistValues(v
c320: 61 6c 75 65 73 29 20 21 3d 20 76 61 6c 75 65 73  alues) != values
c330: 2e 4c 65 6e 67 74 68 29 29 0d 0a 20 20 20 20 20  .Length))..     
c340: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c350: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
c360: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
c370: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
c380: 20 20 20 20 20 20 20 20 20 20 22 66 61 69 6c 65            "faile
c390: 64 20 74 6f 20 70 65 72 73 69 73 74 20 6f 6e 65  d to persist one
c3a0: 20 6f 72 20 6d 6f 72 65 20 76 61 6c 75 65 73 22   or more values"
c3b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c3c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
c3d0: 20 74 68 69 73 2e 69 6e 64 65 78 4e 75 6d 62 65   this.indexNumbe
c3e0: 72 20 3d 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b  r = indexNumber;
c3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
c400: 69 73 2e 69 6e 64 65 78 53 74 72 69 6e 67 20 3d  is.indexString =
c410: 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a 20   indexString;.. 
c420: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
c430: 76 61 6c 75 65 73 20 3d 20 76 61 6c 75 65 73 3b  values = values;
c440: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
c450: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
c460: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
c470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c480: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
c4c0: 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74  egion ISQLiteNat
c4d0: 69 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72  iveHandle Member
c4e0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
c4f0: 74 65 20 49 6e 74 50 74 72 20 6e 61 74 69 76 65  te IntPtr native
c500: 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20  Handle;..       
c510: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
c520: 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75          /// Retu
c530: 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79 69  rns the underlyi
c540: 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65  ng SQLite native
c550: 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61 74   handle associat
c560: 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20 20  ed with this..  
c570: 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74        /// object
c580: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
c590: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
c5a0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
c5b0: 69 63 20 76 69 72 74 75 61 6c 20 49 6e 74 50 74  ic virtual IntPt
c5c0: 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a  r NativeHandle..
c5d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c5e0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
c5f0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
c600: 74 75 72 6e 20 6e 61 74 69 76 65 48 61 6e 64 6c  turn nativeHandl
c610: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
c620: 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 74 20 7b    internal set {
c630: 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 20 3d 20   nativeHandle = 
c640: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
c650: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
c660: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
c670: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c6c0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
c6d0: 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72  isposable Member
c6e0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
c6f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
c700: 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f    /// Disposes o
c710: 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
c720: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
c730: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
c740: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
c750: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
c760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c770: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74         Dispose(t
c780: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
c790: 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
c7a0: 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
c7b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c7c0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
c7d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
c820: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
c830: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
c840: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
c850: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
c860: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
c870: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
c880: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
c890: 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20 3c   /// Throws an <
c8a0: 73 65 65 20 63 72 65 66 3d 22 53 79 73 74 65 6d  see cref="System
c8b0: 2e 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45  .ObjectDisposedE
c8c0: 78 63 65 70 74 69 6f 6e 22 2f 3e 20 69 66 20 74  xception"/> if t
c8d0: 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
c8e0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
c8f0: 20 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f 73   has been dispos
c900: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
c910: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
c920: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
c930: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
c940: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
c950: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48         {..#if TH
c960: 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
c970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
c980: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
c990: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c9a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
c9b0: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
c9c0: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
c9f0: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
ca00: 6f 72 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  or).Name);..    
ca10: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
ca20: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
ca30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ca40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ca80: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
ca90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
caa0: 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f    /// Disposes o
cab0: 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
cac0: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
cad0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
cae0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
caf0: 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73  ram name="dispos
cb00: 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ing">..        /
cb10: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
cb20: 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65  his method is be
cb30: 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  ing called from 
cb40: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
cb50: 20 3c 73 65 65 20 63 72 65 66 3d 22 44 69 73 70   <see cref="Disp
cb60: 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74 68 6f 64  ose()" /> method
cb70: 2e 20 20 5a 65 72 6f 20 69 66 20 74 68 69 73 20  .  Zero if this 
cb80: 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67 20  method is being 
cb90: 63 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  called..        
cba0: 2f 2f 2f 20 66 72 6f 6d 20 74 68 65 20 66 69 6e  /// from the fin
cbb0: 61 6c 69 7a 65 72 2e 0d 0a 20 20 20 20 20 20 20  alizer...       
cbc0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
cbd0: 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
cbe0: 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 44 69   virtual void Di
cbf0: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
cc00: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b  sing)..        {
cc10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
cc20: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
cc30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
cc50: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cc70: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
cc80: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
cc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccc0: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
ccd0: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
cce0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
ccf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
cd00: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
cd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd20: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
cd30: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd70: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
cd80: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
cd90: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
cda0: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
cdf0: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
ce00: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
ce10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ce20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
ce30: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
ce40: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ce50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ce90: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
cea0: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
ceb0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
cec0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 69 6e  .        /// Fin
ced0: 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65  alizes this obje
cee0: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
cef0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
cf00: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 7e 53  ary>..        ~S
cf10: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
cf20: 65 43 75 72 73 6f 72 28 29 0d 0a 20 20 20 20 20  eCursor()..     
cf30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cf40: 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29    Dispose(false)
cf50: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
cf60: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
cf70: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
cf80: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
cf90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cfe0: 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74    #region ISQLit
cff0: 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 49 6e  eNativeHandle In
d000: 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f  terface..    ///
d010: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
d020: 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61  /// This interfa
d030: 63 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ce represents a 
d040: 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 70 72  native handle pr
d050: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 53 51  ovided by the SQ
d060: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 2f  Lite core..    /
d070: 2f 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  // library...   
d080: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d090: 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65  .    public inte
d0a0: 72 66 61 63 65 20 49 53 51 4c 69 74 65 4e 61 74  rface ISQLiteNat
d0b0: 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b  iveHandle..    {
d0c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
d0d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
d0e0: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
d0f0: 68 61 6e 64 6c 65 20 76 61 6c 75 65 2e 0d 0a 20  handle value... 
d100: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
d110: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 49  mary>..        I
d120: 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e 64  ntPtr NativeHand
d130: 6c 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20  le { get; }..   
d140: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
d150: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
d160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
d1b0: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
d1c0: 76 65 4d 6f 64 75 6c 65 20 49 6e 74 65 72 66 61  veModule Interfa
d1d0: 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ce..    /// <sum
d1e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
d1f0: 68 69 73 20 69 6e 74 65 72 66 61 63 65 20 72 65  his interface re
d200: 70 72 65 73 65 6e 74 73 20 61 20 76 69 72 74 75  presents a virtu
d210: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
d220: 6e 74 61 74 69 6f 6e 20 77 72 69 74 74 65 6e 20  ntation written 
d230: 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69  in..    /// nati
d240: 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  ve code...    //
d250: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
d260: 20 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61    public interfa
d270: 63 65 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  ce ISQLiteNative
d280: 4d 6f 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20  Module..    {.. 
d290: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
d2a0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
d2b0: 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
d2c0: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
d2d0: 64 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  d is called to c
d2e0: 72 65 61 74 65 20 61 20 6e 65 77 20 69 6e 73 74  reate a new inst
d2f0: 61 6e 63 65 20 6f 66 20 61 20 76 69 72 74 75 61  ance of a virtua
d300: 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
d310: 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65   /// in response
d320: 20 74 6f 20 61 20 43 52 45 41 54 45 20 56 49 52   to a CREATE VIR
d330: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d340: 6d 65 6e 74 2e 20 54 68 65 20 64 62 20 70 61 72  ment. The db par
d350: 61 6d 65 74 65 72 0d 0a 20 20 20 20 20 20 20 20  ameter..        
d360: 2f 2f 2f 20 69 73 20 61 20 70 6f 69 6e 74 65 72  /// is a pointer
d370: 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 64   to the SQLite d
d380: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
d390: 6f 6e 20 74 68 61 74 20 69 73 20 65 78 65 63 75  on that is execu
d3a0: 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ting..        //
d3b0: 2f 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  / the CREATE VIR
d3c0: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d3d0: 6d 65 6e 74 2e 20 54 68 65 20 70 41 75 78 20 61  ment. The pAux a
d3e0: 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20 63  rgument is the c
d3f0: 6f 70 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  opy..        ///
d400: 20 6f 66 20 74 68 65 20 63 6c 69 65 6e 74 20 64   of the client d
d410: 61 74 61 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ata pointer that
d420: 20 77 61 73 20 74 68 65 20 66 6f 75 72 74 68 20   was the fourth 
d430: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0d  argument to the.
d440: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
d450: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
d460: 6c 65 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f  le() or sqlite3_
d470: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32  create_module_v2
d480: 28 29 20 63 61 6c 6c 20 74 68 61 74 0d 0a 20 20  () call that..  
d490: 20 20 20 20 20 20 2f 2f 2f 20 72 65 67 69 73 74        /// regist
d4a0: 65 72 65 64 20 74 68 65 20 76 69 72 74 75 61 6c  ered the virtual
d4b0: 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 20 54   table module. T
d4c0: 68 65 20 61 72 67 76 20 70 61 72 61 6d 65 74 65  he argv paramete
d4d0: 72 20 69 73 20 61 6e 0d 0a 20 20 20 20 20 20 20  r is an..       
d4e0: 20 2f 2f 2f 20 61 72 72 61 79 20 6f 66 20 61 72   /// array of ar
d4f0: 67 63 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 6e  gc pointers to n
d500: 75 6c 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 73  ull terminated s
d510: 74 72 69 6e 67 73 2e 20 54 68 65 20 66 69 72 73  trings. The firs
d520: 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  t..        /// s
d530: 74 72 69 6e 67 2c 20 61 72 67 76 5b 30 5d 2c 20  tring, argv[0], 
d540: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
d550: 68 65 20 6d 6f 64 75 6c 65 20 62 65 69 6e 67 20  he module being 
d560: 69 6e 76 6f 6b 65 64 2e 20 54 68 65 0d 0a 20 20  invoked. The..  
d570: 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65        /// module
d580: 20 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d   name is the nam
d590: 65 20 70 72 6f 76 69 64 65 64 20 61 73 20 74 68  e provided as th
d5a0: 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
d5b0: 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t to..        //
d5c0: 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  / sqlite3_create
d5d0: 5f 6d 6f 64 75 6c 65 28 29 20 61 6e 64 20 61 73  _module() and as
d5e0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
d5f0: 20 74 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   the USING claus
d600: 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e of..        //
d610: 2f 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  / the CREATE VIR
d620: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d630: 6d 65 6e 74 20 74 68 61 74 20 69 73 20 72 75 6e  ment that is run
d640: 6e 69 6e 67 2e 20 54 68 65 20 73 65 63 6f 6e 64  ning. The second
d650: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  ,..        /// a
d660: 72 67 76 5b 31 5d 2c 20 69 73 20 74 68 65 20 6e  rgv[1], is the n
d670: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
d680: 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65  ase in which the
d690: 20 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61 62   new virtual tab
d6a0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
d6b0: 69 73 20 62 65 69 6e 67 20 63 72 65 61 74 65 64  is being created
d6c0: 2e 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6e  . The database n
d6d0: 61 6d 65 20 69 73 20 22 6d 61 69 6e 22 20 66 6f  ame is "main" fo
d6e0: 72 20 74 68 65 20 70 72 69 6d 61 72 79 0d 0a 20  r the primary.. 
d6f0: 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62         /// datab
d700: 61 73 65 2c 20 6f 72 20 22 74 65 6d 70 22 20 66  ase, or "temp" f
d710: 6f 72 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  or TEMP database
d720: 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 67 69  , or the name gi
d730: 76 65 6e 20 61 74 20 74 68 65 0d 0a 20 20 20 20  ven at the..    
d740: 20 20 20 20 2f 2f 2f 20 65 6e 64 20 6f 66 20 74      /// end of t
d750: 68 65 20 41 54 54 41 43 48 20 73 74 61 74 65 6d  he ATTACH statem
d760: 65 6e 74 20 66 6f 72 20 61 74 74 61 63 68 65 64  ent for attached
d770: 20 64 61 74 61 62 61 73 65 73 2e 20 54 68 65 20   databases. The 
d780: 74 68 69 72 64 0d 0a 20 20 20 20 20 20 20 20 2f  third..        /
d790: 2f 2f 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  // element of th
d7a0: 65 20 61 72 72 61 79 2c 20 61 72 67 76 5b 32 5d  e array, argv[2]
d7b0: 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  , is the name of
d7c0: 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
d7d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61  ..        /// ta
d7e0: 62 6c 65 2c 20 61 73 20 73 70 65 63 69 66 69 65  ble, as specifie
d7f0: 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  d following the 
d800: 54 41 42 4c 45 20 6b 65 79 77 6f 72 64 20 69 6e  TABLE keyword in
d810: 20 74 68 65 20 43 52 45 41 54 45 0d 0a 20 20 20   the CREATE..   
d820: 20 20 20 20 20 2f 2f 2f 20 56 49 52 54 55 41 4c       /// VIRTUAL
d830: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
d840: 2e 20 49 66 20 70 72 65 73 65 6e 74 2c 20 74 68  . If present, th
d850: 65 20 66 6f 75 72 74 68 20 61 6e 64 20 73 75 62  e fourth and sub
d860: 73 65 71 75 65 6e 74 0d 0a 20 20 20 20 20 20 20  sequent..       
d870: 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20 69 6e 20   /// strings in 
d880: 74 68 65 20 61 72 67 76 5b 5d 20 61 72 72 61 79  the argv[] array
d890: 20 72 65 70 6f 72 74 20 74 68 65 20 61 72 67 75   report the argu
d8a0: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
d8b0: 75 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ule name..      
d8c0: 20 20 2f 2f 2f 20 69 6e 20 74 68 65 20 43 52 45    /// in the CRE
d8d0: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
d8e0: 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  E statement...  
d8f0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
d900: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
d910: 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
d920: 2f 2f 20 54 68 65 20 6a 6f 62 20 6f 66 20 74 68  // The job of th
d930: 69 73 20 6d 65 74 68 6f 64 20 69 73 20 74 6f 20  is method is to 
d940: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6e 65  construct the ne
d950: 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  w virtual table 
d960: 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
d970: 2f 2f 2f 20 28 61 6e 20 73 71 6c 69 74 65 33 5f  /// (an sqlite3_
d980: 76 74 61 62 20 6f 62 6a 65 63 74 29 20 61 6e 64  vtab object) and
d990: 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65   return a pointe
d9a0: 72 20 74 6f 20 69 74 20 69 6e 20 2a 70 70 56 54  r to it in *ppVT
d9b0: 61 62 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ab...        ///
d9c0: 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
d9d0: 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
d9e0: 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 70 61 72        /// As par
d9f0: 74 20 6f 66 20 74 68 65 20 74 61 73 6b 20 6f 66  t of the task of
da00: 20 63 72 65 61 74 69 6e 67 20 61 20 6e 65 77 20   creating a new 
da10: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
da20: 75 63 74 75 72 65 2c 20 74 68 69 73 0d 0a 20 20  ucture, this..  
da30: 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
da40: 20 6d 75 73 74 20 69 6e 76 6f 6b 65 20 73 71 6c   must invoke sql
da50: 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
da60: 62 28 29 20 74 6f 20 74 65 6c 6c 20 74 68 65 20  b() to tell the 
da70: 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..   
da80: 20 20 20 20 20 2f 2f 2f 20 61 62 6f 75 74 20 74       /// about t
da90: 68 65 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 64  he columns and d
daa0: 61 74 61 74 79 70 65 73 20 69 6e 20 74 68 65 20  atatypes in the 
dab0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54  virtual table. T
dac0: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
dad0: 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
dae0: 76 74 61 62 28 29 20 41 50 49 20 68 61 73 20 74  vtab() API has t
daf0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f  he following pro
db00: 74 6f 74 79 70 65 3a 0d 0a 20 20 20 20 20 20 20  totype:..       
db10: 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
db20: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
db30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
db40: 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
db50: 2f 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 64 65  / int sqlite3_de
db60: 63 6c 61 72 65 5f 76 74 61 62 28 73 71 6c 69 74  clare_vtab(sqlit
db70: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
db80: 61 72 20 2a 7a 43 72 65 61 74 65 54 61 62 6c 65  ar *zCreateTable
db90: 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  )..        /// <
dba0: 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
dbb0: 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
dbc0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
dbd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
dbe0: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
dbf0: 74 6f 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  to sqlite3_decla
dc00: 72 65 5f 76 74 61 62 28 29 20 6d 75 73 74 20 62  re_vtab() must b
dc10: 65 20 74 68 65 20 73 61 6d 65 0d 0a 20 20 20 20  e the same..    
dc20: 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
dc30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
dc40: 74 65 72 20 61 73 20 74 68 65 20 66 69 72 73 74  ter as the first
dc50: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68   parameter to th
dc60: 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  is method...    
dc70: 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 65 63 6f      /// The seco
dc80: 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  nd argument to s
dc90: 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
dca0: 74 61 62 28 29 20 6d 75 73 74 20 61 0d 0a 20 20  tab() must a..  
dcb0: 20 20 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 2d 74        /// zero-t
dcc0: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
dcd0: 73 74 72 69 6e 67 20 74 68 61 74 20 63 6f 6e 74  string that cont
dce0: 61 69 6e 73 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  ains a well-form
dcf0: 65 64 20 43 52 45 41 54 45 0d 0a 20 20 20 20 20  ed CREATE..     
dd00: 20 20 20 2f 2f 2f 20 54 41 42 4c 45 20 73 74 61     /// TABLE sta
dd10: 74 65 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69  tement that defi
dd20: 6e 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  nes the columns 
dd30: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  in the virtual t
dd40: 61 62 6c 65 20 61 6e 64 0d 0a 20 20 20 20 20 20  able and..      
dd50: 20 20 2f 2f 2f 20 74 68 65 69 72 20 64 61 74 61    /// their data
dd60: 20 74 79 70 65 73 2e 20 54 68 65 20 6e 61 6d 65   types. The name
dd70: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
dd80: 20 74 68 69 73 20 43 52 45 41 54 45 20 54 41 42   this CREATE TAB
dd90: 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  LE..        /// 
dda0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 67 6e  statement is ign
ddb0: 6f 72 65 64 2c 20 61 73 20 61 72 65 20 61 6c 6c  ored, as are all
ddc0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 4f 6e   constraints. On
ddd0: 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  ly the column na
dde0: 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  mes..        ///
ddf0: 20 61 6e 64 20 64 61 74 61 74 79 70 65 73 20 6d   and datatypes m
de00: 61 74 74 65 72 2e 20 54 68 65 20 43 52 45 41 54  atter. The CREAT
de10: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
de20: 74 20 73 74 72 69 6e 67 20 6e 65 65 64 20 6e 6f  t string need no
de30: 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t to..        //
de40: 2f 20 62 65 20 68 65 6c 64 20 69 6e 20 70 65 72  / be held in per
de50: 73 69 73 74 65 6e 74 20 6d 65 6d 6f 72 79 2e 20  sistent memory. 
de60: 54 68 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  The string can b
de70: 65 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 61 6e  e deallocated an
de80: 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d/or..        //
de90: 2f 20 72 65 75 73 65 64 20 61 73 20 73 6f 6f 6e  / reused as soon
dea0: 20 61 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f   as the sqlite3_
deb0: 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 72  declare_vtab() r
dec0: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 2e 0d  outine returns..
ded0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
dee0: 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
def0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
df00: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
df10: 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20   name="pDb">..  
df20: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
df30: 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f  tive database co
df40: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e  nnection handle.
df50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
df60: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
df70: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
df80: 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20  "pAux">..       
df90: 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61   /// The origina
dfa0: 6c 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  l native pointer
dfb0: 20 76 61 6c 75 65 20 74 68 61 74 20 77 61 73 20   value that was 
dfc0: 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d  provided to the.
dfd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
dfe0: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
dff0: 6c 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 63 72  le(), sqlite3_cr
e000: 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29  eate_module_v2()
e010: 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
e020: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
e030: 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c  disposable_modul
e040: 65 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  e() functions...
e050: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
e060: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
e070: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
e080: 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rgc">..        /
e090: 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
e0a0: 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
e0b0: 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
e0c0: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
e0d0: 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
e0e0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
e0f0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
e100: 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
e110: 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
e120: 79 20 6f 66 20 73 74 72 69 6e 67 20 61 72 67 75  y of string argu
e130: 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43  ments from the C
e140: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
e150: 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  BLE..        ///
e160: 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20   statement...   
e170: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
e180: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
e190: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
e1a0: 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
e1b0: 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
e1c0: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
e1d0: 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
e1e0: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e  o point to the n
e1f0: 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ewly..        //
e200: 2f 20 63 72 65 61 74 65 64 20 6e 61 74 69 76 65  / created native
e210: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
e220: 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
e230: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
e240: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
e250: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
e260: 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20  "pError">..     
e270: 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c     /// Upon fail
e280: 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ure, this parame
e290: 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
e2a0: 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f  fied to point to
e2b0: 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20   the error..    
e2c0: 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c      /// message,
e2d0: 20 77 69 74 68 20 74 68 65 20 75 6e 64 65 72 6c   with the underl
e2e0: 79 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76 69  ying memory havi
e2f0: 6e 67 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64  ng been obtained
e300: 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20   from the..     
e310: 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d     /// sqlite3_m
e320: 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e  alloc() function
e330: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
e340: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
e350: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
e360: 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
e370: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
e380: 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
e390: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
e3a0: 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
e3b0: 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 72 65  teErrorCode xCre
e3c0: 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
e3d0: 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
e3e0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
e3f0: 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20  r pAux,..       
e400: 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a       int argc,..
e410: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
e420: 74 72 5b 5d 20 61 72 67 76 2c 0d 0a 20 20 20 20  tr[] argv,..    
e430: 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
e440: 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
e450: 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
e460: 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20  r pError..      
e470: 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
e480: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e4d0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
e4e0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
e4f0: 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
e500: 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65    /// The xConne
e510: 63 74 20 6d 65 74 68 6f 64 20 69 73 20 76 65 72  ct method is ver
e520: 79 20 73 69 6d 69 6c 61 72 20 74 6f 20 78 43 72  y similar to xCr
e530: 65 61 74 65 2e 20 49 74 20 68 61 73 20 74 68 65  eate. It has the
e540: 20 73 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f   same..        /
e550: 2f 2f 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e  // parameters an
e560: 64 20 63 6f 6e 73 74 72 75 63 74 73 20 61 20 6e  d constructs a n
e570: 65 77 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  ew sqlite3_vtab 
e580: 73 74 72 75 63 74 75 72 65 20 6a 75 73 74 20 6c  structure just l
e590: 69 6b 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ike..        ///
e5a0: 20 78 43 72 65 61 74 65 2e 20 41 6e 64 20 69 74   xCreate. And it
e5b0: 20 6d 75 73 74 20 61 6c 73 6f 20 63 61 6c 6c 20   must also call 
e5c0: 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
e5d0: 76 74 61 62 28 29 20 6c 69 6b 65 20 78 43 72 65  vtab() like xCre
e5e0: 61 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ate...        //
e5f0: 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
e600: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
e610: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64         /// The d
e620: 69 66 66 65 72 65 6e 63 65 20 69 73 20 74 68 61  ifference is tha
e630: 74 20 78 43 6f 6e 6e 65 63 74 20 69 73 20 63 61  t xConnect is ca
e640: 6c 6c 65 64 20 74 6f 20 65 73 74 61 62 6c 69 73  lled to establis
e650: 68 20 61 20 6e 65 77 0d 0a 20 20 20 20 20 20 20  h a new..       
e660: 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   /// connection 
e670: 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 76  to an existing v
e680: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 68 65  irtual table whe
e690: 72 65 61 73 20 78 43 72 65 61 74 65 20 69 73 20  reas xCreate is 
e6a0: 63 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  called..        
e6b0: 2f 2f 2f 20 74 6f 20 63 72 65 61 74 65 20 61 20  /// to create a 
e6c0: 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c  new virtual tabl
e6d0: 65 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0d  e from scratch..
e6e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
e6f0: 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
e700: 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
e710: 20 20 2f 2f 2f 20 54 68 65 20 78 43 72 65 61 74    /// The xCreat
e720: 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20 6d  e and xConnect m
e730: 65 74 68 6f 64 73 20 61 72 65 20 6f 6e 6c 79 20  ethods are only 
e740: 64 69 66 66 65 72 65 6e 74 20 77 68 65 6e 20 74  different when t
e750: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
e760: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61  virtual table ha
e770: 73 20 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 62  s some kind of b
e780: 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61  acking store tha
e790: 74 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20  t must be..     
e7a0: 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a     /// initializ
e7b0: 65 64 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  ed the first tim
e7c0: 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
e7d0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
e7e0: 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  The..        ///
e7f0: 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20   xCreate method 
e800: 63 72 65 61 74 65 73 20 61 6e 64 20 69 6e 69 74  creates and init
e810: 69 61 6c 69 7a 65 73 20 74 68 65 20 62 61 63 6b  ializes the back
e820: 69 6e 67 20 73 74 6f 72 65 2e 20 54 68 65 0d 0a  ing store. The..
e830: 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6e          /// xCon
e840: 6e 65 63 74 20 6d 65 74 68 6f 64 20 6a 75 73 74  nect method just
e850: 20 63 6f 6e 6e 65 63 74 73 20 74 6f 20 61 6e 20   connects to an 
e860: 65 78 69 73 74 69 6e 67 20 62 61 63 6b 69 6e 67  existing backing
e870: 20 73 74 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20   store...       
e880: 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
e890: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
e8a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 73  ..        /// As
e8b0: 20 61 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e   an example, con
e8c0: 73 69 64 65 72 20 61 20 76 69 72 74 75 61 6c 20  sider a virtual 
e8d0: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
e8e0: 74 69 6f 6e 20 74 68 61 74 0d 0a 20 20 20 20 20  tion that..     
e8f0: 20 20 20 2f 2f 2f 20 70 72 6f 76 69 64 65 73 20     /// provides 
e900: 72 65 61 64 2d 6f 6e 6c 79 20 61 63 63 65 73 73  read-only access
e910: 20 74 6f 20 65 78 69 73 74 69 6e 67 20 63 6f 6d   to existing com
e920: 6d 61 2d 73 65 70 61 72 61 74 65 64 2d 76 61 6c  ma-separated-val
e930: 75 65 20 28 43 53 56 29 0d 0a 20 20 20 20 20 20  ue (CSV)..      
e940: 20 20 2f 2f 2f 20 66 69 6c 65 73 20 6f 6e 20 64    /// files on d
e950: 69 73 6b 2e 20 54 68 65 72 65 20 69 73 20 6e 6f  isk. There is no
e960: 20 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 74   backing store t
e970: 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
e980: 63 72 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20  created..       
e990: 20 2f 2f 2f 20 6f 72 20 69 6e 69 74 69 61 6c 69   /// or initiali
e9a0: 7a 65 64 20 66 6f 72 20 73 75 63 68 20 61 20 76  zed for such a v
e9b0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 28 73 69  irtual table (si
e9c0: 6e 63 65 20 74 68 65 20 43 53 56 20 66 69 6c 65  nce the CSV file
e9d0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  s..        /// a
e9e0: 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 6e 20  lready exist on 
e9f0: 64 69 73 6b 29 20 73 6f 20 74 68 65 20 78 43 72  disk) so the xCr
ea00: 65 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63  eate and xConnec
ea10: 74 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 20 62  t methods will b
ea20: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
ea30: 64 65 6e 74 69 63 61 6c 20 66 6f 72 20 74 68 61  dentical for tha
ea40: 74 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 20  t module...     
ea50: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
ea60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
ea70: 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
ea80: 41 6e 6f 74 68 65 72 20 65 78 61 6d 70 6c 65 20  Another example 
ea90: 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
eaa0: 6c 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  le that implemen
eab0: 74 73 20 61 20 66 75 6c 6c 2d 74 65 78 74 0d 0a  ts a full-text..
eac0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 65          /// inde
ead0: 78 2e 20 54 68 65 20 78 43 72 65 61 74 65 20 6d  x. The xCreate m
eae0: 65 74 68 6f 64 20 6d 75 73 74 20 63 72 65 61 74  ethod must creat
eaf0: 65 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  e and initialize
eb00: 20 64 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f   data..        /
eb10: 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  // structures to
eb20: 20 68 6f 6c 64 20 74 68 65 20 64 69 63 74 69 6f   hold the dictio
eb30: 6e 61 72 79 20 61 6e 64 20 70 6f 73 74 69 6e 67  nary and posting
eb40: 20 6c 69 73 74 73 20 66 6f 72 20 74 68 61 74 20   lists for that 
eb50: 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
eb60: 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74  /// The xConnect
eb70: 20 6d 65 74 68 6f 64 2c 20 6f 6e 20 74 68 65 20   method, on the 
eb80: 6f 74 68 65 72 20 68 61 6e 64 2c 20 6f 6e 6c 79  other hand, only
eb90: 20 68 61 73 20 74 6f 20 6c 6f 63 61 74 65 20 61   has to locate a
eba0: 6e 64 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20  nd use..        
ebb0: 2f 2f 2f 20 61 6e 20 65 78 69 73 74 69 6e 67 20  /// an existing 
ebc0: 64 69 63 74 69 6f 6e 61 72 79 20 61 6e 64 20 70  dictionary and p
ebd0: 6f 73 74 69 6e 67 20 6c 69 73 74 73 20 74 68 61  osting lists tha
ebe0: 74 20 77 65 72 65 20 63 72 65 61 74 65 64 20 62  t were created b
ebf0: 79 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  y a..        ///
ec00: 20 70 72 69 6f 72 20 78 43 72 65 61 74 65 20 63   prior xCreate c
ec10: 61 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  all...        //
ec20: 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
ec30: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
ec40: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
ec50: 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 6d  Connect method m
ec60: 75 73 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ust return SQLIT
ec70: 45 5f 4f 4b 20 69 66 20 69 74 20 69 73 20 73 75  E_OK if it is su
ec80: 63 63 65 73 73 66 75 6c 20 69 6e 0d 0a 20 20 20  ccessful in..   
ec90: 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 69 6e       /// creatin
eca0: 67 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  g the new virtua
ecb0: 6c 20 74 61 62 6c 65 2c 20 6f 72 20 53 51 4c 49  l table, or SQLI
ecc0: 54 45 5f 45 52 52 4f 52 20 69 66 20 69 74 20 69  TE_ERROR if it i
ecd0: 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f  s not..        /
ece0: 2f 2f 20 73 75 63 63 65 73 73 66 75 6c 2e 20 49  // successful. I
ecf0: 66 20 6e 6f 74 20 73 75 63 63 65 73 73 66 75 6c  f not successful
ed00: 2c 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  , the sqlite3_vt
ed10: 61 62 20 73 74 72 75 63 74 75 72 65 20 6d 75 73  ab structure mus
ed20: 74 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f  t not..        /
ed30: 2f 2f 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e  // be allocated.
ed40: 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
ed50: 65 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  e may optionally
ed60: 20 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20   be returned in 
ed70: 2a 70 7a 45 72 72 0d 0a 20 20 20 20 20 20 20 20  *pzErr..        
ed80: 2f 2f 2f 20 69 66 20 75 6e 73 75 63 63 65 73 73  /// if unsuccess
ed90: 66 75 6c 2e 20 53 70 61 63 65 20 74 6f 20 68 6f  ful. Space to ho
eda0: 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  ld the error mes
edb0: 73 61 67 65 20 73 74 72 69 6e 67 20 6d 75 73 74  sage string must
edc0: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   be..        ///
edd0: 20 61 6c 6c 6f 63 61 74 65 64 20 75 73 69 6e 67   allocated using
ede0: 20 61 6e 20 53 51 4c 69 74 65 20 6d 65 6d 6f 72   an SQLite memor
edf0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 75 6e  y allocation fun
ee00: 63 74 69 6f 6e 20 6c 69 6b 65 0d 0a 20 20 20 20  ction like..    
ee10: 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
ee20: 6d 61 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69  malloc() or sqli
ee30: 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 20 61 73  te3_mprintf() as
ee40: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
ee50: 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   will..        /
ee60: 2f 2f 20 61 74 74 65 6d 70 74 20 74 6f 20 66 72  // attempt to fr
ee70: 65 65 20 74 68 65 20 73 70 61 63 65 20 75 73 69  ee the space usi
ee80: 6e 67 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  ng sqlite3_free(
ee90: 29 20 61 66 74 65 72 20 74 68 65 20 65 72 72 6f  ) after the erro
eea0: 72 20 68 61 73 0d 0a 20 20 20 20 20 20 20 20 2f  r has..        /
eeb0: 2f 2f 20 62 65 65 6e 20 72 65 70 6f 72 74 65 64  // been reported
eec0: 20 75 70 20 74 6f 20 74 68 65 20 61 70 70 6c 69   up to the appli
eed0: 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
eee0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
eef0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
ef00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
ef10: 65 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f  e xConnect metho
ef20: 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  d is required fo
ef30: 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20  r every virtual 
ef40: 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
ef50: 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
ef60: 6e 2c 20 74 68 6f 75 67 68 20 74 68 65 20 78 43  n, though the xC
ef70: 72 65 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65  reate and xConne
ef80: 63 74 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 74  ct pointers of t
ef90: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
efa0: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6f  sqlite3_module o
efb0: 62 6a 65 63 74 20 6d 61 79 20 70 6f 69 6e 74 20  bject may point 
efc0: 74 6f 20 74 68 65 20 73 61 6d 65 20 66 75 6e 63  to the same func
efd0: 74 69 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  tion the virtual
efe0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61  ..        /// ta
eff0: 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6e 65 65  ble does not nee
f000: 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  d to initialize 
f010: 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 2e 0d 0a  backing store...
f020: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
f030: 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
f040: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
f050: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
f060: 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20  name="pDb">..   
f070: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
f080: 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
f090: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d  nection handle..
f0a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
f0b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
f0c0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
f0d0: 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  pAux">..        
f0e0: 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c  /// The original
f0f0: 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
f100: 76 61 6c 75 65 20 74 68 61 74 20 77 61 73 20 70  value that was p
f110: 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a  rovided to the..
f120: 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
f130: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
f140: 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 63 72 65  e(), sqlite3_cre
f150: 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 20  ate_module_v2() 
f160: 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
f170: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64  sqlite3_create_d
f180: 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65  isposable_module
f190: 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20  () functions... 
f1a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
f1b0: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
f1c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
f1d0: 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gc">..        //
f1e0: 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
f1f0: 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74  arguments from t
f200: 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41  he CREATE VIRTUA
f210: 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
f220: 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
f230: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
f240: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
f250: 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20  e="argv">..     
f260: 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79     /// The array
f270: 20 6f 66 20 73 74 72 69 6e 67 20 61 72 67 75 6d   of string argum
f280: 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52  ents from the CR
f290: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
f2a0: 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  LE..        /// 
f2b0: 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
f2c0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
f2d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
f2e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
f2f0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
f300: 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
f310: 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73  is parameter mus
f320: 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f  t be modified to
f330: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e 65   point to the ne
f340: 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  wly..        ///
f350: 20 63 72 65 61 74 65 64 20 6e 61 74 69 76 65 20   created native 
f360: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
f370: 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
f380: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
f390: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
f3a0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
f3b0: 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20  pError">..      
f3c0: 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75    /// Upon failu
f3d0: 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  re, this paramet
f3e0: 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
f3f0: 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ied to point to 
f400: 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  the error..     
f410: 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c 20     /// message, 
f420: 77 69 74 68 20 74 68 65 20 75 6e 64 65 72 6c 79  with the underly
f430: 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76 69 6e  ing memory havin
f440: 67 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20  g been obtained 
f450: 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20  from the..      
f460: 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61    /// sqlite3_ma
f470: 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e  lloc() function.
f480: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
f490: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
f4a0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
f4b0: 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
f4c0: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
f4d0: 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
f4e0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
f4f0: 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
f500: 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e 6e  eErrorCode xConn
f510: 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
f520: 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
f530: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
f540: 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20  r pAux,..       
f550: 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a       int argc,..
f560: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
f570: 74 72 5b 5d 20 61 72 67 76 2c 0d 0a 20 20 20 20  tr[] argv,..    
f580: 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
f590: 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
f5a0: 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
f5b0: 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20  r pError..      
f5c0: 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
f5d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
f620: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
f630: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
f640: 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
f650: 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 75 73 65    /// SQLite use
f660: 73 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  s the xBestIndex
f670: 20 6d 65 74 68 6f 64 20 6f 66 20 61 20 76 69 72   method of a vir
f680: 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
f690: 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e to..        //
f6a0: 2f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  / determine the 
f6b0: 62 65 73 74 20 77 61 79 20 74 6f 20 61 63 63 65  best way to acce
f6c0: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ss the virtual t
f6d0: 61 62 6c 65 2e 20 54 68 65 20 78 42 65 73 74 49  able. The xBestI
f6e0: 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ndex..        //
f6f0: 2f 20 6d 65 74 68 6f 64 20 68 61 73 20 61 20 70  / method has a p
f700: 72 6f 74 6f 74 79 70 65 20 6c 69 6b 65 20 74 68  rototype like th
f710: 69 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  is:..        ///
f720: 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
f730: 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20    /// <code>..  
f740: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 20 28 2a        /// int (*
f750: 78 42 65 73 74 49 6e 64 65 78 29 28 73 71 6c 69  xBestIndex)(sqli
f760: 74 65 33 5f 76 74 61 62 20 2a 70 56 54 61 62 2c  te3_vtab *pVTab,
f770: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
f780: 6e 66 6f 2a 29 3b 0d 0a 20 20 20 20 20 20 20 20  nfo*);..        
f790: 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20  /// </code>..   
f7a0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
f7b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
f7c0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 63 6f 6d   SQLite core com
f7d0: 6d 75 6e 69 63 61 74 65 73 20 77 69 74 68 20 74  municates with t
f7e0: 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
f7f0: 74 68 6f 64 20 62 79 20 66 69 6c 6c 69 6e 67 0d  thod by filling.
f800: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 20  .        /// in 
f810: 63 65 72 74 61 69 6e 20 66 69 65 6c 64 73 20 6f  certain fields o
f820: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
f830: 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75  dex_info structu
f840: 72 65 20 61 6e 64 20 70 61 73 73 69 6e 67 20 61  re and passing a
f850: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 6f  ..        /// po
f860: 69 6e 74 65 72 20 74 6f 20 74 68 61 74 20 73 74  inter to that st
f870: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 78 42 65  ructure into xBe
f880: 73 74 49 6e 64 65 78 20 61 73 20 74 68 65 20 73  stIndex as the s
f890: 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 2e  econd parameter.
f8a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
f8b0: 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74  e xBestIndex met
f8c0: 68 6f 64 20 66 69 6c 6c 73 20 6f 75 74 20 6f 74  hod fills out ot
f8d0: 68 65 72 20 66 69 65 6c 64 73 20 6f 66 20 74 68  her fields of th
f8e0: 69 73 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20  is structure..  
f8f0: 20 20 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20        /// which 
f900: 66 6f 72 6d 73 20 74 68 65 20 72 65 70 6c 79 2e  forms the reply.
f910: 20 54 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64   The sqlite3_ind
f920: 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72  ex_info structur
f930: 65 20 6c 6f 6f 6b 73 20 6c 69 6b 65 0d 0a 20 20  e looks like..  
f940: 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 3a 0d        /// this:.
f950: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
f960: 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
f970: 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
f980: 20 20 2f 2f 2f 20 20 73 74 72 75 63 74 20 73 71    ///  struct sq
f990: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
f9a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   {..        /// 
f9b0: 20 20 20 2f 2a 20 49 6e 70 75 74 73 20 2a 2f 0d     /* Inputs */.
f9c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
f9d0: 63 6f 6e 73 74 20 69 6e 74 20 6e 43 6f 6e 73 74  const int nConst
f9e0: 72 61 69 6e 74 3b 20 20 20 2f 2a 20 4e 75 6d 62  raint;   /* Numb
f9f0: 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
fa00: 20 61 43 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0d   aConstraint */.
fa10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
fa20: 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 71 6c  const struct sql
fa30: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
fa40: 72 61 69 6e 74 20 7b 0d 0a 20 20 20 20 20 20 20  raint {..       
fa50: 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74 20 69   ///       int i
fa60: 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
fa70: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6f 6e 20 6c 65   /* Column on le
fa80: 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 0d  ft-hand side of.
fa90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
faa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fab0: 20 20 20 20 20 20 20 20 20 20 2a 20 63 6f 6e 73            * cons
fac0: 74 72 61 69 6e 74 20 2a 2f 0d 0a 20 20 20 20 20  traint */..     
fad0: 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73     ///       uns
fae0: 69 67 6e 65 64 20 63 68 61 72 20 6f 70 3b 20 20  igned char op;  
faf0: 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74     /* Constraint
fb00: 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0d 0a 20 20   operator */..  
fb10: 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
fb20: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 75 73  unsigned char us
fb30: 61 62 6c 65 3b 20 2f 2a 20 54 72 75 65 20 69 66  able; /* True if
fb40: 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
fb50: 20 69 73 20 75 73 61 62 6c 65 20 2a 2f 0d 0a 20   is usable */.. 
fb60: 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
fb70: 20 69 6e 74 20 69 54 65 72 6d 4f 66 66 73 65 74   int iTermOffset
fb80: 3b 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 69  ;      /* Used i
fb90: 6e 74 65 72 6e 61 6c 6c 79 20 2d 20 78 42 65 73  nternally - xBes
fba0: 74 49 6e 64 65 78 20 73 68 6f 75 6c 64 0d 0a 20  tIndex should.. 
fbb0: 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbd0: 20 20 20 20 20 20 20 20 2a 20 69 67 6e 6f 72 65          * ignore
fbe0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
fbf0: 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 43 6f      } *const aCo
fc00: 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 2f 2a 20  nstraint;    /* 
fc10: 54 61 62 6c 65 20 6f 66 20 57 48 45 52 45 20 63  Table of WHERE c
fc20: 6c 61 75 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  lause constraint
fc30: 73 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s */..        //
fc40: 2f 20 20 20 20 63 6f 6e 73 74 20 69 6e 74 20 6e  /    const int n
fc50: 4f 72 64 65 72 42 79 3b 20 20 20 20 20 20 2f 2a  OrderBy;      /*
fc60: 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 72 6d 73   Number of terms
fc70: 20 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59   in the ORDER BY
fc80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fca0: 20 20 20 20 20 20 20 20 20 20 20 2a 20 63 6c 61             * cla
fcb0: 75 73 65 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  use */..        
fcc0: 2f 2f 2f 20 20 20 20 63 6f 6e 73 74 20 73 74 72  ///    const str
fcd0: 75 63 74 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  uct sqlite3_inde
fce0: 78 5f 6f 72 64 65 72 62 79 20 7b 0d 0a 20 20 20  x_orderby {..   
fcf0: 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 69       ///       i
fd00: 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
fd10: 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
fd20: 75 6d 62 65 72 20 2a 2f 0d 0a 20 20 20 20 20 20  umber */..      
fd30: 20 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73 69    ///       unsi
fd40: 67 6e 65 64 20 63 68 61 72 20 64 65 73 63 3b 20  gned char desc; 
fd50: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
fd60: 53 43 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 41  SC.  False for A
fd70: 53 43 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  SC. */..        
fd80: 2f 2f 2f 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20  ///    } *const 
fd90: 61 4f 72 64 65 72 42 79 3b 20 20 20 20 20 20 20  aOrderBy;       
fda0: 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
fdb0: 63 6c 61 75 73 65 20 2a 2f 0d 0a 20 20 20 20 20  clause */..     
fdc0: 20 20 20 2f 2f 2f 20 20 20 20 2f 2a 20 4f 75 74     ///    /* Out
fdd0: 70 75 74 73 20 2a 2f 0d 0a 20 20 20 20 20 20 20  puts */..       
fde0: 20 2f 2f 2f 20 20 20 20 73 74 72 75 63 74 20 73   ///    struct s
fdf0: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
fe00: 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20 7b 0d  straint_usage {.
fe10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
fe20: 20 20 69 6e 74 20 61 72 67 76 49 6e 64 65 78 3b    int argvIndex;
fe30: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 66 20 67           /* if g
fe40: 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
fe50: 2c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 0d  , constraint is.
fe60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
fe70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe80: 20 20 20 20 20 20 20 20 20 20 2a 20 70 61 72 74            * part
fe90: 20 6f 66 20 61 72 67 76 20 74 6f 20 78 46 69 6c   of argv to xFil
fea0: 74 65 72 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  ter */..        
feb0: 2f 2f 2f 20 20 20 20 20 20 75 6e 73 69 67 6e 65  ///      unsigne
fec0: 64 20 63 68 61 72 20 6f 6d 69 74 3b 20 20 20 20  d char omit;    
fed0: 2f 2a 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61  /* Do not code a
fee0: 20 74 65 73 74 20 66 6f 72 20 74 68 69 73 0d 0a   test for this..
fef0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
ff00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff10: 20 20 20 20 20 20 20 20 20 2a 20 63 6f 6e 73 74           * const
ff20: 72 61 69 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20  raint */..      
ff30: 20 20 2f 2f 2f 20 20 20 20 7d 20 2a 63 6f 6e 73    ///    } *cons
ff40: 74 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  t aConstraintUsa
ff50: 67 65 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ge;..        ///
ff60: 20 20 20 20 69 6e 74 20 69 64 78 4e 75 6d 3b 20      int idxNum; 
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ff80: 4e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 69  Number used to i
ff90: 64 65 6e 74 69 66 79 20 74 68 65 20 69 6e 64 65  dentify the inde
ffa0: 78 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  x */..        //
ffb0: 2f 20 20 20 20 63 68 61 72 20 2a 69 64 78 53 74  /    char *idxSt
ffc0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
ffd0: 20 53 74 72 69 6e 67 2c 20 70 6f 73 73 69 62 6c   String, possibl
ffe0: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 0d  y obtained from.
fff0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 20 20 20 20 20 20 20 20 20 20 2a 20 73 71 6c 69            * sqli
10020 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0d  te3_malloc() */.
10030 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
10040 69 6e 74 20 6e 65 65 64 54 6f 46 72 65 65 49 64  int needToFreeId
10050 78 53 74 72 3b 20 20 20 20 2f 2a 20 46 72 65 65  xStr;    /* Free
10060 20 69 64 78 53 74 72 20 75 73 69 6e 67 20 73 71   idxStr using sq
10070 6c 69 74 65 33 5f 66 72 65 65 28 29 20 69 66 0d  lite3_free() if.
10080 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 20 20 20 20 20 20 20 20 20 20 2a 20 74 72 75 65            * true
100b0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
100c0 20 20 20 20 69 6e 74 20 6f 72 64 65 72 42 79 43      int orderByC
100d0 6f 6e 73 75 6d 65 64 3b 20 20 20 20 20 2f 2a 20  onsumed;     /* 
100e0 54 72 75 65 20 69 66 20 6f 75 74 70 75 74 20 69  True if output i
100f0 73 20 61 6c 72 65 61 64 79 20 6f 72 64 65 72 65  s already ordere
10100 64 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d */..        //
10110 2f 20 20 20 20 64 6f 75 62 6c 65 20 65 73 74 69  /    double esti
10120 6d 61 74 65 64 43 6f 73 74 3b 20 20 20 20 2f 2a  matedCost;    /*
10130 20 45 73 74 69 6d 61 74 65 64 20 63 6f 73 74 20   Estimated cost 
10140 6f 66 20 75 73 69 6e 67 20 74 68 69 73 20 69 6e  of using this in
10150 64 65 78 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  dex */..        
10160 2f 2f 2f 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20  ///  };..       
10170 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
10180 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
10190 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 6e  ..        /// In
101a0 20 61 64 64 69 74 69 6f 6e 2c 20 74 68 65 72 65   addition, there
101b0 20 61 72 65 20 73 6f 6d 65 20 64 65 66 69 6e 65   are some define
101c0 64 20 63 6f 6e 73 74 61 6e 74 73 3a 0d 0a 20 20  d constants:..  
101d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
101e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
101f0 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
10200 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  //  #define SQLI
10210 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41  TE_INDEX_CONSTRA
10220 49 4e 54 5f 45 51 20 20 20 20 32 0d 0a 20 20 20  INT_EQ    2..   
10230 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e       ///  #defin
10240 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43  e SQLITE_INDEX_C
10250 4f 4e 53 54 52 41 49 4e 54 5f 47 54 20 20 20 20  ONSTRAINT_GT    
10260 34 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  4..        ///  
10270 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
10280 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
10290 4c 45 20 20 20 20 38 0d 0a 20 20 20 20 20 20 20  LE    8..       
102a0 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51   ///  #define SQ
102b0 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54  LITE_INDEX_CONST
102c0 52 41 49 4e 54 5f 4c 54 20 20 20 20 31 36 0d 0a  RAINT_LT    16..
102d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64 65          ///  #de
102e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44 45  fine SQLITE_INDE
102f0 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 47 45 20  X_CONSTRAINT_GE 
10300 20 20 20 33 32 0d 0a 20 20 20 20 20 20 20 20 2f     32..        /
10310 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  //  #define SQLI
10320 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41  TE_INDEX_CONSTRA
10330 49 4e 54 5f 4d 41 54 43 48 20 36 34 0d 0a 20 20  INT_MATCH 64..  
10340 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65        /// </code
10350 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
10360 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
10370 2f 2f 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f  // The SQLite co
10380 72 65 20 63 61 6c 6c 73 20 74 68 65 20 78 42 65  re calls the xBe
10390 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 77  stIndex method w
103a0 68 65 6e 20 69 74 20 69 73 20 63 6f 6d 70 69 6c  hen it is compil
103b0 69 6e 67 20 61 0d 0a 20 20 20 20 20 20 20 20 2f  ing a..        /
103c0 2f 2f 20 71 75 65 72 79 20 74 68 61 74 20 69 6e  // query that in
103d0 76 6f 6c 76 65 73 20 61 20 76 69 72 74 75 61 6c  volves a virtual
103e0 20 74 61 62 6c 65 2e 20 49 6e 20 6f 74 68 65 72   table. In other
103f0 20 77 6f 72 64 73 2c 20 53 51 4c 69 74 65 20 63   words, SQLite c
10400 61 6c 6c 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  alls..        //
10410 2f 20 74 68 69 73 20 6d 65 74 68 6f 64 20 77 68  / this method wh
10420 65 6e 20 69 74 20 69 73 20 72 75 6e 6e 69 6e 67  en it is running
10430 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
10440 28 29 20 6f 72 20 74 68 65 20 65 71 75 69 76 61  () or the equiva
10450 6c 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lent...        /
10460 2f 2f 20 42 79 20 63 61 6c 6c 69 6e 67 20 74 68  // By calling th
10470 69 73 20 6d 65 74 68 6f 64 2c 20 74 68 65 20 53  is method, the S
10480 51 4c 69 74 65 20 63 6f 72 65 20 69 73 20 73 61  QLite core is sa
10490 79 69 6e 67 20 74 6f 20 74 68 65 20 76 69 72 74  ying to the virt
104a0 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ual..        ///
104b0 20 74 61 62 6c 65 20 74 68 61 74 20 69 74 20 6e   table that it n
104c0 65 65 64 73 20 74 6f 20 61 63 63 65 73 73 20 73  eeds to access s
104d0 6f 6d 65 20 73 75 62 73 65 74 20 6f 66 20 74 68  ome subset of th
104e0 65 20 72 6f 77 73 20 69 6e 20 74 68 65 0d 0a 20  e rows in the.. 
104f0 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75         /// virtu
10500 61 6c 20 74 61 62 6c 65 20 61 6e 64 20 69 74 20  al table and it 
10510 77 61 6e 74 73 20 74 6f 20 6b 6e 6f 77 20 74 68  wants to know th
10520 65 20 6d 6f 73 74 20 65 66 66 69 63 69 65 6e 74  e most efficient
10530 20 77 61 79 20 74 6f 20 64 6f 0d 0a 20 20 20 20   way to do..    
10540 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 61 63 63      /// that acc
10550 65 73 73 2e 20 54 68 65 20 78 42 65 73 74 49 6e  ess. The xBestIn
10560 64 65 78 20 6d 65 74 68 6f 64 20 72 65 70 6c 69  dex method repli
10570 65 73 20 77 69 74 68 20 69 6e 66 6f 72 6d 61 74  es with informat
10580 69 6f 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20  ion that..      
10590 20 20 2f 2f 2f 20 74 68 65 20 53 51 4c 69 74 65    /// the SQLite
105a0 20 63 6f 72 65 20 63 61 6e 20 74 68 65 6e 20 75   core can then u
105b0 73 65 20 74 6f 20 63 6f 6e 64 75 63 74 20 61 6e  se to conduct an
105c0 20 65 66 66 69 63 69 65 6e 74 20 73 65 61 72 63   efficient searc
105d0 68 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  h of the..      
105e0 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61    /// virtual ta
105f0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
10600 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
10610 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
10620 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 69 6c 65         /// While
10630 20 63 6f 6d 70 69 6c 69 6e 67 20 61 20 73 69 6e   compiling a sin
10640 67 6c 65 20 53 51 4c 20 71 75 65 72 79 2c 20 74  gle SQL query, t
10650 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6d  he SQLite core m
10660 69 67 68 74 20 63 61 6c 6c 0d 0a 20 20 20 20 20  ight call..     
10670 20 20 20 2f 2f 2f 20 78 42 65 73 74 49 6e 64 65     /// xBestInde
10680 78 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  x multiple times
10690 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20   with different 
106a0 73 65 74 74 69 6e 67 73 20 69 6e 0d 0a 20 20 20  settings in..   
106b0 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
106c0 5f 69 6e 64 65 78 5f 69 6e 66 6f 2e 20 54 68 65  _index_info. The
106d0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c   SQLite core wil
106e0 6c 20 74 68 65 6e 20 73 65 6c 65 63 74 20 74 68  l then select th
106f0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
10700 6f 6d 62 69 6e 61 74 69 6f 6e 20 74 68 61 74 20  ombination that 
10710 61 70 70 65 61 72 73 20 74 6f 20 67 69 76 65 20  appears to give 
10720 74 68 65 20 62 65 73 74 20 70 65 72 66 6f 72 6d  the best perform
10730 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
10740 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
10750 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
10760 20 20 20 20 20 20 20 20 2f 2f 2f 20 42 65 66 6f          /// Befo
10770 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 69 73 20  re calling this 
10780 6d 65 74 68 6f 64 2c 20 74 68 65 20 53 51 4c 69  method, the SQLi
10790 74 65 20 63 6f 72 65 20 69 6e 69 74 69 61 6c 69  te core initiali
107a0 7a 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0d  zes an instance.
107b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20  .        /// of 
107c0 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  the sqlite3_inde
107d0 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  x_info structure
107e0 20 77 69 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f   with informatio
107f0 6e 20 61 62 6f 75 74 20 74 68 65 0d 0a 20 20 20  n about the..   
10800 20 20 20 20 20 2f 2f 2f 20 71 75 65 72 79 20 74       /// query t
10810 68 61 74 20 69 74 20 69 73 20 63 75 72 72 65 6e  hat it is curren
10820 74 6c 79 20 74 72 79 69 6e 67 20 74 6f 20 70 72  tly trying to pr
10830 6f 63 65 73 73 2e 20 54 68 69 73 20 69 6e 66 6f  ocess. This info
10840 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  rmation..       
10850 20 2f 2f 2f 20 64 65 72 69 76 65 73 20 6d 61 69   /// derives mai
10860 6e 6c 79 20 66 72 6f 6d 20 74 68 65 20 57 48 45  nly from the WHE
10870 52 45 20 63 6c 61 75 73 65 20 61 6e 64 20 4f 52  RE clause and OR
10880 44 45 52 20 42 59 20 6f 72 20 47 52 4f 55 50 20  DER BY or GROUP 
10890 42 59 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  BY..        /// 
108a0 63 6c 61 75 73 65 73 20 6f 66 20 74 68 65 20 71  clauses of the q
108b0 75 65 72 79 2c 20 62 75 74 20 61 6c 73 6f 20 66  uery, but also f
108c0 72 6f 6d 20 61 6e 79 20 4f 4e 20 6f 72 20 55 53  rom any ON or US
108d0 49 4e 47 20 63 6c 61 75 73 65 73 20 69 66 20 74  ING clauses if t
108e0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
108f0 71 75 65 72 79 20 69 73 20 61 20 6a 6f 69 6e 2e  query is a join.
10900 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   The information
10910 20 74 68 61 74 20 74 68 65 20 53 51 4c 69 74 65   that the SQLite
10920 20 63 6f 72 65 20 70 72 6f 76 69 64 65 73 20 74   core provides t
10930 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  o..        /// t
10940 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
10950 74 68 6f 64 20 69 73 20 68 65 6c 64 20 69 6e 20  thod is held in 
10960 74 68 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  the part of the 
10970 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 69  structure that i
10980 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  s..        /// m
10990 61 72 6b 65 64 20 61 73 20 22 49 6e 70 75 74 73  arked as "Inputs
109a0 22 2e 20 54 68 65 20 22 4f 75 74 70 75 74 73 22  ". The "Outputs"
109b0 20 73 65 63 74 69 6f 6e 20 69 73 20 69 6e 69 74   section is init
109c0 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e  ialized to zero.
109d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
109e0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
109f0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
10a00 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 66 6f 72     /// The infor
10a10 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 73 71  mation in the sq
10a20 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
10a30 20 73 74 72 75 63 74 75 72 65 20 69 73 20 65 70   structure is ep
10a40 68 65 6d 65 72 61 6c 0d 0a 20 20 20 20 20 20 20  hemeral..       
10a50 20 2f 2f 2f 20 61 6e 64 20 6d 61 79 20 62 65 20   /// and may be 
10a60 6f 76 65 72 77 72 69 74 74 65 6e 20 6f 72 20 64  overwritten or d
10a70 65 61 6c 6c 6f 63 61 74 65 64 20 61 73 20 73 6f  eallocated as so
10a80 6f 6e 20 61 73 20 74 68 65 20 78 42 65 73 74 49  on as the xBestI
10a90 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ndex..        //
10aa0 2f 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e 73  / method returns
10ab0 2e 20 49 66 20 74 68 65 20 78 42 65 73 74 49 6e  . If the xBestIn
10ac0 64 65 78 20 6d 65 74 68 6f 64 20 6e 65 65 64 73  dex method needs
10ad0 20 74 6f 20 72 65 6d 65 6d 62 65 72 20 61 6e 79   to remember any
10ae0 20 70 61 72 74 0d 0a 20 20 20 20 20 20 20 20 2f   part..        /
10af0 2f 2f 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  // of the sqlite
10b00 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72  3_index_info str
10b10 75 63 74 75 72 65 2c 20 69 74 20 73 68 6f 75 6c  ucture, it shoul
10b20 64 20 6d 61 6b 65 20 61 20 63 6f 70 79 2e 20 43  d make a copy. C
10b30 61 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  are..        ///
10b40 20 6d 75 73 74 20 62 65 20 74 61 6b 65 20 74 6f   must be take to
10b50 20 73 74 6f 72 65 20 74 68 65 20 63 6f 70 79 20   store the copy 
10b60 69 6e 20 61 20 70 6c 61 63 65 20 77 68 65 72 65  in a place where
10b70 20 69 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20   it will be..   
10b80 20 20 20 20 20 2f 2f 2f 20 64 65 61 6c 6c 6f 63       /// dealloc
10b90 61 74 65 64 2c 20 73 75 63 68 20 61 73 20 69 6e  ated, such as in
10ba0 20 74 68 65 20 69 64 78 53 74 72 20 66 69 65 6c   the idxStr fiel
10bb0 64 20 77 69 74 68 20 6e 65 65 64 54 6f 46 72 65  d with needToFre
10bc0 65 49 64 78 53 74 72 20 73 65 74 0d 0a 20 20 20  eIdxStr set..   
10bd0 20 20 20 20 20 2f 2f 2f 20 74 6f 20 31 2e 0d 0a       /// to 1...
10be0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
10bf0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
10c00 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
10c10 20 2f 2f 2f 20 4e 6f 74 65 20 74 68 61 74 20 78   /// Note that x
10c20 42 65 73 74 49 6e 64 65 78 20 77 69 6c 6c 20 61  BestIndex will a
10c30 6c 77 61 79 73 20 62 65 20 63 61 6c 6c 65 64 20  lways be called 
10c40 62 65 66 6f 72 65 20 78 46 69 6c 74 65 72 2c 20  before xFilter, 
10c50 73 69 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  since..        /
10c60 2f 2f 20 74 68 65 20 69 64 78 4e 75 6d 20 61 6e  // the idxNum an
10c70 64 20 69 64 78 53 74 72 20 6f 75 74 70 75 74 73  d idxStr outputs
10c80 20 66 72 6f 6d 20 78 42 65 73 74 49 6e 64 65 78   from xBestIndex
10c90 20 61 72 65 20 72 65 71 75 69 72 65 64 20 69 6e   are required in
10ca0 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  puts..        //
10cb0 2f 20 74 6f 20 78 46 69 6c 74 65 72 2e 20 48 6f  / to xFilter. Ho
10cc0 77 65 76 65 72 2c 20 74 68 65 72 65 20 69 73 20  wever, there is 
10cd0 6e 6f 20 67 75 61 72 61 6e 74 65 65 20 74 68 61  no guarantee tha
10ce0 74 20 78 46 69 6c 74 65 72 20 77 69 6c 6c 20 62  t xFilter will b
10cf0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
10d00 61 6c 6c 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  alled following 
10d10 61 20 73 75 63 63 65 73 73 66 75 6c 20 78 42 65  a successful xBe
10d20 73 74 49 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20  stIndex...      
10d30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
10d40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
10d50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
10d60 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
10d70 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
10d80 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
10d90 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
10da0 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
10db0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
10dc0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
10dd0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
10de0 20 20 20 20 20 20 20 20 2f 2f 2f 20 32 2e 33 2e          /// 2.3.
10df0 31 20 49 6e 70 75 74 73 0d 0a 20 20 20 20 20 20  1 Inputs..      
10e00 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
10e10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
10e20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
10e30 68 65 20 6d 61 69 6e 20 74 68 69 6e 67 20 74 68  he main thing th
10e40 61 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  at the SQLite co
10e50 72 65 20 69 73 20 74 72 79 69 6e 67 20 74 6f 20  re is trying to 
10e60 63 6f 6d 6d 75 6e 69 63 61 74 65 20 74 6f 20 74  communicate to t
10e70 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
10e80 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
10e90 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73   the constraints
10ea0 20 74 68 61 74 20 61 72 65 20 61 76 61 69 6c 61   that are availa
10eb0 62 6c 65 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  ble to limit the
10ec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75  ..        /// nu
10ed0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
10ee0 74 20 6e 65 65 64 20 74 6f 20 62 65 20 73 65 61  t need to be sea
10ef0 72 63 68 65 64 2e 20 54 68 65 20 61 43 6f 6e 73  rched. The aCons
10f00 74 72 61 69 6e 74 5b 5d 20 61 72 72 61 79 0d 0a  traint[] array..
10f10 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74          /// cont
10f20 61 69 6e 73 20 6f 6e 65 20 65 6e 74 72 79 20 66  ains one entry f
10f30 6f 72 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69  or each constrai
10f40 6e 74 2e 20 54 68 65 72 65 20 77 69 6c 6c 20 62  nt. There will b
10f50 65 20 65 78 61 63 74 6c 79 0d 0a 20 20 20 20 20  e exactly..     
10f60 20 20 20 2f 2f 2f 20 6e 43 6f 6e 73 74 72 61 69     /// nConstrai
10f70 6e 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  nt entries in th
10f80 61 74 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20  at array...     
10f90 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
10fa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
10fb0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
10fc0 45 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 20  Each constraint 
10fd0 77 69 6c 6c 20 63 6f 72 72 65 73 70 6f 6e 64 20  will correspond 
10fe0 74 6f 20 61 20 74 65 72 6d 20 69 6e 20 74 68 65  to a term in the
10ff0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 72   WHERE clause or
11000 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   in..        ///
11010 20 61 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63   a USING or ON c
11020 6c 61 75 73 65 20 74 68 61 74 20 69 73 20 6f 66  lause that is of
11030 20 74 68 65 20 66 6f 72 6d 0d 0a 20 20 20 20 20   the form..     
11040 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
11050 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64          /// <cod
11060 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
11070 20 20 20 20 63 6f 6c 75 6d 6e 20 4f 50 20 45 58      column OP EX
11080 50 52 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  PR..        /// 
11090 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20  </code>..       
110a0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
110b0 20 20 20 20 20 2f 2f 2f 20 57 68 65 72 65 20 22       /// Where "
110c0 63 6f 6c 75 6d 6e 22 20 69 73 20 61 20 63 6f 6c  column" is a col
110d0 75 6d 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  umn in the virtu
110e0 61 6c 20 74 61 62 6c 65 2c 20 4f 50 20 69 73 20  al table, OP is 
110f0 61 6e 20 6f 70 65 72 61 74 6f 72 0d 0a 20 20 20  an operator..   
11100 20 20 20 20 20 2f 2f 2f 20 6c 69 6b 65 20 22 3d       /// like "=
11110 22 20 6f 72 20 22 26 6c 74 3b 22 2c 20 61 6e 64  " or "&lt;", and
11120 20 45 58 50 52 20 69 73 20 61 6e 20 61 72 62 69   EXPR is an arbi
11130 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e  trary expression
11140 2e 20 53 6f 2c 20 66 6f 72 0d 0a 20 20 20 20 20  . So, for..     
11150 20 20 20 2f 2f 2f 20 65 78 61 6d 70 6c 65 2c 20     /// example, 
11160 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  if the WHERE cla
11170 75 73 65 20 63 6f 6e 74 61 69 6e 65 64 20 61 20  use contained a 
11180 74 65 72 6d 20 6c 69 6b 65 20 74 68 69 73 3a 0d  term like this:.
11190 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
111a0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
111b0 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
111c0 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 61    ///          a
111d0 20 3d 20 35 0d 0a 20 20 20 20 20 20 20 20 2f 2f   = 5..        //
111e0 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20  / </code>..     
111f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
11200 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 6e 20         /// Then 
11210 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  one of the const
11220 72 61 69 6e 74 73 20 77 6f 75 6c 64 20 62 65 20  raints would be 
11230 6f 6e 20 74 68 65 20 22 61 22 20 63 6f 6c 75 6d  on the "a" colum
11240 6e 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  n with..        
11250 2f 2f 2f 20 6f 70 65 72 61 74 6f 72 20 22 3d 22  /// operator "="
11260 20 61 6e 64 20 61 6e 20 65 78 70 72 65 73 73 69   and an expressi
11270 6f 6e 20 6f 66 20 22 35 22 2e 20 43 6f 6e 73 74  on of "5". Const
11280 72 61 69 6e 74 73 20 6e 65 65 64 20 6e 6f 74 20  raints need not 
11290 68 61 76 65 20 61 0d 0a 20 20 20 20 20 20 20 20  have a..        
112a0 2f 2f 2f 20 6c 69 74 65 72 61 6c 20 72 65 70 72  /// literal repr
112b0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
112c0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20  e WHERE clause. 
112d0 54 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  The query optimi
112e0 7a 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  zer..        ///
112f0 20 6d 69 67 68 74 20 6d 61 6b 65 20 74 72 61 6e   might make tran
11300 73 66 6f 72 6d 61 74 69 6f 6e 73 20 74 6f 20 74  sformations to t
11310 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
11320 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 78 74 72  in order to extr
11330 61 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  act..        ///
11340 20 61 73 20 6d 61 6e 79 20 63 6f 6e 73 74 72 61   as many constra
11350 69 6e 74 73 20 61 73 20 69 74 20 63 61 6e 2e 20  ints as it can. 
11360 53 6f 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c  So, for example,
11370 20 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c   if the WHERE cl
11380 61 75 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ause..        //
11390 2f 20 63 6f 6e 74 61 69 6e 65 64 20 73 6f 6d 65  / contained some
113a0 74 68 69 6e 67 20 6c 69 6b 65 20 74 68 69 73 3a  thing like this:
113b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
113c0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
113d0 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20  // <code>..     
113e0 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
113f0 78 20 42 45 54 57 45 45 4e 20 31 30 20 41 4e 44  x BETWEEN 10 AND
11400 20 31 30 30 20 41 4e 44 20 39 39 39 26 67 74 3b   100 AND 999&gt;
11410 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  y..        /// <
11420 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
11430 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
11440 20 20 20 20 2f 2f 2f 20 54 68 65 20 71 75 65 72      /// The quer
11450 79 20 6f 70 74 69 6d 69 7a 65 72 20 6d 69 67 68  y optimizer migh
11460 74 20 74 72 61 6e 73 6c 61 74 65 20 74 68 69 73  t translate this
11470 20 69 6e 74 6f 20 74 68 72 65 65 20 73 65 70 61   into three sepa
11480 72 61 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rate..        //
11490 2f 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 0d 0a  / constraints:..
114a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
114b0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
114c0 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20   <code>..       
114d0 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20   ///          x 
114e0 26 67 74 3b 3d 20 31 30 0d 0a 20 20 20 20 20 20  &gt;= 10..      
114f0 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 78    ///          x
11500 20 26 6c 74 3b 3d 20 31 30 30 0d 0a 20 20 20 20   &lt;= 100..    
11510 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
11520 20 79 20 26 6c 74 3b 20 39 39 39 0d 0a 20 20 20   y &lt; 999..   
11530 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
11540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
11550 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
11560 2f 20 46 6f 72 20 65 61 63 68 20 63 6f 6e 73 74  / For each const
11570 72 61 69 6e 74 2c 20 74 68 65 20 61 43 6f 6e 73  raint, the aCons
11580 74 72 61 69 6e 74 5b 5d 2e 69 43 6f 6c 75 6d 6e  traint[].iColumn
11590 20 66 69 65 6c 64 20 69 6e 64 69 63 61 74 65 73   field indicates
115a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68  ..        /// wh
115b0 69 63 68 20 63 6f 6c 75 6d 6e 20 61 70 70 65 61  ich column appea
115c0 72 73 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68  rs on the left-h
115d0 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65 20  and side of the 
115e0 63 6f 6e 73 74 72 61 69 6e 74 2e 20 54 68 65 0d  constraint. The.
115f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 72  .        /// fir
11600 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
11610 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
11620 73 20 63 6f 6c 75 6d 6e 20 30 2e 20 54 68 65 20  s column 0. The 
11630 72 6f 77 69 64 20 6f 66 20 74 68 65 0d 0a 20 20  rowid of the..  
11640 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61        /// virtua
11650 6c 20 74 61 62 6c 65 20 69 73 20 63 6f 6c 75 6d  l table is colum
11660 6e 20 2d 31 2e 20 54 68 65 20 61 43 6f 6e 73 74  n -1. The aConst
11670 72 61 69 6e 74 5b 5d 2e 6f 70 20 66 69 65 6c 64  raint[].op field
11680 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20   indicates..    
11690 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20 6f 70      /// which op
116a0 65 72 61 74 6f 72 20 69 73 20 75 73 65 64 2e 20  erator is used. 
116b0 54 68 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58  The SQLITE_INDEX
116c0 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 2a 20 63 6f  _CONSTRAINT_* co
116d0 6e 73 74 61 6e 74 73 20 6d 61 70 0d 0a 20 20 20  nstants map..   
116e0 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72       /// integer
116f0 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 74 6f 20   constants into 
11700 6f 70 65 72 61 74 6f 72 20 76 61 6c 75 65 73 2e  operator values.
11710 20 43 6f 6c 75 6d 6e 73 20 6f 63 63 75 72 20 69   Columns occur i
11720 6e 20 74 68 65 20 6f 72 64 65 72 0d 0a 20 20 20  n the order..   
11730 20 20 20 20 20 2f 2f 2f 20 74 68 65 79 20 77 65       /// they we
11740 72 65 20 64 65 66 69 6e 65 64 20 62 79 20 74 68  re defined by th
11750 65 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  e call to sqlite
11760 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
11770 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20   in the..       
11780 20 2f 2f 2f 20 78 43 72 65 61 74 65 20 6f 72 20   /// xCreate or 
11790 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2e  xConnect method.
117a0 20 48 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   Hidden columns 
117b0 61 72 65 20 63 6f 75 6e 74 65 64 20 77 68 65 6e  are counted when
117c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65  ..        /// de
117d0 74 65 72 6d 69 6e 69 6e 67 20 74 68 65 20 63 6f  termining the co
117e0 6c 75 6d 6e 20 69 6e 64 65 78 2e 0d 0a 20 20 20  lumn index...   
117f0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
11800 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
11810 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
11820 2f 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e  / The aConstrain
11830 74 5b 5d 20 61 72 72 61 79 20 63 6f 6e 74 61 69  t[] array contai
11840 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ns information a
11850 62 6f 75 74 20 61 6c 6c 20 63 6f 6e 73 74 72 61  bout all constra
11860 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ints..        //
11870 2f 20 74 68 61 74 20 61 70 70 6c 79 20 74 6f 20  / that apply to 
11880 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
11890 65 2e 20 42 75 74 20 73 6f 6d 65 20 6f 66 20 74  e. But some of t
118a0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d  he constraints m
118b0 69 67 68 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ight..        //
118c0 2f 20 6e 6f 74 20 62 65 20 75 73 61 62 6c 65 20  / not be usable 
118d0 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 77  because of the w
118e0 61 79 20 74 61 62 6c 65 73 20 61 72 65 20 6f 72  ay tables are or
118f0 64 65 72 65 64 20 69 6e 20 61 20 6a 6f 69 6e 2e  dered in a join.
11900 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   The..        //
11910 2f 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74  / xBestIndex met
11920 68 6f 64 20 6d 75 73 74 20 74 68 65 72 65 66 6f  hod must therefo
11930 72 65 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72  re only consider
11940 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61   constraints tha
11950 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68  t..        /// h
11960 61 76 65 20 61 6e 20 61 43 6f 6e 73 74 72 61 69  ave an aConstrai
11970 6e 74 5b 5d 2e 75 73 61 62 6c 65 20 66 6c 61 67  nt[].usable flag
11980 20 77 68 69 63 68 20 69 73 20 74 72 75 65 2e 0d   which is true..
11990 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
119a0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
119b0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
119c0 20 20 2f 2f 2f 20 49 6e 20 61 64 64 69 74 69 6f    /// In additio
119d0 6e 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73  n to WHERE claus
119e0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74  e constraints, t
119f0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 61  he SQLite core a
11a00 6c 73 6f 20 74 65 6c 6c 73 0d 0a 20 20 20 20 20  lso tells..     
11a10 20 20 20 2f 2f 2f 20 74 68 65 20 78 42 65 73 74     /// the xBest
11a20 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 61 62 6f  Index method abo
11a30 75 74 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  ut the ORDER BY 
11a40 63 6c 61 75 73 65 2e 20 28 49 6e 20 61 6e 20 61  clause. (In an a
11a50 67 67 72 65 67 61 74 65 0d 0a 20 20 20 20 20 20  ggregate..      
11a60 20 20 2f 2f 2f 20 71 75 65 72 79 2c 20 74 68 65    /// query, the
11a70 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6d 69 67   SQLite core mig
11a80 68 74 20 70 75 74 20 69 6e 20 47 52 4f 55 50 20  ht put in GROUP 
11a90 42 59 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d  BY clause inform
11aa0 61 74 69 6f 6e 20 69 6e 0d 0a 20 20 20 20 20 20  ation in..      
11ab0 20 20 2f 2f 2f 20 70 6c 61 63 65 20 6f 66 20 74    /// place of t
11ac0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
11ad0 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  se information, 
11ae0 62 75 74 20 74 68 69 73 20 66 61 63 74 20 73 68  but this fact sh
11af0 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20  ould not..      
11b00 20 20 2f 2f 2f 20 6d 61 6b 65 20 61 6e 79 20 64    /// make any d
11b10 69 66 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65  ifference to the
11b20 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68   xBestIndex meth
11b30 6f 64 2e 29 20 49 66 20 61 6c 6c 20 74 65 72 6d  od.) If all term
11b40 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  s of the..      
11b50 20 20 2f 2f 2f 20 4f 52 44 45 52 20 42 59 20 63    /// ORDER BY c
11b60 6c 61 75 73 65 20 61 72 65 20 63 6f 6c 75 6d 6e  lause are column
11b70 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s in the virtual
11b80 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 6e 4f 72   table, then nOr
11b90 64 65 72 42 79 0d 0a 20 20 20 20 20 20 20 20 2f  derBy..        /
11ba0 2f 2f 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e  // will be the n
11bb0 75 6d 62 65 72 20 6f 66 20 74 65 72 6d 73 20 69  umber of terms i
11bc0 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  n the ORDER BY c
11bd0 6c 61 75 73 65 20 61 6e 64 20 74 68 65 0d 0a 20  lause and the.. 
11be0 20 20 20 20 20 20 20 2f 2f 2f 20 61 4f 72 64 65         /// aOrde
11bf0 72 42 79 5b 5d 20 61 72 72 61 79 20 77 69 6c 6c  rBy[] array will
11c00 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 63 6f   identify the co
11c10 6c 75 6d 6e 20 66 6f 72 20 65 61 63 68 20 74 65  lumn for each te
11c20 72 6d 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  rm in the..     
11c30 20 20 20 2f 2f 2f 20 6f 72 64 65 72 20 62 79 20     /// order by 
11c40 63 6c 61 75 73 65 20 61 6e 64 20 77 68 65 74 68  clause and wheth
11c50 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 63  er or not that c
11c60 6f 6c 75 6d 6e 20 69 73 20 41 53 43 20 6f 72 20  olumn is ASC or 
11c70 44 45 53 43 2e 0d 0a 20 20 20 20 20 20 20 20 2f  DESC...        /
11c80 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
11c90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
11ca0 20 20 20 20 20 20 20 20 2f 2f 2f 20 32 2e 33 2e          /// 2.3.
11cb0 32 20 4f 75 74 70 75 74 73 0d 0a 20 20 20 20 20  2 Outputs..     
11cc0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
11cd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
11ce0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
11cf0 47 69 76 65 6e 20 61 6c 6c 20 6f 66 20 74 68 65  Given all of the
11d00 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
11d10 76 65 2c 20 74 68 65 20 6a 6f 62 20 6f 66 20 74  ve, the job of t
11d20 68 65 20 78 42 65 73 74 49 6e 64 65 78 0d 0a 20  he xBestIndex.. 
11d30 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
11d40 64 20 69 74 20 74 6f 20 66 69 67 75 72 65 20 6f  d it to figure o
11d50 75 74 20 74 68 65 20 62 65 73 74 20 77 61 79 20  ut the best way 
11d60 74 6f 20 73 65 61 72 63 68 20 74 68 65 20 76 69  to search the vi
11d70 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
11d80 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
11d90 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
11da0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
11db0 2f 2f 20 54 68 65 20 78 42 65 73 74 49 6e 64 65  // The xBestInde
11dc0 78 20 6d 65 74 68 6f 64 20 66 69 6c 6c 73 20 74  x method fills t
11dd0 68 65 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64  he idxNum and id
11de0 78 53 74 72 20 66 69 65 6c 64 73 20 77 69 74 68  xStr fields with
11df0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
11e00 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 63  formation that c
11e10 6f 6d 6d 75 6e 69 63 61 74 65 73 20 61 6e 20 69  ommunicates an i
11e20 6e 64 65 78 69 6e 67 20 73 74 72 61 74 65 67 79  ndexing strategy
11e30 20 74 6f 20 74 68 65 20 78 46 69 6c 74 65 72 0d   to the xFilter.
11e40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74  .        /// met
11e50 68 6f 64 2e 20 54 68 65 20 69 6e 66 6f 72 6d 61  hod. The informa
11e60 74 69 6f 6e 20 69 6e 20 69 64 78 4e 75 6d 20 61  tion in idxNum a
11e70 6e 64 20 69 64 78 53 74 72 20 69 73 20 61 72 62  nd idxStr is arb
11e80 69 74 72 61 72 79 20 61 73 20 66 61 72 20 61 73  itrary as far as
11e90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
11ea0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69 73  e SQLite core is
11eb0 20 63 6f 6e 63 65 72 6e 65 64 2e 20 54 68 65 20   concerned. The 
11ec0 53 51 4c 69 74 65 20 63 6f 72 65 20 6a 75 73 74  SQLite core just
11ed0 20 63 6f 70 69 65 73 20 74 68 65 0d 0a 20 20 20   copies the..   
11ee0 20 20 20 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61       /// informa
11ef0 74 69 6f 6e 20 74 68 72 6f 75 67 68 20 74 6f 20  tion through to 
11f00 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
11f10 6f 64 2e 20 41 6e 79 20 64 65 73 69 72 65 64 20  od. Any desired 
11f20 6d 65 61 6e 69 6e 67 20 63 61 6e 0d 0a 20 20 20  meaning can..   
11f30 20 20 20 20 20 2f 2f 2f 20 62 65 20 61 73 73 69       /// be assi
11f40 67 6e 65 64 20 74 6f 20 69 64 78 4e 75 6d 20 61  gned to idxNum a
11f50 6e 64 20 69 64 78 53 74 72 20 61 73 20 6c 6f 6e  nd idxStr as lon
11f60 67 20 61 73 20 78 42 65 73 74 49 6e 64 65 78 20  g as xBestIndex 
11f70 61 6e 64 20 78 46 69 6c 74 65 72 0d 0a 20 20 20  and xFilter..   
11f80 20 20 20 20 20 2f 2f 2f 20 61 67 72 65 65 20 6f       /// agree o
11f90 6e 20 77 68 61 74 20 74 68 61 74 20 6d 65 61 6e  n what that mean
11fa0 69 6e 67 20 69 73 2e 0d 0a 20 20 20 20 20 20 20  ing is...       
11fb0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
11fc0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
11fd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
11fe0 65 20 69 64 78 53 74 72 20 76 61 6c 75 65 20 6d  e idxStr value m
11ff0 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 6f  ay be a string o
12000 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 61 6e 20  btained from an 
12010 53 51 4c 69 74 65 20 6d 65 6d 6f 72 79 0d 0a 20  SQLite memory.. 
12020 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63         /// alloc
12030 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 73  ation function s
12040 75 63 68 20 61 73 20 73 71 6c 69 74 65 33 5f 6d  uch as sqlite3_m
12050 70 72 69 6e 74 66 28 29 2e 20 49 66 20 74 68 69  printf(). If thi
12060 73 20 69 73 20 74 68 65 20 63 61 73 65 2c 0d 0a  s is the case,..
12070 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 6e          /// then
12080 20 74 68 65 20 6e 65 65 64 54 6f 46 72 65 65 49   the needToFreeI
12090 64 78 53 74 72 20 66 6c 61 67 20 6d 75 73 74 20  dxStr flag must 
120a0 62 65 20 73 65 74 20 74 6f 20 74 72 75 65 20 73  be set to true s
120b0 6f 20 74 68 61 74 20 74 68 65 0d 0a 20 20 20 20  o that the..    
120c0 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63      /// SQLite c
120d0 6f 72 65 20 77 69 6c 6c 20 6b 6e 6f 77 20 74 6f  ore will know to
120e0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 66 72   call sqlite3_fr
120f0 65 65 28 29 20 6f 6e 20 74 68 61 74 20 73 74 72  ee() on that str
12100 69 6e 67 20 77 68 65 6e 20 69 74 0d 0a 20 20 20  ing when it..   
12110 20 20 20 20 20 2f 2f 2f 20 68 61 73 20 66 69 6e       /// has fin
12120 69 73 68 65 64 20 77 69 74 68 20 69 74 2c 20 61  ished with it, a
12130 6e 64 20 74 68 75 73 20 61 76 6f 69 64 20 61 20  nd thus avoid a 
12140 6d 65 6d 6f 72 79 20 6c 65 61 6b 2e 0d 0a 20 20  memory leak...  
12150 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
12160 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
12170 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
12180 2f 2f 20 49 66 20 74 68 65 20 76 69 72 74 75 61  // If the virtua
12190 6c 20 74 61 62 6c 65 20 77 69 6c 6c 20 6f 75 74  l table will out
121a0 70 75 74 20 72 6f 77 73 20 69 6e 20 74 68 65 20  put rows in the 
121b0 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20  order specified 
121c0 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
121d0 2f 2f 2f 20 4f 52 44 45 52 20 42 59 20 63 6c 61  /// ORDER BY cla
121e0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  use, then the or
121f0 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20 66 6c  derByConsumed fl
12200 61 67 20 6d 61 79 20 62 65 20 73 65 74 20 74 6f  ag may be set to
12210 20 74 72 75 65 2e 0d 0a 20 20 20 20 20 20 20 20   true...        
12220 2f 2f 2f 20 49 66 20 74 68 65 20 6f 75 74 70 75  /// If the outpu
12230 74 20 69 73 20 6e 6f 74 20 61 75 74 6f 6d 61 74  t is not automat
12240 69 63 61 6c 6c 79 20 69 6e 20 74 68 65 20 63 6f  ically in the co
12250 72 72 65 63 74 20 6f 72 64 65 72 20 74 68 65 6e  rrect order then
12260 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72  ..        /// or
12270 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20 6d 75  derByConsumed mu
12280 73 74 20 62 65 20 6c 65 66 74 20 69 6e 20 69 74  st be left in it
12290 73 20 64 65 66 61 75 6c 74 20 66 61 6c 73 65 20  s default false 
122a0 73 65 74 74 69 6e 67 2e 20 54 68 69 73 0d 0a 20  setting. This.. 
122b0 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20         /// will 
122c0 69 6e 64 69 63 61 74 65 20 74 6f 20 74 68 65 20  indicate to the 
122d0 53 51 4c 69 74 65 20 63 6f 72 65 20 74 68 61 74  SQLite core that
122e0 20 69 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f   it will need to
122f0 20 64 6f 20 61 20 73 65 70 61 72 61 74 65 0d 0a   do a separate..
12300 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 6f 72 74          /// sort
12310 69 6e 67 20 70 61 73 73 20 6f 76 65 72 20 74 68  ing pass over th
12320 65 20 64 61 74 61 20 61 66 74 65 72 20 69 74 20  e data after it 
12330 63 6f 6d 65 73 20 6f 75 74 20 6f 66 20 74 68 65  comes out of the
12340 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
12350 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
12360 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
12370 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
12380 20 20 2f 2f 2f 20 54 68 65 20 65 73 74 69 6d 61    /// The estima
12390 74 65 64 43 6f 73 74 20 66 69 65 6c 64 20 73 68  tedCost field sh
123a0 6f 75 6c 64 20 62 65 20 73 65 74 20 74 6f 20 74  ould be set to t
123b0 68 65 20 65 73 74 69 6d 61 74 65 64 20 6e 75 6d  he estimated num
123c0 62 65 72 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ber of..        
123d0 2f 2f 2f 20 64 69 73 6b 20 61 63 63 65 73 73 20  /// disk access 
123e0 6f 70 65 72 61 74 69 6f 6e 73 20 72 65 71 75 69  operations requi
123f0 72 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 74  red to execute t
12400 68 69 73 20 71 75 65 72 79 20 61 67 61 69 6e 73  his query agains
12410 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  t the..        /
12420 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
12430 2e 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72  . The SQLite cor
12440 65 20 77 69 6c 6c 20 6f 66 74 65 6e 20 63 61 6c  e will often cal
12450 6c 20 78 42 65 73 74 49 6e 64 65 78 20 6d 75 6c  l xBestIndex mul
12460 74 69 70 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  tiple..        /
12470 2f 2f 20 74 69 6d 65 73 20 77 69 74 68 20 64 69  // times with di
12480 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69  fferent constrai
12490 6e 74 73 2c 20 6f 62 74 61 69 6e 20 6d 75 6c 74  nts, obtain mult
124a0 69 70 6c 65 20 63 6f 73 74 20 65 73 74 69 6d 61  iple cost estima
124b0 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tes,..        //
124c0 2f 20 74 68 65 6e 20 63 68 6f 6f 73 65 20 74 68  / then choose th
124d0 65 20 71 75 65 72 79 20 70 6c 61 6e 20 74 68 61  e query plan tha
124e0 74 20 67 69 76 65 73 20 74 68 65 20 6c 6f 77 65  t gives the lowe
124f0 73 74 20 65 73 74 69 6d 61 74 65 2e 0d 0a 20 20  st estimate...  
12500 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
12510 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
12520 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
12530 2f 2f 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69  // The aConstrai
12540 6e 74 55 73 61 67 65 5b 5d 20 61 72 72 61 79 20  ntUsage[] array 
12550 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 65 6c 65  contains one ele
12560 6d 65 6e 74 20 66 6f 72 20 65 61 63 68 20 6f 66  ment for each of
12570 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
12580 2f 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 63 6f  / nConstraint co
12590 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65  nstraints in the
125a0 20 69 6e 70 75 74 73 20 73 65 63 74 69 6f 6e 20   inputs section 
125b0 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
125c0 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  /// sqlite3_inde
125d0 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  x_info structure
125e0 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e  . The aConstrain
125f0 74 55 73 61 67 65 5b 5d 20 61 72 72 61 79 20 69  tUsage[] array i
12600 73 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20  s used..        
12610 2f 2f 2f 20 62 79 20 78 42 65 73 74 49 6e 64 65  /// by xBestInde
12620 78 20 74 6f 20 74 65 6c 6c 20 74 68 65 20 63 6f  x to tell the co
12630 72 65 20 68 6f 77 20 69 74 20 69 73 20 75 73 69  re how it is usi
12640 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
12650 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ts...        ///
12660 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
12670 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
12680 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42        /// The xB
12690 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
126a0 6d 61 79 20 73 65 74 20 61 43 6f 6e 73 74 72 61  may set aConstra
126b0 69 6e 74 55 73 61 67 65 5b 5d 2e 61 72 67 76 49  intUsage[].argvI
126c0 6e 64 65 78 20 65 6e 74 72 69 65 73 0d 0a 20 20  ndex entries..  
126d0 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 76 61 6c        /// to val
126e0 75 65 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  ues greater than
126f0 20 6f 6e 65 2e 20 45 78 61 63 74 6c 79 20 6f 6e   one. Exactly on
12700 65 20 65 6e 74 72 79 20 73 68 6f 75 6c 64 20 62  e entry should b
12710 65 20 73 65 74 20 74 6f 20 31 2c 0d 0a 20 20 20  e set to 1,..   
12720 20 20 20 20 20 2f 2f 2f 20 61 6e 6f 74 68 65 72       /// another
12730 20 74 6f 20 32 2c 20 61 6e 6f 74 68 65 72 20 74   to 2, another t
12740 6f 20 33 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  o 3, and so fort
12750 68 20 75 70 20 74 6f 20 61 73 20 6d 61 6e 79 20  h up to as many 
12760 6f 72 20 61 73 20 66 65 77 20 61 73 0d 0a 20 20  or as few as..  
12770 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 78 42        /// the xB
12780 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
12790 77 61 6e 74 73 2e 20 54 68 65 20 45 58 50 52 20  wants. The EXPR 
127a0 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
127b0 64 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ding..        //
127c0 2f 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  / constraints wi
127d0 6c 6c 20 74 68 65 6e 20 62 65 20 70 61 73 73 65  ll then be passe
127e0 64 20 69 6e 20 61 73 20 74 68 65 20 61 72 67 76  d in as the argv
127f0 5b 5d 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  [] parameters to
12800 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 46  ..        /// xF
12810 69 6c 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  ilter...        
12820 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
12830 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
12840 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 6f 72  .        /// For
12850 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74 68 65   example, if the
12860 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 33 5d 2e   aConstraint[3].
12870 61 72 67 76 49 6e 64 65 78 20 69 73 20 73 65 74  argvIndex is set
12880 20 74 6f 20 31 2c 20 74 68 65 6e 20 77 68 65 6e   to 1, then when
12890 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 46  ..        /// xF
128a0 69 6c 74 65 72 20 69 73 20 63 61 6c 6c 65 64 2c  ilter is called,
128b0 20 74 68 65 20 61 72 67 76 5b 30 5d 20 70 61 73   the argv[0] pas
128c0 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 20 77  sed to xFilter w
128d0 69 6c 6c 20 68 61 76 65 20 74 68 65 20 45 58 50  ill have the EXP
128e0 52 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  R..        /// v
128f0 61 6c 75 65 20 6f 66 20 74 68 65 20 61 43 6f 6e  alue of the aCon
12900 73 74 72 61 69 6e 74 5b 33 5d 20 63 6f 6e 73 74  straint[3] const
12910 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  raint...        
12920 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
12930 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
12940 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 42 79 20  .        /// By 
12950 64 65 66 61 75 6c 74 2c 20 74 68 65 20 53 51 4c  default, the SQL
12960 69 74 65 20 63 6f 72 65 20 64 6f 75 62 6c 65 20  ite core double 
12970 63 68 65 63 6b 73 20 61 6c 6c 20 63 6f 6e 73 74  checks all const
12980 72 61 69 6e 74 73 20 6f 6e 20 65 61 63 68 0d 0a  raints on each..
12990 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 6f 77 20          /// row 
129a0 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  of the virtual t
129b0 61 62 6c 65 20 74 68 61 74 20 69 74 20 72 65 63  able that it rec
129c0 65 69 76 65 73 2e 20 49 66 20 73 75 63 68 20 61  eives. If such a
129d0 20 63 68 65 63 6b 20 69 73 0d 0a 20 20 20 20 20   check is..     
129e0 20 20 20 2f 2f 2f 20 72 65 64 75 6e 64 61 6e 74     /// redundant
129f0 2c 20 74 68 65 20 78 42 65 73 74 46 69 6c 74 65  , the xBestFilte
12a00 72 20 6d 65 74 68 6f 64 20 63 61 6e 20 73 75 70  r method can sup
12a10 70 72 65 73 73 20 74 68 61 74 20 64 6f 75 62 6c  press that doubl
12a20 65 2d 63 68 65 63 6b 20 62 79 0d 0a 20 20 20 20  e-check by..    
12a30 20 20 20 20 2f 2f 2f 20 73 65 74 74 69 6e 67 20      /// setting 
12a40 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  aConstraintUsage
12a50 5b 5d 2e 6f 6d 69 74 2e 0d 0a 20 20 20 20 20 20  [].omit...      
12a60 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
12a70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
12a80 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
12a90 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
12aa0 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
12ab0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
12ac0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
12ad0 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
12ae0 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
12af0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
12b00 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
12b10 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
12b20 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20  Index">..       
12b30 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
12b40 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
12b50 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
12b60 6f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  o structure...  
12b70 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
12b80 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
12b90 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
12ba0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
12bb0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
12bc0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
12bd0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
12be0 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
12bf0 6f 72 43 6f 64 65 20 78 42 65 73 74 49 6e 64 65  orCode xBestInde
12c00 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x(..            
12c10 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
12c20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
12c30 72 20 70 49 6e 64 65 78 0d 0a 20 20 20 20 20 20  r pIndex..      
12c40 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
12c50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
12c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
12ca0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
12cb0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
12cc0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
12cd0 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
12ce0 64 20 72 65 6c 65 61 73 65 73 20 61 20 63 6f 6e  d releases a con
12cf0 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 76 69 72  nection to a vir
12d00 74 75 61 6c 20 74 61 62 6c 65 2e 20 4f 6e 6c 79  tual table. Only
12d10 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
12d20 2f 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 6f  / sqlite3_vtab o
12d30 62 6a 65 63 74 20 69 73 20 64 65 73 74 72 6f 79  bject is destroy
12d40 65 64 2e 20 54 68 65 20 76 69 72 74 75 61 6c 20  ed. The virtual 
12d50 74 61 62 6c 65 20 69 73 20 6e 6f 74 0d 0a 20 20  table is not..  
12d60 20 20 20 20 20 20 2f 2f 2f 20 64 65 73 74 72 6f        /// destro
12d70 79 65 64 20 61 6e 64 20 61 6e 79 20 62 61 63 6b  yed and any back
12d80 69 6e 67 20 73 74 6f 72 65 20 61 73 73 6f 63 69  ing store associ
12d90 61 74 65 64 20 77 69 74 68 20 74 68 65 20 76 69  ated with the vi
12da0 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
12db0 20 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73 74       /// persist
12dc0 73 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20 75  s. This method u
12dd0 6e 64 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f  ndoes the work o
12de0 66 20 78 43 6f 6e 6e 65 63 74 2e 0d 0a 20 20 20  f xConnect...   
12df0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
12e00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
12e10 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
12e20 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
12e30 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f   a destructor fo
12e40 72 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  r a connection t
12e50 6f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  o the virtual ta
12e60 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
12e70 2f 20 43 6f 6e 74 72 61 73 74 20 74 68 69 73 20  / Contrast this 
12e80 6d 65 74 68 6f 64 20 77 69 74 68 20 78 44 65 73  method with xDes
12e90 74 72 6f 79 2e 20 54 68 65 20 78 44 65 73 74 72  troy. The xDestr
12ea0 6f 79 20 69 73 20 61 20 64 65 73 74 72 75 63 74  oy is a destruct
12eb0 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
12ec0 66 6f 72 20 74 68 65 20 65 6e 74 69 72 65 20 76  for the entire v
12ed0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
12ee0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
12ef0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
12f00 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
12f10 2f 2f 2f 20 54 68 65 20 78 44 69 73 63 6f 6e 6e  /// The xDisconn
12f20 65 63 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65  ect method is re
12f30 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
12f40 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
12f50 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
12f60 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75  ementation, thou
12f70 67 68 20 69 74 20 69 73 20 61 63 63 65 70 74 61  gh it is accepta
12f80 62 6c 65 20 66 6f 72 20 74 68 65 20 78 44 69 73  ble for the xDis
12f90 63 6f 6e 6e 65 63 74 20 61 6e 64 0d 0a 20 20 20  connect and..   
12fa0 20 20 20 20 20 2f 2f 2f 20 78 44 65 73 74 72 6f       /// xDestro
12fb0 79 20 6d 65 74 68 6f 64 73 20 74 6f 20 62 65 20  y methods to be 
12fc0 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74 69 6f  the same functio
12fd0 6e 20 69 66 20 74 68 61 74 20 6d 61 6b 65 73 20  n if that makes 
12fe0 73 65 6e 73 65 20 66 6f 72 0d 0a 20 20 20 20 20  sense for..     
12ff0 20 20 20 2f 2f 2f 20 74 68 65 20 70 61 72 74 69     /// the parti
13000 63 75 6c 61 72 20 76 69 72 74 75 61 6c 20 74 61  cular virtual ta
13010 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
13020 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
13030 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
13040 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
13050 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
13060 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
13070 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
13080 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
13090 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
130a0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
130b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
130c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
130d0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
130e0 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
130f0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
13100 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
13110 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
13120 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
13130 43 6f 64 65 20 78 44 69 73 63 6f 6e 6e 65 63 74  Code xDisconnect
13140 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
13150 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
13160 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
13170 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
13180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
131a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
131b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
131c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
131d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
131e0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
131f0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
13200 74 68 6f 64 20 72 65 6c 65 61 73 65 73 20 61 20  thod releases a 
13210 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20  connection to a 
13220 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20 6a  virtual table, j
13230 75 73 74 20 6c 69 6b 65 20 74 68 65 0d 0a 20 20  ust like the..  
13240 20 20 20 20 20 20 2f 2f 2f 20 78 44 69 73 63 6f        /// xDisco
13250 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2c 20 61 6e  nnect method, an
13260 64 20 69 74 20 61 6c 73 6f 20 64 65 73 74 72 6f  d it also destro
13270 79 73 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  ys the underlyin
13280 67 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  g table..       
13290 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
132a0 69 6f 6e 2e 20 54 68 69 73 20 6d 65 74 68 6f 64  ion. This method
132b0 20 75 6e 64 6f 65 73 20 74 68 65 20 77 6f 72 6b   undoes the work
132c0 20 6f 66 20 78 43 72 65 61 74 65 2e 0d 0a 20 20   of xCreate...  
132d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
132e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
132f0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
13300 2f 2f 20 54 68 65 20 78 44 69 73 63 6f 6e 6e 65  // The xDisconne
13310 63 74 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  ct method is cal
13320 6c 65 64 20 77 68 65 6e 65 76 65 72 20 61 20 64  led whenever a d
13330 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
13340 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  on..        /// 
13350 74 68 61 74 20 75 73 65 73 20 61 20 76 69 72 74  that uses a virt
13360 75 61 6c 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  ual table is clo
13370 73 65 64 2e 20 54 68 65 20 78 44 65 73 74 72 6f  sed. The xDestro
13380 79 20 6d 65 74 68 6f 64 20 69 73 20 6f 6e 6c 79  y method is only
13390 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61  ..        /// ca
133a0 6c 6c 65 64 20 77 68 65 6e 20 61 20 44 52 4f 50  lled when a DROP
133b0 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
133c0 20 69 73 20 65 78 65 63 75 74 65 64 20 61 67 61   is executed aga
133d0 69 6e 73 74 20 74 68 65 20 76 69 72 74 75 61 6c  inst the virtual
133e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61  ..        /// ta
133f0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
13400 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
13410 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
13420 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
13430 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 20 69  Destroy method i
13440 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
13450 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62  very virtual tab
13460 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
13470 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
13480 74 68 6f 75 67 68 20 69 74 20 69 73 20 61 63 63  though it is acc
13490 65 70 74 61 62 6c 65 20 66 6f 72 20 74 68 65 20  eptable for the 
134a0 78 44 69 73 63 6f 6e 6e 65 63 74 20 61 6e 64 0d  xDisconnect and.
134b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 44 65  .        /// xDe
134c0 73 74 72 6f 79 20 6d 65 74 68 6f 64 73 20 74 6f  stroy methods to
134d0 20 62 65 20 74 68 65 20 73 61 6d 65 20 66 75 6e   be the same fun
134e0 63 74 69 6f 6e 20 69 66 20 74 68 61 74 20 6d 61  ction if that ma
134f0 6b 65 73 20 73 65 6e 73 65 20 66 6f 72 0d 0a 20  kes sense for.. 
13500 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 70         /// the p
13510 61 72 74 69 63 75 6c 61 72 20 76 69 72 74 75 61  articular virtua
13520 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
13530 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
13540 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
13550 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
13560 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
13570 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
13580 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
13590 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
135a0 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
135b0 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
135c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
135d0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
135e0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
135f0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
13600 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
13610 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
13620 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
13630 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
13640 72 72 6f 72 43 6f 64 65 20 78 44 65 73 74 72 6f  rrorCode xDestro
13650 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
13660 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
13670 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
13680 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
13690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
136a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
136b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
136c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
136d0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
136e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
136f0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
13700 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4f        /// The xO
13710 70 65 6e 20 6d 65 74 68 6f 64 20 63 72 65 61 74  pen method creat
13720 65 73 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  es a new cursor 
13730 75 73 65 64 20 66 6f 72 20 61 63 63 65 73 73 69  used for accessi
13740 6e 67 20 28 72 65 61 64 0d 0a 20 20 20 20 20 20  ng (read..      
13750 20 20 2f 2f 2f 20 61 6e 64 2f 6f 72 20 77 72 69    /// and/or wri
13760 74 69 6e 67 29 20 61 20 76 69 72 74 75 61 6c 20  ting) a virtual 
13770 74 61 62 6c 65 2e 20 41 20 73 75 63 63 65 73 73  table. A success
13780 66 75 6c 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ful invocation o
13790 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  f this..        
137a0 2f 2f 2f 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  /// method will 
137b0 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 6d 65 6d  allocate the mem
137c0 6f 72 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ory for the sqli
137d0 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
137e0 28 6f 72 20 61 0d 0a 20 20 20 20 20 20 20 20 2f  (or a..        /
137f0 2f 2f 20 73 75 62 63 6c 61 73 73 29 2c 20 69 6e  // subclass), in
13800 69 74 69 61 6c 69 7a 65 20 74 68 65 20 6e 65 77  itialize the new
13810 20 6f 62 6a 65 63 74 2c 20 61 6e 64 20 6d 61 6b   object, and mak
13820 65 20 2a 70 70 43 75 72 73 6f 72 20 70 6f 69 6e  e *ppCursor poin
13830 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t to..        //
13840 2f 20 74 68 65 20 6e 65 77 20 6f 62 6a 65 63 74  / the new object
13850 2e 20 54 68 65 20 73 75 63 63 65 73 73 66 75 6c  . The successful
13860 20 63 61 6c 6c 20 74 68 65 6e 20 72 65 74 75 72   call then retur
13870 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 0d 0a 20  ns SQLITE_OK... 
13880 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
13890 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
138a0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
138b0 2f 2f 2f 20 46 6f 72 20 65 76 65 72 79 20 73 75  /// For every su
138c0 63 63 65 73 73 66 75 6c 20 63 61 6c 6c 20 74 6f  ccessful call to
138d0 20 74 68 69 73 20 6d 65 74 68 6f 64 2c 20 74 68   this method, th
138e0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69  e SQLite core wi
138f0 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ll..        /// 
13900 6c 61 74 65 72 20 69 6e 76 6f 6b 65 20 74 68 65  later invoke the
13910 20 78 43 6c 6f 73 65 20 6d 65 74 68 6f 64 20 74   xClose method t
13920 6f 20 64 65 73 74 72 6f 79 20 74 68 65 20 61 6c  o destroy the al
13930 6c 6f 63 61 74 65 64 20 63 75 72 73 6f 72 2e 0d  located cursor..
13940 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
13950 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13960 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
13970 20 20 2f 2f 2f 20 54 68 65 20 78 4f 70 65 6e 20    /// The xOpen 
13980 6d 65 74 68 6f 64 20 6e 65 65 64 20 6e 6f 74 20  method need not 
13990 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 70  initialize the p
139a0 56 74 61 62 20 66 69 65 6c 64 20 6f 66 20 74 68  Vtab field of th
139b0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
139c0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
139d0 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  or structure. Th
139e0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69  e SQLite core wi
139f0 6c 6c 20 74 61 6b 65 20 63 61 72 65 20 6f 66 0d  ll take care of.
13a00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61  .        /// tha
13a10 74 20 63 68 6f 72 65 20 61 75 74 6f 6d 61 74 69  t chore automati
13a20 63 61 6c 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20  cally...        
13a30 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
13a40 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
13a50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 76  .        /// A v
13a60 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
13a70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74  lementation must
13a80 20 62 65 20 61 62 6c 65 20 74 6f 20 73 75 70 70   be able to supp
13a90 6f 72 74 20 61 6e 20 61 72 62 69 74 72 61 72 79  ort an arbitrary
13aa0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75  ..        /// nu
13ab0 6d 62 65 72 20 6f 66 20 73 69 6d 75 6c 74 61 6e  mber of simultan
13ac0 65 6f 75 73 6c 79 20 6f 70 65 6e 20 63 75 72 73  eously open curs
13ad0 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ors...        //
13ae0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
13af0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
13b00 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20         /// When 
13b10 69 6e 69 74 69 61 6c 6c 79 20 6f 70 65 6e 65 64  initially opened
13b20 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  , the cursor is 
13b30 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  in an undefined 
13b40 73 74 61 74 65 2e 20 54 68 65 0d 0a 20 20 20 20  state. The..    
13b50 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63      /// SQLite c
13b60 6f 72 65 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20  ore will invoke 
13b70 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
13b80 6f 64 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  od on the cursor
13b90 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20   prior to..     
13ba0 20 20 20 2f 2f 2f 20 61 6e 79 20 61 74 74 65 6d     /// any attem
13bb0 70 74 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 6f  pt to position o
13bc0 72 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20  r read from the 
13bd0 63 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20  cursor...       
13be0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
13bf0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
13c00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
13c10 65 20 78 4f 70 65 6e 20 6d 65 74 68 6f 64 20 69  e xOpen method i
13c20 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
13c30 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62  very virtual tab
13c40 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
13c50 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
13c60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
13c70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13c80 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
13c90 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
13ca0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
13cb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
13cc0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
13cd0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
13ce0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
13cf0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
13d00 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
13d10 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
13d20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
13d30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f  .        /// Upo
13d40 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20  n success, this 
13d50 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62  parameter must b
13d60 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f  e modified to po
13d70 69 6e 74 20 74 6f 20 74 68 65 20 6e 65 77 6c 79  int to the newly
13d80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72  ..        /// cr
13d90 65 61 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c  eated native sql
13da0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
13db0 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
13dc0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
13dd0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
13de0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
13df0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
13e00 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
13e10 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
13e20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
13e30 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
13e40 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4f  LiteErrorCode xO
13e50 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  pen(..          
13e60 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
13e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
13e80 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
13e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
13ea0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
13eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ef0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
13f00 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
13f10 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
13f20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
13f30 20 78 43 6c 6f 73 65 20 6d 65 74 68 6f 64 20 63   xClose method c
13f40 6c 6f 73 65 73 20 61 20 63 75 72 73 6f 72 20 70  loses a cursor p
13f50 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
13f60 20 62 79 20 78 4f 70 65 6e 2e 20 54 68 65 0d 0a   by xOpen. The..
13f70 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 51 4c 69          /// SQLi
13f80 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 61 6c 77  te core will alw
13f90 61 79 73 20 63 61 6c 6c 20 78 43 6c 6f 73 65 20  ays call xClose 
13fa0 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63 75  once for each cu
13fb0 72 73 6f 72 20 6f 70 65 6e 65 64 0d 0a 20 20 20  rsor opened..   
13fc0 20 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20 78       /// using x
13fd0 4f 70 65 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  Open...        /
13fe0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
13ff0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
14000 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
14010 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 6c   method must rel
14020 65 61 73 65 20 61 6c 6c 20 72 65 73 6f 75 72 63  ease all resourc
14030 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  es allocated by 
14040 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
14050 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
14060 4f 70 65 6e 20 63 61 6c 6c 2e 20 54 68 65 20 72  Open call. The r
14070 6f 75 74 69 6e 65 20 77 69 6c 6c 20 6e 6f 74 20  outine will not 
14080 62 65 20 63 61 6c 6c 65 64 20 61 67 61 69 6e 20  be called again 
14090 65 76 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  even..        //
140a0 2f 20 69 66 20 69 74 20 72 65 74 75 72 6e 73 20  / if it returns 
140b0 61 6e 20 65 72 72 6f 72 2e 20 54 68 65 20 53 51  an error. The SQ
140c0 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 6e  Lite core will n
140d0 6f 74 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20  ot use the..    
140e0 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
140f0 76 74 61 62 5f 63 75 72 73 6f 72 20 61 67 61 69  vtab_cursor agai
14100 6e 20 61 66 74 65 72 20 69 74 20 68 61 73 20 62  n after it has b
14110 65 65 6e 20 63 6c 6f 73 65 64 2e 0d 0a 20 20 20  een closed...   
14120 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
14130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
14140 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
14150 2f 20 54 68 65 20 78 43 6c 6f 73 65 20 6d 65 74  / The xClose met
14160 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
14170 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
14180 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
14190 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
141a0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
141b0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
141c0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
141d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
141e0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
141f0 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
14200 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
14210 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
14220 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
14230 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
14240 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
14250 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
14260 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
14270 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
14280 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
14290 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
142a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
142b0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
142c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43  LiteErrorCode xC
142d0 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lose(..         
142e0 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f     IntPtr pCurso
142f0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
14300 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
14310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14350 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
14360 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
14370 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
14380 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
14390 68 69 73 20 6d 65 74 68 6f 64 20 62 65 67 69 6e  his method begin
143a0 73 20 61 20 73 65 61 72 63 68 20 6f 66 20 61 20  s a search of a 
143b0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54  virtual table. T
143c0 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
143d0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  t..        /// i
143e0 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  s a cursor opene
143f0 64 20 62 79 20 78 4f 70 65 6e 2e 20 54 68 65 20  d by xOpen. The 
14400 6e 65 78 74 20 74 77 6f 20 61 72 67 75 6d 65 6e  next two argumen
14410 74 20 64 65 66 69 6e 65 20 61 0d 0a 20 20 20 20  t define a..    
14420 20 20 20 20 2f 2f 2f 20 70 61 72 74 69 63 75 6c      /// particul
14430 61 72 20 73 65 61 72 63 68 20 69 6e 64 65 78 20  ar search index 
14440 70 72 65 76 69 6f 75 73 6c 79 20 63 68 6f 73 65  previously chose
14450 6e 20 62 79 20 78 42 65 73 74 49 6e 64 65 78 2e  n by xBestIndex.
14460 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   The..        //
14470 2f 20 73 70 65 63 69 66 69 63 20 6d 65 61 6e 69  / specific meani
14480 6e 67 73 20 6f 66 20 69 64 78 4e 75 6d 20 61 6e  ngs of idxNum an
14490 64 20 69 64 78 53 74 72 20 61 72 65 20 75 6e 69  d idxStr are uni
144a0 6d 70 6f 72 74 61 6e 74 20 61 73 20 6c 6f 6e 67  mportant as long
144b0 20 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   as..        ///
144c0 20 78 46 69 6c 74 65 72 20 61 6e 64 20 78 42 65   xFilter and xBe
144d0 73 74 49 6e 64 65 78 20 61 67 72 65 65 20 6f 6e  stIndex agree on
144e0 20 77 68 61 74 20 74 68 61 74 20 6d 65 61 6e 69   what that meani
144f0 6e 67 20 69 73 2e 0d 0a 20 20 20 20 20 20 20 20  ng is...        
14500 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
14510 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
14520 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
14530 20 78 42 65 73 74 49 6e 64 65 78 20 66 75 6e 63   xBestIndex func
14540 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 72 65  tion may have re
14550 71 75 65 73 74 65 64 20 74 68 65 20 76 61 6c 75  quested the valu
14560 65 73 20 6f 66 20 63 65 72 74 61 69 6e 0d 0a 20  es of certain.. 
14570 20 20 20 20 20 20 20 2f 2f 2f 20 65 78 70 72 65         /// expre
14580 73 73 69 6f 6e 73 20 75 73 69 6e 67 20 74 68 65  ssions using the
14590 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67   aConstraintUsag
145a0 65 5b 5d 2e 61 72 67 76 49 6e 64 65 78 20 76 61  e[].argvIndex va
145b0 6c 75 65 73 20 6f 66 20 74 68 65 0d 0a 20 20 20  lues of the..   
145c0 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
145d0 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75  _index_info stru
145e0 63 74 75 72 65 2e 20 54 68 6f 73 65 20 76 61 6c  cture. Those val
145f0 75 65 73 20 61 72 65 20 70 61 73 73 65 64 20 74  ues are passed t
14600 6f 20 78 46 69 6c 74 65 72 0d 0a 20 20 20 20 20  o xFilter..     
14610 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20 74 68 65     /// using the
14620 20 61 72 67 63 20 61 6e 64 20 61 72 67 76 20 70   argc and argv p
14630 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20 20  arameters...    
14640 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
14650 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
14660 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
14670 20 49 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   If the virtual 
14680 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6f  table contains o
14690 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ne or more rows 
146a0 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 0d 0a  that match the..
146b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 65 61 72          /// sear
146c0 63 68 20 63 72 69 74 65 72 69 61 2c 20 74 68 65  ch criteria, the
146d0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73  n the cursor mus
146e0 74 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 20  t be left point 
146f0 61 74 20 74 68 65 20 66 69 72 73 74 0d 0a 20 20  at the first..  
14700 20 20 20 20 20 20 2f 2f 2f 20 72 6f 77 2e 20 53        /// row. S
14710 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
14720 74 6f 20 78 45 6f 66 20 6d 75 73 74 20 72 65 74  to xEof must ret
14730 75 72 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f 29  urn false (zero)
14740 2e 20 49 66 20 74 68 65 72 65 0d 0a 20 20 20 20  . If there..    
14750 20 20 20 20 2f 2f 2f 20 61 72 65 20 6e 6f 20 72      /// are no r
14760 6f 77 73 20 6d 61 74 63 68 2c 20 74 68 65 6e 20  ows match, then 
14770 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20  the cursor must 
14780 62 65 20 6c 65 66 74 20 69 6e 20 61 20 73 74 61  be left in a sta
14790 74 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20  te that..       
147a0 20 2f 2f 2f 20 77 69 6c 6c 20 63 61 75 73 65 20   /// will cause 
147b0 74 68 65 20 78 45 6f 66 20 74 6f 20 72 65 74 75  the xEof to retu
147c0 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72  rn true (non-zer
147d0 6f 29 2e 20 54 68 65 20 53 51 4c 69 74 65 20 65  o). The SQLite e
147e0 6e 67 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 2f  ngine..        /
147f0 2f 2f 20 77 69 6c 6c 20 75 73 65 20 74 68 65 20  // will use the 
14800 78 43 6f 6c 75 6d 6e 20 61 6e 64 20 78 52 6f 77  xColumn and xRow
14810 69 64 20 6d 65 74 68 6f 64 73 20 74 6f 20 61 63  id methods to ac
14820 63 65 73 73 20 74 68 61 74 20 72 6f 77 20 63 6f  cess that row co
14830 6e 74 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ntent...        
14840 2f 2f 2f 20 54 68 65 20 78 4e 65 78 74 20 6d 65  /// The xNext me
14850 74 68 6f 64 20 77 69 6c 6c 20 62 65 20 75 73 65  thod will be use
14860 64 20 74 6f 20 61 64 76 61 6e 63 65 20 74 6f 20  d to advance to 
14870 74 68 65 20 6e 65 78 74 20 72 6f 77 2e 0d 0a 20  the next row... 
14880 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
14890 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
148a0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
148b0 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
148c0 6d 75 73 74 20 72 65 74 75 72 6e 20 53 51 4c 49  must return SQLI
148d0 54 45 5f 4f 4b 20 69 66 20 73 75 63 63 65 73 73  TE_OK if success
148e0 66 75 6c 2c 20 6f 72 20 61 6e 20 73 71 6c 69 74  ful, or an sqlit
148f0 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  e error..       
14900 20 2f 2f 2f 20 63 6f 64 65 20 69 66 20 61 6e 20   /// code if an 
14910 65 72 72 6f 72 20 6f 63 63 75 72 73 2e 0d 0a 20  error occurs... 
14920 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
14930 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14940 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
14950 2f 2f 2f 20 54 68 65 20 78 46 69 6c 74 65 72 20  /// The xFilter 
14960 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72  method is requir
14970 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72  ed for every vir
14980 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
14990 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e      /// implemen
149a0 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  tation...       
149b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
149c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
149d0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
149e0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
149f0 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
14a00 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
14a10 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
14a20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
14a30 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72 75  sor derived stru
14a40 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
14a50 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
14a60 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
14a70 20 6e 61 6d 65 3d 22 69 64 78 4e 75 6d 22 3e 0d   name="idxNum">.
14a80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d  .        /// Num
14a90 62 65 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ber used to help
14aa0 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
14ab0 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20  lected index... 
14ac0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
14ad0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
14ae0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64   <param name="id
14af0 78 53 74 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  xStr">..        
14b00 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
14b10 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 55 54  ointer to the UT
14b20 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69  F-8 encoded stri
14b30 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
14b40 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
14b50 74 72 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65  tring used to he
14b60 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20  lp identify the 
14b70 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d  selected index..
14b80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
14b90 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
14ba0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
14bb0 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
14bc0 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
14bd0 66 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  f native pointer
14be0 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 61 6c  s to sqlite3_val
14bf0 75 65 20 73 74 72 75 63 74 75 72 65 73 20 73 70  ue structures sp
14c00 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20  ecified..       
14c10 20 2f 2f 2f 20 69 6e 20 3c 70 61 72 61 6d 72 65   /// in <paramre
14c20 66 20 6e 61 6d 65 3d 22 61 72 67 76 22 20 2f 3e  f name="argv" />
14c30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
14c40 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
14c50 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
14c60 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20  ="argv">..      
14c70 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f    /// An array o
14c80 66 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  f native pointer
14c90 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 61 6c  s to sqlite3_val
14ca0 75 65 20 73 74 72 75 63 74 75 72 65 73 20 63 6f  ue structures co
14cb0 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20  ntaining..      
14cc0 20 20 2f 2f 2f 20 66 69 6c 74 65 72 69 6e 67 20    /// filtering 
14cd0 63 72 69 74 65 72 69 61 20 66 6f 72 20 74 68 65  criteria for the
14ce0 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e   selected index.
14cf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
14d00 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
14d10 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
14d20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
14d30 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
14d40 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
14d50 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
14d60 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
14d70 65 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c 74  eErrorCode xFilt
14d80 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
14d90 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c   IntPtr pCursor,
14da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
14db0 74 20 69 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20  t idxNum,..     
14dc0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 69 64         IntPtr id
14dd0 78 53 74 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  xStr,..         
14de0 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
14df0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
14e00 5b 5d 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20  [] argv..       
14e10 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
14e20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
14e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
14e70 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
14e80 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
14e90 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
14ea0 20 2f 2f 2f 20 54 68 65 20 78 4e 65 78 74 20 6d   /// The xNext m
14eb0 65 74 68 6f 64 20 61 64 76 61 6e 63 65 73 20 61  ethod advances a
14ec0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
14ed0 75 72 73 6f 72 20 74 6f 20 74 68 65 20 6e 65 78  ursor to the nex
14ee0 74 20 72 6f 77 20 6f 66 0d 0a 20 20 20 20 20 20  t row of..      
14ef0 20 20 2f 2f 2f 20 61 20 72 65 73 75 6c 74 20 73    /// a result s
14f00 65 74 20 69 6e 69 74 69 61 74 65 64 20 62 79 20  et initiated by 
14f10 78 46 69 6c 74 65 72 2e 20 49 66 20 74 68 65 20  xFilter. If the 
14f20 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64  cursor is alread
14f30 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  y..        /// p
14f40 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6c  ointing at the l
14f50 61 73 74 20 72 6f 77 20 77 68 65 6e 20 74 68 69  ast row when thi
14f60 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c  s routine is cal
14f70 6c 65 64 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20  led, then the.. 
14f80 20 20 20 20 20 20 20 2f 2f 2f 20 63 75 72 73 6f         /// curso
14f90 72 20 6e 6f 20 6c 6f 6e 67 65 72 20 70 6f 69 6e  r no longer poin
14fa0 74 73 20 74 6f 20 76 61 6c 69 64 20 64 61 74 61  ts to valid data
14fb0 20 61 6e 64 20 61 20 73 75 62 73 65 71 75 65 6e   and a subsequen
14fc0 74 20 63 61 6c 6c 20 74 6f 20 74 68 65 0d 0a 20  t call to the.. 
14fd0 20 20 20 20 20 20 20 2f 2f 2f 20 78 45 6f 66 20         /// xEof 
14fe0 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75  method must retu
14ff0 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72  rn true (non-zer
15000 6f 29 2e 20 49 66 20 74 68 65 20 63 75 72 73 6f  o). If the curso
15010 72 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  r is..        //
15020 2f 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 61  / successfully a
15030 64 76 61 6e 63 65 64 20 74 6f 20 61 6e 6f 74 68  dvanced to anoth
15040 65 72 20 72 6f 77 20 6f 66 20 63 6f 6e 74 65 6e  er row of conten
15050 74 2c 20 74 68 65 6e 20 73 75 62 73 65 71 75 65  t, then subseque
15060 6e 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  nt..        /// 
15070 63 61 6c 6c 73 20 74 6f 20 78 45 6f 66 20 6d 75  calls to xEof mu
15080 73 74 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20  st return false 
15090 28 7a 65 72 6f 29 2e 0d 0a 20 20 20 20 20 20 20  (zero)...       
150a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
150b0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
150c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
150d0 69 73 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72  is method must r
150e0 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20  eturn SQLITE_OK 
150f0 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 6f  if successful, o
15100 72 20 61 6e 20 73 71 6c 69 74 65 20 65 72 72 6f  r an sqlite erro
15110 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  r..        /// c
15120 6f 64 65 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ode if an error 
15130 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20  occurs...       
15140 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
15150 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
15160 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
15170 65 20 78 4e 65 78 74 20 6d 65 74 68 6f 64 20 69  e xNext method i
15180 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
15190 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62  very virtual tab
151a0 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
151b0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
151c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
151d0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
151e0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
151f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
15200 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e   name="pCursor">
15210 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
15220 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
15230 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
15240 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69  vtab_cursor deri
15250 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
15260 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
15270 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
15280 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
15290 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
152a0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
152b0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
152c0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
152d0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
152e0 72 72 6f 72 43 6f 64 65 20 78 4e 65 78 74 28 0d  rrorCode xNext(.
152f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
15300 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
15310 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
15320 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
15370 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
15380 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
15390 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
153a0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 45 6f       /// The xEo
153b0 66 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65  f method must re
153c0 74 75 72 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f  turn false (zero
153d0 29 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69  ) if the specifi
153e0 65 64 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20  ed cursor..     
153f0 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 6c 79     /// currently
15400 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 76 61 6c   points to a val
15410 69 64 20 72 6f 77 20 6f 66 20 64 61 74 61 2c 20  id row of data, 
15420 6f 72 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72  or true (non-zer
15430 6f 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  o)..        /// 
15440 6f 74 68 65 72 77 69 73 65 2e 20 54 68 69 73 20  otherwise. This 
15450 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
15460 20 62 79 20 74 68 65 20 53 51 4c 20 65 6e 67 69   by the SQL engi
15470 6e 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 0d 0a  ne immediately..
15480 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 66 74 65          /// afte
15490 72 20 65 61 63 68 20 78 46 69 6c 74 65 72 20 61  r each xFilter a
154a0 6e 64 20 78 4e 65 78 74 20 69 6e 76 6f 63 61 74  nd xNext invocat
154b0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
154c0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
154d0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
154e0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
154f0 45 6f 66 20 6d 65 74 68 6f 64 20 69 73 20 72 65  Eof method is re
15500 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
15510 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
15520 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a  mplementation...
15530 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
15540 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
15550 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
15560 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
15570 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
15580 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
15590 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
155a0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
155b0 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76  tab_cursor deriv
155c0 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
155d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
155e0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
155f0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
15600 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
15610 20 69 66 20 6e 6f 20 6d 6f 72 65 20 72 6f 77 73   if no more rows
15620 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 3b 20   are available; 
15630 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e 0d  zero otherwise..
15640 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
15650 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
15660 20 69 6e 74 20 78 45 6f 66 28 0d 0a 20 20 20 20   int xEof(..    
15670 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
15680 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  Cursor..        
15690 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
156a0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
156b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
156f0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
15700 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
15710 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
15720 2f 2f 2f 20 54 68 65 20 53 51 4c 69 74 65 20 63  /// The SQLite c
15730 6f 72 65 20 69 6e 76 6f 6b 65 73 20 74 68 69 73  ore invokes this
15740 20 6d 65 74 68 6f 64 20 69 6e 20 6f 72 64 65 72   method in order
15750 20 74 6f 20 66 69 6e 64 20 74 68 65 20 76 61 6c   to find the val
15760 75 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  ue for..        
15770 2f 2f 2f 20 74 68 65 20 4e 2d 74 68 20 63 6f 6c  /// the N-th col
15780 75 6d 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65  umn of the curre
15790 6e 74 20 72 6f 77 2e 20 4e 20 69 73 20 7a 65 72  nt row. N is zer
157a0 6f 2d 62 61 73 65 64 20 73 6f 20 74 68 65 20 66  o-based so the f
157b0 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  irst..        //
157c0 2f 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 75 6d 62  / column is numb
157d0 65 72 65 64 20 30 2e 20 54 68 65 20 78 43 6f 6c  ered 0. The xCol
157e0 75 6d 6e 20 6d 65 74 68 6f 64 20 6d 61 79 20 72  umn method may r
157f0 65 74 75 72 6e 20 69 74 73 20 72 65 73 75 6c 74  eturn its result
15800 20 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 2f   back..        /
15810 2f 2f 20 74 6f 20 53 51 4c 69 74 65 20 75 73 69  // to SQLite usi
15820 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  ng one of the fo
15830 6c 6c 6f 77 69 6e 67 20 69 6e 74 65 72 66 61 63  llowing interfac
15840 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e:..        /// 
15850 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
15860 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20   /// <code>..   
15870 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c       ///     sql
15880 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62  ite3_result_blob
15890 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ()..        /// 
158a0 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
158b0 6c 74 5f 64 6f 75 62 6c 65 28 29 0d 0a 20 20 20  lt_double()..   
158c0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c       ///     sql
158d0 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
158e0 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  )..        ///  
158f0 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
15900 74 5f 69 6e 74 36 34 28 29 0d 0a 20 20 20 20 20  t_int64()..     
15910 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74     ///     sqlit
15920 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 29  e3_result_null()
15930 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
15940 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
15950 5f 74 65 78 74 28 29 0d 0a 20 20 20 20 20 20 20  _text()..       
15960 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33   ///     sqlite3
15970 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 28 29  _result_text16()
15980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
15990 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
159a0 5f 74 65 78 74 31 36 6c 65 28 29 0d 0a 20 20 20  _text16le()..   
159b0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c       ///     sql
159c0 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
159d0 31 36 62 65 28 29 0d 0a 20 20 20 20 20 20 20 20  16be()..        
159e0 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ///     sqlite3_
159f0 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28  result_zeroblob(
15a00 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  )..        /// <
15a10 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
15a20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
15a30 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20 78      /// If the x
15a40 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 69 6d  Column method im
15a50 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 63 61 6c  plementation cal
15a60 6c 73 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 66  ls none of the f
15a70 75 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  unctions..      
15a80 20 20 2f 2f 2f 20 61 62 6f 76 65 2c 20 74 68 65    /// above, the
15a90 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  n the value of t
15aa0 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66 61 75 6c  he column defaul
15ab0 74 73 20 74 6f 20 61 6e 20 53 51 4c 20 4e 55 4c  ts to an SQL NUL
15ac0 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  L...        /// 
15ad0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
15ae0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
15af0 20 20 20 20 20 2f 2f 2f 20 54 6f 20 72 61 69 73       /// To rais
15b00 65 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 65 20  e an error, the 
15b10 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 73  xColumn method s
15b20 68 6f 75 6c 64 20 75 73 65 20 6f 6e 65 20 6f 66  hould use one of
15b30 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
15b40 2f 20 72 65 73 75 6c 74 5f 74 65 78 74 28 29 20  / result_text() 
15b50 6d 65 74 68 6f 64 73 20 74 6f 20 73 65 74 20 74  methods to set t
15b60 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
15b70 20 74 65 78 74 2c 20 74 68 65 6e 20 72 65 74 75   text, then retu
15b80 72 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f  rn an..        /
15b90 2f 2f 20 61 70 70 72 6f 70 72 69 61 74 65 20 65  // appropriate e
15ba0 72 72 6f 72 20 63 6f 64 65 2e 20 54 68 65 20 78  rror code. The x
15bb0 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 6d 75  Column method mu
15bc0 73 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  st return SQLITE
15bd0 5f 4f 4b 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20  _OK on..        
15be0 2f 2f 2f 20 73 75 63 63 65 73 73 2e 0d 0a 20 20  /// success...  
15bf0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
15c00 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15c10 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15c20 2f 2f 20 54 68 65 20 78 43 6f 6c 75 6d 6e 20 6d  // The xColumn m
15c30 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65  ethod is require
15c40 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74  d for every virt
15c50 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ual table..     
15c60 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74     /// implement
15c70 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
15c80 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
15c90 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
15ca0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
15cb0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
15cc0 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
15cd0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
15ce0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
15cf0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
15d00 6f 72 20 64 65 72 69 76 65 64 20 73 74 72 75 63  or derived struc
15d10 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
15d20 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
15d30 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
15d40 6e 61 6d 65 3d 22 70 43 6f 6e 74 65 78 74 22 3e  name="pContext">
15d50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
15d60 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
15d70 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
15d80 63 6f 6e 74 65 78 74 20 73 74 72 75 63 74 75 72  context structur
15d90 65 20 74 6f 20 62 65 20 75 73 65 64 0d 0a 20 20  e to be used..  
15da0 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 72 65        /// for re
15db0 74 75 72 6e 69 6e 67 20 74 68 65 20 73 70 65 63  turning the spec
15dc0 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c  ified column val
15dd0 75 65 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65  ue to the SQLite
15de0 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f   core..        /
15df0 2f 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  // library...   
15e00 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
15e10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15e20 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65  param name="inde
15e30 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  x">..        ///
15e40 20 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20   The zero-based 
15e50 69 6e 64 65 78 20 63 6f 72 72 65 73 70 6f 6e 64  index correspond
15e60 69 6e 67 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d  ing to the colum
15e70 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  n containing the
15e80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61  ..        /// va
15e90 6c 75 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e  lue to be return
15ea0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
15eb0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
15ec0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
15ed0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
15ee0 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
15ef0 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
15f00 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
15f10 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
15f20 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43  LiteErrorCode xC
15f30 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20  olumn(..        
15f40 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73      IntPtr pCurs
15f50 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or,..           
15f60 20 49 6e 74 50 74 72 20 70 43 6f 6e 74 65 78 74   IntPtr pContext
15f70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
15f80 6e 74 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20  nt index..      
15f90 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
15fa0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
15fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
15ff0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
16000 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
16010 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
16020 20 20 2f 2f 2f 20 41 20 73 75 63 63 65 73 73 66    /// A successf
16030 75 6c 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ul invocation of
16040 20 74 68 69 73 20 6d 65 74 68 6f 64 20 77 69 6c   this method wil
16050 6c 20 63 61 75 73 65 20 2a 70 52 6f 77 69 64 20  l cause *pRowid 
16060 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  to be..        /
16070 2f 2f 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74  // filled with t
16080 68 65 20 72 6f 77 69 64 20 6f 66 20 72 6f 77 20  he rowid of row 
16090 74 68 61 74 20 74 68 65 20 76 69 72 74 75 61 6c  that the virtual
160a0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 70 43   table cursor pC
160b0 75 72 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f  ur is..        /
160c0 2f 2f 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  // currently poi
160d0 6e 74 69 6e 67 20 61 74 2e 20 54 68 69 73 20 6d  nting at. This m
160e0 65 74 68 6f 64 20 72 65 74 75 72 6e 73 20 53 51  ethod returns SQ
160f0 4c 49 54 45 5f 4f 4b 20 6f 6e 20 73 75 63 63 65  LITE_OK on succe
16100 73 73 2e 20 49 74 0d 0a 20 20 20 20 20 20 20 20  ss. It..        
16110 2f 2f 2f 20 72 65 74 75 72 6e 73 20 61 6e 20 61  /// returns an a
16120 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
16130 20 63 6f 64 65 20 6f 6e 20 66 61 69 6c 75 72 65   code on failure
16140 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16150 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
16160 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
16170 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 52 6f 77      /// The xRow
16180 69 64 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71  id method is req
16190 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20  uired for every 
161a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
161b0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
161c0 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
161d0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
161e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
161f0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
16200 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
16210 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
16220 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
16230 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
16240 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  he sqlite3_vtab_
16250 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73  cursor derived s
16260 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
16270 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
16280 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
16290 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64 22  ram name="rowId"
162a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
162b0 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
162c0 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
162d0 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
162e0 63 6f 6e 74 61 69 6e 20 74 68 65 20 75 6e 69 71  contain the uniq
162f0 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ue..        /// 
16300 69 6e 74 65 67 65 72 20 72 6f 77 20 69 64 65 6e  integer row iden
16310 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 63  tifier for the c
16320 75 72 72 65 6e 74 20 72 6f 77 20 66 6f 72 20 74  urrent row for t
16330 68 65 20 73 70 65 63 69 66 69 65 64 20 63 75 72  he specified cur
16340 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sor...        //
16350 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16360 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
16370 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
16380 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
16390 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
163a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
163b0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
163c0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
163d0 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20  RowId(..        
163e0 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73      IntPtr pCurs
163f0 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or,..           
16400 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d   ref long rowId.
16410 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
16420 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
16430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16470 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
16480 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
16490 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
164a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6c 6c  .        /// All
164b0 20 63 68 61 6e 67 65 73 20 74 6f 20 61 20 76 69   changes to a vi
164c0 72 74 75 61 6c 20 74 61 62 6c 65 20 61 72 65 20  rtual table are 
164d0 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 20 78  made using the x
164e0 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 0d 0a  Update method...
164f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
16500 20 6f 6e 65 20 6d 65 74 68 6f 64 20 63 61 6e 20   one method can 
16510 62 65 20 75 73 65 64 20 74 6f 20 69 6e 73 65 72  be used to inser
16520 74 2c 20 64 65 6c 65 74 65 2c 20 6f 72 20 75 70  t, delete, or up
16530 64 61 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  date...        /
16540 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
16550 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
16560 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
16570 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 73  argc parameter s
16580 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 75 6d  pecifies the num
16590 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
165a0 6e 20 74 68 65 20 61 72 67 76 0d 0a 20 20 20 20  n the argv..    
165b0 20 20 20 20 2f 2f 2f 20 61 72 72 61 79 2e 20 54      /// array. T
165c0 68 65 20 76 61 6c 75 65 20 6f 66 20 61 72 67 63  he value of argc
165d0 20 77 69 6c 6c 20 62 65 20 31 20 66 6f 72 20 61   will be 1 for a
165e0 20 70 75 72 65 20 64 65 6c 65 74 65 20 6f 70 65   pure delete ope
165f0 72 61 74 69 6f 6e 20 6f 72 0d 0a 20 20 20 20 20  ration or..     
16600 20 20 20 2f 2f 2f 20 4e 2b 32 20 66 6f 72 20 61     /// N+2 for a
16610 6e 20 69 6e 73 65 72 74 20 6f 72 20 72 65 70 6c  n insert or repl
16620 61 63 65 20 6f 72 20 75 70 64 61 74 65 20 77 68  ace or update wh
16630 65 72 65 20 4e 20 69 73 20 74 68 65 20 6e 75 6d  ere N is the num
16640 62 65 72 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ber of..        
16650 2f 2f 2f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  /// columns in t
16660 68 65 20 74 61 62 6c 65 2e 20 49 6e 20 74 68 65  he table. In the
16670 20 70 72 65 76 69 6f 75 73 20 73 65 6e 74 65 6e   previous senten
16680 63 65 2c 20 4e 20 69 6e 63 6c 75 64 65 73 20 61  ce, N includes a
16690 6e 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ny..        /// 
166a0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 0d  hidden columns..
166b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
166c0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
166d0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
166e0 20 20 2f 2f 2f 20 45 76 65 72 79 20 61 72 67 76    /// Every argv
166f0 20 65 6e 74 72 79 20 77 69 6c 6c 20 68 61 76 65   entry will have
16700 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75   a non-NULL valu
16710 65 20 69 6e 20 43 20 62 75 74 20 6d 61 79 20 63  e in C but may c
16720 6f 6e 74 61 69 6e 0d 0a 20 20 20 20 20 20 20 20  ontain..        
16730 2f 2f 2f 20 74 68 65 20 53 51 4c 20 76 61 6c 75  /// the SQL valu
16740 65 20 4e 55 4c 4c 2e 20 49 6e 20 6f 74 68 65 72  e NULL. In other
16750 20 77 6f 72 64 73 2c 20 69 74 20 69 73 20 61 6c   words, it is al
16760 77 61 79 73 20 74 72 75 65 20 74 68 61 74 0d 0a  ways true that..
16770 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 76          /// argv
16780 5b 69 5d 21 3d 30 20 66 6f 72 20 69 20 62 65 74  [i]!=0 for i bet
16790 77 65 65 6e 20 30 20 61 6e 64 20 61 72 67 63 2d  ween 0 and argc-
167a0 31 2e 20 48 6f 77 65 76 65 72 2c 20 69 74 20 6d  1. However, it m
167b0 69 67 68 74 20 62 65 20 74 68 65 0d 0a 20 20 20  ight be the..   
167c0 20 20 20 20 20 2f 2f 2f 20 63 61 73 65 20 74 68       /// case th
167d0 61 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  at sqlite3_value
167e0 5f 74 79 70 65 28 61 72 67 76 5b 69 5d 29 3d 3d  _type(argv[i])==
167f0 53 51 4c 49 54 45 5f 4e 55 4c 4c 2e 0d 0a 20 20  SQLITE_NULL...  
16800 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
16810 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16820 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
16830 2f 2f 20 54 68 65 20 61 72 67 76 5b 30 5d 20 70  // The argv[0] p
16840 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65 20  arameter is the 
16850 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 69  rowid of a row i
16860 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
16870 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
16880 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 20   to be deleted. 
16890 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 61 6e  If argv[0] is an
168a0 20 53 51 4c 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   SQL NULL, then 
168b0 6e 6f 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75  no deletion occu
168c0 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rs...        ///
168d0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
168e0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
168f0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
16900 67 76 5b 31 5d 20 70 61 72 61 6d 65 74 65 72 20  gv[1] parameter 
16910 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
16920 61 20 6e 65 77 20 72 6f 77 20 74 6f 20 62 65 20  a new row to be 
16930 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 0d 0a 20  inserted into.. 
16940 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76         /// the v
16950 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 49 66  irtual table. If
16960 20 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20 53   argv[1] is an S
16970 51 4c 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  QL NULL, then th
16980 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
16990 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 75  mplementation mu
169a0 73 74 20 63 68 6f 6f 73 65 20 61 20 72 6f 77 69  st choose a rowi
169b0 64 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20  d for the newly 
169c0 69 6e 73 65 72 74 65 64 20 72 6f 77 2e 0d 0a 20  inserted row... 
169d0 20 20 20 20 20 20 20 2f 2f 2f 20 53 75 62 73 65         /// Subse
169e0 71 75 65 6e 74 20 61 72 67 76 5b 5d 20 65 6e 74  quent argv[] ent
169f0 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 76 61 6c  ries contain val
16a00 75 65 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ues of the colum
16a10 6e 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  ns of the..     
16a20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
16a30 61 62 6c 65 2c 20 69 6e 20 74 68 65 20 6f 72 64  able, in the ord
16a40 65 72 20 74 68 61 74 20 74 68 65 20 63 6f 6c 75  er that the colu
16a50 6d 6e 73 20 77 65 72 65 20 64 65 63 6c 61 72 65  mns were declare
16a60 64 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  d. The..        
16a70 2f 2f 2f 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  /// number of co
16a80 6c 75 6d 6e 73 20 77 69 6c 6c 20 6d 61 74 63 68  lumns will match
16a90 20 74 68 65 20 74 61 62 6c 65 20 64 65 63 6c 61   the table decla
16aa0 72 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 0d  ration that the.
16ab0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f  .        /// xCo
16ac0 6e 6e 65 63 74 20 6f 72 20 78 43 72 65 61 74 65  nnect or xCreate
16ad0 20 6d 65 74 68 6f 64 20 6d 61 64 65 20 75 73 69   method made usi
16ae0 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 64  ng the sqlite3_d
16af0 65 63 6c 61 72 65 5f 76 74 61 62 28 29 0d 0a 20  eclare_vtab().. 
16b00 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 2e         /// call.
16b10 20 41 6c 6c 20 68 69 64 64 65 6e 20 63 6f 6c 75   All hidden colu
16b20 6d 6e 73 20 61 72 65 20 69 6e 63 6c 75 64 65 64  mns are included
16b30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16b40 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
16b50 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
16b60 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 64 6f 69      /// When doi
16b70 6e 67 20 61 6e 20 69 6e 73 65 72 74 20 77 69 74  ng an insert wit
16b80 68 6f 75 74 20 61 20 72 6f 77 69 64 20 28 61 72  hout a rowid (ar
16b90 67 63 3e 31 2c 20 61 72 67 76 5b 31 5d 20 69 73  gc>1, argv[1] is
16ba0 20 61 6e 20 53 51 4c 0d 0a 20 20 20 20 20 20 20   an SQL..       
16bb0 20 2f 2f 2f 20 4e 55 4c 4c 29 2c 20 74 68 65 20   /// NULL), the 
16bc0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
16bd0 75 73 74 20 73 65 74 20 2a 70 52 6f 77 69 64 20  ust set *pRowid 
16be0 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  to the rowid of 
16bf0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
16c00 20 6e 65 77 6c 79 20 69 6e 73 65 72 74 65 64 20   newly inserted 
16c10 72 6f 77 3b 20 74 68 69 73 20 77 69 6c 6c 20 62  row; this will b
16c20 65 63 6f 6d 65 20 74 68 65 20 76 61 6c 75 65 20  ecome the value 
16c30 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0d  returned by the.
16c40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
16c50 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
16c60 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f  _rowid() functio
16c70 6e 2e 20 53 65 74 74 69 6e 67 20 74 68 69 73 20  n. Setting this 
16c80 76 61 6c 75 65 20 69 6e 20 61 6c 6c 20 74 68 65  value in all the
16c90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 74  ..        /// ot
16ca0 68 65 72 20 63 61 73 65 73 20 69 73 20 61 20 68  her cases is a h
16cb0 61 72 6d 6c 65 73 73 20 6e 6f 2d 6f 70 3b 20 74  armless no-op; t
16cc0 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65  he SQLite engine
16cd0 20 69 67 6e 6f 72 65 73 20 74 68 65 0d 0a 20 20   ignores the..  
16ce0 20 20 20 20 20 20 2f 2f 2f 20 2a 70 52 6f 77 69        /// *pRowi
16cf0 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69  d return value i
16d00 66 20 61 72 67 63 3d 3d 31 20 6f 72 20 61 72 67  f argc==1 or arg
16d10 76 5b 31 5d 20 69 73 20 6e 6f 74 20 61 6e 20 53  v[1] is not an S
16d20 51 4c 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20  QL NULL...      
16d30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
16d40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
16d50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 45  >..        /// E
16d60 61 63 68 20 63 61 6c 6c 20 74 6f 20 78 55 70 64  ach call to xUpd
16d70 61 74 65 20 77 69 6c 6c 20 66 61 6c 6c 20 69 6e  ate will fall in
16d80 74 6f 20 6f 6e 65 20 6f 66 20 63 61 73 65 73 20  to one of cases 
16d90 73 68 6f 77 6e 20 62 65 6c 6f 77 2e 20 4e 6f 74  shown below. Not
16da0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
16db0 68 61 74 20 72 65 66 65 72 65 6e 63 65 73 20 74  hat references t
16dc0 6f 20 61 72 67 76 5b 69 5d 20 6d 65 61 6e 20 74  o argv[i] mean t
16dd0 68 65 20 53 51 4c 20 76 61 6c 75 65 20 68 65 6c  he SQL value hel
16de0 64 20 77 69 74 68 69 6e 20 74 68 65 0d 0a 20 20  d within the..  
16df0 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 76 5b 69        /// argv[i
16e00 5d 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 74 68  ] object, not th
16e10 65 20 61 72 67 76 5b 69 5d 20 6f 62 6a 65 63 74  e argv[i] object
16e20 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20   itself...      
16e30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
16e40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65         /// <code
16e50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  >..        ///  
16e60 20 20 20 61 72 67 63 20 3d 20 31 0d 0a 20 20 20     argc = 1..   
16e70 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
16e80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
16e90 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
16ea0 2f 20 20 20 20 20 20 20 20 20 54 68 65 20 73 69  /         The si
16eb0 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20 72 6f  ngle row with ro
16ec0 77 69 64 20 65 71 75 61 6c 20 74 6f 20 61 72 67  wid equal to arg
16ed0 76 5b 30 5d 20 69 73 20 64 65 6c 65 74 65 64 2e  v[0] is deleted.
16ee0 20 4e 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   No..        ///
16ef0 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 20           insert 
16f00 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20  occurs...       
16f10 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
16f20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e        /// <code>
16f30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
16f40 20 20 61 72 67 63 20 3e 20 31 0d 0a 20 20 20 20    argc > 1..    
16f50 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76      ///     argv
16f60 5b 30 5d 20 3d 20 4e 55 4c 4c 0d 0a 20 20 20 20  [0] = NULL..    
16f70 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d      /// </code>.
16f80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
16f90 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
16fa0 20 20 20 20 20 20 20 20 20 41 20 6e 65 77 20 72           A new r
16fb0 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 77  ow is inserted w
16fc0 69 74 68 20 61 20 72 6f 77 69 64 20 61 72 67 76  ith a rowid argv
16fd0 5b 31 5d 20 61 6e 64 20 63 6f 6c 75 6d 6e 0d 0a  [1] and column..
16fe0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
16ff0 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 61 72      values in ar
17000 67 76 5b 32 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77  gv[2] and follow
17010 69 6e 67 2e 20 49 66 20 61 72 67 76 5b 31 5d 20  ing. If argv[1] 
17020 69 73 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2c 0d  is an SQL NULL,.
17030 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
17040 20 20 20 20 20 74 68 65 20 61 20 6e 65 77 20 75       the a new u
17050 6e 69 71 75 65 20 72 6f 77 69 64 20 69 73 20 67  nique rowid is g
17060 65 6e 65 72 61 74 65 64 20 61 75 74 6f 6d 61 74  enerated automat
17070 69 63 61 6c 6c 79 2e 0d 0a 20 20 20 20 20 20 20  ically...       
17080 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
17090 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e        /// <code>
170a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
170b0 20 20 61 72 67 63 20 3e 20 31 0d 0a 20 20 20 20    argc > 1..    
170c0 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76      ///     argv
170d0 5b 30 5d 20 3f 20 4e 55 4c 4c 0d 0a 20 20 20 20  [0] ? NULL..    
170e0 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76      ///     argv
170f0 5b 30 5d 20 3d 20 61 72 67 76 5b 31 5d 0d 0a 20  [0] = argv[1].. 
17100 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
17110 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
17120 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
17130 2f 2f 2f 20 20 20 20 20 20 20 20 20 54 68 65 20  ///         The 
17140 72 6f 77 20 77 69 74 68 20 72 6f 77 69 64 20 61  row with rowid a
17150 72 67 76 5b 30 5d 20 69 73 20 75 70 64 61 74 65  rgv[0] is update
17160 64 20 77 69 74 68 20 6e 65 77 20 76 61 6c 75 65  d with new value
17170 73 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s in..        //
17180 2f 20 20 20 20 20 20 20 20 20 61 72 67 76 5b 32  /         argv[2
17190 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  ] and following 
171a0 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20  parameters...   
171b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
171c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
171d0 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
171e0 2f 20 20 20 20 20 61 72 67 63 20 3e 20 31 0d 0a  /     argc > 1..
171f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
17200 61 72 67 76 5b 30 5d 20 3f 20 4e 55 4c 4c 0d 0a  argv[0] ? NULL..
17210 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
17220 61 72 67 76 5b 30 5d 20 3f 20 61 72 67 76 5b 31  argv[0] ? argv[1
17230 5d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ]..        /// <
17240 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
17250 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
17260 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
17270 54 68 65 20 72 6f 77 20 77 69 74 68 20 72 6f 77  The row with row
17280 69 64 20 61 72 67 76 5b 30 5d 20 69 73 20 75 70  id argv[0] is up
17290 64 61 74 65 64 20 77 69 74 68 20 72 6f 77 69 64  dated with rowid
172a0 20 61 72 67 76 5b 31 5d 0d 0a 20 20 20 20 20 20   argv[1]..      
172b0 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 61 6e    ///         an
172c0 64 20 6e 65 77 20 76 61 6c 75 65 73 20 69 6e 20  d new values in 
172d0 61 72 67 76 5b 32 5d 20 61 6e 64 20 66 6f 6c 6c  argv[2] and foll
172e0 6f 77 69 6e 67 20 70 61 72 61 6d 65 74 65 72 73  owing parameters
172f0 2e 20 54 68 69 73 0d 0a 20 20 20 20 20 20 20 20  . This..        
17300 2f 2f 2f 20 20 20 20 20 20 20 20 20 77 69 6c 6c  ///         will
17310 20 6f 63 63 75 72 20 77 68 65 6e 20 61 6e 20 53   occur when an S
17320 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 75 70 64  QL statement upd
17330 61 74 65 73 20 61 20 72 6f 77 69 64 2c 20 61 73  ates a rowid, as
17340 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   in..        ///
17350 20 20 20 20 20 20 20 20 20 74 68 65 20 73 74 61           the sta
17360 74 65 6d 65 6e 74 3a 0d 0a 20 20 20 20 20 20 20  tement:..       
17370 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
17380 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e        /// <code>
17390 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
173a0 20 20 20 20 20 20 20 20 20 20 55 50 44 41 54 45            UPDATE
173b0 20 74 61 62 6c 65 20 53 45 54 20 72 6f 77 69 64   table SET rowid
173c0 3d 72 6f 77 69 64 2b 31 20 57 48 45 52 45 20 2e  =rowid+1 WHERE .
173d0 2e 2e 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ..;..        ///
173e0 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20   </code>..      
173f0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
17400 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 55        /// The xU
17410 70 64 61 74 65 20 6d 65 74 68 6f 64 20 6d 75 73  pdate method mus
17420 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  t return SQLITE_
17430 4f 4b 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  OK if and only i
17440 66 20 69 74 20 69 73 0d 0a 20 20 20 20 20 20 20  f it is..       
17450 20 2f 2f 2f 20 73 75 63 63 65 73 73 66 75 6c 2e   /// successful.
17460 20 49 66 20 61 20 66 61 69 6c 75 72 65 20 6f 63   If a failure oc
17470 63 75 72 73 2c 20 74 68 65 20 78 55 70 64 61 74  curs, the xUpdat
17480 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61 6e  e must return an
17490 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 70  ..        /// ap
174a0 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20  propriate error 
174b0 63 6f 64 65 2e 20 4f 6e 20 61 20 66 61 69 6c 75  code. On a failu
174c0 72 65 2c 20 74 68 65 20 70 56 54 61 62 2d 3e 7a  re, the pVTab->z
174d0 45 72 72 4d 73 67 20 65 6c 65 6d 65 6e 74 0d 0a  ErrMsg element..
174e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 61 79 20          /// may 
174f0 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 72 65  optionally be re
17500 70 6c 61 63 65 64 20 77 69 74 68 20 65 72 72 6f  placed with erro
17510 72 20 6d 65 73 73 61 67 65 20 74 65 78 74 20 73  r message text s
17520 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0d  tored in memory.
17530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 6c  .        /// all
17540 6f 63 61 74 65 64 20 66 72 6f 6d 20 53 51 4c 69  ocated from SQLi
17550 74 65 20 75 73 69 6e 67 20 66 75 6e 63 74 69 6f  te using functio
17560 6e 73 20 73 75 63 68 20 61 73 20 73 71 6c 69 74  ns such as sqlit
17570 65 33 5f 6d 70 72 69 6e 74 66 28 29 20 6f 72 0d  e3_mprintf() or.
17580 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
17590 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 0d 0a  ite3_malloc()...
175a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
175b0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
175c0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
175d0 20 2f 2f 2f 20 49 66 20 74 68 65 20 78 55 70 64   /// If the xUpd
175e0 61 74 65 20 6d 65 74 68 6f 64 20 76 69 6f 6c 61  ate method viola
175f0 74 65 73 20 73 6f 6d 65 20 63 6f 6e 73 74 72 61  tes some constra
17600 69 6e 74 20 6f 66 20 74 68 65 20 76 69 72 74 75  int of the virtu
17610 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
17620 20 20 2f 2f 2f 20 28 69 6e 63 6c 75 64 69 6e 67    /// (including
17630 2c 20 62 75 74 20 6e 6f 74 20 6c 69 6d 69 74 65  , but not limite
17640 64 20 74 6f 2c 20 61 74 74 65 6d 70 74 69 6e 67  d to, attempting
17650 20 74 6f 20 73 74 6f 72 65 20 61 20 76 61 6c 75   to store a valu
17660 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..      
17670 20 20 2f 2f 2f 20 77 72 6f 6e 67 20 64 61 74 61    /// wrong data
17680 74 79 70 65 2c 20 61 74 74 65 6d 70 74 69 6e 67  type, attempting
17690 20 74 6f 20 73 74 6f 72 65 20 61 20 76 61 6c 75   to store a valu
176a0 65 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  e that is too la
176b0 72 67 65 20 6f 72 0d 0a 20 20 20 20 20 20 20 20  rge or..        
176c0 2f 2f 2f 20 74 6f 6f 20 73 6d 61 6c 6c 2c 20 6f  /// too small, o
176d0 72 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  r attempting to 
176e0 63 68 61 6e 67 65 20 61 20 72 65 61 64 2d 6f 6e  change a read-on
176f0 6c 79 20 76 61 6c 75 65 29 20 74 68 65 6e 20 74  ly value) then t
17700 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
17710 78 55 70 64 61 74 65 20 6d 75 73 74 20 66 61 69  xUpdate must fai
17720 6c 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70  l with an approp
17730 72 69 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65  riate error code
17740 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17750 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
17760 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
17770 20 20 20 20 2f 2f 2f 20 54 68 65 72 65 20 6d 69      /// There mi
17780 67 68 74 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f  ght be one or mo
17790 72 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  re sqlite3_vtab_
177a0 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 73 20 6f  cursor objects o
177b0 70 65 6e 20 61 6e 64 20 69 6e 0d 0a 20 20 20 20  pen and in..    
177c0 20 20 20 20 2f 2f 2f 20 75 73 65 20 6f 6e 20 74      /// use on t
177d0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
177e0 20 69 6e 73 74 61 6e 63 65 20 61 6e 64 20 70 65   instance and pe
177f0 72 68 61 70 73 20 65 76 65 6e 20 6f 6e 20 74 68  rhaps even on th
17800 65 20 72 6f 77 20 6f 66 0d 0a 20 20 20 20 20 20  e row of..      
17810 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61    /// the virtua
17820 6c 20 74 61 62 6c 65 20 77 68 65 6e 20 74 68 65  l table when the
17830 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
17840 69 73 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 0d  is invoked. The.
17850 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70  .        /// imp
17860 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 78  lementation of x
17870 55 70 64 61 74 65 20 6d 75 73 74 20 62 65 20 70  Update must be p
17880 72 65 70 61 72 65 64 20 66 6f 72 20 61 74 74 65  repared for atte
17890 6d 70 74 73 20 74 6f 20 64 65 6c 65 74 65 0d 0a  mpts to delete..
178a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72 20 6d          /// or m
178b0 6f 64 69 66 79 20 72 6f 77 73 20 6f 66 20 74 68  odify rows of th
178c0 65 20 74 61 62 6c 65 20 6f 75 74 20 66 72 6f 6d  e table out from
178d0 20 6f 74 68 65 72 20 65 78 69 73 74 69 6e 67 20   other existing 
178e0 63 75 72 73 6f 72 73 2e 20 49 66 20 74 68 65 0d  cursors. If the.
178f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72  .        /// vir
17900 74 75 61 6c 20 74 61 62 6c 65 20 63 61 6e 6e 6f  tual table canno
17910 74 20 61 63 63 6f 6d 6d 6f 64 61 74 65 20 73 75  t accommodate su
17920 63 68 20 63 68 61 6e 67 65 73 2c 20 74 68 65 20  ch changes, the 
17930 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 0d 0a  xUpdate method..
17940 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 75 73 74          /// must
17950 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
17960 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
17970 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
17980 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
17990 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
179a0 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
179b0 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 49 66 20  is optional. If 
179c0 74 68 65 20 78 55 70 64 61 74 65 20 70 6f 69 6e  the xUpdate poin
179d0 74 65 72 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ter in the..    
179e0 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
179f0 6d 6f 64 75 6c 65 20 66 6f 72 20 61 20 76 69 72  module for a vir
17a00 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 61 20  tual table is a 
17a10 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 74 68  NULL pointer, th
17a20 65 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  en the..        
17a30 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c  /// virtual tabl
17a40 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d  e is read-only..
17a50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
17a60 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
17a70 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
17a80 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
17a90 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
17aa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
17ab0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
17ac0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
17ad0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
17ae0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
17af0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
17b00 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
17b10 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20  name="argc">..  
17b20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75        /// The nu
17b30 6d 62 65 72 20 6f 66 20 6e 65 77 20 6f 72 20 6d  mber of new or m
17b40 6f 64 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76  odified column v
17b50 61 6c 75 65 73 20 63 6f 6e 74 61 69 6e 65 64 20  alues contained 
17b60 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  in..        /// 
17b70 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22  <paramref name="
17b80 61 72 67 76 22 20 2f 3e 2e 0d 0a 20 20 20 20 20  argv" />...     
17b90 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
17ba0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
17bb0 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e  ram name="argv">
17bc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
17bd0 65 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76  e array of nativ
17be0 65 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 73 71  e pointers to sq
17bf0 6c 69 74 65 33 5f 76 61 6c 75 65 20 73 74 72 75  lite3_value stru
17c00 63 74 75 72 65 73 20 63 6f 6e 74 61 69 6e 69 6e  ctures containin
17c10 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  g..        /// t
17c20 68 65 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66 69  he new or modifi
17c30 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ed column values
17c40 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20  , if any...     
17c50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
17c60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
17c70 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64 22  ram name="rowId"
17c80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
17c90 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
17ca0 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
17cb0 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
17cc0 63 6f 6e 74 61 69 6e 20 74 68 65 20 75 6e 69 71  contain the uniq
17cd0 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ue..        /// 
17ce0 69 6e 74 65 67 65 72 20 72 6f 77 20 69 64 65 6e  integer row iden
17cf0 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 72  tifier for the r
17d00 6f 77 20 74 68 61 74 20 77 61 73 20 69 6e 73 65  ow that was inse
17d10 72 74 65 64 2c 20 69 66 20 61 6e 79 2e 0d 0a 20  rted, if any... 
17d20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17d30 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
17d40 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
17d50 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
17d60 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
17d70 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
17d80 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
17d90 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
17da0 72 6f 72 43 6f 64 65 20 78 55 70 64 61 74 65 28  rorCode xUpdate(
17db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
17dc0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
17dd0 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
17de0 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
17df0 49 6e 74 50 74 72 5b 5d 20 61 72 67 76 2c 0d 0a  IntPtr[] argv,..
17e00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
17e10 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20  long rowId..    
17e20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
17e30 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
17e80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
17e90 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
17ea0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
17eb0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
17ec0 68 6f 64 20 62 65 67 69 6e 73 20 61 20 74 72 61  hod begins a tra
17ed0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 61 20 76 69  nsaction on a vi
17ee0 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 69  rtual table. Thi
17ef0 73 20 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20  s is method..   
17f00 20 20 20 20 20 2f 2f 2f 20 69 73 20 6f 70 74 69       /// is opti
17f10 6f 6e 61 6c 2e 20 54 68 65 20 78 42 65 67 69 6e  onal. The xBegin
17f20 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c 69   pointer of sqli
17f30 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20 62  te3_module may b
17f40 65 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20  e NULL...       
17f50 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
17f60 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
17f70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
17f80 69 73 20 6d 65 74 68 6f 64 20 69 73 20 61 6c 77  is method is alw
17f90 61 79 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ays followed by 
17fa0 6f 6e 65 20 63 61 6c 6c 20 74 6f 20 65 69 74 68  one call to eith
17fb0 65 72 20 74 68 65 20 78 43 6f 6d 6d 69 74 20 6f  er the xCommit o
17fc0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  r..        /// x
17fd0 52 6f 6c 6c 62 61 63 6b 20 6d 65 74 68 6f 64 2e  Rollback method.
17fe0 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74   Virtual table t
17ff0 72 61 6e 73 61 63 74 69 6f 6e 73 20 64 6f 20 6e  ransactions do n
18000 6f 74 20 6e 65 73 74 2c 20 73 6f 20 74 68 65 0d  ot nest, so the.
18010 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 42 65  .        /// xBe
18020 67 69 6e 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  gin method will 
18030 6e 6f 74 20 62 65 20 69 6e 76 6f 6b 65 64 20 6d  not be invoked m
18040 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 6f 6e  ore than once on
18050 20 61 20 73 69 6e 67 6c 65 0d 0a 20 20 20 20 20   a single..     
18060 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
18070 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 20  able without an 
18080 69 6e 74 65 72 76 65 6e 69 6e 67 20 63 61 6c 6c  intervening call
18090 20 74 6f 20 65 69 74 68 65 72 20 78 43 6f 6d 6d   to either xComm
180a0 69 74 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  it or..        /
180b0 2f 2f 20 78 52 6f 6c 6c 62 61 63 6b 2e 20 4d 75  // xRollback. Mu
180c0 6c 74 69 70 6c 65 20 63 61 6c 6c 73 20 74 6f 20  ltiple calls to 
180d0 6f 74 68 65 72 20 6d 65 74 68 6f 64 73 20 63 61  other methods ca
180e0 6e 20 61 6e 64 20 6c 69 6b 65 6c 79 20 77 69 6c  n and likely wil
180f0 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  l..        /// o
18100 63 63 75 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ccur in between 
18110 74 68 65 20 78 42 65 67 69 6e 20 61 6e 64 20 74  the xBegin and t
18120 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
18130 20 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20 20 20   xCommit or..   
18140 20 20 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c 62 61       /// xRollba
18150 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ck...        ///
18160 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
18170 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
18180 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18190 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
181a0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
181b0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
181c0 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
181d0 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
181e0 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
181f0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
18200 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
18210 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
18220 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
18230 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
18240 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
18250 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
18260 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
18270 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a 20 20 20  ode xBegin(..   
18280 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
18290 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20  pVtab..         
182a0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
182b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
182c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18300 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
18310 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18320 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18330 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 73  // This method s
18340 69 67 6e 61 6c 73 20 74 68 65 20 73 74 61 72 74  ignals the start
18350 20 6f 66 20 61 20 74 77 6f 2d 70 68 61 73 65 20   of a two-phase 
18360 63 6f 6d 6d 69 74 20 6f 6e 20 61 20 76 69 72 74  commit on a virt
18370 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ual..        ///
18380 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 73 20   table. This is 
18390 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f 6e  method is option
183a0 61 6c 2e 20 54 68 65 20 78 53 79 6e 63 20 70 6f  al. The xSync po
183b0 69 6e 74 65 72 20 6f 66 0d 0a 20 20 20 20 20 20  inter of..      
183c0 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 6f    /// sqlite3_mo
183d0 64 75 6c 65 20 6d 61 79 20 62 65 20 4e 55 4c 4c  dule may be NULL
183e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
183f0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
18400 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
18410 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
18420 68 6f 64 20 69 73 20 6f 6e 6c 79 20 69 6e 76 6f  hod is only invo
18430 6b 65 64 20 61 66 74 65 72 20 63 61 6c 6c 20 74  ked after call t
18440 6f 20 74 68 65 20 78 42 65 67 69 6e 20 6d 65 74  o the xBegin met
18450 68 6f 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  hod and..       
18460 20 2f 2f 2f 20 70 72 69 6f 72 20 74 6f 20 61 6e   /// prior to an
18470 20 78 43 6f 6d 6d 69 74 20 6f 72 20 78 52 6f 6c   xCommit or xRol
18480 6c 62 61 63 6b 2e 20 49 6e 20 6f 72 64 65 72 20  lback. In order 
18490 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 77 6f  to implement two
184a0 2d 70 68 61 73 65 0d 0a 20 20 20 20 20 20 20 20  -phase..        
184b0 2f 2f 2f 20 63 6f 6d 6d 69 74 2c 20 74 68 65 20  /// commit, the 
184c0 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 6f 6e 20  xSync method on 
184d0 61 6c 6c 20 76 69 72 74 75 61 6c 20 74 61 62 6c  all virtual tabl
184e0 65 73 20 69 73 20 69 6e 76 6f 6b 65 64 20 70 72  es is invoked pr
184f0 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ior to..        
18500 2f 2f 2f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 65  /// invoking the
18510 20 78 43 6f 6d 6d 69 74 20 6d 65 74 68 6f 64 20   xCommit method 
18520 6f 6e 20 61 6e 79 20 76 69 72 74 75 61 6c 20 74  on any virtual t
18530 61 62 6c 65 2e 20 49 66 20 61 6e 79 20 6f 66 20  able. If any of 
18540 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
18550 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 73 20 66   xSync methods f
18560 61 69 6c 2c 20 74 68 65 20 65 6e 74 69 72 65 20  ail, the entire 
18570 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 72  transaction is r
18580 6f 6c 6c 65 64 20 62 61 63 6b 2e 0d 0a 20 20 20  olled back...   
18590 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
185a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
185b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
185c0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
185d0 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
185e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
185f0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
18600 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
18610 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
18620 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18630 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
18640 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
18650 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
18660 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
18670 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
18680 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
18690 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
186a0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 79 6e  teErrorCode xSyn
186b0 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c(..            
186c0 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
186d0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
186e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
186f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
18730 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18740 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
18750 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
18760 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
18770 65 74 68 6f 64 20 63 61 75 73 65 73 20 61 20 76  ethod causes a v
18780 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 72 61  irtual table tra
18790 6e 73 61 63 74 69 6f 6e 20 74 6f 20 63 6f 6d 6d  nsaction to comm
187a0 69 74 2e 20 54 68 69 73 20 69 73 0d 0a 20 20 20  it. This is..   
187b0 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20       /// method 
187c0 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68 65  is optional. The
187d0 20 78 43 6f 6d 6d 69 74 20 70 6f 69 6e 74 65 72   xCommit pointer
187e0 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75   of sqlite3_modu
187f0 6c 65 20 6d 61 79 20 62 65 0d 0a 20 20 20 20 20  le may be..     
18800 20 20 20 2f 2f 2f 20 4e 55 4c 4c 2e 0d 0a 20 20     /// NULL...  
18810 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
18820 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18830 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18840 2f 2f 20 41 20 63 61 6c 6c 20 74 6f 20 74 68 69  // A call to thi
18850 73 20 6d 65 74 68 6f 64 20 61 6c 77 61 79 73 20  s method always 
18860 66 6f 6c 6c 6f 77 73 20 61 20 70 72 69 6f 72 20  follows a prior 
18870 63 61 6c 6c 20 74 6f 20 78 42 65 67 69 6e 20 61  call to xBegin a
18880 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  nd..        /// 
18890 78 53 79 6e 63 2e 0d 0a 20 20 20 20 20 20 20 20  xSync...        
188a0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
188b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
188c0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
188d0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
188e0 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tab">..        /
188f0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
18900 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
18910 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
18920 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
18930 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
18940 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
18950 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
18960 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
18970 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
18980 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
18990 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
189a0 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
189b0 6f 72 43 6f 64 65 20 78 43 6f 6d 6d 69 74 28 0d  orCode xCommit(.
189c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
189d0 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
189e0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
189f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18a40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
18a50 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
18a60 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
18a70 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
18a80 6f 64 20 63 61 75 73 65 73 20 61 20 76 69 72 74  od causes a virt
18a90 75 61 6c 20 74 61 62 6c 65 20 74 72 61 6e 73 61  ual table transa
18aa0 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61 63  ction to rollbac
18ab0 6b 2e 20 54 68 69 73 20 69 73 0d 0a 20 20 20 20  k. This is..    
18ac0 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 69      /// method i
18ad0 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68 65 20  s optional. The 
18ae0 78 52 6f 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65  xRollback pointe
18af0 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d 6f 64  r of sqlite3_mod
18b00 75 6c 65 20 6d 61 79 20 62 65 0d 0a 20 20 20 20  ule may be..    
18b10 20 20 20 20 2f 2f 2f 20 4e 55 4c 4c 2e 0d 0a 20      /// NULL... 
18b20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
18b30 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
18b40 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
18b50 2f 2f 2f 20 41 20 63 61 6c 6c 20 74 6f 20 74 68  /// A call to th
18b60 69 73 20 6d 65 74 68 6f 64 20 61 6c 77 61 79 73  is method always
18b70 20 66 6f 6c 6c 6f 77 73 20 61 20 70 72 69 6f 72   follows a prior
18b80 20 63 61 6c 6c 20 74 6f 20 78 42 65 67 69 6e 2e   call to xBegin.
18b90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18ba0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18bb0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
18bc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
18bd0 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
18be0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
18bf0 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
18c00 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
18c10 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
18c20 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
18c30 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
18c40 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
18c50 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
18c60 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
18c70 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
18c80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
18c90 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
18ca0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18cb0 20 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20   xRollback(..   
18cc0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
18cd0 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20  pVtab..         
18ce0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
18cf0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18d40 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
18d50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18d60 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18d70 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 70  // This method p
18d80 72 6f 76 69 64 65 73 20 6e 6f 74 69 66 69 63 61  rovides notifica
18d90 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 76 69  tion that the vi
18da0 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
18db0 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
18dc0 6e 74 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65  ntation that the
18dd0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77   virtual table w
18de0 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 61 20 6e  ill be given a n
18df0 65 77 20 6e 61 6d 65 2e 20 49 66 0d 0a 20 20 20  ew name. If..   
18e00 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65       /// this me
18e10 74 68 6f 64 20 72 65 74 75 72 6e 73 20 53 51 4c  thod returns SQL
18e20 49 54 45 5f 4f 4b 20 74 68 65 6e 20 53 51 4c 69  ITE_OK then SQLi
18e30 74 65 20 72 65 6e 61 6d 65 73 20 74 68 65 20 74  te renames the t
18e40 61 62 6c 65 2e 20 49 66 0d 0a 20 20 20 20 20 20  able. If..      
18e50 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74 68 6f    /// this metho
18e60 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
18e70 6f 72 20 63 6f 64 65 20 74 68 65 6e 20 74 68 65  or code then the
18e80 20 72 65 6e 61 6d 69 6e 67 20 69 73 20 70 72 65   renaming is pre
18e90 76 65 6e 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  vented...       
18ea0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
18eb0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
18ec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
18ed0 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  e xRename method
18ee0 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
18ef0 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
18f00 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
18f10 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
18f20 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18f30 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
18f40 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
18f50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
18f60 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
18f70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
18f80 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
18f90 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
18fa0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
18fb0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
18fc0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
18fd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
18fe0 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 22 3e 0d 0a  m name="nArg">..
18ff0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
19000 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
19010 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63 74  nts to the funct
19020 69 6f 6e 20 62 65 69 6e 67 20 73 6f 75 67 68 74  ion being sought
19030 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
19040 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
19050 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
19060 3d 22 7a 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 20  ="zName">..     
19070 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
19080 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
19090 62 65 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20  being sought... 
190a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
190b0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
190c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61   <param name="ca
190d0 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20 20 20 20 20  llback">..      
190e0 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
190f0 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  ss, this paramet
19100 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
19110 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  ied to contain t
19120 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
19130 64 65 6c 65 67 61 74 65 20 72 65 73 70 6f 6e 73  delegate respons
19140 69 62 6c 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65  ible for impleme
19150 6e 74 69 6e 67 20 74 68 65 20 73 70 65 63 69 66  nting the specif
19160 69 65 64 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20  ied function... 
19170 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
19180 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
19190 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
191a0 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20  lientData">..   
191b0 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
191c0 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
191d0 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
191e0 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
191f0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
19200 2f 2f 20 6e 61 74 69 76 65 20 75 73 65 72 2d 64  // native user-d
19210 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73 73 6f  ata pointer asso
19220 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20  ciated with..   
19230 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 72       /// <paramr
19240 65 66 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63  ef name="callbac
19250 6b 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20  k" />...        
19260 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
19270 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
19280 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
19290 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   Non-zero if the
192a0 20 73 70 65 63 69 66 69 65 64 20 66 75 6e 63 74   specified funct
192b0 69 6f 6e 20 77 61 73 20 66 6f 75 6e 64 3b 20 7a  ion was found; z
192c0 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a  ero otherwise...
192d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
192e0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
192f0 69 6e 74 20 78 46 69 6e 64 46 75 6e 63 74 69 6f  int xFindFunctio
19300 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
19310 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
19320 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
19330 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Arg,..          
19340 20 20 49 6e 74 50 74 72 20 7a 4e 61 6d 65 2c 0d    IntPtr zName,.
19350 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
19360 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20   SQLiteCallback 
19370 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
19380 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
19390 72 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20  r pClientData.. 
193a0 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
193b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
193c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
19410 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
19420 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
19430 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
19440 6d 65 74 68 6f 64 20 70 72 6f 76 69 64 65 73 20  method provides 
19450 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20 74 68 61  notification tha
19460 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  t the virtual ta
19470 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
19480 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
19490 74 68 61 74 20 74 68 65 20 76 69 72 74 75 61 6c  that the virtual
194a0 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 67   table will be g
194b0 69 76 65 6e 20 61 20 6e 65 77 20 6e 61 6d 65 2e  iven a new name.
194c0 20 49 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   If..        ///
194d0 20 74 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74   this method ret
194e0 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 20 74  urns SQLITE_OK t
194f0 68 65 6e 20 53 51 4c 69 74 65 20 72 65 6e 61 6d  hen SQLite renam
19500 65 73 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  es the table. If
19510 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
19520 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e  is method return
19530 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  s an error code 
19540 74 68 65 6e 20 74 68 65 20 72 65 6e 61 6d 69 6e  then the renamin
19550 67 20 69 73 20 70 72 65 76 65 6e 74 65 64 2e 0d  g is prevented..
19560 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
19570 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
19580 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
19590 20 20 2f 2f 2f 20 54 68 65 20 78 52 65 6e 61 6d    /// The xRenam
195a0 65 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  e method is requ
195b0 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
195c0 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
195d0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
195e0 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
195f0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
19600 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
19610 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
19620 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
19630 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
19640 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
19650 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
19660 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
19670 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
19680 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
19690 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
196a0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
196b0 7a 4e 65 77 22 3e 0d 0a 20 20 20 20 20 20 20 20  zNew">..        
196c0 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
196d0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 55 54  ointer to the UT
196e0 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69  F-8 encoded stri
196f0 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
19700 65 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 2f  e new..        /
19710 2f 2f 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  // name for the 
19720 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
19730 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
19740 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
19750 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
19760 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
19770 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
19780 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
19790 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
197a0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
197b0 72 72 6f 72 43 6f 64 65 20 78 52 65 6e 61 6d 65  rrorCode xRename
197c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
197d0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
197e0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
197f0 20 7a 4e 65 77 0d 0a 20 20 20 20 20 20 20 20 20   zNew..         
19800 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
19810 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19850 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
19860 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
19870 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
19880 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
19890 2f 2f 20 54 68 65 73 65 20 6d 65 74 68 6f 64 73  // These methods
198a0 20 70 72 6f 76 69 64 65 20 74 68 65 20 76 69 72   provide the vir
198b0 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
198c0 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 0d 0a 20 20  mentation an..  
198d0 20 20 20 20 20 20 2f 2f 2f 20 6f 70 70 6f 72 74        /// opport
198e0 75 6e 69 74 79 20 74 6f 20 69 6d 70 6c 65 6d 65  unity to impleme
198f0 6e 74 20 6e 65 73 74 65 64 20 74 72 61 6e 73 61  nt nested transa
19900 63 74 69 6f 6e 73 2e 20 54 68 65 79 20 61 72 65  ctions. They are
19910 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20   always..       
19920 20 2f 2f 2f 20 6f 70 74 69 6f 6e 61 6c 20 61 6e   /// optional an
19930 64 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 63  d will only be c
19940 61 6c 6c 65 64 20 69 6e 20 53 51 4c 69 74 65 20  alled in SQLite 
19950 76 65 72 73 69 6f 6e 20 33 2e 37 2e 37 20 61 6e  version 3.7.7 an
19960 64 20 6c 61 74 65 72 2e 0d 0a 20 20 20 20 20 20  d later...      
19970 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
19980 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
19990 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 57  >..        /// W
199a0 68 65 6e 20 78 53 61 76 65 70 6f 69 6e 74 28 58  hen xSavepoint(X
199b0 2c 4e 29 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20  ,N) is invoked, 
199c0 74 68 61 74 20 69 73 20 61 20 73 69 67 6e 61 6c  that is a signal
199d0 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0d   to the virtual.
199e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62  .        /// tab
199f0 6c 65 20 58 20 74 68 61 74 20 69 74 20 73 68 6f  le X that it sho
19a00 75 6c 64 20 73 61 76 65 20 69 74 73 20 63 75 72  uld save its cur
19a10 72 65 6e 74 20 73 74 61 74 65 20 61 73 20 73 61  rent state as sa
19a20 76 65 70 6f 69 6e 74 20 4e 2e 20 41 0d 0a 20 20  vepoint N. A..  
19a30 20 20 20 20 20 20 2f 2f 2f 20 73 75 62 73 65 71        /// subseq
19a40 75 65 6e 74 20 63 61 6c 6c 20 74 6f 20 78 52 6f  uent call to xRo
19a50 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20 6d 65  llbackTo(X,R) me
19a60 61 6e 73 20 74 68 61 74 20 74 68 65 20 73 74 61  ans that the sta
19a70 74 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  te of the..     
19a80 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
19a90 61 62 6c 65 20 73 68 6f 75 6c 64 20 72 65 74 75  able should retu
19aa0 72 6e 20 74 6f 20 77 68 61 74 20 69 74 20 77 61  rn to what it wa
19ab0 73 20 77 68 65 6e 20 78 53 61 76 65 70 6f 69 6e  s when xSavepoin
19ac0 74 28 58 2c 52 29 20 77 61 73 0d 0a 20 20 20 20  t(X,R) was..    
19ad0 20 20 20 20 2f 2f 2f 20 6c 61 73 74 20 63 61 6c      /// last cal
19ae0 6c 65 64 2e 20 54 68 65 20 63 61 6c 6c 20 74 6f  led. The call to
19af0 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52   xRollbackTo(X,R
19b00 29 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74  ) will invalidat
19b10 65 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f  e all..        /
19b20 2f 2f 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69  // savepoints wi
19b30 74 68 20 4e 3e 52 3b 20 6e 6f 6e 65 20 6f 66 20  th N>R; none of 
19b40 74 68 65 20 69 6e 76 61 6c 69 64 65 64 20 73 61  the invalided sa
19b50 76 65 70 6f 69 6e 74 73 20 77 69 6c 6c 20 62 65  vepoints will be
19b60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 6f  ..        /// ro
19b70 6c 6c 65 64 20 62 61 63 6b 20 6f 72 20 72 65 6c  lled back or rel
19b80 65 61 73 65 64 20 77 69 74 68 6f 75 74 20 66 69  eased without fi
19b90 72 73 74 20 62 65 69 6e 67 20 72 65 69 6e 69 74  rst being reinit
19ba0 69 61 6c 69 7a 65 64 20 62 79 20 61 20 63 61 6c  ialized by a cal
19bb0 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  l..        /// t
19bc0 6f 20 78 53 61 76 65 70 6f 69 6e 74 28 29 2e 20  o xSavepoint(). 
19bd0 41 20 63 61 6c 6c 20 74 6f 20 78 52 65 6c 65 61  A call to xRelea
19be0 73 65 28 58 2c 4d 29 20 69 6e 76 61 6c 69 64 61  se(X,M) invalida
19bf0 74 65 73 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e  tes all savepoin
19c00 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ts..        /// 
19c10 77 68 65 72 65 20 4e 3e 3d 4d 2e 0d 0a 20 20 20  where N>=M...   
19c20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
19c30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
19c40 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
19c50 2f 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20 78 53  / None of the xS
19c60 61 76 65 70 6f 69 6e 74 28 29 2c 20 78 52 65 6c  avepoint(), xRel
19c70 65 61 73 65 28 29 2c 20 6f 72 20 78 52 6f 6c 6c  ease(), or xRoll
19c80 62 61 63 6b 54 6f 28 29 20 6d 65 74 68 6f 64 73  backTo() methods
19c90 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   will..        /
19ca0 2f 2f 20 65 76 65 72 20 62 65 20 63 61 6c 6c 65  // ever be calle
19cb0 64 20 65 78 63 65 70 74 20 69 6e 20 62 65 74 77  d except in betw
19cc0 65 65 6e 20 63 61 6c 6c 73 20 74 6f 20 78 42 65  een calls to xBe
19cd0 67 69 6e 28 29 20 61 6e 64 20 65 69 74 68 65 72  gin() and either
19ce0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43  ..        /// xC
19cf0 6f 6d 6d 69 74 28 29 20 6f 72 20 78 52 6f 6c 6c  ommit() or xRoll
19d00 62 61 63 6b 28 29 2e 0d 0a 20 20 20 20 20 20 20  back()...       
19d10 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
19d20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
19d30 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
19d40 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
19d50 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
19d60 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
19d70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
19d80 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
19d90 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
19da0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
19db0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
19dc0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 53   <param name="iS
19dd0 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20  avepoint">..    
19de0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20      /// This is 
19df0 61 6e 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74  an integer ident
19e00 69 66 69 65 72 20 75 6e 64 65 72 20 77 68 69 63  ifier under whic
19e10 68 20 74 68 65 20 74 68 65 20 63 75 72 72 65 6e  h the the curren
19e20 74 20 73 74 61 74 65 20 6f 66 0d 0a 20 20 20 20  t state of..    
19e30 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74      /// the virt
19e40 75 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c 64  ual table should
19e50 20 62 65 20 73 61 76 65 64 2e 0d 0a 20 20 20 20   be saved...    
19e60 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
19e70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
19e80 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
19e90 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
19ea0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
19eb0 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
19ec0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
19ed0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
19ee0 43 6f 64 65 20 78 53 61 76 65 70 6f 69 6e 74 28  Code xSavepoint(
19ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
19f00 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
19f10 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61           int iSa
19f20 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  vepoint..       
19f30 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
19f40 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
19f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19f90 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
19fa0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
19fb0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
19fc0 20 2f 2f 2f 20 54 68 65 73 65 20 6d 65 74 68 6f   /// These metho
19fd0 64 73 20 70 72 6f 76 69 64 65 20 74 68 65 20 76  ds provide the v
19fe0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
19ff0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 0d 0a  lementation an..
1a000 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 70 6f          /// oppo
1a010 72 74 75 6e 69 74 79 20 74 6f 20 69 6d 70 6c 65  rtunity to imple
1a020 6d 65 6e 74 20 6e 65 73 74 65 64 20 74 72 61 6e  ment nested tran
1a030 73 61 63 74 69 6f 6e 73 2e 20 54 68 65 79 20 61  sactions. They a
1a040 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20  re always..     
1a050 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 61 6c 20     /// optional 
1a060 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65  and will only be
1a070 20 63 61 6c 6c 65 64 20 69 6e 20 53 51 4c 69 74   called in SQLit
1a080 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 37 20  e version 3.7.7 
1a090 61 6e 64 20 6c 61 74 65 72 2e 0d 0a 20 20 20 20  and later...    
1a0a0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1a0b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1a0c0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1a0d0 20 57 68 65 6e 20 78 53 61 76 65 70 6f 69 6e 74   When xSavepoint
1a0e0 28 58 2c 4e 29 20 69 73 20 69 6e 76 6f 6b 65 64  (X,N) is invoked
1a0f0 2c 20 74 68 61 74 20 69 73 20 61 20 73 69 67 6e  , that is a sign
1a100 61 6c 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  al to the virtua
1a110 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  l..        /// t
1a120 61 62 6c 65 20 58 20 74 68 61 74 20 69 74 20 73  able X that it s
1a130 68 6f 75 6c 64 20 73 61 76 65 20 69 74 73 20 63  hould save its c
1a140 75 72 72 65 6e 74 20 73 74 61 74 65 20 61 73 20  urrent state as 
1a150 73 61 76 65 70 6f 69 6e 74 20 4e 2e 20 41 0d 0a  savepoint N. A..
1a160 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 62 73          /// subs
1a170 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f 20 78  equent call to x
1a180 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20  RollbackTo(X,R) 
1a190 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 73  means that the s
1a1a0 74 61 74 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  tate of the..   
1a1b0 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c       /// virtual
1a1c0 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20 72 65   table should re
1a1d0 74 75 72 6e 20 74 6f 20 77 68 61 74 20 69 74 20  turn to what it 
1a1e0 77 61 73 20 77 68 65 6e 20 78 53 61 76 65 70 6f  was when xSavepo
1a1f0 69 6e 74 28 58 2c 52 29 20 77 61 73 0d 0a 20 20  int(X,R) was..  
1a200 20 20 20 20 20 20 2f 2f 2f 20 6c 61 73 74 20 63        /// last c
1a210 61 6c 6c 65 64 2e 20 54 68 65 20 63 61 6c 6c 20  alled. The call 
1a220 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58  to xRollbackTo(X
1a230 2c 52 29 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64  ,R) will invalid
1a240 61 74 65 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20  ate all..       
1a250 20 2f 2f 2f 20 73 61 76 65 70 6f 69 6e 74 73 20   /// savepoints 
1a260 77 69 74 68 20 4e 3e 52 3b 20 6e 6f 6e 65 20 6f  with N>R; none o
1a270 66 20 74 68 65 20 69 6e 76 61 6c 69 64 65 64 20  f the invalided 
1a280 73 61 76 65 70 6f 69 6e 74 73 20 77 69 6c 6c 20  savepoints will 
1a290 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1a2a0 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6f 72 20 72  rolled back or r
1a2b0 65 6c 65 61 73 65 64 20 77 69 74 68 6f 75 74 20  eleased without 
1a2c0 66 69 72 73 74 20 62 65 69 6e 67 20 72 65 69 6e  first being rein
1a2d0 69 74 69 61 6c 69 7a 65 64 20 62 79 20 61 20 63  itialized by a c
1a2e0 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  all..        ///
1a2f0 20 74 6f 20 78 53 61 76 65 70 6f 69 6e 74 28 29   to xSavepoint()
1a300 2e 20 41 20 63 61 6c 6c 20 74 6f 20 78 52 65 6c  . A call to xRel
1a310 65 61 73 65 28 58 2c 4d 29 20 69 6e 76 61 6c 69  ease(X,M) invali
1a320 64 61 74 65 73 20 61 6c 6c 20 73 61 76 65 70 6f  dates all savepo
1a330 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ints..        //
1a340 2f 20 77 68 65 72 65 20 4e 3e 3d 4d 2e 0d 0a 20  / where N>=M... 
1a350 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1a360 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1a370 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1a380 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20  /// None of the 
1a390 78 53 61 76 65 70 6f 69 6e 74 28 29 2c 20 78 52  xSavepoint(), xR
1a3a0 65 6c 65 61 73 65 28 29 2c 20 6f 72 20 78 52 6f  elease(), or xRo
1a3b0 6c 6c 62 61 63 6b 54 6f 28 29 20 6d 65 74 68 6f  llbackTo() metho
1a3c0 64 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  ds will..       
1a3d0 20 2f 2f 2f 20 65 76 65 72 20 62 65 20 63 61 6c   /// ever be cal
1a3e0 6c 65 64 20 65 78 63 65 70 74 20 69 6e 20 62 65  led except in be
1a3f0 74 77 65 65 6e 20 63 61 6c 6c 73 20 74 6f 20 78  tween calls to x
1a400 42 65 67 69 6e 28 29 20 61 6e 64 20 65 69 74 68  Begin() and eith
1a410 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  er..        /// 
1a420 78 43 6f 6d 6d 69 74 28 29 20 6f 72 20 78 52 6f  xCommit() or xRo
1a430 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20 20 20 20 20  llback()...     
1a440 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1a450 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1a460 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1a470 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1a480 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
1a490 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
1a4a0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1a4b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
1a4c0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
1a4d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1a4e0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1a4f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1a500 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20  iSavepoint">..  
1a510 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
1a520 73 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 65  s an integer use
1a530 64 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  d to indicate th
1a540 61 74 20 61 6e 79 20 73 61 76 65 64 20 73 74 61  at any saved sta
1a550 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20  tes with an..   
1a560 20 20 20 20 20 2f 2f 2f 20 69 64 65 6e 74 69 66       /// identif
1a570 69 65 72 20 67 72 65 61 74 65 72 20 74 68 61 6e  ier greater than
1a580 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 69   or equal to thi
1a590 73 20 73 68 6f 75 6c 64 20 62 65 20 64 65 6c 65  s should be dele
1a5a0 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ted by the..    
1a5b0 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
1a5c0 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1a5d0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1a5e0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1a5f0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1a600 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1a610 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1a620 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1a630 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1a640 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1a650 20 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20   xRelease(..    
1a660 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1a670 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
1a680 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e     int iSavepoin
1a690 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
1a6a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1a6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a6f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1a700 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1a710 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1a720 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1a730 68 65 73 65 20 6d 65 74 68 6f 64 73 20 70 72 6f  hese methods pro
1a740 76 69 64 65 20 74 68 65 20 76 69 72 74 75 61 6c  vide the virtual
1a750 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
1a760 61 74 69 6f 6e 20 61 6e 0d 0a 20 20 20 20 20 20  ation an..      
1a770 20 20 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e 69 74    /// opportunit
1a780 79 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 6e  y to implement n
1a790 65 73 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f  ested transactio
1a7a0 6e 73 2e 20 54 68 65 79 20 61 72 65 20 61 6c 77  ns. They are alw
1a7b0 61 79 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ays..        ///
1a7c0 20 6f 70 74 69 6f 6e 61 6c 20 61 6e 64 20 77 69   optional and wi
1a7d0 6c 6c 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65  ll only be calle
1a7e0 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73  d in SQLite vers
1a7f0 69 6f 6e 20 33 2e 37 2e 37 20 61 6e 64 20 6c 61  ion 3.7.7 and la
1a800 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ter...        //
1a810 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1a820 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1a830 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20         /// When 
1a840 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 4e 29 20  xSavepoint(X,N) 
1a850 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 61 74  is invoked, that
1a860 20 69 73 20 61 20 73 69 67 6e 61 6c 20 74 6f 20   is a signal to 
1a870 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20  the virtual..   
1a880 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 58       /// table X
1a890 20 74 68 61 74 20 69 74 20 73 68 6f 75 6c 64 20   that it should 
1a8a0 73 61 76 65 20 69 74 73 20 63 75 72 72 65 6e 74  save its current
1a8b0 20 73 74 61 74 65 20 61 73 20 73 61 76 65 70 6f   state as savepo
1a8c0 69 6e 74 20 4e 2e 20 41 0d 0a 20 20 20 20 20 20  int N. A..      
1a8d0 20 20 2f 2f 2f 20 73 75 62 73 65 71 75 65 6e 74    /// subsequent
1a8e0 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61   call to xRollba
1a8f0 63 6b 54 6f 28 58 2c 52 29 20 6d 65 61 6e 73 20  ckTo(X,R) means 
1a900 74 68 61 74 20 74 68 65 20 73 74 61 74 65 20 6f  that the state o
1a910 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
1a920 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
1a930 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 74   should return t
1a940 6f 20 77 68 61 74 20 69 74 20 77 61 73 20 77 68  o what it was wh
1a950 65 6e 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c  en xSavepoint(X,
1a960 52 29 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20  R) was..        
1a970 2f 2f 2f 20 6c 61 73 74 20 63 61 6c 6c 65 64 2e  /// last called.
1a980 20 54 68 65 20 63 61 6c 6c 20 74 6f 20 78 52 6f   The call to xRo
1a990 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20 77 69  llbackTo(X,R) wi
1a9a0 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6c  ll invalidate al
1a9b0 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  l..        /// s
1a9c0 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20 4e  avepoints with N
1a9d0 3e 52 3b 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  >R; none of the 
1a9e0 69 6e 76 61 6c 69 64 65 64 20 73 61 76 65 70 6f  invalided savepo
1a9f0 69 6e 74 73 20 77 69 6c 6c 20 62 65 0d 0a 20 20  ints will be..  
1aa00 20 20 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64        /// rolled
1aa10 20 62 61 63 6b 20 6f 72 20 72 65 6c 65 61 73 65   back or release
1aa20 64 20 77 69 74 68 6f 75 74 20 66 69 72 73 74 20  d without first 
1aa30 62 65 69 6e 67 20 72 65 69 6e 69 74 69 61 6c 69  being reinitiali
1aa40 7a 65 64 20 62 79 20 61 20 63 61 6c 6c 0d 0a 20  zed by a call.. 
1aa50 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78 53         /// to xS
1aa60 61 76 65 70 6f 69 6e 74 28 29 2e 20 41 20 63 61  avepoint(). A ca
1aa70 6c 6c 20 74 6f 20 78 52 65 6c 65 61 73 65 28 58  ll to xRelease(X
1aa80 2c 4d 29 20 69 6e 76 61 6c 69 64 61 74 65 73 20  ,M) invalidates 
1aa90 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 0d 0a  all savepoints..
1aaa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68 65 72          /// wher
1aab0 65 20 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20 20 20  e N>=M...       
1aac0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
1aad0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
1aae0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ..        /// No
1aaf0 6e 65 20 6f 66 20 74 68 65 20 78 53 61 76 65 70  ne of the xSavep
1ab00 6f 69 6e 74 28 29 2c 20 78 52 65 6c 65 61 73 65  oint(), xRelease
1ab10 28 29 2c 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b  (), or xRollback
1ab20 54 6f 28 29 20 6d 65 74 68 6f 64 73 20 77 69 6c  To() methods wil
1ab30 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65  l..        /// e
1ab40 76 65 72 20 62 65 20 63 61 6c 6c 65 64 20 65 78  ver be called ex
1ab50 63 65 70 74 20 69 6e 20 62 65 74 77 65 65 6e 20  cept in between 
1ab60 63 61 6c 6c 73 20 74 6f 20 78 42 65 67 69 6e 28  calls to xBegin(
1ab70 29 20 61 6e 64 20 65 69 74 68 65 72 0d 0a 20 20  ) and either..  
1ab80 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69        /// xCommi
1ab90 74 28 29 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b  t() or xRollback
1aba0 28 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ()...        ///
1abb0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1abc0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1abd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1abe0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
1abf0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1ac00 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
1ac10 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
1ac20 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
1ac30 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
1ac40 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1ac50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1ac60 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70  ram name="iSavep
1ac70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  oint">..        
1ac80 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69  /// This is an i
1ac90 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66 69 65  nteger identifie
1aca0 72 20 75 73 65 64 20 74 6f 20 73 70 65 63 69 66  r used to specif
1acb0 79 20 61 20 73 70 65 63 69 66 69 63 20 73 61 76  y a specific sav
1acc0 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
1acd0 73 74 61 74 65 20 66 6f 72 20 74 68 65 20 76 69  state for the vi
1ace0 72 74 75 61 6c 20 74 61 62 6c 65 20 66 6f 72 20  rtual table for 
1acf0 69 74 20 74 6f 20 72 65 73 74 6f 72 65 20 69 74  it to restore it
1ad00 73 65 6c 66 20 62 61 63 6b 20 74 6f 2c 20 77 68  self back to, wh
1ad10 69 63 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ich..        ///
1ad20 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 68 61 76   should also hav
1ad30 65 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20  e the effect of 
1ad40 64 65 6c 65 74 69 6e 67 20 61 6c 6c 20 73 61 76  deleting all sav
1ad50 65 64 20 73 74 61 74 65 73 20 77 69 74 68 20 61  ed states with a
1ad60 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  n..        /// i
1ad70 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66 69 65  nteger identifie
1ad80 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
1ad90 68 69 73 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20  his one...      
1ada0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1adb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1adc0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1add0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1ade0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1adf0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ae00 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1ae10 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1ae20 64 65 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d  de xRollbackTo(.
1ae30 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
1ae40 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
1ae50 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61 76          int iSav
1ae60 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20  epoint..        
1ae70 20 20 20 20 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20      );..    }.. 
1ae80 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1ae90 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
1aea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aee0 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
1aef0 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
1af00 64 75 6c 65 20 49 6e 74 65 72 66 61 63 65 0d 0a  dule Interface..
1af10 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1af20 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
1af30 69 6e 74 65 72 66 61 63 65 20 72 65 70 72 65 73  interface repres
1af40 65 6e 74 73 20 61 20 76 69 72 74 75 61 6c 20 74  ents a virtual t
1af50 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
1af60 69 6f 6e 20 77 72 69 74 74 65 6e 20 69 6e 0d 0a  ion written in..
1af70 20 20 20 20 2f 2f 2f 20 6d 61 6e 61 67 65 64 20      /// managed 
1af80 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
1af90 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
1afa0 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63 65 20  ublic interface 
1afb0 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
1afc0 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dule..    {..   
1afd0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1afe0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1aff0 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  Returns non-zero
1b000 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 66   if the schema f
1b010 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  or the virtual t
1b020 61 62 6c 65 20 68 61 73 20 62 65 65 6e 0d 0a 20  able has been.. 
1b030 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 63 6c 61         /// decla
1b040 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  red...        //
1b050 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1b060 20 20 20 20 20 20 62 6f 6f 6c 20 44 65 63 6c 61        bool Decla
1b070 72 65 64 20 7b 20 67 65 74 3b 20 7d 0d 0a 0d 0a  red { get; }....
1b080 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1b090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1b0d0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1b0e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1b0f0 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
1b100 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f  e name of the mo
1b110 64 75 6c 65 20 61 73 20 69 74 20 77 61 73 20 72  dule as it was r
1b120 65 67 69 73 74 65 72 65 64 20 77 69 74 68 20 74  egistered with t
1b130 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20  he SQLite..     
1b140 20 20 20 2f 2f 2f 20 63 6f 72 65 20 6c 69 62 72     /// core libr
1b150 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary...        //
1b160 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1b170 20 20 20 20 20 20 73 74 72 69 6e 67 20 4e 61 6d        string Nam
1b180 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 0d 0a 20 20  e { get; }....  
1b190 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1b1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1b1e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1b1f0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1b200 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1b210 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
1b220 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
1b230 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
1b240 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
1b250 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
1b260 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
1b270 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1b280 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1b290 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
1b2a0 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d 0a 20 20 20  onnection">..   
1b2b0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1b2c0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
1b2d0 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a  nnection" /> obj
1b2e0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
1b2f0 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20  ociated with..  
1b300 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69        /// the vi
1b310 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
1b320 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1b330 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1b340 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c  <param name="pCl
1b350 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20 20  ientData">..    
1b360 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
1b370 76 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f 69  ve user-data poi
1b380 6e 74 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  nter associated 
1b390 77 69 74 68 20 74 68 69 73 20 6d 6f 64 75 6c 65  with this module
1b3a0 2c 20 61 73 20 69 74 20 77 61 73 0d 0a 20 20 20  , as it was..   
1b3b0 20 20 20 20 20 2f 2f 2f 20 70 72 6f 76 69 64 65       /// provide
1b3c0 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20  d to the SQLite 
1b3d0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 68 65  core library whe
1b3e0 6e 20 74 68 65 20 6e 61 74 69 76 65 20 6d 6f 64  n the native mod
1b3f0 75 6c 65 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20  ule instance..  
1b400 20 20 20 20 20 20 2f 2f 2f 20 77 61 73 20 63 72        /// was cr
1b410 65 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  eated...        
1b420 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1b430 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1b440 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 73   name="arguments
1b450 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1b460 54 68 65 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 2c  The module name,
1b470 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
1b480 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6e 61  virtual table na
1b490 6d 65 2c 20 61 6e 64 20 61 6c 6c 20 6f 74 68 65  me, and all othe
1b4a0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  r..        /// a
1b4b0 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20  rguments passed 
1b4c0 74 6f 20 74 68 65 20 43 52 45 41 54 45 20 56 49  to the CREATE VI
1b4d0 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
1b4e0 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ement...        
1b4f0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1b500 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1b510 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a   name="table">..
1b520 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
1b530 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70   success, this p
1b540 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65  arameter must be
1b550 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e   modified to con
1b560 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  tain the..      
1b570 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1b580 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
1b590 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
1b5a0 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
1b5b0 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20  ed with..       
1b5c0 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c   /// the virtual
1b5d0 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
1b5e0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1b5f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1b600 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d  m name="error">.
1b610 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f  .        /// Upo
1b620 6e 20 66 61 69 6c 75 72 65 2c 20 74 68 69 73 20  n failure, this 
1b630 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62  parameter must b
1b640 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f  e modified to co
1b650 6e 74 61 69 6e 20 61 6e 20 65 72 72 6f 72 0d 0a  ntain an error..
1b660 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 73 73          /// mess
1b670 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  age...        //
1b680 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1b690 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1b6a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1b6b0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1b6c0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1b6d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1b6e0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1b6f0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43  QLiteErrorCode C
1b700 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  reate(..        
1b710 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
1b720 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c  tion connection,
1b730 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1b740 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1b750 43 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20  ClientData,     
1b760 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
1b770 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1b780 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 2c 20  ng[] arguments, 
1b790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
1b7a0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1b7b0 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61  ref SQLiteVirtua
1b7c0 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
1b7d0 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20   out */..       
1b7e0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1b7f0 65 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 20  error           
1b800 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
1b810 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
1b820 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1b830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1b870 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1b880 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1b890 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
1b8a0 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
1b8b0 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
1b8c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
1b8d0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
1b8e0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
1b8f0 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ect" /> method..
1b900 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
1b910 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1b920 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1b930 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d 0a  ="connection">..
1b940 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1b950 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
1b960 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20  eConnection" /> 
1b970 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1b980 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d  associated with.
1b990 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
1b9a0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
1b9b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1b9c0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1b9d0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1b9e0 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20  pClientData">.. 
1b9f0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
1ba00 61 74 69 76 65 20 75 73 65 72 2d 64 61 74 61 20  ative user-data 
1ba10 70 6f 69 6e 74 65 72 20 61 73 73 6f 63 69 61 74  pointer associat
1ba20 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 6f 64  ed with this mod
1ba30 75 6c 65 2c 20 61 73 20 69 74 20 77 61 73 0d 0a  ule, as it was..
1ba40 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 6f 76          /// prov
1ba50 69 64 65 64 20 74 6f 20 74 68 65 20 53 51 4c 69  ided to the SQLi
1ba60 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
1ba70 77 68 65 6e 20 74 68 65 20 6e 61 74 69 76 65 20  when the native 
1ba80 6d 6f 64 75 6c 65 20 69 6e 73 74 61 6e 63 65 0d  module instance.
1ba90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 61 73  .        /// was
1baa0 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 20 20 20   created...     
1bab0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1bac0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1bad0 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65  ram name="argume
1bae0 6e 74 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  nts">..        /
1baf0 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6e 61  // The module na
1bb00 6d 65 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d  me, database nam
1bb10 65 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  e, virtual table
1bb20 20 6e 61 6d 65 2c 20 61 6e 64 20 61 6c 6c 20 6f   name, and all o
1bb30 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ther..        //
1bb40 2f 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73  / arguments pass
1bb50 65 64 20 74 6f 20 74 68 65 20 43 52 45 41 54 45  ed to the CREATE
1bb60 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
1bb70 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20  tatement...     
1bb80 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1bb90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1bba0 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
1bbb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
1bbc0 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
1bbd0 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
1bbe0 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
1bbf0 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20  contain the..   
1bc00 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
1bc10 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
1bc20 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  lTable" /> objec
1bc30 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63  t instance assoc
1bc40 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20  iated with..    
1bc50 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74      /// the virt
1bc60 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
1bc70 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1bc80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1bc90 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72  aram name="error
1bca0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1bcb0 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20 74 68  Upon failure, th
1bcc0 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73  is parameter mus
1bcd0 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f  t be modified to
1bce0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 72 72 6f   contain an erro
1bcf0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  r..        /// m
1bd00 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20 20  essage...       
1bd10 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1bd20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1bd30 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1bd40 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1bd50 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1bd60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1bd70 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1bd80 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1bd90 65 20 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20  e Connect(..    
1bda0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
1bdb0 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
1bdc0 69 6f 6e 2c 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  ion,  /* in */..
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
1bde0 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 20  tr pClientData, 
1bdf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
1be00 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1be10 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e  string[] argumen
1be20 74 73 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ts,           /*
1be30 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1be40 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69      ref SQLiteVi
1be50 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
1be60 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20  , /* out */..   
1be70 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
1be80 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20 20 20  ing error       
1be90 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f         /* out */
1bea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1beb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1bec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf00 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1bf10 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1bf20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1bf30 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
1bf40 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
1bf50 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1bf60 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
1bf70 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
1bf80 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65  BestIndex" /> me
1bf90 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
1bfa0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1bfb0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1bfc0 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d  m name="table">.
1bfd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1bfe0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1bff0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
1c000 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1c010 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  ce associated.. 
1c020 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20         /// with 
1c030 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62  this virtual tab
1c040 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
1c050 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1c060 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1c070 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20 20  me="index">..   
1c080 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1c090 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
1c0a0 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  dex" /> object i
1c0b0 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69  nstance containi
1c0c0 6e 67 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20  ng all the..    
1c0d0 20 20 20 20 2f 2f 2f 20 64 61 74 61 20 66 6f 72      /// data for
1c0e0 20 74 68 65 20 69 6e 70 75 74 73 20 61 6e 64 20   the inputs and 
1c0f0 6f 75 74 70 75 74 73 20 72 65 6c 61 74 69 6e 67  outputs relating
1c100 20 74 6f 20 69 6e 64 65 78 20 73 65 6c 65 63 74   to index select
1c110 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
1c120 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1c130 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1c140 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1c150 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1c160 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1c170 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1c180 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1c190 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 42  QLiteErrorCode B
1c1a0 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20  estIndex(..     
1c1b0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
1c1c0 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
1c1d0 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
1c1e0 20 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64         SQLiteInd
1c1f0 65 78 20 69 6e 64 65 78 20 20 20 20 20 20 20 20  ex index        
1c200 20 2f 2a 20 69 6e 2c 20 6f 75 74 20 2a 2f 0d 0a   /* in, out */..
1c210 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1c220 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c270 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1c280 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1c290 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1c2a0 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
1c2b0 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
1c2c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1c2d0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
1c2e0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69  NativeModule.xDi
1c2f0 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  sconnect" /> met
1c300 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1c310 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1c320 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1c330 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a   name="table">..
1c340 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1c350 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
1c360 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
1c370 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1c380 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
1c390 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
1c3a0 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c  his virtual tabl
1c3b0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1c3c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1c3d0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1c3e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1c3f0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1c400 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1c410 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1c420 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1c430 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 69 73  iteErrorCode Dis
1c440 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  connect(..      
1c450 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1c460 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f  ualTable table /
1c470 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
1c480 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
1c490 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1c4e0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1c4f0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1c500 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
1c510 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
1c520 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
1c530 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
1c540 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
1c550 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22 20  odule.xDestroy" 
1c560 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
1c570 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1c580 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1c590 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
1c5a0 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
1c5b0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1c5c0 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
1c5d0 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
1c5e0 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
1c5f0 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
1c600 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61  with this virtua
1c610 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
1c620 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1c630 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1c640 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1c650 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1c660 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1c670 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1c680 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1c690 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1c6a0 64 65 20 44 65 73 74 72 6f 79 28 0d 0a 20 20 20  de Destroy(..   
1c6b0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
1c6c0 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
1c6d0 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  e /* in */..    
1c6e0 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
1c6f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1c700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1c740 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1c750 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1c760 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1c770 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
1c780 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
1c790 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
1c7a0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
1c7b0 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20  veModule.xOpen" 
1c7c0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
1c7d0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1c7e0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1c7f0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
1c800 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
1c810 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1c820 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
1c830 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
1c840 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
1c850 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
1c860 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61  with this virtua
1c870 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
1c880 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1c890 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1c8a0 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22  am name="cursor"
1c8b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
1c8c0 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
1c8d0 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
1c8e0 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
1c8f0 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20  contain the..   
1c900 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
1c910 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
1c920 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e  lTableCursor" />
1c930 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1c940 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
1c950 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68       /// with th
1c960 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 76  e newly opened v
1c970 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
1c980 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sor...        //
1c990 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1c9a0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1c9b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1c9c0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1c9d0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1c9e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1c9f0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1ca00 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f  QLiteErrorCode O
1ca10 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  pen(..          
1ca20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1ca30 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20 20 20  able table,     
1ca40 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1ca60 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1ca70 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20  leCursor cursor 
1ca80 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  /* out */..     
1ca90 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1caa0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1cab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1caf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1cb00 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1cb10 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
1cb20 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
1cb30 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
1cb40 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
1cb50 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
1cb60 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 22 20  eModule.xClose" 
1cb70 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
1cb80 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1cb90 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1cba0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72  <param name="cur
1cbb0 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
1cbc0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1cbd0 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
1cbe0 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f  ableCursor" /> o
1cbf0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a  bject instance..
1cc00 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
1cc10 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1cc20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1cc30 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  d virtual table 
1cc40 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20  cursor to be..  
1cc50 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d        /// used..
1cc60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1cc70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1cc80 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1cc90 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
1cca0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
1ccb0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
1ccc0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1ccd0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1cce0 45 72 72 6f 72 43 6f 64 65 20 43 6c 6f 73 65 28  ErrorCode Close(
1ccf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1cd00 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1cd10 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a  Cursor cursor /*
1cd20 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1cd30 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1cd40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1cd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1cd90 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1cda0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1cdb0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1cdc0 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1cdd0 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1cde0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1cdf0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1ce00 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e  dule.xFilter" />
1ce10 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
1ce20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1ce30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1ce40 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f  aram name="curso
1ce50 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
1ce60 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1ce70 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1ce80 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a  leCursor" /> obj
1ce90 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20  ect instance..  
1cea0 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69        /// associ
1ceb0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 72  ated with the pr
1cec0 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
1ced0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
1cee0 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20 20  rsor to be..    
1cef0 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20      /// used... 
1cf00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1cf10 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1cf20 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e   <param name="in
1cf30 64 65 78 4e 75 6d 62 65 72 22 3e 0d 0a 20 20 20  dexNumber">..   
1cf40 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20       /// Number 
1cf50 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
1cf60 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
1cf70 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20  ed index...     
1cf80 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1cf90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1cfa0 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 53  ram name="indexS
1cfb0 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20  tring">..       
1cfc0 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64   /// String used
1cfd0 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
1cfe0 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
1cff0 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
1d000 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1d010 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1d020 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a  name="values">..
1d030 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1d040 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e  values correspon
1d050 64 69 6e 67 20 74 6f 20 65 61 63 68 20 63 6f 6c  ding to each col
1d060 75 6d 6e 20 69 6e 20 74 68 65 20 73 65 6c 65 63  umn in the selec
1d070 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20  ted index...    
1d080 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1d090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1d0a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1d0b0 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1d0c0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1d0d0 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1d0e0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1d0f0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1d100 43 6f 64 65 20 46 69 6c 74 65 72 28 0d 0a 20 20  Code Filter(..  
1d110 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1d120 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1d130 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a 20 69 6e  or cursor, /* in
1d140 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1d150 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72   int indexNumber
1d160 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1d170 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1d180 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
1d190 6e 64 65 78 53 74 72 69 6e 67 2c 20 20 20 20 20  ndexString,     
1d1a0 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
1d1b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  /..            S
1d1c0 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c  QLiteValue[] val
1d1d0 75 65 73 20 20 20 20 20 20 20 20 20 20 20 20 20  ues             
1d1e0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1d1f0 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1d200 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d250 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1d260 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1d270 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
1d280 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
1d290 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
1d2a0 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1d2b0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
1d2c0 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 22 20 2f 3e  Module.xNext" />
1d2d0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
1d2e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1d2f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1d300 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f  aram name="curso
1d310 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
1d320 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1d330 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1d340 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a  leCursor" /> obj
1d350 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20  ect instance..  
1d360 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69        /// associ
1d370 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 72  ated with the pr
1d380 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
1d390 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
1d3a0 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20 20  rsor to be..    
1d3b0 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20      /// used... 
1d3c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1d3d0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1d3e0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1d3f0 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
1d400 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
1d410 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
1d420 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1d430 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1d440 72 6f 72 43 6f 64 65 20 4e 65 78 74 28 0d 0a 20  rorCode Next(.. 
1d450 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1d460 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
1d470 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 69 6e  sor cursor /* in
1d480 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1d490 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
1d4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d4f0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1d500 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
1d510 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
1d520 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
1d530 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
1d540 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
1d550 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
1d560 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f  e.xEof" /> metho
1d570 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1d580 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1d590 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1d5a0 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20  ame="cursor">.. 
1d5b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1d5c0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1d5d0 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1d5e0 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  or" /> object in
1d5f0 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
1d600 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
1d610 69 74 68 20 74 68 65 20 70 72 65 76 69 6f 75 73  ith the previous
1d620 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61  ly opened virtua
1d630 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74  l table cursor t
1d640 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o be..        //
1d650 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  / used...       
1d660 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1d670 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1d680 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1d690 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 6e 6f  / Non-zero if no
1d6a0 20 6d 6f 72 65 20 72 6f 77 73 20 61 72 65 20 61   more rows are a
1d6b0 76 61 69 6c 61 62 6c 65 3b 20 7a 65 72 6f 20 6f  vailable; zero o
1d6c0 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 20  therwise...     
1d6d0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1d6e0 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  >..        bool 
1d6f0 45 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Eof(..          
1d700 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1d710 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
1d720 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  r /* in */..    
1d730 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
1d740 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1d750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d790 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1d7a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1d7b0 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1d7c0 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
1d7d0 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
1d7e0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
1d7f0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
1d800 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e  veModule.xColumn
1d810 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
1d820 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1d830 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1d840 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
1d850 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
1d860 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1d870 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
1d880 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e  lTableCursor" />
1d890 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1d8a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73  ..        /// as
1d8b0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1d8c0 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  e previously ope
1d8d0 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ned virtual tabl
1d8e0 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a  e cursor to be..
1d8f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64          /// used
1d900 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1d910 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1d920 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1d930 3d 22 63 6f 6e 74 65 78 74 22 3e 0d 0a 20 20 20  ="context">..   
1d940 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1d950 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
1d960 6e 74 65 78 74 22 20 2f 3e 20 6f 62 6a 65 63 74  ntext" /> object
1d970 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65 20   instance to be 
1d980 75 73 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20  used for..      
1d990 20 20 2f 2f 2f 20 72 65 74 75 72 6e 69 6e 67 20    /// returning 
1d9a0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
1d9b0 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 74 68  lumn value to th
1d9c0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
1d9d0 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  brary...        
1d9e0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1d9f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1da00 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a   name="index">..
1da10 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1da20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78  zero-based index
1da30 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1da40 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e  o the column con
1da50 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20  taining the..   
1da60 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 74       /// value t
1da70 6f 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a  o be returned...
1da80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1da90 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1daa0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1dab0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1dac0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1dad0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1dae0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1daf0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1db00 72 72 6f 72 43 6f 64 65 20 43 6f 6c 75 6d 6e 28  rrorCode Column(
1db10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1db20 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1db30 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f  Cursor cursor, /
1db40 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
1db50 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 74 65       SQLiteConte
1db60 78 74 20 63 6f 6e 74 65 78 74 2c 20 20 20 20 20  xt context,     
1db70 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
1db80 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
1db90 69 6e 64 65 78 20 20 20 20 20 20 20 20 20 20 20  index           
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dbb0 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
1dbc0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
1dbd0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1dbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1dc20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1dc30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1dc40 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
1dc50 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65  lled in response
1dc60 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
1dc70 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
1dc80 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
1dc90 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d  ule.xRowId" /> m
1dca0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
1dcb0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1dcc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1dcd0 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22  am name="cursor"
1dce0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1dcf0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
1dd00 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1dd10 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63  Cursor" /> objec
1dd20 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20  t instance..    
1dd30 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
1dd40 65 64 20 77 69 74 68 20 74 68 65 20 70 72 65 76  ed with the prev
1dd50 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69  iously opened vi
1dd60 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73  rtual table curs
1dd70 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20  or to be..      
1dd80 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20    /// used...   
1dd90 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1dda0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1ddb0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49  param name="rowI
1ddc0 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  d">..        ///
1ddd0 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
1dde0 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
1ddf0 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
1de00 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 75 6e  o contain the un
1de10 69 71 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ique..        //
1de20 2f 20 69 6e 74 65 67 65 72 20 72 6f 77 20 69 64  / integer row id
1de30 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68 65  entifier for the
1de40 20 63 75 72 72 65 6e 74 20 72 6f 77 20 66 6f 72   current row for
1de50 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
1de60 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  ursor...        
1de70 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1de80 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1de90 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1dea0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1deb0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1dec0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1ded0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1dee0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1def0 20 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20   RowId(..       
1df00 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
1df10 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
1df20 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  rsor, /* in */..
1df30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1df40 6c 6f 6e 67 20 72 6f 77 49 64 20 20 20 20 20 20  long rowId      
1df50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1df60 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
1df70 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1df80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1df90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1dfd0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1dfe0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1dff0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1e000 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1e010 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1e020 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1e030 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1e040 64 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e  dule.xUpdate" />
1e050 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
1e060 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1e070 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1e080 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
1e090 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1e0a0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
1e0b0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1e0c0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
1e0d0 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
1e0e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
1e0f0 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
1e100 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1e110 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1e120 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1e130 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d   name="values">.
1e140 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1e150 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63   array of <see c
1e160 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65  ref="SQLiteValue
1e170 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1e180 61 6e 63 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67  ances containing
1e190 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
1e1a0 65 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66 69 65  e new or modifie
1e1b0 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 2c  d column values,
1e1c0 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20   if any...      
1e1d0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1e1e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1e1f0 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e  am name="rowId">
1e200 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
1e210 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73  on success, this
1e220 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
1e230 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63  be modified to c
1e240 6f 6e 74 61 69 6e 20 74 68 65 20 75 6e 69 71 75  ontain the uniqu
1e250 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
1e260 6e 74 65 67 65 72 20 72 6f 77 20 69 64 65 6e 74  nteger row ident
1e270 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 72 6f  ifier for the ro
1e280 77 20 74 68 61 74 20 77 61 73 20 69 6e 73 65 72  w that was inser
1e290 74 65 64 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20  ted, if any...  
1e2a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1e2b0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1e2c0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1e2d0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1e2e0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1e2f0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1e300 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1e310 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1e320 6f 72 43 6f 64 65 20 55 70 64 61 74 65 28 0d 0a  orCode Update(..
1e330 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1e340 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
1e350 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  able, /* in */..
1e360 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1e370 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73  teValue[] values
1e380 2c 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  ,     /* in */..
1e390 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1e3a0 6c 6f 6e 67 20 72 6f 77 49 64 20 20 20 20 20 20  long rowId      
1e3b0 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d        /* out */.
1e3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1e3d0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1e3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e420 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1e430 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1e440 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1e450 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
1e460 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
1e470 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1e480 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
1e490 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42  eNativeModule.xB
1e4a0 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  egin" /> method.
1e4b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e4c0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1e4d0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1e4e0 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
1e4f0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
1e500 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
1e510 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
1e520 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
1e530 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
1e540 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
1e550 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1e560 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1e570 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1e580 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1e590 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1e5a0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1e5b0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1e5c0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1e5d0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1e5e0 72 72 6f 72 43 6f 64 65 20 42 65 67 69 6e 28 0d  rrorCode Begin(.
1e5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1e600 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
1e610 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  table /* in */..
1e620 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1e630 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1e640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e680 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1e690 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1e6a0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1e6b0 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
1e6c0 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
1e6d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1e6e0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
1e6f0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79  NativeModule.xSy
1e700 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  nc" /> method...
1e710 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1e720 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1e730 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e740 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20  "table">..      
1e750 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
1e760 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
1e770 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
1e780 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
1e790 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
1e7a0 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69  /// with this vi
1e7b0 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
1e7c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1e7d0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1e7e0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1e7f0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1e800 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1e810 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1e820 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1e830 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1e840 6f 72 43 6f 64 65 20 53 79 6e 63 28 0d 0a 20 20  orCode Sync(..  
1e850 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1e860 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
1e870 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  le /* in */..   
1e880 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1e890 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1e8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1e8e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1e8f0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1e900 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
1e910 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
1e920 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
1e930 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
1e940 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
1e950 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69  iveModule.xCommi
1e960 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
1e970 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1e980 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1e990 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1e9a0 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  table">..       
1e9b0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1e9c0 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
1e9d0 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  lTable" /> objec
1e9e0 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63  t instance assoc
1e9f0 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  iated..        /
1ea00 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72  // with this vir
1ea10 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
1ea20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1ea30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1ea40 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1ea50 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
1ea60 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
1ea70 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
1ea80 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
1ea90 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1eaa0 72 43 6f 64 65 20 43 6f 6d 6d 69 74 28 0d 0a 20  rCode Commit(.. 
1eab0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1eac0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
1ead0 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  ble /* in */..  
1eae0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
1eaf0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1eb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1eb40 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1eb50 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1eb60 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
1eb70 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
1eb80 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
1eb90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
1eba0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
1ebb0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
1ebc0 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  back" /> method.
1ebd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1ebe0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1ebf0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1ec00 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
1ec10 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
1ec20 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
1ec30 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
1ec40 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
1ec50 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
1ec60 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
1ec70 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1ec80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1ec90 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1eca0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1ecb0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1ecc0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1ecd0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1ece0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1ecf0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1ed00 72 72 6f 72 43 6f 64 65 20 52 6f 6c 6c 62 61 63  rrorCode Rollbac
1ed10 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
1ed20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1ed30 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a  le table /* in *
1ed40 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
1ed50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1ed60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eda0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1edb0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1edc0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1edd0 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
1ede0 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
1edf0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1ee00 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
1ee10 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
1ee20 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f  xFindFunction" /
1ee30 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
1ee40 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1ee50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1ee60 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
1ee70 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
1ee80 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1ee90 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1eea0 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
1eeb0 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
1eec0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
1eed0 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c  ith this virtual
1eee0 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
1eef0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1ef00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1ef10 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74  m name="argument
1ef20 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20  Count">..       
1ef30 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
1ef40 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
1ef50 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69  the function bei
1ef60 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20 20 20 20  ng sought...    
1ef70 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1ef80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1ef90 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
1efa0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1efb0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
1efc0 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f  unction being so
1efd0 75 67 68 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ught...        /
1efe0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1eff0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1f000 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22 3e  name="function">
1f010 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
1f020 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73  on success, this
1f030 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
1f040 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63  be modified to c
1f050 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20  ontain the..    
1f060 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1f070 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f="SQLiteFunctio
1f080 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  n" /> object ins
1f090 74 61 6e 63 65 20 72 65 73 70 6f 6e 73 69 62 6c  tance responsibl
1f0a0 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  e for..        /
1f0b0 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  // implementing 
1f0c0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 75  the specified fu
1f0d0 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  nction...       
1f0e0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1f0f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1f100 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44  m name="pClientD
1f110 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ata">..        /
1f120 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
1f130 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
1f140 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
1f150 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d   to contain the.
1f160 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74  .        /// nat
1f170 69 76 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f  ive user-data po
1f180 69 6e 74 65 72 20 61 73 73 6f 63 69 61 74 65 64  inter associated
1f190 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f   with..        /
1f1a0 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  // <paramref nam
1f1b0 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 2f 3e 2e  e="function" />.
1f1c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1f1d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1f1e0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1f1f0 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
1f200 65 72 6f 20 69 66 20 74 68 65 20 73 70 65 63 69  ero if the speci
1f210 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 20 77 61  fied function wa
1f220 73 20 66 6f 75 6e 64 3b 20 7a 65 72 6f 20 6f 74  s found; zero ot
1f230 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 20 20  herwise...      
1f240 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1f250 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 46  ..        bool F
1f260 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
1f270 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1f280 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
1f290 6c 65 2c 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d  le,    /* in */.
1f2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
1f2b0 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 20   argumentCount, 
1f2c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
1f2d0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1f2e0 73 74 72 69 6e 67 20 6e 61 6d 65 2c 20 20 20 20  string name,    
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f300 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
1f310 20 20 20 72 65 66 20 53 51 4c 69 74 65 46 75 6e     ref SQLiteFun
1f320 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 20  ction function, 
1f330 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  /* out */..     
1f340 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
1f350 72 20 70 43 6c 69 65 6e 74 44 61 74 61 20 20 20  r pClientData   
1f360 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
1f370 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1f380 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1f390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1f3e0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1f3f0 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1f400 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20  od is called in 
1f410 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d  response to the.
1f420 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
1f430 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
1f440 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e  ativeModule.xRen
1f450 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ame" /> method..
1f460 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
1f470 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1f480 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1f490 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  ="table">..     
1f4a0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
1f4b0 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
1f4c0 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a  ualTable" /> obj
1f4d0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
1f4e0 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
1f4f0 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76   /// with this v
1f500 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
1f510 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1f520 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1f530 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 65   <param name="ne
1f540 77 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20  wName">..       
1f550 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 6e 61 6d   /// The new nam
1f560 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
1f570 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
1f580 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1f590 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1f5a0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1f5b0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1f5c0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1f5d0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1f5e0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1f5f0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1f600 64 65 20 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20  de Rename(..    
1f610 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
1f620 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
1f630 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
1f640 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
1f650 65 77 4e 61 6d 65 20 20 20 20 20 20 20 20 20 20  ewName          
1f660 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1f670 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
1f680 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1f690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f6d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1f6e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1f6f0 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1f700 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
1f710 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
1f720 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
1f730 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
1f740 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f  veModule.xSavepo
1f750 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  int" /> method..
1f760 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
1f770 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1f780 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1f790 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  ="table">..     
1f7a0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
1f7b0 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
1f7c0 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a  ualTable" /> obj
1f7d0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
1f7e0 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
1f7f0 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76   /// with this v
1f800 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
1f810 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1f820 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1f830 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 61   <param name="sa
1f840 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20  vepoint">..     
1f850 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61     /// This is a
1f860 6e 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69  n integer identi
1f870 66 69 65 72 20 75 6e 64 65 72 20 77 68 69 63 68  fier under which
1f880 20 74 68 65 20 74 68 65 20 63 75 72 72 65 6e 74   the the current
1f890 20 73 74 61 74 65 20 6f 66 0d 0a 20 20 20 20 20   state of..     
1f8a0 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75     /// the virtu
1f8b0 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20  al table should 
1f8c0 62 65 20 73 61 76 65 64 2e 0d 0a 20 20 20 20 20  be saved...     
1f8d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1f8e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
1f8f0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1f900 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
1f910 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
1f920 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1f930 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1f940 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1f950 6f 64 65 20 53 61 76 65 70 6f 69 6e 74 28 0d 0a  ode Savepoint(..
1f960 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1f970 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
1f980 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  able, /* in */..
1f990 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
1f9a0 73 61 76 65 70 6f 69 6e 74 20 20 20 20 20 20 20  savepoint       
1f9b0 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1f9d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1f9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa20 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1fa30 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1fa40 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1fa50 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
1fa60 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
1fa70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1fa80 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
1fa90 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  NativeModule.xRe
1faa0 6c 65 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64  lease" /> method
1fab0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1fac0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1fad0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1fae0 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
1faf0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1fb00 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
1fb10 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
1fb20 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
1fb30 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
1fb40 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
1fb50 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
1fb60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1fb70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1fb80 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1fb90 73 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20  savepoint">..   
1fba0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73       /// This is
1fbb0 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 65 64   an integer used
1fbc0 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
1fbd0 74 20 61 6e 79 20 73 61 76 65 64 20 73 74 61 74  t any saved stat
1fbe0 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20 20  es with an..    
1fbf0 20 20 20 20 2f 2f 2f 20 69 64 65 6e 74 69 66 69      /// identifi
1fc00 65 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  er greater than 
1fc10 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 69 73  or equal to this
1fc20 20 73 68 6f 75 6c 64 20 62 65 20 64 65 6c 65 74   should be delet
1fc30 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
1fc40 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
1fc50 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
1fc60 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1fc70 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1fc80 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
1fc90 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
1fca0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
1fcb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
1fcc0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1fcd0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1fce0 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20  Release(..      
1fcf0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1fd00 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20  ualTable table, 
1fd10 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1fd20 20 20 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f        int savepo
1fd30 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20  int             
1fd40 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1fd50 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1fd60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1fd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1fdb0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1fdc0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1fdd0 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
1fde0 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
1fdf0 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
1fe00 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1fe10 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
1fe20 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
1fe30 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  To" /> method...
1fe40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1fe50 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1fe60 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1fe70 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20  "table">..      
1fe80 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
1fe90 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
1fea0 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
1feb0 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
1fec0 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
1fed0 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69  /// with this vi
1fee0 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
1fef0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1ff00 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1ff10 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 61 76  <param name="sav
1ff20 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20  epoint">..      
1ff30 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6e    /// This is an
1ff40 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66   integer identif
1ff50 69 65 72 20 75 73 65 64 20 74 6f 20 73 70 65 63  ier used to spec
1ff60 69 66 79 20 61 20 73 70 65 63 69 66 69 63 20 73  ify a specific s
1ff70 61 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  aved..        //
1ff80 2f 20 73 74 61 74 65 20 66 6f 72 20 74 68 65 20  / state for the 
1ff90 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 6f  virtual table fo
1ffa0 72 20 69 74 20 74 6f 20 72 65 73 74 6f 72 65 20  r it to restore 
1ffb0 69 74 73 65 6c 66 20 62 61 63 6b 20 74 6f 2c 20  itself back to, 
1ffc0 77 68 69 63 68 0d 0a 20 20 20 20 20 20 20 20 2f  which..        /
1ffd0 2f 2f 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 68  // should also h
1ffe0 61 76 65 20 74 68 65 20 65 66 66 65 63 74 20 6f  ave the effect o
1fff0 66 20 64 65 6c 65 74 69 6e 67 20 61 6c 6c 20 73  f deleting all s
20000 61 76 65 64 20 73 74 61 74 65 73 20 77 69 74 68  aved states with
20010 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   an..        ///
20020 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66   integer identif
20030 69 65 72 20 67 72 65 61 74 65 72 20 74 68 61 6e  ier greater than
20040 20 74 68 69 73 20 6f 6e 65 2e 0d 0a 20 20 20 20   this one...    
20050 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
20060 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
20070 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
20080 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
20090 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
200a0 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
200b0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
200c0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
200d0 43 6f 64 65 20 52 6f 6c 6c 62 61 63 6b 54 6f 28  Code RollbackTo(
200e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
200f0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
20100 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f   table, /* in */
20110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
20120 74 20 73 61 76 65 70 6f 69 6e 74 20 20 20 20 20  t savepoint     
20130 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
20140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
20150 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
20160 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
20170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
201c0 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
201d0 4d 65 6d 6f 72 79 20 53 74 61 74 69 63 20 43 6c  Memory Static Cl
201e0 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
201f0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
20200 54 68 69 73 20 63 6c 61 73 73 20 63 6f 6e 74 61  This class conta
20210 69 6e 73 20 73 74 61 74 69 63 20 6d 65 74 68 6f  ins static metho
20220 64 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ds that are used
20230 20 74 6f 20 61 6c 6c 6f 63 61 74 65 2c 0d 0a 20   to allocate,.. 
20240 20 20 20 2f 2f 2f 20 6d 61 6e 69 70 75 6c 61 74     /// manipulat
20250 65 2c 20 61 6e 64 20 66 72 65 65 20 6e 61 74 69  e, and free nati
20260 76 65 20 6d 65 6d 6f 72 79 20 70 72 6f 76 69 64  ve memory provid
20270 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74 65  ed by the SQLite
20280 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
20290 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
202a0 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
202b0 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53 51   static class SQ
202c0 4c 69 74 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20  LiteMemory..    
202d0 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
202e0 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d  on Private Data.
202f0 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52  .#if TRACK_MEMOR
20300 59 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20  Y_BYTES..       
20310 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
20320 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
20330 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
20340 20 69 73 20 75 73 65 64 20 74 6f 20 73 79 6e 63   is used to sync
20350 68 72 6f 6e 69 7a 65 20 61 63 63 65 73 73 20 74  hronize access t
20360 6f 20 74 68 65 20 6f 74 68 65 72 0d 0a 20 20 20  o the other..   
20370 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 69 63 20       /// static 
20380 66 69 65 6c 64 73 20 6f 66 20 74 68 69 73 20 63  fields of this c
20390 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lass...        /
203a0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
203b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
203c0 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79 6e  tatic object syn
203d0 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65  cRoot = new obje
203e0 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ct();....       
203f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20430 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20440 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
20450 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
20460 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
20470 6f 66 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 6d  of outstanding m
20480 65 6d 6f 72 79 20 62 79 74 65 73 20 61 6c 6c 6f  emory bytes allo
20490 63 61 74 65 64 20 62 79 20 74 68 69 73 0d 0a 20  cated by this.. 
204a0 20 20 20 20 20 20 20 2f 2f 2f 20 63 6c 61 73 73         /// class
204b0 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c 69 74   using the SQLit
204c0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
204d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
204e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
204f0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
20500 69 6e 74 20 62 79 74 65 73 41 6c 6c 6f 63 61 74  int bytesAllocat
20510 65 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ed;....        /
20520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20560 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20570 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
20580 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
20590 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
205a0 6f 66 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 6d  of outstanding m
205b0 65 6d 6f 72 79 20 62 79 74 65 73 20 65 76 65 72  emory bytes ever
205c0 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0d 0a 20   allocated by.. 
205d0 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20         /// this 
205e0 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20  class using the 
205f0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
20600 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary...        //
20610 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
20620 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
20630 61 74 69 63 20 69 6e 74 20 6d 61 78 69 6d 75 6d  atic int maximum
20640 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 3b 0d  BytesAllocated;.
20650 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
20660 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
20670 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
206c0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
206d0 6e 20 4d 65 6d 6f 72 79 20 41 6c 6c 6f 63 61 74  n Memory Allocat
206e0 69 6f 6e 20 48 65 6c 70 65 72 20 4d 65 74 68 6f  ion Helper Metho
206f0 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
20700 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
20710 20 20 20 2f 2f 2f 20 41 6c 6c 6f 63 61 74 65 73     /// Allocates
20720 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 73 70   at least the sp
20730 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72 20 6f  ecified number o
20740 66 20 62 79 74 65 73 20 6f 66 20 6e 61 74 69 76  f bytes of nativ
20750 65 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20  e memory..      
20760 20 20 2f 2f 2f 20 76 69 61 20 74 68 65 20 53 51    /// via the SQ
20770 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
20780 79 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  y sqlite3_malloc
20790 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  () function and 
207a0 72 65 74 75 72 6e 73 0d 0a 20 20 20 20 20 20 20  returns..       
207b0 20 2f 2f 2f 20 74 68 65 20 72 65 73 75 6c 74 69   /// the resulti
207c0 6e 67 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  ng native pointe
207d0 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
207e0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
207f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
20800 61 6d 65 3d 22 73 69 7a 65 22 3e 0d 0a 20 20 20  ame="size">..   
20810 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d       /// The num
20820 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20  ber of bytes to 
20830 61 6c 6c 6f 63 61 74 65 2e 0d 0a 20 20 20 20 20  allocate...     
20840 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
20850 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
20860 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
20870 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
20880 6f 69 6e 74 65 72 20 74 68 61 74 20 70 6f 69 6e  ointer that poin
20890 74 73 20 74 6f 20 61 20 62 6c 6f 63 6b 20 6f 66  ts to a block of
208a0 20 6d 65 6d 6f 72 79 20 6f 66 20 61 74 20 6c 65   memory of at le
208b0 61 73 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ast the..       
208c0 20 2f 2f 2f 20 73 70 65 63 69 66 69 65 64 20 73   /// specified s
208d0 69 7a 65 20 2d 4f 52 2d 20 3c 73 65 65 20 63 72  ize -OR- <see cr
208e0 65 66 3d 22 49 6e 74 50 74 72 2e 5a 65 72 6f 22  ef="IntPtr.Zero"
208f0 20 2f 3e 20 69 66 20 74 68 65 20 6d 65 6d 6f 72   /> if the memor
20900 79 20 63 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20  y could..       
20910 20 2f 2f 2f 20 6e 6f 74 20 62 65 20 61 6c 6c 6f   /// not be allo
20920 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  cated...        
20930 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
20940 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
20950 74 61 74 69 63 20 49 6e 74 50 74 72 20 41 6c 6c  tatic IntPtr All
20960 6f 63 61 74 65 28 69 6e 74 20 73 69 7a 65 29 0d  ocate(int size).
20970 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
20980 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
20990 4d 65 6d 6f 72 79 20 3d 20 55 6e 73 61 66 65 4e  Memory = UnsafeN
209a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
209b0 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 73 69 7a 65  ite3_malloc(size
209c0 29 3b 0d 0a 0d 0a 23 69 66 20 54 52 41 43 4b 5f  );....#if TRACK_
209d0 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20  MEMORY_BYTES..  
209e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4d            if (pM
209f0 65 6d 6f 72 79 20 21 3d 20 49 6e 74 50 74 72 2e  emory != IntPtr.
20a00 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
20a10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20a20 20 20 20 20 20 20 69 6e 74 20 62 6c 6f 63 6b 53        int blockS
20a30 69 7a 65 20 3d 20 53 69 7a 65 28 70 4d 65 6d 6f  ize = Size(pMemo
20a40 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
20a50 20 20 20 20 20 20 20 20 69 66 20 28 62 6c 6f 63          if (bloc
20a60 6b 53 69 7a 65 20 3e 20 30 29 0d 0a 20 20 20 20  kSize > 0)..    
20a70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a90 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f     lock (syncRoo
20aa0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
20ab0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ad0 20 20 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65     bytesAllocate
20ae0 64 20 2b 3d 20 62 6c 6f 63 6b 53 69 7a 65 3b 0d  d += blockSize;.
20af0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20b00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62             if (b
20b10 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20 3e 20  ytesAllocated > 
20b20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f  maximumBytesAllo
20b30 63 61 74 65 64 29 0d 0a 20 20 20 20 20 20 20 20  cated)..        
20b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b50 20 20 20 20 6d 61 78 69 6d 75 6d 42 79 74 65 73      maximumBytes
20b60 41 6c 6c 6f 63 61 74 65 64 20 3d 20 62 79 74 65  Allocated = byte
20b70 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 20 20 20  sAllocated;..   
20b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20ba0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
20bb0 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20bd0 72 6e 20 70 4d 65 6d 6f 72 79 3b 0d 0a 20 20 20  rn pMemory;..   
20be0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20bf0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
20c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c20 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 0d 0a 0d 0a 20 20 20  /////////....   
20c40 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
20c50 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
20c60 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73  Gets and returns
20c70 20 74 68 65 20 61 63 74 75 61 6c 20 73 69 7a 65   the actual size
20c80 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
20c90 64 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 74  d memory block t
20ca0 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  hat..        ///
20cb0 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 20   was previously 
20cc0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68  obtained from th
20cd0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 41 6c 6c  e <see cref="All
20ce0 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  ocate" /> method
20cf0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20d00 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
20d10 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
20d20 6d 65 3d 22 70 4d 65 6d 6f 72 79 22 3e 0d 0a 20  me="pMemory">.. 
20d30 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
20d40 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
20d50 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c 6f 63   the memory bloc
20d60 6b 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 62 74  k previously obt
20d70 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a  ained from the..
20d80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
20d90 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65 22   cref="Allocate"
20da0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
20db0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
20dc0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
20dd0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
20de0 20 20 2f 2f 2f 20 54 68 65 20 61 63 74 75 61 6c    /// The actual
20df0 20 73 69 7a 65 2c 20 69 6e 20 62 79 74 65 73 2c   size, in bytes,
20e00 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 62   of the memory b
20e10 6c 6f 63 6b 20 73 70 65 63 69 66 69 65 64 20 76  lock specified v
20e20 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ia the..        
20e30 2f 2f 2f 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  /// native point
20e40 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  er...        ///
20e50 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
20e60 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
20e70 69 63 20 69 6e 74 20 53 69 7a 65 28 49 6e 74 50  ic int Size(IntP
20e80 74 72 20 70 4d 65 6d 6f 72 79 29 0d 0a 20 20 20  tr pMemory)..   
20e90 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c       {..#if !SQL
20ea0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
20eb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20ec0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
20ed0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61 6c  hods.sqlite3_mal
20ee0 6c 6f 63 5f 73 69 7a 65 5f 69 6e 74 65 72 6f 70  loc_size_interop
20ef0 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 23 65 6c 73  (pMemory);..#els
20f00 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
20f10 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66  eturn 0;..#endif
20f20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
20f30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20f80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
20f90 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
20fa0 20 2f 2f 2f 20 46 72 65 65 73 20 61 20 6d 65 6d   /// Frees a mem
20fb0 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f  ory block previo
20fc0 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72  usly obtained fr
20fd0 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  om the..        
20fe0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 41  /// <see cref="A
20ff0 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68  llocate" /> meth
21000 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
21010 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
21020 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
21030 6e 61 6d 65 3d 22 70 4d 65 6d 6f 72 79 22 3e 0d  name="pMemory">.
21040 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
21050 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
21060 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c  to the memory bl
21070 6f 63 6b 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  ock previously o
21080 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
21090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
210a0 65 65 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74  ee cref="Allocat
210b0 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
210c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
210d0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
210e0 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
210f0 46 72 65 65 28 49 6e 74 50 74 72 20 70 4d 65 6d  Free(IntPtr pMem
21100 6f 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ory)..        {.
21110 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52  .#if TRACK_MEMOR
21120 59 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20  Y_BYTES..       
21130 20 20 20 20 20 69 66 20 28 70 4d 65 6d 6f 72 79       if (pMemory
21140 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
21150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21170 20 69 6e 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d   int blockSize =
21180 20 53 69 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d   Size(pMemory);.
21190 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
211a0 20 20 20 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65     if (blockSize
211b0 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
211c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
211d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
211e0 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
21220 74 65 73 41 6c 6c 6f 63 61 74 65 64 20 2d 3d 20  tesAllocated -= 
21230 62 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 20 20 20 20  blockSize;..    
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21250 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
21260 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21270 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
21280 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
21290 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
212a0 71 6c 69 74 65 33 5f 66 72 65 65 28 70 4d 65 6d  qlite3_free(pMem
212b0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ory);..        }
212c0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
212d0 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
212e0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
212f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21340 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
21350 4c 69 74 65 53 74 72 69 6e 67 20 53 74 61 74 69  LiteString Stati
21360 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 69 6e 74  c Class..    int
21370 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61  ernal static cla
21380 73 73 20 53 51 4c 69 74 65 53 74 72 69 6e 67 0d  ss SQLiteString.
21390 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
213a0 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
213b0 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
213c0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
213d0 63 20 69 6e 74 20 54 68 69 72 74 79 42 69 74 73  c int ThirtyBits
213e0 20 3d 20 30 78 33 66 66 66 66 66 66 66 3b 0d 0a   = 0x3fffffff;..
213f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21400 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
21410 45 6e 63 6f 64 69 6e 67 20 55 74 66 38 45 6e 63  Encoding Utf8Enc
21420 6f 64 69 6e 67 20 3d 20 45 6e 63 6f 64 69 6e 67  oding = Encoding
21430 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20  .UTF8;..        
21440 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
21450 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
214a0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
214b0 20 55 54 46 2d 38 20 45 6e 63 6f 64 69 6e 67 20   UTF-8 Encoding 
214c0 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
214d0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
214e0 74 61 74 69 63 20 62 79 74 65 5b 5d 20 47 65 74  tatic byte[] Get
214f0 55 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72  Utf8BytesFromStr
21500 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ing(..          
21510 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0d 0a    string value..
21520 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
21530 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21540 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
21550 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21560 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21570 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
21580 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 74 66        return Utf
21590 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 42 79 74  8Encoding.GetByt
215a0 65 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  es(value);..    
215b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
215c0 20 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
21610 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
21620 63 20 73 74 72 69 6e 67 20 47 65 74 53 74 72 69  c string GetStri
21630 6e 67 46 72 6f 6d 55 74 66 38 42 79 74 65 73 28  ngFromUtf8Bytes(
21640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
21650 74 65 5b 5d 20 62 79 74 65 73 0d 0a 20 20 20 20  te[] bytes..    
21660 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
21670 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21680 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d 20 6e    if (bytes == n
21690 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
216a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
216b0 6c 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  l;....#if !PLATF
216c0 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
216d0 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
216e0 20 20 72 65 74 75 72 6e 20 55 74 66 38 45 6e 63    return Utf8Enc
216f0 6f 64 69 6e 67 2e 47 65 74 53 74 72 69 6e 67 28  oding.GetString(
21700 62 79 74 65 73 29 3b 0d 0a 23 65 6c 73 65 0d 0a  bytes);..#else..
21710 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21720 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e 67 2e  rn Utf8Encoding.
21730 47 65 74 53 74 72 69 6e 67 28 62 79 74 65 73 2c  GetString(bytes,
21740 20 30 2c 20 62 79 74 65 73 2e 4c 65 6e 67 74 68   0, bytes.Length
21750 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
21760 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
21770 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
21780 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
217d0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
217e0 55 54 46 2d 38 20 53 74 72 69 6e 67 20 48 65 6c  UTF-8 String Hel
217f0 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
21800 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
21810 69 63 20 69 6e 74 20 50 72 6f 62 65 46 6f 72 55  ic int ProbeForU
21820 74 66 38 42 79 74 65 4c 65 6e 67 74 68 28 0d 0a  tf8ByteLength(..
21830 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
21840 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20  tr pValue,..    
21850 20 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69          int limi
21860 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
21870 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
21880 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e           int len
21890 67 74 68 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  gth = 0;....    
218a0 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
218b0 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue != IntPtr.Zer
218c0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
218d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
218e0 20 20 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 20     do..         
218f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
21910 20 28 4d 61 72 73 68 61 6c 2e 52 65 61 64 42 79   (Marshal.ReadBy
21920 74 65 28 70 56 61 6c 75 65 2c 20 6c 65 6e 67 74  te(pValue, lengt
21930 68 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  h) == 0)..      
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21950 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a 20 20 20 20    break;....    
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21970 69 66 20 28 6c 65 6e 67 74 68 20 3e 3d 20 6c 69  if (length >= li
21980 6d 69 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  mit)..          
21990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
219a0 65 61 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  eak;....        
219b0 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67              leng
219c0 74 68 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  th++;..         
219d0 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 28         } while (
219e0 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
219f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21a00 20 20 20 20 20 72 65 74 75 72 6e 20 6c 65 6e 67       return leng
21a10 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  th;..        }..
21a20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
21a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a70 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
21a80 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
21a90 67 20 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38  g StringFromUtf8
21aa0 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20  IntPtr(..       
21ab0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c       IntPtr pVal
21ac0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
21ad0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
21ae0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21af0 20 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49   StringFromUtf8I
21b00 6e 74 50 74 72 28 70 56 61 6c 75 65 2c 0d 0a 20  ntPtr(pValue,.. 
21b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
21b20 72 6f 62 65 46 6f 72 55 74 66 38 42 79 74 65 4c  robeForUtf8ByteL
21b30 65 6e 67 74 68 28 70 56 61 6c 75 65 2c 20 54 68  ength(pValue, Th
21b40 69 72 74 79 42 69 74 73 29 29 3b 0d 0a 20 20 20  irtyBits));..   
21b50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21b60 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21bb0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
21bc0 69 63 20 73 74 72 69 6e 67 20 53 74 72 69 6e 67  ic string String
21bd0 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 0d  FromUtf8IntPtr(.
21be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
21bf0 50 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20  Ptr pValue,..   
21c00 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e           int len
21c10 67 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gth..           
21c20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
21c30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
21c40 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e  Value == IntPtr.
21c50 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
21c60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
21c70 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
21c80 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3e 20     if (length > 
21c90 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
21ca0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21cb0 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20     byte[] bytes 
21cc0 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65 6e 67 74  = new byte[lengt
21cd0 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  h];....         
21ce0 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
21cf0 6f 70 79 28 70 56 61 6c 75 65 2c 20 62 79 74 65  opy(pValue, byte
21d00 73 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  s, 0, length);..
21d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21d20 20 20 72 65 74 75 72 6e 20 47 65 74 53 74 72 69    return GetStri
21d30 6e 67 46 72 6f 6d 55 74 66 38 42 79 74 65 73 28  ngFromUtf8Bytes(
21d40 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  bytes);..       
21d50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21d60 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
21d70 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20  ing.Empty;..    
21d80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21d90 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21dd0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21de0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
21df0 63 20 49 6e 74 50 74 72 20 55 74 66 38 49 6e 74  c IntPtr Utf8Int
21e00 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a  PtrFromString(..
21e10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
21e20 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ng value..      
21e30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
21e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21e50 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
21e60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
21e70 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74      return IntPt
21e80 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
21e90 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 72 65         IntPtr re
21ea0 73 75 6c 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65  sult = IntPtr.Ze
21eb0 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
21ec0 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20   byte[] bytes = 
21ed0 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d  GetUtf8BytesFrom
21ee0 53 74 72 69 6e 67 28 76 61 6c 75 65 29 3b 0d 0a  String(value);..
21ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
21f00 20 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29   (bytes == null)
21f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21f20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e    return IntPtr.
21f30 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
21f40 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20       int length 
21f50 3d 20 62 79 74 65 73 2e 4c 65 6e 67 74 68 3b 0d  = bytes.Length;.
21f60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
21f70 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 4d 65  esult = SQLiteMe
21f80 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28 6c 65  mory.Allocate(le
21f90 6e 67 74 68 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20  ngth + 1);....  
21fa0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
21fb0 73 75 6c 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  sult == IntPtr.Z
21fc0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
21fd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
21fe0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
21ff0 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
22000 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 30 2c 20  .Copy(bytes, 0, 
22010 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68 29 3b  result, length);
22020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
22030 72 73 68 61 6c 2e 57 72 69 74 65 42 79 74 65 28  rshal.WriteByte(
22040 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68 2c 20  result, length, 
22050 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  0);....         
22060 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
22070 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
22080 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
22090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
220a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220c0 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
220f0 72 65 67 69 6f 6e 20 55 54 46 2d 38 20 53 74 72  region UTF-8 Str
22100 69 6e 67 20 41 72 72 61 79 20 48 65 6c 70 65 72  ing Array Helper
22110 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
22120 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
22130 73 74 72 69 6e 67 5b 5d 20 53 74 72 69 6e 67 41  string[] StringA
22140 72 72 61 79 46 72 6f 6d 55 74 66 38 49 6e 74 50  rrayFromUtf8IntP
22150 74 72 41 72 72 61 79 28 0d 0a 20 20 20 20 20 20  trArray(..      
22160 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d 20 70        IntPtr[] p
22170 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20  Values..        
22180 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
22190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
221a0 20 28 70 56 61 6c 75 65 73 20 3d 3d 20 6e 75 6c   (pValues == nul
221b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
221c0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
221d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
221e0 73 74 72 69 6e 67 5b 5d 20 72 65 73 75 6c 74 20  string[] result 
221f0 3d 20 6e 65 77 20 73 74 72 69 6e 67 5b 70 56 61  = new string[pVa
22200 6c 75 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d  lues.Length];...
22210 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
22220 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
22230 20 69 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e   index < result.
22240 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  Length; index++)
22250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22260 20 20 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20    result[index] 
22270 3d 20 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38  = StringFromUtf8
22280 49 6e 74 50 74 72 28 70 56 61 6c 75 65 73 5b 69  IntPtr(pValues[i
22290 6e 64 65 78 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndex]);....     
222a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
222b0 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
222c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
222d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22310 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
22320 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74  ublic static Int
22330 50 74 72 5b 5d 20 55 74 66 38 49 6e 74 50 74 72  Ptr[] Utf8IntPtr
22340 41 72 72 61 79 46 72 6f 6d 53 74 72 69 6e 67 41  ArrayFromStringA
22350 72 72 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  rray(..         
22360 20 20 20 73 74 72 69 6e 67 5b 5d 20 76 61 6c 75     string[] valu
22370 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
22380 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
22390 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
223a0 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  lues == null).. 
223b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
223c0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
223d0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
223e0 72 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  r[] result = new
223f0 20 49 6e 74 50 74 72 5b 76 61 6c 75 65 73 2e 4c   IntPtr[values.L
22400 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20  ength];....     
22410 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
22420 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
22430 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68   < result.Length
22440 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
22450 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
22460 6c 74 5b 69 6e 64 65 78 5d 20 3d 20 55 74 66 38  lt[index] = Utf8
22470 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
22480 28 76 61 6c 75 65 73 5b 69 6e 64 65 78 5d 29 3b  (values[index]);
22490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
224a0 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
224b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
224c0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
224d0 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
224e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
224f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22530 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
22540 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 61 72  region SQLiteMar
22550 73 68 61 6c 20 53 74 61 74 69 63 20 43 6c 61 73  shal Static Clas
22560 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  s..    internal 
22570 73 74 61 74 69 63 20 63 6c 61 73 73 20 53 51 4c  static class SQL
22580 69 74 65 4d 61 72 73 68 61 6c 0d 0a 20 20 20 20  iteMarshal..    
22590 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
225a0 6f 6e 20 49 6e 74 50 74 72 20 48 65 6c 70 65 72  on IntPtr Helper
225b0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
225c0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
225d0 49 6e 74 50 74 72 20 49 6e 74 50 74 72 46 6f 72  IntPtr IntPtrFor
225e0 4f 66 66 73 65 74 28 0d 0a 20 20 20 20 20 20 20  Offset(..       
225f0 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e       IntPtr poin
22600 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ter,..          
22610 20 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20    int offset..  
22620 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
22630 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22640 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 49      return new I
22650 6e 74 50 74 72 28 70 6f 69 6e 74 65 72 2e 54 6f  ntPtr(pointer.To
22660 49 6e 74 36 34 28 29 20 2b 20 6f 66 66 73 65 74  Int64() + offset
22670 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
22680 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
22690 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
226a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
226f0 23 72 65 67 69 6f 6e 20 4d 61 72 73 68 61 6c 20  #region Marshal 
22700 52 65 61 64 20 48 65 6c 70 65 72 20 4d 65 74 68  Read Helper Meth
22710 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ods..        pub
22720 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 52  lic static int R
22730 65 61 64 49 6e 74 33 32 28 0d 0a 20 20 20 20 20  eadInt32(..     
22740 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f         IntPtr po
22750 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  inter,..        
22760 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a      int offset..
22770 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
22780 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
22790 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
227a0 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
227b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72        return Mar
227c0 73 68 61 6c 2e 52 65 61 64 49 6e 74 33 32 28 70  shal.ReadInt32(p
227d0 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 3b  ointer, offset);
227e0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
227f0 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73       return Mars
22800 68 61 6c 2e 52 65 61 64 49 6e 74 33 32 28 49 6e  hal.ReadInt32(In
22810 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f  tPtrForOffset(po
22820 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29 3b  inter, offset));
22830 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
22840 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
22850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22890 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
228a0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
228b0 64 6f 75 62 6c 65 20 52 65 61 64 44 6f 75 62 6c  double ReadDoubl
228c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
228d0 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d  IntPtr pointer,.
228e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
228f0 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20 20 20   offset..       
22900 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
22910 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
22920 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
22930 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  K..            r
22940 65 74 75 72 6e 20 42 69 74 43 6f 6e 76 65 72 74  eturn BitConvert
22950 65 72 2e 49 6e 74 36 34 42 69 74 73 54 6f 44 6f  er.Int64BitsToDo
22960 75 62 6c 65 28 4d 61 72 73 68 61 6c 2e 52 65 61  uble(Marshal.Rea
22970 64 49 6e 74 36 34 28 0d 0a 20 20 20 20 20 20 20  dInt64(..       
22980 20 20 20 20 20 20 20 20 20 70 6f 69 6e 74 65 72           pointer
22990 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65 6c  , offset));..#el
229a0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
229b0 72 65 74 75 72 6e 20 42 69 74 43 6f 6e 76 65 72  return BitConver
229c0 74 65 72 2e 54 6f 44 6f 75 62 6c 65 28 42 69 74  ter.ToDouble(Bit
229d0 43 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  Converter.GetByt
229e0 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
229f0 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 52 65 61       Marshal.Rea
22a00 64 49 6e 74 36 34 28 49 6e 74 50 74 72 46 6f 72  dInt64(IntPtrFor
22a10 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20  Offset(pointer, 
22a20 6f 66 66 73 65 74 29 29 29 2c 20 30 29 3b 0d 0a  offset))), 0);..
22a30 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
22a40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
22a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22aa0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e  public static In
22ab0 74 50 74 72 20 52 65 61 64 49 6e 74 50 74 72 28  tPtr ReadIntPtr(
22ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
22ad0 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20  tPtr pointer,.. 
22ae0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f             int o
22af0 66 66 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20  ffset..         
22b00 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
22b10 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
22b20 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
22b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
22b40 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64  urn Marshal.Read
22b50 49 6e 74 50 74 72 28 70 6f 69 6e 74 65 72 2c 20  IntPtr(pointer, 
22b60 6f 66 66 73 65 74 29 3b 0d 0a 23 65 6c 73 65 0d  offset);..#else.
22b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
22b80 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64  urn Marshal.Read
22b90 49 6e 74 50 74 72 28 49 6e 74 50 74 72 46 6f 72  IntPtr(IntPtrFor
22ba0 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20  Offset(pointer, 
22bb0 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65 6e 64 69  offset));..#endi
22bc0 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  f..        }..  
22bd0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
22be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
22c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
22c40 72 65 67 69 6f 6e 20 4d 61 72 73 68 61 6c 20 57  region Marshal W
22c50 72 69 74 65 20 48 65 6c 70 65 72 20 4d 65 74 68  rite Helper Meth
22c60 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ods..        pub
22c70 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
22c80 57 72 69 74 65 49 6e 74 33 32 28 0d 0a 20 20 20  WriteInt32(..   
22c90 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
22ca0 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20  pointer,..      
22cb0 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
22cc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
22cd0 6e 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  nt value..      
22ce0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
22cf0 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
22d00 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
22d10 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
22d20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74  Marshal.WriteInt
22d30 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  32(pointer, offs
22d40 65 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  et, value);..#el
22d50 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
22d60 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74  Marshal.WriteInt
22d70 33 32 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  32(IntPtrForOffs
22d80 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  et(pointer, offs
22d90 65 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  et), value);..#e
22da0 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
22db0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
22dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
22e10 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
22e20 20 57 72 69 74 65 44 6f 75 62 6c 65 28 0d 0a 20   WriteDouble(.. 
22e30 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
22e40 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20  r pointer,..    
22e50 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
22e60 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et,..           
22e70 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 0d 0a 20   double value.. 
22e80 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
22e90 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
22ea0 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
22eb0 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
22ec0 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69       Marshal.Wri
22ed0 74 65 49 6e 74 36 34 28 70 6f 69 6e 74 65 72 2c  teInt64(pointer,
22ee0 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20   offset,..      
22ef0 20 20 20 20 20 20 20 20 20 20 42 69 74 43 6f 6e            BitCon
22f00 76 65 72 74 65 72 2e 44 6f 75 62 6c 65 54 6f 49  verter.DoubleToI
22f10 6e 74 36 34 42 69 74 73 28 76 61 6c 75 65 29 29  nt64Bits(value))
22f20 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
22f30 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72        Marshal.Wr
22f40 69 74 65 49 6e 74 36 34 28 49 6e 74 50 74 72 46  iteInt64(IntPtrF
22f50 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72  orOffset(pointer
22f60 2c 20 6f 66 66 73 65 74 29 2c 0d 0a 20 20 20 20  , offset),..    
22f70 20 20 20 20 20 20 20 20 20 20 20 20 42 69 74 43              BitC
22f80 6f 6e 76 65 72 74 65 72 2e 54 6f 49 6e 74 36 34  onverter.ToInt64
22f90 28 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 47 65  (BitConverter.Ge
22fa0 74 42 79 74 65 73 28 76 61 6c 75 65 29 2c 20 30  tBytes(value), 0
22fb0 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
22fc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22fd0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
23020 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
23030 69 63 20 76 6f 69 64 20 57 72 69 74 65 49 6e 74  ic void WriteInt
23040 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
23050 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72    IntPtr pointer
23060 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
23070 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20  nt offset,..    
23080 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 76          IntPtr v
23090 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
230a0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
230b0 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
230c0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
230d0 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
230e0 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28  hal.WriteIntPtr(
230f0 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 2c  pointer, offset,
23100 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
23110 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72  .            Mar
23120 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72  shal.WriteIntPtr
23130 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74  (IntPtrForOffset
23140 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
23150 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ), value);..#end
23160 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
23170 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
23180 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
23190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
231e0 23 72 65 67 69 6f 6e 20 42 79 74 65 20 41 72 72  #region Byte Arr
231f0 61 79 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  ay Helper Method
23200 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  s..        publi
23210 63 20 73 74 61 74 69 63 20 62 79 74 65 5b 5d 20  c static byte[] 
23220 42 79 74 65 73 46 72 6f 6d 49 6e 74 50 74 72 28  BytesFromIntPtr(
23230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
23240 74 50 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20  tPtr pValue,..  
23250 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65            int le
23260 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20  ngth..          
23270 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
23280 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23290 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72  pValue == IntPtr
232a0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
232b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
232c0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
232d0 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3d      if (length =
232e0 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
232f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
23300 20 62 79 74 65 5b 30 5d 3b 0d 0a 0d 0a 20 20 20   byte[0];....   
23310 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
23320 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 62 79 74  result = new byt
23330 65 5b 6c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20  e[length];....  
23340 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
23350 6c 2e 43 6f 70 79 28 70 56 61 6c 75 65 2c 20 72  l.Copy(pValue, r
23360 65 73 75 6c 74 2c 20 30 2c 20 6c 65 6e 67 74 68  esult, 0, length
23370 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23380 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
23390 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
233a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
233b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
233f0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
23400 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20 42   static IntPtr B
23410 79 74 65 73 54 6f 49 6e 74 50 74 72 28 0d 0a 20  ytesToIntPtr(.. 
23420 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
23430 5d 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  ] value..       
23440 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
23450 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
23460 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
23470 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23480 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72     return IntPtr
23490 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
234a0 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
234b0 20 3d 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 3b   = value.Length;
234c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
234d0 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29  if (length == 0)
234e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
234f0 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e    return IntPtr.
23500 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
23510 20 20 20 20 20 49 6e 74 50 74 72 20 72 65 73 75       IntPtr resu
23520 6c 74 20 3d 20 53 51 4c 69 74 65 4d 65 6d 6f 72  lt = SQLiteMemor
23530 79 2e 41 6c 6c 6f 63 61 74 65 28 6c 65 6e 67 74  y.Allocate(lengt
23540 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  h);....         
23550 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d     if (result ==
23560 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23580 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72  eturn IntPtr.Zer
23590 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
235a0 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 76    Marshal.Copy(v
235b0 61 6c 75 65 2c 20 30 2c 20 72 65 73 75 6c 74 2c  alue, 0, result,
235c0 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20   length);....   
235d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
235e0 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
235f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
23600 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
23610 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23650 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23660 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c       #region SQL
23670 69 74 65 56 61 6c 75 65 20 48 65 6c 70 65 72 20  iteValue Helper 
23680 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
23690 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 53   public static S
236a0 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 56 61 6c  QLiteValue[] Val
236b0 75 65 41 72 72 61 79 46 72 6f 6d 53 69 7a 65 41  ueArrayFromSizeA
236c0 6e 64 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  ndIntPtr(..     
236d0 20 20 20 20 20 20 20 69 6e 74 20 6e 44 61 74 61         int nData
236e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
236f0 6e 74 50 74 72 20 61 70 44 61 74 61 0d 0a 20 20  ntPtr apData..  
23700 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
23710 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23720 20 20 20 20 69 66 20 28 6e 44 61 74 61 20 3c 20      if (nData < 
23730 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
23740 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
23750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23760 69 66 20 28 61 70 44 61 74 61 20 3d 3d 20 49 6e  if (apData == In
23770 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
23780 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23790 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
237a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61          SQLiteVa
237b0 6c 75 65 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e  lue[] result = n
237c0 65 77 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 6e  ew SQLiteValue[n
237d0 44 61 74 61 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  Data];....      
237e0 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
237f0 6e 64 65 78 20 3d 20 30 2c 20 6f 66 66 73 65 74  ndex = 0, offset
23800 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
23810 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
23820 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68   < result.Length
23830 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
23840 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 2c 20         index++, 
23850 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72  offset += IntPtr
23860 2e 53 69 7a 65 29 0d 0a 20 20 20 20 20 20 20 20  .Size)..        
23870 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23880 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44         IntPtr pD
23890 61 74 61 20 3d 20 52 65 61 64 49 6e 74 50 74 72  ata = ReadIntPtr
238a0 28 61 70 44 61 74 61 2c 20 6f 66 66 73 65 74 29  (apData, offset)
238b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
238c0 20 20 20 20 20 72 65 73 75 6c 74 5b 69 6e 64 65       result[inde
238d0 78 5d 20 3d 20 28 70 44 61 74 61 20 21 3d 20 49  x] = (pData != I
238e0 6e 74 50 74 72 2e 5a 65 72 6f 29 20 3f 0d 0a 20  ntPtr.Zero) ?.. 
238f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23900 20 20 20 6e 65 77 20 53 51 4c 69 74 65 56 61 6c     new SQLiteVal
23910 75 65 28 70 44 61 74 61 29 20 3a 20 6e 75 6c 6c  ue(pData) : null
23920 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
23930 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23940 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
23950 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23960 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
239b0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
239c0 74 61 74 69 63 20 53 51 4c 69 74 65 56 61 6c 75  tatic SQLiteValu
239d0 65 5b 5d 20 56 61 6c 75 65 41 72 72 61 79 46 72  e[] ValueArrayFr
239e0 6f 6d 49 6e 74 50 74 72 41 72 72 61 79 28 0d 0a  omIntPtrArray(..
239f0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
23a00 74 72 5b 5d 20 76 61 6c 75 65 73 0d 0a 20 20 20  tr[] values..   
23a10 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
23a20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23a30 20 20 20 69 66 20 28 76 61 6c 75 65 73 20 3d 3d     if (values ==
23a40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23a50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
23a60 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
23a70 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b      SQLiteValue[
23a80 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  ] result = new S
23a90 51 4c 69 74 65 56 61 6c 75 65 5b 76 61 6c 75 65  QLiteValue[value
23aa0 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20  s.Length];....  
23ab0 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
23ac0 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e  nt index = 0; in
23ad0 64 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e  dex < result.Len
23ae0 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  gth; index++).. 
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23b00 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20 6e  esult[index] = n
23b10 65 77 20 53 51 4c 69 74 65 56 61 6c 75 65 28 76  ew SQLiteValue(v
23b20 61 6c 75 65 73 5b 69 6e 64 65 78 5d 29 3b 0d 0a  alues[index]);..
23b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
23b40 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
23b50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23b60 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
23b70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23bc0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
23bd0 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 20 48 65  n SQLiteIndex He
23be0 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
23bf0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
23c00 74 69 63 20 76 6f 69 64 20 49 6e 64 65 78 46 72  tic void IndexFr
23c10 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  omIntPtr(..     
23c20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 49         IntPtr pI
23c30 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndex,..         
23c40 20 20 20 72 65 66 20 53 51 4c 69 74 65 49 6e 64     ref SQLiteInd
23c50 65 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20  ex index..      
23c60 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
23c70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23c80 69 66 20 28 70 49 6e 64 65 78 20 3d 3d 20 49 6e  if (pIndex == In
23c90 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23cb0 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
23cc0 20 20 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20     int offset = 
23cd0 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
23ce0 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e    int nConstrain
23cf0 74 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49  t = ReadInt32(pI
23d00 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
23d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
23d20 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69  fset += sizeof(i
23d30 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
23d40 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 73      IntPtr pCons
23d50 74 72 61 69 6e 74 20 3d 20 52 65 61 64 49 6e 74  traint = ReadInt
23d60 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  Ptr(pIndex, offs
23d70 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
23d80 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e      offset += In
23d90 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20  tPtr.Size;....  
23da0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4f            int nO
23db0 72 64 65 72 42 79 20 3d 20 52 65 61 64 49 6e 74  rderBy = ReadInt
23dc0 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65  32(pIndex, offse
23dd0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
23de0 20 20 20 69 6e 64 65 78 20 3d 20 6e 65 77 20 53     index = new S
23df0 51 4c 69 74 65 49 6e 64 65 78 28 6e 43 6f 6e 73  QLiteIndex(nCons
23e00 74 72 61 69 6e 74 2c 20 6e 4f 72 64 65 72 42 79  traint, nOrderBy
23e10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23e20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a 65    offset += size
23e30 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  of(int);....    
23e40 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
23e50 4f 72 64 65 72 42 79 20 3d 20 52 65 61 64 49 6e  OrderBy = ReadIn
23e60 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66  tPtr(pIndex, off
23e70 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  set);....       
23e80 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49       offset += I
23e90 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20  ntPtr.Size;.... 
23ea0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
23eb0 72 20 70 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  r pConstraintUsa
23ec0 67 65 20 3d 20 52 65 61 64 49 6e 74 50 74 72 28  ge = ReadIntPtr(
23ed0 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b  pIndex, offset);
23ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23ef0 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72  offset += IntPtr
23f00 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Size;....      
23f10 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70        index.Outp
23f20 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65 72 20  uts.IndexNumber 
23f30 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64  = ReadInt32(pInd
23f40 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ex, offset);....
23f50 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
23f60 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74  et += sizeof(int
23f70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23f80 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e    index.Outputs.
23f90 49 6e 64 65 78 53 74 72 69 6e 67 20 3d 20 53 51  IndexString = SQ
23fa0 4c 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e  LiteString.Strin
23fb0 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28  gFromUtf8IntPtr(
23fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23fd0 20 20 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65    IntPtrForOffse
23fe0 74 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  t(pIndex, offset
23ff0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
24000 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74     offset += Int
24010 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20  Ptr.Size;....   
24020 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f           index.O
24030 75 74 70 75 74 73 2e 4e 65 65 64 54 6f 46 72 65  utputs.NeedToFre
24040 65 49 6e 64 65 78 53 74 72 69 6e 67 20 3d 20 52  eIndexString = R
24050 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c  eadInt32(pIndex,
24060 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
24070 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
24080 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d  += sizeof(int);.
24090 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
240a0 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 4f 72 64  ndex.Outputs.Ord
240b0 65 72 42 79 43 6f 6e 73 75 6d 65 64 20 3d 20 52  erByConsumed = R
240c0 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c  eadInt32(pIndex,
240d0 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
240e0 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
240f0 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d  += sizeof(int);.
24100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
24110 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 45 73 74  ndex.Outputs.Est
24120 69 6d 61 74 65 64 43 6f 73 74 20 3d 20 52 65 61  imatedCost = Rea
24130 64 44 6f 75 62 6c 65 28 70 49 6e 64 65 78 2c 20  dDouble(pIndex, 
24140 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20  offset);....    
24150 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65          int size
24160 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54 79 70 65  OfConstraintType
24170 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f   = Marshal.SizeO
24180 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20  f(typeof(..     
24190 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
241a0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
241b0 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
241c0 73 74 72 61 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20  straint));....  
241d0 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
241e0 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d  nt iConstraint =
241f0 20 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 20   0; iConstraint 
24200 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69  < nConstraint; i
24210 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20  Constraint++).. 
24220 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
24240 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
24250 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
24260 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73 74  constraint const
24270 72 61 69 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20  raint =..       
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
24290 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
242a0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
242b0 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 28 29 3b  ex_constraint();
242c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
242d0 20 20 20 20 4d 61 72 73 68 61 6c 2e 50 74 72 54      Marshal.PtrT
242e0 6f 53 74 72 75 63 74 75 72 65 28 49 6e 74 50 74  oStructure(IntPt
242f0 72 46 6f 72 4f 66 66 73 65 74 28 70 43 6f 6e 73  rForOffset(pCons
24300 74 72 61 69 6e 74 2c 0d 0a 20 20 20 20 20 20 20  traint,..       
24310 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43 6f               iCo
24320 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a 65 4f  nstraint * sizeO
24330 66 43 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 29  fConstraintType)
24340 2c 20 63 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a  , constraint);..
24350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24360 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43    index.Inputs.C
24370 6f 6e 73 74 72 61 69 6e 74 73 5b 69 43 6f 6e 73  onstraints[iCons
24380 74 72 61 69 6e 74 5d 20 3d 0d 0a 20 20 20 20 20  traint] =..     
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
243a0 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  ew SQLiteIndexCo
243b0 6e 73 74 72 61 69 6e 74 28 63 6f 6e 73 74 72 61  nstraint(constra
243c0 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  int);..         
243d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
243e0 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 4f 72      int sizeOfOr
243f0 64 65 72 42 79 54 79 70 65 20 3d 20 4d 61 72 73  derByType = Mars
24400 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f  hal.SizeOf(typeo
24410 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f(..            
24420 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
24430 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
24440 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 29 29 3b  index_orderby));
24450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24460 66 6f 72 20 28 69 6e 74 20 69 4f 72 64 65 72 42  for (int iOrderB
24470 79 20 3d 20 30 3b 20 69 4f 72 64 65 72 42 79 20  y = 0; iOrderBy 
24480 3c 20 6e 4f 72 64 65 72 42 79 3b 20 69 4f 72 64  < nOrderBy; iOrd
24490 65 72 42 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20  erBy++)..       
244a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
244b0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
244c0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
244d0 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62  te3_index_orderb
244e0 79 20 6f 72 64 65 72 42 79 20 3d 0d 0a 20 20 20  y orderBy =..   
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24500 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
24510 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
24520 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 28 29  _index_orderby()
24530 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24540 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 50 74 72       Marshal.Ptr
24550 54 6f 53 74 72 75 63 74 75 72 65 28 49 6e 74 50  ToStructure(IntP
24560 74 72 46 6f 72 4f 66 66 73 65 74 28 70 4f 72 64  trForOffset(pOrd
24570 65 72 42 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  erBy,..         
24580 20 20 20 20 20 20 20 20 20 20 20 69 4f 72 64 65             iOrde
24590 72 42 79 20 2a 20 73 69 7a 65 4f 66 4f 72 64 65  rBy * sizeOfOrde
245a0 72 42 79 54 79 70 65 29 2c 20 6f 72 64 65 72 42  rByType), orderB
245b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
245c0 20 20 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70         index.Inp
245d0 75 74 73 2e 4f 72 64 65 72 42 79 73 5b 69 4f 72  uts.OrderBys[iOr
245e0 64 65 72 42 79 5d 20 3d 0d 0a 20 20 20 20 20 20  derBy] =..      
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
24600 77 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  w SQLiteIndexOrd
24610 65 72 42 79 28 6f 72 64 65 72 42 79 29 3b 0d 0a  erBy(orderBy);..
24620 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24630 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
24640 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e   sizeOfConstrain
24650 74 55 73 61 67 65 54 79 70 65 20 3d 20 4d 61 72  tUsageType = Mar
24660 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65  shal.SizeOf(type
24670 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  of(..           
24680 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
24690 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
246a0 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
246b0 74 5f 75 73 61 67 65 29 29 3b 0d 0a 0d 0a 20 20  t_usage));....  
246c0 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
246d0 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d  nt iConstraint =
246e0 20 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 20   0; iConstraint 
246f0 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69  < nConstraint; i
24700 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20  Constraint++).. 
24710 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
24730 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
24740 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
24750 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65  constraint_usage
24760 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65   constraintUsage
24770 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
24780 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73 61          new Unsa
24790 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
247a0 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
247b0 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 28 29  nstraint_usage()
247c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
247d0 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 50 74 72       Marshal.Ptr
247e0 54 6f 53 74 72 75 63 74 75 72 65 28 49 6e 74 50  ToStructure(IntP
247f0 74 72 46 6f 72 4f 66 66 73 65 74 28 70 43 6f 6e  trForOffset(pCon
24800 73 74 72 61 69 6e 74 55 73 61 67 65 2c 0d 0a 20  straintUsage,.. 
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24820 20 20 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 2a     iConstraint *
24830 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e   sizeOfConstrain
24840 74 55 73 61 67 65 54 79 70 65 29 2c 20 63 6f 6e  tUsageType), con
24850 73 74 72 61 69 6e 74 55 73 61 67 65 29 3b 0d 0a  straintUsage);..
24860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24870 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e    index.Outputs.
24880 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
24890 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20 3d 0d  [iConstraint] =.
248a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
248b0 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 49       new SQLiteI
248c0 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73  ndexConstraintUs
248d0 61 67 65 28 63 6f 6e 73 74 72 61 69 6e 74 55 73  age(constraintUs
248e0 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  age);..         
248f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
24900 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24950 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
24960 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
24970 20 49 6e 64 65 78 54 6f 49 6e 74 50 74 72 28 0d   IndexToIntPtr(.
24980 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
24990 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 2c 0d  iteIndex index,.
249a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
249b0 50 74 72 20 70 49 6e 64 65 78 0d 0a 20 20 20 20  Ptr pIndex..    
249c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
249d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
249e0 20 20 69 66 20 28 28 69 6e 64 65 78 20 3d 3d 20    if ((index == 
249f0 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e 64 65 78 2e  null) || (index.
24a00 49 6e 70 75 74 73 20 3d 3d 20 6e 75 6c 6c 29 20  Inputs == null) 
24a10 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
24a20 20 20 20 20 28 69 6e 64 65 78 2e 49 6e 70 75 74      (index.Input
24a30 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 20 3d 3d  s.Constraints ==
24a40 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20   null) ||..     
24a50 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 64 65             (inde
24a60 78 2e 49 6e 70 75 74 73 2e 4f 72 64 65 72 42 79  x.Inputs.OrderBy
24a70 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 69  s == null) || (i
24a80 6e 64 65 78 2e 4f 75 74 70 75 74 73 20 3d 3d 20  ndex.Outputs == 
24a90 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20  null) ||..      
24aa0 20 20 20 20 20 20 20 20 20 20 28 69 6e 64 65 78            (index
24ab0 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61  .Outputs.Constra
24ac0 69 6e 74 55 73 61 67 65 73 20 3d 3d 20 6e 75 6c  intUsages == nul
24ad0 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
24ae0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24af0 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
24b00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
24b10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 49            if (pI
24b20 6e 64 65 78 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ndex == IntPtr.Z
24b30 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
24b40 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
24b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
24b60 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a   offset = 0;....
24b70 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
24b80 6e 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 52 65  nConstraint = Re
24b90 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20  adInt32(pIndex, 
24ba0 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20  offset);....    
24bb0 20 20 20 20 20 20 20 20 69 66 20 28 6e 43 6f 6e          if (nCon
24bc0 73 74 72 61 69 6e 74 20 21 3d 20 69 6e 64 65 78  straint != index
24bd0 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69  .Inputs.Constrai
24be0 6e 74 73 2e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nts.Length)..   
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
24c00 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
24c10 20 20 20 20 69 66 20 28 6e 43 6f 6e 73 74 72 61      if (nConstra
24c20 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e 4f 75 74  int != index.Out
24c30 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
24c40 73 61 67 65 73 2e 4c 65 6e 67 74 68 29 0d 0a 20  sages.Length).. 
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24c60 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
24c70 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
24c80 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a  sizeof(int);....
24c90 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
24ca0 74 72 20 70 43 6f 6e 73 74 72 61 69 6e 74 20 3d  tr pConstraint =
24cb0 20 52 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64   ReadIntPtr(pInd
24cc0 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ex, offset);....
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
24ce0 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a  et += IntPtr.Siz
24cf0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
24d00 20 20 69 6e 74 20 6e 4f 72 64 65 72 42 79 20 3d    int nOrderBy =
24d10 20 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65   ReadInt32(pInde
24d20 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20  x, offset);.... 
24d30 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65             offse
24d40 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29  t += sizeof(int)
24d50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24d60 20 49 6e 74 50 74 72 20 70 4f 72 64 65 72 42 79   IntPtr pOrderBy
24d70 20 3d 20 52 65 61 64 49 6e 74 50 74 72 28 70 49   = ReadIntPtr(pI
24d80 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
24d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
24da0 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53  fset += IntPtr.S
24db0 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ize;....        
24dc0 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 73      IntPtr pCons
24dd0 74 72 61 69 6e 74 55 73 61 67 65 20 3d 20 52 65  traintUsage = Re
24de0 61 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c  adIntPtr(pIndex,
24df0 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
24e00 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a           int siz
24e10 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54 79 70  eOfConstraintTyp
24e20 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65  e = Marshal.Size
24e30 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20  Of(typeof(..    
24e40 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
24e50 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
24e60 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
24e70 6e 73 74 72 61 69 6e 74 29 29 3b 0d 0a 0d 0a 20  nstraint));.... 
24e80 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
24e90 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20  int iConstraint 
24ea0 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74  = 0; iConstraint
24eb0 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20   < nConstraint; 
24ec0 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d 0a  iConstraint++)..
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
24ef0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
24f00 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
24f10 5f 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73  _constraint cons
24f20 74 72 61 69 6e 74 20 3d 0d 0a 20 20 20 20 20 20  traint =..      
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
24f40 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
24f50 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
24f60 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 28 0d  dex_constraint(.
24f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24f80 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 49           index.I
24f90 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  nputs.Constraint
24fa0 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 29 3b  s[iConstraint]);
24fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24fc0 20 20 20 20 4d 61 72 73 68 61 6c 2e 53 74 72 75      Marshal.Stru
24fd0 63 74 75 72 65 54 6f 50 74 72 28 0d 0a 20 20 20  ctureToPtr(..   
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ff0 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 49 6e 74   constraint, Int
25000 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 43 6f  PtrForOffset(pCo
25010 6e 73 74 72 61 69 6e 74 2c 0d 0a 20 20 20 20 20  nstraint,..     
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25030 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a  Constraint * siz
25040 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54 79 70  eOfConstraintTyp
25050 65 29 2c 20 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20  e), false);.... 
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25070 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73  ndex.Inputs.Cons
25080 74 72 61 69 6e 74 73 5b 69 43 6f 6e 73 74 72 61  traints[iConstra
25090 69 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20  int] =..        
250a0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
250b0 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
250c0 72 61 69 6e 74 28 63 6f 6e 73 74 72 61 69 6e 74  raint(constraint
250d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
250e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
250f0 20 69 6e 74 20 73 69 7a 65 4f 66 4f 72 64 65 72   int sizeOfOrder
25100 42 79 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c  ByType = Marshal
25110 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d  .SizeOf(typeof(.
25120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25130 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
25140 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
25150 65 78 5f 6f 72 64 65 72 62 79 29 29 3b 0d 0a 0d  ex_orderby));...
25160 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
25170 20 28 69 6e 74 20 69 4f 72 64 65 72 42 79 20 3d   (int iOrderBy =
25180 20 30 3b 20 69 4f 72 64 65 72 42 79 20 3c 20 6e   0; iOrderBy < n
25190 4f 72 64 65 72 42 79 3b 20 69 4f 72 64 65 72 42  OrderBy; iOrderB
251a0 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  y++)..          
251b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
251c0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
251d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
251e0 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f  _index_orderby o
251f0 72 64 65 72 42 79 20 3d 0d 0a 20 20 20 20 20 20  rderBy =..      
25200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
25210 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
25220 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
25230 64 65 78 5f 6f 72 64 65 72 62 79 28 0d 0a 20 20  dex_orderby(..  
25240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25250 20 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75        index.Inpu
25260 74 73 2e 4f 72 64 65 72 42 79 73 5b 69 4f 72 64  ts.OrderBys[iOrd
25270 65 72 42 79 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20  erBy]);....     
25280 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
25290 61 6c 2e 53 74 72 75 63 74 75 72 65 54 6f 50 74  al.StructureToPt
252a0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
252b0 20 20 20 20 20 20 20 20 6f 72 64 65 72 42 79 2c          orderBy,
252c0 20 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74   IntPtrForOffset
252d0 28 70 4f 72 64 65 72 42 79 2c 0d 0a 20 20 20 20  (pOrderBy,..    
252e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252f0 69 4f 72 64 65 72 42 79 20 2a 20 73 69 7a 65 4f  iOrderBy * sizeO
25300 66 4f 72 64 65 72 42 79 54 79 70 65 29 2c 20 66  fOrderByType), f
25310 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alse);....      
25320 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e            index.
25330 49 6e 70 75 74 73 2e 4f 72 64 65 72 42 79 73 5b  Inputs.OrderBys[
25340 69 4f 72 64 65 72 42 79 5d 20 3d 0d 0a 20 20 20  iOrderBy] =..   
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
25370 4f 72 64 65 72 42 79 28 6f 72 64 65 72 42 79 29  OrderBy(orderBy)
25380 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25390 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
253a0 69 6e 74 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72  int sizeOfConstr
253b0 61 69 6e 74 55 73 61 67 65 54 79 70 65 20 3d 20  aintUsageType = 
253c0 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74  Marshal.SizeOf(t
253d0 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20  ypeof(..        
253e0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
253f0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
25400 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
25410 61 69 6e 74 5f 75 73 61 67 65 29 29 3b 0d 0a 0d  aint_usage));...
25420 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
25430 20 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e   (int iConstrain
25440 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61 69  t = 0; iConstrai
25450 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74  nt < nConstraint
25460 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29  ; iConstraint++)
25470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25490 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
254a0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
254b0 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73  ex_constraint_us
254c0 61 67 65 20 63 6f 6e 73 74 72 61 69 6e 74 55 73  age constraintUs
254d0 61 67 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  age =..         
254e0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 55             new U
254f0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
25500 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
25510 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67  _constraint_usag
25520 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
25530 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
25540 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72  x.Outputs.Constr
25550 61 69 6e 74 55 73 61 67 65 73 5b 69 43 6f 6e 73  aintUsages[iCons
25560 74 72 61 69 6e 74 5d 29 3b 0d 0a 0d 0a 20 20 20  traint]);....   
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72               Mar
25580 73 68 61 6c 2e 53 74 72 75 63 74 75 72 65 54 6f  shal.StructureTo
25590 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
255a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 72            constr
255b0 61 69 6e 74 55 73 61 67 65 2c 20 49 6e 74 50 74  aintUsage, IntPt
255c0 72 46 6f 72 4f 66 66 73 65 74 28 70 43 6f 6e 73  rForOffset(pCons
255d0 74 72 61 69 6e 74 55 73 61 67 65 2c 0d 0a 20 20  traintUsage,..  
255e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255f0 20 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20    iConstraint * 
25600 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74  sizeOfConstraint
25610 55 73 61 67 65 54 79 70 65 29 2c 20 66 61 6c 73  UsageType), fals
25620 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
25630 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74         index.Out
25640 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
25650 73 61 67 65 73 5b 69 43 6f 6e 73 74 72 61 69 6e  sages[iConstrain
25660 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  t] =..          
25670 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
25680 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
25690 69 6e 74 55 73 61 67 65 28 63 6f 6e 73 74 72 61  intUsage(constra
256a0 69 6e 74 55 73 61 67 65 29 3b 0d 0a 20 20 20 20  intUsage);..    
256b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
256c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
256d0 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d  ndregion..    }.
256e0 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
256f0 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
25700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
25750 6e 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 42  n SQLiteModule B
25760 61 73 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 70  ase Class..    p
25770 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 63  ublic abstract c
25780 6c 61 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c  lass SQLiteModul
25790 65 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e :..           
257a0 20 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d   ISQLiteManagedM
257b0 6f 64 75 6c 65 2c 20 2f 2a 49 53 51 4c 69 74 65  odule, /*ISQLite
257c0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2c 2a 2f 0d  NativeModule,*/.
257d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 44 69  .            IDi
257e0 73 70 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20  sposable /* NOT 
257f0 53 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b  SEALED */..    {
25800 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
25810 6e 20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  n SQLiteNativeMo
25820 64 75 6c 65 20 50 72 69 76 61 74 65 20 43 6c 61  dule Private Cla
25830 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
25840 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
25850 20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64   SQLiteNativeMod
25860 75 6c 65 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  ule :..         
25870 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61         ISQLiteNa
25880 74 69 76 65 4d 6f 64 75 6c 65 2c 20 49 44 69 73  tiveModule, IDis
25890 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  posable..       
258a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
258b0 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
258c0 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
258d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
258e0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
258f0 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68    /// This is th
25900 65 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  e value that is 
25910 61 6c 77 61 79 73 20 75 73 65 64 20 66 6f 72 20  always used for 
25920 74 68 65 20 22 6c 6f 67 45 72 72 6f 72 73 22 0d  the "logErrors".
25930 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
25940 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68   parameter to th
25950 65 20 76 61 72 69 6f 75 73 20 73 74 61 74 69 63  e various static
25960 20 65 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20   error handling 
25970 6d 65 74 68 6f 64 73 20 70 72 6f 76 69 64 65 64  methods provided
25980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25990 2f 20 62 79 20 74 68 65 20 3c 73 65 65 20 63 72  / by the <see cr
259a0 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
259b0 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20  " /> class...   
259c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
259d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
259e0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
259f0 73 74 20 62 6f 6f 6c 20 44 65 66 61 75 6c 74 4c  st bool DefaultL
25a00 6f 67 45 72 72 6f 72 73 20 3d 20 74 72 75 65 3b  ogErrors = true;
25a10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
25a70 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
25a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25a90 2f 20 54 68 69 73 20 69 73 20 74 68 65 20 65 72  / This is the er
25aa0 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65 78 74  ror message text
25ab0 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 63   used when the c
25ac0 6f 6e 74 61 69 6e 65 64 0d 0a 20 20 20 20 20 20  ontained..      
25ad0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
25ae0 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c  ref="SQLiteModul
25af0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
25b00 74 61 6e 63 65 20 69 73 20 6e 6f 74 20 61 76 61  tance is not ava
25b10 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  ilable..        
25b20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 61 6e 79 20      /// for any 
25b30 72 65 61 73 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  reason...       
25b40 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
25b50 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
25b60 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
25b70 74 72 69 6e 67 20 4d 6f 64 75 6c 65 4e 6f 74 41  tring ModuleNotA
25b80 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73  vailableErrorMes
25b90 73 61 67 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  sage =..        
25ba0 20 20 20 20 20 20 20 20 22 6e 61 74 69 76 65 20          "native 
25bb0 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
25bc0 61 74 69 6f 6e 20 6e 6f 74 20 61 76 61 69 6c 61  ation not availa
25bd0 62 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble";..         
25be0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
25bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
25c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25c50 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
25c60 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
25c70 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
25c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
25c90 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
25ca0 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e  SQLiteModule" />
25cb0 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
25cc0 20 75 73 65 64 20 74 6f 20 70 72 6f 76 69 64 65   used to provide
25cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25ce0 2f 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  / an implementat
25cf0 69 6f 6e 20 6f 66 20 74 68 65 20 3c 73 65 65 20  ion of the <see 
25d00 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
25d10 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20  iveModule" />.. 
25d20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 69             /// i
25d30 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 20  nterface...     
25d40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
25d50 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
25d60 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
25d70 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 3b 0d  eModule module;.
25d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
25d90 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
25da0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25df0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
25e00 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
25e10 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
25e20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
25e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25e40 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
25e50 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
25e60 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20   class...       
25e70 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
25e80 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
25e90 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
25ea0 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
25eb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
25ec0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
25ed0 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65  eModule" /> obje
25ee0 63 74 20 69 6e 73 74 61 6e 63 65 20 75 73 65 64  ct instance used
25ef0 20 74 6f 20 70 72 6f 76 69 64 65 0d 0a 20 20 20   to provide..   
25f00 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 20           /// an 
25f10 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
25f20 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  f the <see cref=
25f30 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
25f40 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20  dule" />..      
25f50 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66        /// interf
25f60 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ace...          
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 20 20 20 20 70 75 62 6c              publ
25f90 69 63 20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ic SQLiteNativeM
25fa0 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  odule(..        
25fb0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f          SQLiteMo
25fc0 64 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20 20 20  dule module..   
25fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
25fe0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26000 68 69 73 2e 6d 6f 64 75 6c 65 20 3d 20 6d 6f 64  his.module = mod
26010 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ule;..          
26020 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26030 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
26040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
26050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
260a0 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74  egion Private St
260b0 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
260c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
260d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
260e0 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
260f0 65 20 74 61 62 6c 65 20 65 72 72 6f 72 20 6d 65  e table error me
26100 73 73 61 67 65 20 74 6f 20 6f 6e 65 20 74 68 61  ssage to one tha
26110 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  t indicates the 
26120 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
26130 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 69      /// module i
26140 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
26150 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2e 0d   not available..
26160 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
26170 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
26180 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
26190 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
261a0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
261b0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
261c0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
261d0 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
261e0 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
261f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
26200 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
26210 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
26220 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
26230 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  // The value of 
26240 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
26250 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
26260 22 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  "/>...          
26270 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
26280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
26290 69 76 61 74 65 20 73 74 61 74 69 63 20 53 51 4c  ivate static SQL
262a0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4d 6f 64  iteErrorCode Mod
262b0 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54  uleNotAvailableT
262c0 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20 20 20 20  ableError(..    
262d0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
262e0 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
262f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
26300 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26310 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54              SetT
26320 61 62 6c 65 45 72 72 6f 72 28 6e 75 6c 6c 2c 20  ableError(null, 
26330 70 56 74 61 62 2c 20 44 65 66 61 75 6c 74 4c 6f  pVtab, DefaultLo
26340 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20  gErrors,..      
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
26360 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
26370 45 72 72 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a  ErrorMessage);..
26380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26390 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
263a0 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
263b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
263c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
263d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26410 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
26420 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
26430 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
26440 53 65 74 73 20 74 68 65 20 74 61 62 6c 65 20 65  Sets the table e
26450 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f 20  rror message to 
26460 6f 6e 65 20 74 68 61 74 20 69 6e 64 69 63 61 74  one that indicat
26470 65 73 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20  es the native.. 
26480 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d             /// m
26490 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
264a0 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 76 61 69  tion is not avai
264b0 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  lable...        
264c0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
264d0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
264e0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
264f0 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
26500 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
26510 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
26520 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
26530 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65  ab_cursor derive
26540 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  d..            /
26550 2f 2f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  // structure... 
26560 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
26570 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
26580 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
26590 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
265a0 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 6f 66  /// The value of
265b0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
265c0 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
265d0 72 22 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 20  r"/>...         
265e0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
265f0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
26600 72 69 76 61 74 65 20 73 74 61 74 69 63 20 53 51  rivate static SQ
26610 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4d 6f  LiteErrorCode Mo
26620 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
26630 43 75 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20 20  CursorError(..  
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
26650 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20  tPtr pCursor..  
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
26670 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
26680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26690 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72 28 6e  SetCursorError(n
266a0 75 6c 6c 2c 20 70 43 75 72 73 6f 72 2c 20 44 65  ull, pCursor, De
266b0 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72 73 2c 0d  faultLogErrors,.
266c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
266d0 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76       ModuleNotAv
266e0 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73 73  ailableErrorMess
266f0 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  age);....       
26700 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26710 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
26720 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
26730 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
26740 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
26750 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
26760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
267b0 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e  #region ISQLiteN
267c0 61 74 69 76 65 4d 6f 64 75 6c 65 20 4d 65 6d 62  ativeModule Memb
267d0 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
267e0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
267f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
26800 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
26810 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
26820 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20  Module.xCreate" 
26830 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
26840 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
26850 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
26860 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
26870 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20  ame="pDb">..    
26880 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
26890 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
268a0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
268b0 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d  le.xCreate" /> m
268c0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
268d0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
268e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
268f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
26900 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  Aux">..         
26910 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
26920 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
26930 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
26940 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
26950 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
26960 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
26970 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
26980 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
26990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
269a0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
269b0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
269c0 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
269d0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
269e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
269f0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
26a00 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
26a10 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20  ame="argv">..   
26a20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
26a30 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
26a40 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
26a50 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
26a60 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
26a70 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
26a80 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
26a90 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
26aa0 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
26ab0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
26ac0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
26ad0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
26ae0 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68  xCreate" /> meth
26af0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
26b00 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
26b10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
26b20 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45 72 72  param name="pErr
26b30 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  or">..          
26b40 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
26b50 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
26b60 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
26b70 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  eate" /> method.
26b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26b90 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
26ba0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
26bb0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
26bc0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
26bd0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
26be0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
26bf0 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
26c00 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
26c10 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
26c20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
26c30 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
26c40 65 20 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20  e xCreate(..    
26c50 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
26c60 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20  tr pDb,..       
26c70 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
26c80 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  pAux,..         
26c90 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c         int argc,
26ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26cb0 20 20 49 6e 74 50 74 72 5b 5d 20 61 72 67 76 2c    IntPtr[] argv,
26cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26cd0 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 56 74    ref IntPtr pVt
26ce0 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
26cf0 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
26d00 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20  pError..        
26d10 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
26d20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26d30 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
26d40 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
26d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26d60 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
26d70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
26d80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72               pEr
26da0 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69  ror = SQLiteStri
26db0 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f  ng.Utf8IntPtrFro
26dc0 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  mString(..      
26dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26de0 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c    ModuleNotAvail
26df0 61 62 6c 65 45 72 72 6f 72 4d 65 73 73 61 67 65  ableErrorMessage
26e00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26e10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26e20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
26e30 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
26e40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
26e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26e60 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 72 65  turn module.xCre
26e70 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
26e80 20 20 20 20 20 20 20 20 20 20 70 44 62 2c 20 70            pDb, p
26e90 41 75 78 2c 20 61 72 67 63 2c 20 61 72 67 76 2c  Aux, argc, argv,
26ea0 20 72 65 66 20 70 56 74 61 62 2c 20 72 65 66 20   ref pVtab, ref 
26eb0 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20  pError);..      
26ec0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26ed0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26f20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
26f30 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
26f40 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
26f50 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
26f60 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
26f70 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  xConnect" /> met
26f80 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
26f90 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
26fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26fb0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
26fc0 44 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  Db">..          
26fd0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
26fe0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
26ff0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
27000 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
27010 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
27020 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
27030 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
27040 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22 3e  ram name="pAux">
27050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27060 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
27070 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
27080 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
27090 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
270a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
270b0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
270c0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
270d0 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20  name="argc">..  
270e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
270f0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
27100 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
27110 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
27120 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
27130 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
27140 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
27150 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
27160 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20  ="argv">..      
27170 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
27180 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
27190 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
271a0 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  .xConnect" /> me
271b0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
271c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
271d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
271e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
271f0 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  tab">..         
27200 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
27210 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
27220 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
27230 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
27240 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
27250 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
27260 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
27270 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45 72 72 6f  aram name="pErro
27280 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r">..           
27290 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
272a0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
272b0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
272c0 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
272d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
272e0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
272f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
27300 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
27310 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
27320 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
27330 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
27340 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
27350 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
27360 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
27370 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
27380 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
27390 64 65 20 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20  de xConnect(..  
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
273b0 74 50 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20  tPtr pDb,..     
273c0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
273d0 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20  r pAux,..       
273e0 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
273f0 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
27400 20 20 20 20 49 6e 74 50 74 72 5b 5d 20 61 72 67      IntPtr[] arg
27410 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  v,..            
27420 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
27430 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
27440 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
27450 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20  r pError..      
27460 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
27470 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
27490 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
274a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
274b0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
274c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
274d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
274e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
274f0 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74  Error = SQLiteSt
27500 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
27510 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20  romString(..    
27520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27530 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61      ModuleNotAva
27540 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73 73 61  ilableErrorMessa
27550 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ge);....        
27560 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27570 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
27580 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
27590 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
275a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275b0 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43  return module.xC
275c0 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
275d0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62               pDb
275e0 2c 20 70 41 75 78 2c 20 61 72 67 63 2c 20 61 72  , pAux, argc, ar
275f0 67 76 2c 20 72 65 66 20 70 56 74 61 62 2c 20 72  gv, ref pVtab, r
27600 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20  ef pError);..   
27610 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27620 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
27630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27670 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27680 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
27690 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
276a0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
276b0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
276c0 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 22 20 2f  le.xBestIndex" /
276d0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
276e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
276f0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
27700 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
27710 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
27720 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
27730 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
27740 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
27750 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 22 20  ule.xBestIndex" 
27760 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
27770 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
27780 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
27790 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
277a0 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20  e="pIndex">..   
277b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
277c0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
277d0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
277e0 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 22 20  ule.xBestIndex" 
277f0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
27800 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
27810 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
27820 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
27830 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27840 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
27850 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
27860 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64  eModule.xBestInd
27870 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  ex" /> method...
27880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
27890 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
278a0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
278b0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
278c0 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20  BestIndex(..    
278d0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
278e0 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
278f0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
27900 72 20 70 49 6e 64 65 78 0d 0a 20 20 20 20 20 20  r pIndex..      
27910 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
27920 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
27940 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
27950 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27960 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
27970 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
27980 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27990 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
279a0 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
279b0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
279c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
279d0 6e 20 6d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e  n module.xBestIn
279e0 64 65 78 28 70 56 74 61 62 2c 20 70 49 6e 64 65  dex(pVtab, pInde
279f0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x);..           
27a00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27a10 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
27a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27a60 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
27a70 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
27a80 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
27a90 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
27aa0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63  tiveModule.xDisc
27ab0 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
27ac0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
27ad0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
27ae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
27af0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
27b00 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ab">..          
27b10 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
27b20 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
27b30 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69  NativeModule.xDi
27b40 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  sconnect" /> met
27b50 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
27b60 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
27b70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
27b80 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
27b90 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
27ba0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
27bb0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
27bc0 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f  e.xDisconnect" /
27bd0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
27be0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
27bf0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
27c00 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
27c10 45 72 72 6f 72 43 6f 64 65 20 78 44 69 73 63 6f  ErrorCode xDisco
27c20 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
27c30 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
27c40 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
27c50 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
27c60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27c70 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
27c80 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
27c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27ca0 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
27cb0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
27cc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
27cd0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
27ce0 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
27cf0 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
27d00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
27d10 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74  dule.xDisconnect
27d20 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20  (pVtab);..      
27d30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27d40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
27d90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
27da0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
27db0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
27dc0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
27dd0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
27de0 78 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65 74  xDestroy" /> met
27df0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
27e00 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
27e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27e20 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
27e30 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
27e40 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
27e50 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
27e60 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
27e70 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65 74 68  Destroy" /> meth
27e80 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
27e90 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
27ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
27eb0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
27ec0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
27ed0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
27ee0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
27ef0 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65  .xDestroy" /> me
27f00 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
27f10 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
27f20 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
27f30 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
27f40 72 43 6f 64 65 20 78 44 65 73 74 72 6f 79 28 0d  rCode xDestroy(.
27f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27f60 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
27f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
27f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27fa0 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65   // CheckDispose
27fb0 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
27fc0 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
27fd0 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
27fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ff0 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f   return ModuleNo
28000 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45  tAvailableTableE
28010 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a  rror(pVtab);....
28020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28030 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 44  return module.xD
28040 65 73 74 72 6f 79 28 70 56 74 61 62 29 3b 0d 0a  estroy(pVtab);..
28050 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28060 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
280c0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
280d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
280e0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
280f0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
28100 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20  odule.xOpen" /> 
28110 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
28120 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
28130 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
28140 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
28150 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
28160 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
28170 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
28180 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
28190 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68  e.xOpen" /> meth
281a0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
281b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
281c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
281d0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
281e0 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  sor">..         
281f0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
28200 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
28210 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f  eNativeModule.xO
28220 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  pen" /> method..
28230 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28240 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
28250 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
28260 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
28270 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
28280 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
28290 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70  NativeModule.xOp
282a0 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  en" /> method...
282b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
282c0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
282d0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
282e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
282f0 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  Open(..         
28300 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
28310 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
28320 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
28330 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20   pCursor..      
28340 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
28350 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
28370 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
28380 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28390 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
283a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
283b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
283c0 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
283d0 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
283e0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
283f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28400 6e 20 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 28 70  n module.xOpen(p
28410 56 74 61 62 2c 20 72 65 66 20 70 43 75 72 73 6f  Vtab, ref pCurso
28420 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
28430 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28440 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28480 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
28490 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
284a0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
284b0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
284c0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
284d0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73  tiveModule.xClos
284e0 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
284f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28500 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
28510 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
28520 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
28530 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28540 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
28550 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
28560 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  iveModule.xClose
28570 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
28580 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
28590 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
285a0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
285b0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
285c0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
285d0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
285e0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  iveModule.xClose
285f0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
28600 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
28610 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
28620 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
28630 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6c  iteErrorCode xCl
28640 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ose(..          
28650 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
28660 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
28670 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
28680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28690 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
286a0 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
286b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
286c0 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
286d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
286e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
286f0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
28700 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75  eCursorError(pCu
28710 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsor);....      
28720 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28730 20 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 28 70   module.xClose(p
28740 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20  Cursor);..      
28750 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28760 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
287b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
287c0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
287d0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
287e0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
287f0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
28800 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68  xFilter" /> meth
28810 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
28820 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
28830 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28840 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
28850 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
28860 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
28870 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
28880 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
28890 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68  xFilter" /> meth
288a0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
288b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
288c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
288d0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78 4e  param name="idxN
288e0 75 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  um">..          
288f0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
28900 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
28910 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
28920 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
28930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28940 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
28950 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
28960 61 6d 20 6e 61 6d 65 3d 22 69 64 78 53 74 72 22  am name="idxStr"
28970 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28980 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
28990 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
289a0 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65  iveModule.xFilte
289b0 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  r" /> method... 
289c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
289d0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
289e0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
289f0 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20  name="argc">..  
28a00 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
28a10 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
28a20 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
28a30 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e  dule.xFilter" />
28a40 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
28a50 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
28a60 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
28a70 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
28a80 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20  "argv">..       
28a90 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
28aa0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
28ab0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
28ac0 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68  xFilter" /> meth
28ad0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
28ae0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
28af0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28b00 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
28b10 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
28b20 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
28b30 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
28b40 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74  .xFilter" /> met
28b50 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
28b60 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
28b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
28b80 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
28b90 43 6f 64 65 20 78 46 69 6c 74 65 72 28 0d 0a 20  Code xFilter(.. 
28ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
28bb0 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a  ntPtr pCursor,..
28bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bd0 69 6e 74 20 69 64 78 4e 75 6d 2c 0d 0a 20 20 20  int idxNum,..   
28be0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
28bf0 50 74 72 20 69 64 78 53 74 72 2c 0d 0a 20 20 20  Ptr idxStr,..   
28c00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
28c10 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
28c20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d          IntPtr[]
28c30 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 20   argv..         
28c40 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
28c50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28c60 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
28c70 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
28c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c90 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
28ca0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28cb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28cc0 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
28cd0 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43  leCursorError(pC
28ce0 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ursor);....     
28cf0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28d00 6e 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72  n module.xFilter
28d10 28 70 43 75 72 73 6f 72 2c 20 69 64 78 4e 75 6d  (pCursor, idxNum
28d20 2c 20 69 64 78 53 74 72 2c 20 61 72 67 63 2c 20  , idxStr, argc, 
28d30 61 72 67 76 29 3b 0d 0a 20 20 20 20 20 20 20 20  argv);..        
28d40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28d50 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
28d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28da0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
28db0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
28dc0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
28dd0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
28de0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e  eNativeModule.xN
28df0 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ext" /> method..
28e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28e10 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
28e20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
28e30 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
28e40 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r">..           
28e50 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
28e60 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
28e70 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78  ativeModule.xNex
28e80 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
28e90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28ea0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
28eb0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
28ec0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
28ed0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
28ee0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
28ef0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74  tiveModule.xNext
28f00 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
28f10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
28f20 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
28f30 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
28f40 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4e 65  iteErrorCode xNe
28f50 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt(..           
28f60 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
28f70 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
28f80 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
28f90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28fa0 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
28fb0 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
28fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
28fd0 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
28fe0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28ff0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
29000 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
29010 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75 72  CursorError(pCur
29020 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sor);....       
29030 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29040 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 28 70 43 75  module.xNext(pCu
29050 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rsor);..        
29060 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29070 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
290c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
290d0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
290e0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
290f0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
29100 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45  eNativeModule.xE
29110 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  of" /> method...
29120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29130 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
29140 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
29150 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
29160 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
29170 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29180 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29190 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22  tiveModule.xEof"
291a0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
291b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
291c0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
291d0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
291e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
291f0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
29200 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
29210 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22 20 2f  veModule.xEof" /
29220 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
29230 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
29240 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
29250 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 78 45     public int xE
29260 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  of(..           
29270 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
29280 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
29290 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
292a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
292b0 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
292c0 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
292d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
292e0 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
292f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
29300 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29310 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65            Module
29320 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73  NotAvailableCurs
29330 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f 72 29  orError(pCursor)
29340 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29350 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
29360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29370 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29380 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
29390 64 75 6c 65 2e 78 45 6f 66 28 70 43 75 72 73 6f  dule.xEof(pCurso
293a0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
293b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
293c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
293d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29400 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29410 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
29420 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
29430 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29440 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29450 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
29460 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  mn" /> method...
29470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29480 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
29490 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
294a0 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
294b0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
294c0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
294d0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
294e0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
294f0 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  mn" /> method...
29500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29510 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
29520 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
29530 20 6e 61 6d 65 3d 22 70 43 6f 6e 74 65 78 74 22   name="pContext"
29540 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29550 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
29560 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
29570 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  iveModule.xColum
29580 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
29590 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
295a0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
295b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
295c0 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
295d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
295e0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
295f0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
29600 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f  odule.xColumn" /
29610 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
29620 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
29630 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
29640 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
29650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29660 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
29670 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
29680 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20  Module.xColumn" 
29690 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
296a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
296b0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
296c0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
296d0 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75  eErrorCode xColu
296e0 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn(..           
296f0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
29700 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
29710 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f        IntPtr pCo
29720 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20  ntext,..        
29730 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
29740 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  x..             
29750 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
29760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29770 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
29780 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
29790 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
297a0 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
297b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
297c0 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
297d0 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75  leNotAvailableCu
297e0 72 73 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f  rsorError(pCurso
297f0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
29800 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
29810 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 28 70 43 75  dule.xColumn(pCu
29820 72 73 6f 72 2c 20 70 43 6f 6e 74 65 78 74 2c 20  rsor, pContext, 
29830 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
29840 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29850 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
29860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29890 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
298a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
298b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
298c0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
298d0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
298e0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
298f0 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64  RowId" /> method
29900 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29910 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
29920 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
29930 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
29940 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  sor">..         
29950 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
29960 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
29970 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
29980 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  owId" /> method.
29990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
299a0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
299b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
299c0 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e  am name="rowId">
299d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
299e0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
299f0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
29a00 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 22  veModule.xRowId"
29a10 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
29a20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
29a30 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
29a40 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
29a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29a60 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
29a70 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
29a80 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 22  veModule.xRowId"
29a90 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
29aa0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
29ab0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
29ac0 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
29ad0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 77  teErrorCode xRow
29ae0 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id(..           
29af0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
29b00 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
29b10 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72        ref long r
29b20 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  owId..          
29b30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
29b40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29b50 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
29b60 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
29b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29b80 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
29b90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29ba0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
29bb0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
29bc0 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75  eCursorError(pCu
29bd0 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsor);....      
29be0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29bf0 20 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 28 70   module.xRowId(p
29c00 43 75 72 73 6f 72 2c 20 72 65 66 20 72 6f 77 49  Cursor, ref rowI
29c10 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
29c20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
29c30 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29c80 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
29c90 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
29ca0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29cb0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29cc0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
29cd0 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
29ce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29cf0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
29d00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
29d10 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
29d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29d30 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
29d40 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
29d50 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65  veModule.xUpdate
29d60 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
29d70 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
29d80 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
29d90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
29da0 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20  ame="argc">..   
29db0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
29dc0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
29dd0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
29de0 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20  ule.xUpdate" /> 
29df0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
29e00 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
29e10 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29e20 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
29e30 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20  argv">..        
29e40 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29e50 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29e60 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29e70 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Update" /> metho
29e80 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
29e90 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
29ea0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
29eb0 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64  aram name="rowId
29ec0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
29ed0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
29ee0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
29ef0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
29f00 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
29f10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29f20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
29f30 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
29f40 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
29f50 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
29f60 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
29f70 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64  ativeModule.xUpd
29f80 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ate" /> method..
29f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29fa0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
29fb0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
29fc0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
29fd0 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20  xUpdate(..      
29fe0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
29ff0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
2a000 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
2a010 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
2a020 20 20 20 20 49 6e 74 50 74 72 5b 5d 20 61 72 67      IntPtr[] arg
2a030 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  v,..            
2a040 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
2a050 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
2a060 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
2a070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a080 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69        // CheckDi
2a090 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2a0b0 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (module == null)
2a0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a0d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64        return Mod
2a0e0 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54  uleNotAvailableT
2a0f0 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29  ableError(pVtab)
2a100 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a110 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75       return modu
2a120 6c 65 2e 78 55 70 64 61 74 65 28 70 56 74 61 62  le.xUpdate(pVtab
2a130 2c 20 61 72 67 63 2c 20 61 72 67 76 2c 20 72 65  , argc, argv, re
2a140 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20  f rowId);..     
2a150 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a160 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2a170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2a1b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2a1c0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2a1d0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2a1e0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2a1f0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2a200 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68  .xBegin" /> meth
2a210 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2a220 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2a230 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a240 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
2a250 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  tab">..         
2a260 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2a270 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2a280 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42  eNativeModule.xB
2a290 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  egin" /> method.
2a2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a2b0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2a2c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2a2d0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2a2e0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2a2f0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2a300 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42  eNativeModule.xB
2a310 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  egin" /> method.
2a320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a330 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2a340 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2a350 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2a360 20 78 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20   xBegin(..      
2a370 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2a380 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
2a390 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2a3a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a3b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2a3c0 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2a3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a3e0 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2a3f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2a400 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a410 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2a420 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56  bleTableError(pV
2a430 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
2a440 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a450 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 28 70 56  module.xBegin(pV
2a460 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tab);..         
2a470 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a480 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a4d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2a4e0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2a4f0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2a500 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2a510 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79  NativeModule.xSy
2a520 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  nc" /> method...
2a530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a540 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2a550 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2a560 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
2a570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a580 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2a590 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2a5a0 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20  veModule.xSync" 
2a5b0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2a5c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2a5d0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2a5e0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2a5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a600 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2a610 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2a620 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f  eModule.xSync" /
2a630 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2a640 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2a650 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2a660 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
2a670 45 72 72 6f 72 43 6f 64 65 20 78 53 79 6e 63 28  ErrorCode xSync(
2a680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a690 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
2a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2a6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a6d0 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
2a6e0 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2a6f0 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2a700 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a720 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
2a730 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
2a740 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d  Error(pVtab);...
2a750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a760 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
2a770 53 79 6e 63 28 70 56 74 61 62 29 3b 0d 0a 20 20  Sync(pVtab);..  
2a780 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a790 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2a7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2a7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a7f0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2a800 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2a810 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2a820 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2a830 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20  ule.xCommit" /> 
2a840 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2a850 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2a860 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2a870 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2a880 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2a890 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2a8a0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2a8b0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2a8c0 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65  e.xCommit" /> me
2a8d0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2a8e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2a8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a900 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2a910 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2a920 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2a930 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2a940 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d  le.xCommit" /> m
2a950 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2a960 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2a970 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2a980 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2a990 6f 72 43 6f 64 65 20 78 43 6f 6d 6d 69 74 28 0d  orCode xCommit(.
2a9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a9b0 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
2a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2a9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a9f0 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65   // CheckDispose
2aa00 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
2aa10 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
2aa20 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
2aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa40 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f   return ModuleNo
2aa50 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45  tAvailableTableE
2aa60 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a  rror(pVtab);....
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa80 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43  return module.xC
2aa90 6f 6d 6d 69 74 28 70 56 74 61 62 29 3b 0d 0a 20  ommit(pVtab);.. 
2aaa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2aab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2aac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aaf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2ab00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ab10 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2ab20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2ab30 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2ab40 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2ab50 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20  dule.xRollback" 
2ab60 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2ab70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2ab80 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2ab90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2aba0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
2abb0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2abc0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2abd0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2abe0 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20  dule.xRollback" 
2abf0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2ac00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2ac10 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2ac20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2ac30 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ac40 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2ac50 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2ac60 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
2ac70 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  k" /> method... 
2ac80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ac90 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2aca0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
2acb0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52  LiteErrorCode xR
2acc0 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  ollback(..      
2acd0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2ace0 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
2acf0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2ad00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ad10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2ad20 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2ad30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ad40 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2ad50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2ad60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ad70 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2ad80 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56  bleTableError(pV
2ad90 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
2ada0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2adb0 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  module.xRollback
2adc0 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20  (pVtab);..      
2add0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ade0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2adf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2ae30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2ae40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ae50 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2ae60 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2ae70 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2ae80 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f  xFindFunction" /
2ae90 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2aea0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2aeb0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2aec0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2aed0 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
2aee0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2aef0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2af00 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2af10 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
2af20 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
2af30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2af40 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2af50 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2af60 6e 61 6d 65 3d 22 6e 41 72 67 22 3e 0d 0a 20 20  name="nArg">..  
2af70 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2af80 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2af90 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2afa0 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69  dule.xFindFuncti
2afb0 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  on" /> method...
2afc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2afd0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2afe0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2aff0 20 6e 61 6d 65 3d 22 7a 4e 61 6d 65 22 3e 0d 0a   name="zName">..
2b000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b010 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b020 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b030 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
2b040 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  tion" /> method.
2b050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b060 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2b070 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2b080 61 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63  am name="callbac
2b090 6b 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k">..           
2b0a0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2b0b0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2b0c0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
2b0d0 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65  dFunction" /> me
2b0e0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2b0f0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2b100 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b110 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
2b120 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20  lientData">..   
2b130 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2b140 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2b150 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2b160 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
2b170 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
2b180 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2b190 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2b1a0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2b1b0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2b1c0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2b1d0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2b1e0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64  tiveModule.xFind
2b1f0 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74  Function" /> met
2b200 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2b210 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2b220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2b230 62 6c 69 63 20 69 6e 74 20 78 46 69 6e 64 46 75  blic int xFindFu
2b240 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
2b250 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2b260 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
2b270 20 20 20 20 20 20 20 20 69 6e 74 20 6e 41 72 67          int nArg
2b280 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b290 20 20 20 49 6e 74 50 74 72 20 7a 4e 61 6d 65 2c     IntPtr zName,
2b2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b2b0 20 20 72 65 66 20 53 51 4c 69 74 65 43 61 6c 6c    ref SQLiteCall
2b2c0 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a  back callback,..
2b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2e0 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65  ref IntPtr pClie
2b2f0 6e 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ntData..        
2b300 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2b310 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b320 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2b330 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2b340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b350 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2b360 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2b370 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64               Mod
2b390 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54  uleNotAvailableT
2b3a0 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29  ableError(pVtab)
2b3b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b3c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2b3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b3e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b3f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2b400 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69  dule.xFindFuncti
2b410 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
2b420 20 20 20 20 20 20 20 20 20 70 56 74 61 62 2c 20           pVtab, 
2b430 6e 41 72 67 2c 20 7a 4e 61 6d 65 2c 20 72 65 66  nArg, zName, ref
2b440 20 63 61 6c 6c 62 61 63 6b 2c 20 72 65 66 20 70   callback, ref p
2b450 43 6c 69 65 6e 74 44 61 74 61 29 3b 0d 0a 20 20  ClientData);..  
2b460 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2b470 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2b480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2b4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b4d0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2b4e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2b4f0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2b500 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2b510 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20  ule.xRename" /> 
2b520 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2b530 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2b540 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2b550 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2b560 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2b570 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2b580 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2b590 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2b5a0 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65  e.xRename" /> me
2b5b0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2b5c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2b5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b5e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e   <param name="zN
2b5f0 65 77 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ew">..          
2b600 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2b610 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2b620 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  NativeModule.xRe
2b630 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  name" /> method.
2b640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b650 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2b660 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2b670 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2b680 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2b690 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2b6a0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2b6b0 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64  ename" /> method
2b6c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b6d0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2b6e0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2b6f0 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2b700 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20  e xRename(..    
2b710 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2b720 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
2b730 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2b740 72 20 7a 4e 65 77 0d 0a 20 20 20 20 20 20 20 20  r zNew..        
2b750 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2b760 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b770 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2b780 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2b790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b7a0 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2b7b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2b7c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2b7d0 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2b7e0 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56  bleTableError(pV
2b7f0 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
2b800 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b810 6d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 28 70  module.xRename(p
2b820 56 74 61 62 2c 20 7a 4e 65 77 29 3b 0d 0a 20 20  Vtab, zNew);..  
2b830 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2b840 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2b850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2b890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b8a0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2b8b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2b8c0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2b8d0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2b8e0 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 22 20  ule.xSavepoint" 
2b8f0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2b900 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2b910 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2b920 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2b930 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
2b940 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2b950 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2b960 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2b970 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 22  dule.xSavepoint"
2b980 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2b990 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2b9a0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2b9b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2b9c0 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e  me="iSavepoint">
2b9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b9e0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2b9f0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2ba00 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f  veModule.xSavepo
2ba10 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  int" /> method..
2ba20 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ba30 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2ba40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
2ba50 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2ba60 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2ba70 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2ba80 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61  NativeModule.xSa
2ba90 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68  vepoint" /> meth
2baa0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2bab0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2bac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2bad0 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
2bae0 6f 64 65 20 78 53 61 76 65 70 6f 69 6e 74 28 0d  ode xSavepoint(.
2baf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb00 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a  int iSavepoint..
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2bb50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bb60 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
2bb70 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2bb80 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2bb90 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbb0 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
2bbc0 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
2bbd0 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d  Error(pVtab);...
2bbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bbf0 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
2bc00 53 61 76 65 70 6f 69 6e 74 28 70 56 74 61 62 2c  Savepoint(pVtab,
2bc10 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20   iSavepoint);.. 
2bc20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2bc30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2bc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2bc80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2bc90 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2bca0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2bcb0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2bcc0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2bcd0 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f  dule.xRelease" /
2bce0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2bcf0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2bd00 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2bd10 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2bd20 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
2bd30 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2bd40 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2bd50 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2bd60 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f 3e  ule.xRelease" />
2bd70 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2bd80 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2bd90 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2bda0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2bdb0 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20  "iSavepoint">.. 
2bdc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2bdd0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2bde0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2bdf0 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20  odule.xRelease" 
2be00 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2be10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2be20 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2be30 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2be40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2be50 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2be60 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2be70 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65  eModule.xRelease
2be80 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2be90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2bea0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2beb0 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2bec0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 65  iteErrorCode xRe
2bed0 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20  lease(..        
2bee0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2bef0 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
2bf00 20 20 20 20 20 20 20 69 6e 74 20 69 53 61 76 65         int iSave
2bf10 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  point..         
2bf20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2bf30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bf40 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
2bf50 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf70 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
2bf80 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2bf90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2bfa0 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2bfb0 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  leTableError(pVt
2bfc0 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
2bfd0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
2bfe0 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 28 70  odule.xRelease(p
2bff0 56 74 61 62 2c 20 69 53 61 76 65 70 6f 69 6e 74  Vtab, iSavepoint
2c000 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2c010 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c020 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c060 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c070 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2c080 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c090 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2c0a0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2c0b0 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  iveModule.xRollb
2c0c0 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64  ackTo" /> method
2c0d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c0e0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2c0f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c100 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
2c110 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
2c120 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2c130 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2c140 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c  ativeModule.xRol
2c150 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68  lbackTo" /> meth
2c160 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c170 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2c180 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c190 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76  param name="iSav
2c1a0 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20  epoint">..      
2c1b0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2c1c0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2c1d0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2c1e0 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e  .xRollbackTo" />
2c1f0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2c200 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2c210 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2c220 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2c230 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2c240 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2c250 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2c260 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54  odule.xRollbackT
2c270 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  o" /> method... 
2c280 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c290 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2c2a0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
2c2b0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52  LiteErrorCode xR
2c2c0 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20  ollbackTo(..    
2c2d0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2c2e0 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
2c2f0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
2c300 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20  Savepoint..     
2c310 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2c320 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c330 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c340 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2c350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c360 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2c370 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c380 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c390 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2c3a0 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72  ilableTableError
2c3b0 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
2c3c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2c3d0 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  rn module.xRollb
2c3e0 61 63 6b 54 6f 28 70 56 74 61 62 2c 20 69 53 61  ackTo(pVtab, iSa
2c3f0 76 65 70 6f 69 6e 74 29 3b 0d 0a 20 20 20 20 20  vepoint);..     
2c400 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2c410 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2c420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c470 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2c480 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
2c490 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
2c4a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c4b0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2c4c0 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f         /// Dispo
2c4d0 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  ses of this obje
2c4e0 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
2c4f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2c500 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2c510 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
2c520 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20  d Dispose()..   
2c530 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c540 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
2c550 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
2c560 20 20 20 20 20 20 20 20 20 20 20 20 47 43 2e 53              GC.S
2c570 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28  uppressFinalize(
2c580 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  this);..        
2c590 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2c5a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2c5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c600 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c610 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
2c620 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
2c630 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
2c640 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
2c650 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20  disposed;..     
2c660 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2c670 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2c680 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20    /// Throws an 
2c690 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74 65  <see cref="Syste
2c6a0 6d 2e 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  m.ObjectDisposed
2c6b0 45 78 63 65 70 74 69 6f 6e 22 2f 3e 20 69 66 20  Exception"/> if 
2c6c0 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  this..          
2c6d0 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73    /// object ins
2c6e0 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64  tance has been d
2c6f0 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
2c700 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2c710 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2c720 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
2c730 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
2c740 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
2c750 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54          {..#if T
2c760 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44  HROW_ON_DISPOSED
2c770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c780 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d    if (disposed).
2c790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c7a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c7b0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
2c7c0 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
2c7d0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
2c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7f0 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
2c800 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 29 2e 4e  eNativeModule).N
2c810 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
2c820 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
2c830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c840 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c890 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2c8a0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2c8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c8c0 20 44 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69   Disposes of thi
2c8d0 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
2c8e0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
2c8f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2c900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c910 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73  <param name="dis
2c920 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20  posing">..      
2c930 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
2c940 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f  ro if this metho
2c950 64 20 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65  d is being calle
2c960 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20  d from the..    
2c970 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
2c980 20 63 72 65 66 3d 22 44 69 73 70 6f 73 65 28 29   cref="Dispose()
2c990 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 20 20 5a 65  " /> method.  Ze
2c9a0 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f  ro if this metho
2c9b0 64 20 69 73 20 62 65 69 6e 67 0d 0a 20 20 20 20  d is being..    
2c9c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c          /// call
2c9d0 65 64 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61  ed from the fina
2c9e0 6c 69 7a 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  lizer...        
2c9f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2ca00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2ca10 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
2ca20 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
2ca30 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20  id Dispose(bool 
2ca40 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
2ca50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ca60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2ca70 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
2ca80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2caa0 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e    //if (disposin
2cab0 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
2cac0 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cae0 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
2caf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
2cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73   //    // dispos
2cb30 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
2cb40 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb60 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
2cb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
2cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cba0 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   //}....        
2cbb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2cbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cbe0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2cbf0 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
2cc00 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
2cc10 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
2cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc30 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2cc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc70 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2cc80 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2cc90 45 3a 20 54 68 65 20 6d 6f 64 75 6c 65 20 69 73  E: The module is
2cca0 20 6e 6f 74 20 6f 77 6e 65 64 20 62 79 20 75 73   not owned by us
2ccb0 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 64 6f 20  ; therefore, do 
2ccc0 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  not..           
2ccd0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2cce0 20 20 64 69 73 70 6f 73 65 20 69 74 2e 0d 0a 20    dispose it... 
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd00 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2cd10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2cd20 6f 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  odule != null)..
2cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd40 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 20 3d          module =
2cd50 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
2cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2cd70 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
2cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2cda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
2cdb0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2cdc0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2cdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ce10 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
2ce20 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20  on Destructor.. 
2ce30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ce40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2ce50 20 20 20 20 20 20 2f 2f 2f 20 46 69 6e 61 6c 69        /// Finali
2ce60 7a 65 73 20 74 68 69 73 20 6f 62 6a 65 63 74 20  zes this object 
2ce70 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
2ce80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2ce90 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2cea0 20 20 20 7e 53 51 4c 69 74 65 4e 61 74 69 76 65     ~SQLiteNative
2ceb0 4d 6f 64 75 6c 65 28 29 0d 0a 20 20 20 20 20 20  Module()..      
2cec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ced0 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
2cee0 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20  (false);..      
2cef0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2cf00 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2cf10 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2cf20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2cf30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2cf90 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
2cfa0 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
2cfb0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2cfc0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64         /// The d
2cfd0 65 66 61 75 6c 74 20 65 73 74 69 6d 61 74 65 64  efault estimated
2cfe0 20 63 6f 73 74 20 66 6f 72 20 75 73 65 20 77 69   cost for use wi
2cff0 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  th the..        
2d000 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
2d010 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
2d020 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f  ule.BestIndex" /
2d030 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2d040 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2d050 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
2d060 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
2d070 6c 79 20 64 6f 75 62 6c 65 20 44 65 66 61 75 6c  ly double Defaul
2d080 74 45 73 74 69 6d 61 74 65 64 43 6f 73 74 20 3d  tEstimatedCost =
2d090 20 64 6f 75 62 6c 65 2e 4d 61 78 56 61 6c 75 65   double.MaxValue
2d0a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2d100 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2d110 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64         /// The d
2d120 65 66 61 75 6c 74 20 76 65 72 73 69 6f 6e 20 6f  efault version o
2d130 66 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  f the native sql
2d140 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75  ite3_module stru
2d150 63 74 75 72 65 20 69 6e 20 75 73 65 2e 0d 0a 20  cture in use... 
2d160 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2d170 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
2d180 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
2d190 61 64 6f 6e 6c 79 20 69 6e 74 20 44 65 66 61 75  adonly int Defau
2d1a0 6c 74 4d 6f 64 75 6c 65 56 65 72 73 69 6f 6e 20  ltModuleVersion 
2d1b0 3d 20 32 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  = 2;..        #e
2d1c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2d1d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2d1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2d220 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2d230 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20  rivate Data..   
2d240 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2d250 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2d260 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73  This field is us
2d270 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
2d280 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d  native sqlite3_m
2d290 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 0d  odule structure.
2d2a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73  .        /// ass
2d2b0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
2d2c0 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
2d2d0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
2d2e0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2d2f0 20 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61      private Unsa
2d300 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2d310 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6e  sqlite3_module n
2d320 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a 0d 0a  ativeModule;....
2d330 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2d340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2d380 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2d390 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2d3a0 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64    /// This field
2d3b0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2d3c0 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
2d3d0 62 6c 65 20 69 6e 73 74 61 6e 63 65 73 20 61 73  ble instances as
2d3e0 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
2d3f0 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
2d400 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 6e 61 74  module.  The nat
2d410 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
2d420 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
2d430 64 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20  derived..       
2d440 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20 69   /// structure i
2d450 73 20 75 73 65 64 20 74 6f 20 6b 65 79 20 69 6e  s used to key in
2d460 74 6f 20 74 68 69 73 20 63 6f 6c 6c 65 63 74 69  to this collecti
2d470 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
2d480 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2d490 20 20 20 20 20 70 72 69 76 61 74 65 20 44 69 63       private Dic
2d4a0 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20  tionary<IntPtr, 
2d4b0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
2d4c0 6c 65 3e 20 74 61 62 6c 65 73 3b 0d 0a 0d 0a 20  le> tables;.... 
2d4d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2d4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2d520 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2d530 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2d540 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
2d550 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2d560 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2d570 6c 65 20 63 75 72 73 6f 72 20 69 6e 73 74 61 6e  le cursor instan
2d580 63 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ces..        ///
2d590 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2d5a0 20 74 68 69 73 20 6d 6f 64 75 6c 65 2e 20 20 54   this module.  T
2d5b0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
2d5c0 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  r to the..      
2d5d0 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74    /// sqlite3_vt
2d5e0 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65  ab_cursor derive
2d5f0 64 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  d structure is u
2d600 73 65 64 20 74 6f 20 6b 65 79 20 69 6e 74 6f 20  sed to key into 
2d610 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  this..        //
2d620 2f 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20  / collection... 
2d630 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2d640 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
2d650 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72  rivate Dictionar
2d660 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65  y<IntPtr, SQLite
2d670 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
2d680 6f 72 3e 20 63 75 72 73 6f 72 73 3b 0d 0a 20 20  or> cursors;..  
2d690 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2d6a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2d6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2d700 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
2d710 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
2d720 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2d730 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
2d740 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73  onstructs an ins
2d750 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c  tance of this cl
2d760 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ass...        //
2d770 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2d780 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2d790 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20   name="name">.. 
2d7a0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
2d7b0 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  ame of the modul
2d7c0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
2d7d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2d7e0 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 4d    public SQLiteM
2d7f0 6f 64 75 6c 65 28 73 74 72 69 6e 67 20 6e 61 6d  odule(string nam
2d800 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
2d810 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
2d820 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
2d830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
2d840 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
2d850 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6e  NullException("n
2d860 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
2d870 20 20 20 20 20 20 74 68 69 73 2e 6e 61 6d 65 20        this.name 
2d880 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  = name;..       
2d890 20 20 20 20 20 74 68 69 73 2e 74 61 62 6c 65 73       this.tables
2d8a0 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
2d8b0 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65  y<IntPtr, SQLite
2d8c0 56 69 72 74 75 61 6c 54 61 62 6c 65 3e 28 29 3b  VirtualTable>();
2d8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
2d8e0 69 73 2e 63 75 72 73 6f 72 73 20 3d 20 6e 65 77  is.cursors = new
2d8f0 20 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50   Dictionary<IntP
2d900 74 72 2c 20 53 51 4c 69 74 65 56 69 72 74 75 61  tr, SQLiteVirtua
2d910 6c 54 61 62 6c 65 43 75 72 73 6f 72 3e 28 29 3b  lTableCursor>();
2d920 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2d930 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2d940 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2d950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d990 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2d9a0 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 4d  egion Internal M
2d9b0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
2d9c0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2d9d0 20 20 20 20 20 20 20 2f 2f 2f 20 43 72 65 61 74         /// Creat
2d9e0 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  es and returns t
2d9f0 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
2da00 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72  _module structur
2da10 65 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  e using the..   
2da20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75       /// configu
2da30 72 65 64 20 28 6f 72 20 64 65 66 61 75 6c 74 29  red (or default)
2da40 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2da50 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22  iteNativeModule"
2da60 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   />..        ///
2da70 20 69 6e 74 65 72 66 61 63 65 20 69 6d 70 6c 65   interface imple
2da80 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
2da90 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2daa0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2dab0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
2dac0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
2dad0 65 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20  e sqlite_module 
2dae0 73 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20  structure using 
2daf0 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 28  the configured (
2db00 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
2db10 64 65 66 61 75 6c 74 29 20 3c 73 65 65 20 63 72  default) <see cr
2db20 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2db30 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65  eModule" /> inte
2db40 72 66 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  rface..        /
2db50 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
2db60 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
2db70 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2db80 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 55 6e 73      internal Uns
2db90 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2dba0 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  .sqlite3_module 
2dbb0 43 72 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75  CreateNativeModu
2dbc0 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  le()..        {.
2dbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2dbe0 75 72 6e 20 43 72 65 61 74 65 4e 61 74 69 76 65  urn CreateNative
2dbf0 4d 6f 64 75 6c 65 28 47 65 74 4e 61 74 69 76 65  Module(GetNative
2dc00 4d 6f 64 75 6c 65 49 6d 70 6c 28 29 29 3b 0d 0a  ModuleImpl());..
2dc10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2dc20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2dc30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2dc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2dc90 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68  ion Private Meth
2dca0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
2dcb0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2dcc0 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
2dcd0 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
2dce0 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f 6d 6f  native sqlite_mo
2dcf0 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 20 75  dule structure u
2dd00 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  sing the..      
2dd10 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 65 64 20    /// specified 
2dd20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2dd30 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
2dd40 2f 3e 20 69 6e 74 65 72 66 61 63 65 0d 0a 20 20  /> interface..  
2dd50 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
2dd60 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
2dd70 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2dd80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
2dd90 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
2dda0 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
2ddb0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
2ddc0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2ddd0 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61  dule" /> interfa
2dde0 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ce implementatio
2ddf0 6e 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n to..        //
2de00 2f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  / use...        
2de10 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2de20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2de30 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
2de40 20 54 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   The native sqli
2de50 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74  te_module struct
2de60 75 72 65 20 75 73 69 6e 67 20 74 68 65 20 73 70  ure using the sp
2de70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20  ecified..       
2de80 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
2de90 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2dea0 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63  ule" /> interfac
2deb0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
2dec0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2ded0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2dee0 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61 66     private Unsaf
2def0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2df00 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 43 72  qlite3_module Cr
2df10 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  eateNativeModule
2df20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
2df30 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2df40 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20  le module..     
2df50 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2df60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2df70 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 20   nativeModule = 
2df80 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
2df90 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2dfa0 6d 6f 64 75 6c 65 28 29 3b 0d 0a 20 20 20 20 20  module();..     
2dfb0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
2dfc0 75 6c 65 2e 69 56 65 72 73 69 6f 6e 20 3d 20 44  ule.iVersion = D
2dfd0 65 66 61 75 6c 74 4d 6f 64 75 6c 65 56 65 72 73  efaultModuleVers
2dfe0 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ion;....        
2dff0 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 21      if (module !
2e000 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2e010 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e020 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
2e030 64 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20 6e  dule.xCreate = n
2e040 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
2e050 65 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28 0d  ethods.xCreate(.
2e060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e070 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 72 65       module.xCre
2e080 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ate);....       
2e090 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
2e0a0 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d  odule.xConnect =
2e0b0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
2e0c0 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63  eMethods.xConnec
2e0d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2e0e0 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
2e0f0 43 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20  Connect);....   
2e100 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2e110 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
2e120 6e 64 65 78 20 3d 20 6e 65 77 20 55 6e 73 61 66  ndex = new Unsaf
2e130 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
2e140 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20  BestIndex(..    
2e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e160 6d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  module.xBestInde
2e170 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x);....         
2e180 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
2e190 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20  ule.xDisconnect 
2e1a0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
2e1b0 76 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f  veMethods.xDisco
2e1c0 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
2e1d0 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
2e1e0 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b  le.xDisconnect);
2e1f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e200 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
2e210 2e 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20  .xDestroy = new 
2e220 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2e230 6f 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20  ods.xDestroy(.. 
2e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e250 20 20 20 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72     module.xDestr
2e260 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  oy);....        
2e270 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
2e280 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65 77  dule.xOpen = new
2e290 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2e2a0 68 6f 64 73 2e 78 4f 70 65 6e 28 0d 0a 20 20 20  hods.xOpen(..   
2e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2c0 20 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 29 3b 0d   module.xOpen);.
2e2d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e2e0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2e2f0 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55 6e 73  xClose = new Uns
2e300 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2e310 2e 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20  .xClose(..      
2e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
2e330 64 75 6c 65 2e 78 43 6c 6f 73 65 29 3b 0d 0a 0d  dule.xClose);...
2e340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e350 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46   nativeModule.xF
2e360 69 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61  ilter = new Unsa
2e370 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2e380 78 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20  xFilter(..      
2e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
2e3a0 64 75 6c 65 2e 78 46 69 6c 74 65 72 29 3b 0d 0a  dule.xFilter);..
2e3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e3c0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
2e3d0 4e 65 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  Next = new Unsaf
2e3e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
2e3f0 4e 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20  Next(..         
2e400 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
2e410 65 2e 78 4e 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  e.xNext);....   
2e420 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2e430 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d  iveModule.xEof =
2e440 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
2e450 65 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 6d 6f  eMethods.xEof(mo
2e460 64 75 6c 65 2e 78 45 6f 66 29 3b 0d 0a 0d 0a 20  dule.xEof);.... 
2e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
2e480 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c  ativeModule.xCol
2e490 75 6d 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  umn = new Unsafe
2e4a0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
2e4b0 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20  olumn(..        
2e4c0 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
2e4d0 6c 65 2e 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a  le.xColumn);....
2e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4f0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  nativeModule.xRo
2e500 77 49 64 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  wId = new Unsafe
2e510 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52  NativeMethods.xR
2e520 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20  owId(..         
2e530 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
2e540 65 2e 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20  e.xRowId);....  
2e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
2e560 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
2e570 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  te = new UnsafeN
2e580 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 55 70  ativeMethods.xUp
2e590 64 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  date(..         
2e5a0 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
2e5b0 65 2e 78 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20  e.xUpdate);.... 
2e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
2e5d0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67  ativeModule.xBeg
2e5e0 69 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  in = new UnsafeN
2e5f0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65  ativeMethods.xBe
2e600 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  gin(..          
2e610 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
2e620 2e 78 42 65 67 69 6e 29 3b 0d 0a 0d 0a 20 20 20  .xBegin);....   
2e630 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2e640 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20  iveModule.xSync 
2e650 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
2e660 76 65 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28  veMethods.xSync(
2e670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e680 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53 79        module.xSy
2e690 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nc);....        
2e6a0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
2e6b0 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e  dule.xCommit = n
2e6c0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
2e6d0 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d  ethods.xCommit(.
2e6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e6f0 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6d       module.xCom
2e700 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mit);....       
2e710 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
2e720 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20  odule.xRollback 
2e730 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
2e740 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62  veMethods.xRollb
2e750 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
2e760 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
2e770 2e 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a  .xRollback);....
2e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e790 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  nativeModule.xFi
2e7a0 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77  ndFunction = new
2e7b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2e7c0 68 6f 64 73 2e 78 46 69 6e 64 46 75 6e 63 74 69  hods.xFindFuncti
2e7d0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
2e7e0 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
2e7f0 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d  xFindFunction);.
2e800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e810 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2e820 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e  xRename = new Un
2e830 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2e840 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20  s.xRename(..    
2e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e860 6d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 29 3b  module.xRename);
2e870 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e880 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
2e890 2e 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 6e 65  .xSavepoint = ne
2e8a0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
2e8b0 74 68 6f 64 73 2e 78 53 61 76 65 70 6f 69 6e 74  thods.xSavepoint
2e8c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e8d0 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53         module.xS
2e8e0 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20  avepoint);....  
2e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
2e900 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65  tiveModule.xRele
2e910 61 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ase = new Unsafe
2e920 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52  NativeMethods.xR
2e930 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20  elease(..       
2e940 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
2e950 75 6c 65 2e 78 52 65 6c 65 61 73 65 29 3b 0d 0a  ule.xRelease);..
2e960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e970 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
2e980 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77  RollbackTo = new
2e990 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2e9a0 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f  hods.xRollbackTo
2e9b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e9c0 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52         module.xR
2e9d0 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20 20  ollbackTo);..   
2e9e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2e9f0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2ea00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2ea20 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
2ea30 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
2ea40 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 72 65  tiveMethods.xCre
2ea50 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
2ea60 20 20 20 20 20 20 20 20 20 20 78 43 72 65 61 74            xCreat
2ea70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2ea80 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
2ea90 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20 6e  ule.xConnect = n
2eaa0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
2eab0 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74 28  ethods.xConnect(
2eac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ead0 20 20 20 20 20 20 78 43 6f 6e 6e 65 63 74 29 3b        xConnect);
2eae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2eaf0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
2eb00 2e 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65  .xBestIndex = ne
2eb10 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
2eb20 74 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78  thods.xBestIndex
2eb30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2eb40 20 20 20 20 20 20 20 78 42 65 73 74 49 6e 64 65         xBestInde
2eb50 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x);....         
2eb60 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
2eb70 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20  ule.xDisconnect 
2eb80 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
2eb90 76 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f  veMethods.xDisco
2eba0 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
2ebb0 20 20 20 20 20 20 20 20 20 20 20 20 78 44 69 73              xDis
2ebc0 63 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20  connect);....   
2ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2ebe0 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72  iveModule.xDestr
2ebf0 6f 79 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  oy = new UnsafeN
2ec00 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 65  ativeMethods.xDe
2ec10 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20  stroy(..        
2ec20 20 20 20 20 20 20 20 20 20 20 20 20 78 44 65 73              xDes
2ec30 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  troy);....      
2ec40 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
2ec50 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e  Module.xOpen = n
2ec60 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
2ec70 65 74 68 6f 64 73 2e 78 4f 70 65 6e 28 78 4f 70  ethods.xOpen(xOp
2ec80 65 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  en);..          
2ec90 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
2eca0 6c 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20  le.xClose = new 
2ecb0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2ecc0 6f 64 73 2e 78 43 6c 6f 73 65 28 78 43 6c 6f 73  ods.xClose(xClos
2ecd0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2ece0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
2ecf0 75 6c 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65  ule.xFilter = ne
2ed00 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
2ed10 74 68 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a  thods.xFilter(..
2ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed30 20 20 20 20 78 46 69 6c 74 65 72 29 3b 0d 0a 0d      xFilter);...
2ed40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed50 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e   nativeModule.xN
2ed60 65 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ext = new Unsafe
2ed70 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e  NativeMethods.xN
2ed80 65 78 74 28 78 4e 65 78 74 29 3b 0d 0a 20 20 20  ext(xNext);..   
2ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2eda0 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d  iveModule.xEof =
2edb0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
2edc0 65 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 78 45  eMethods.xEof(xE
2edd0 6f 66 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  of);....        
2ede0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
2edf0 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e  dule.xColumn = n
2ee00 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
2ee10 65 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d  ethods.xColumn(.
2ee20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee30 20 20 20 20 20 78 43 6f 6c 75 6d 6e 29 3b 0d 0a       xColumn);..
2ee40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ee50 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
2ee60 52 6f 77 49 64 20 3d 20 6e 65 77 20 55 6e 73 61  RowId = new Unsa
2ee70 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2ee80 78 52 6f 77 49 64 28 78 52 6f 77 49 64 29 3b 0d  xRowId(xRowId);.
2ee90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2eea0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2eeb0 78 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55 6e  xUpdate = new Un
2eec0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2eed0 73 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20  s.xUpdate(..    
2eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eef0 78 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20  xUpdate);....   
2ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2ef10 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e  iveModule.xBegin
2ef20 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
2ef30 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 67 69  iveMethods.xBegi
2ef40 6e 28 78 42 65 67 69 6e 29 3b 0d 0a 20 20 20 20  n(xBegin);..    
2ef50 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
2ef60 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d  veModule.xSync =
2ef70 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
2ef80 65 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 78  eMethods.xSync(x
2ef90 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Sync);....      
2efa0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
2efb0 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d  Module.xCommit =
2efc0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
2efd0 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74  eMethods.xCommit
2efe0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2eff0 20 20 20 20 20 20 20 78 43 6f 6d 6d 69 74 29 3b         xCommit);
2f000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f010 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
2f020 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77  .xRollback = new
2f030 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2f040 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d  hods.xRollback(.
2f050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f060 20 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 29 3b       xRollback);
2f070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f080 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
2f090 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d  .xFindFunction =
2f0a0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
2f0b0 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64 46 75  eMethods.xFindFu
2f0c0 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
2f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 78 46 69               xFi
2f0e0 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a  ndFunction);....
2f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f100 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  nativeModule.xRe
2f110 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61 66  name = new Unsaf
2f120 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
2f130 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  Rename(..       
2f140 20 20 20 20 20 20 20 20 20 20 20 20 20 78 52 65               xRe
2f150 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  name);....      
2f160 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
2f170 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  Module.xSavepoin
2f180 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
2f190 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61 76  tiveMethods.xSav
2f1a0 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20  epoint(..       
2f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 78 53 61               xSa
2f1c0 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20  vepoint);....   
2f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2f1e0 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61  iveModule.xRelea
2f1f0 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  se = new UnsafeN
2f200 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65  ativeMethods.xRe
2f210 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20  lease(..        
2f220 20 20 20 20 20 20 20 20 20 20 20 20 78 52 65 6c              xRel
2f230 65 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ease);....      
2f240 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
2f250 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
2f260 54 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  To = new UnsafeN
2f270 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f  ativeMethods.xRo
2f280 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20  llbackTo(..     
2f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
2f2a0 52 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20  RollbackTo);..  
2f2b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f2c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2f2d0 6e 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d  n nativeModule;.
2f2e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2f2f0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2f300 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2f310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f350 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2f360 67 69 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d  gion Protected M
2f370 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
2f380 23 72 65 67 69 6f 6e 20 4d 6f 64 75 6c 65 20 48  #region Module H
2f390 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
2f3a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2f3b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2f3c0 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72  / Gets and retur
2f3d0 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ns the <see cref
2f3e0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2f3f0 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66  odule" /> interf
2f400 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ace..        ///
2f410 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2f420 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
2f430 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74  creating the nat
2f440 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ive sqlite3_modu
2f450 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
2f460 73 74 72 75 63 74 75 72 65 2e 20 20 44 65 72 69  structure.  Deri
2f470 76 65 64 20 63 6c 61 73 73 65 73 20 6d 61 79 20  ved classes may 
2f480 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 6d 65  override this me
2f490 74 68 6f 64 20 74 6f 20 73 75 70 70 6c 79 20 61  thod to supply a
2f4a0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  n..        /// a
2f4b0 6c 74 65 72 6e 61 74 65 20 69 6d 70 6c 65 6d 65  lternate impleme
2f4c0 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ntation for the 
2f4d0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2f4e0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
2f4f0 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
2f500 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20  interface...    
2f510 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2f520 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2f530 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
2f540 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
2f550 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2f560 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e  iveModule" /> in
2f570 74 65 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e  terface implemen
2f580 74 61 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20  tation to..     
2f590 20 20 20 2f 2f 2f 20 62 65 20 75 73 65 64 20 77     /// be used w
2f5a0 68 65 6e 20 70 6f 70 75 6c 61 74 69 6e 67 20 74  hen populating t
2f5b0 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
2f5c0 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  3_module structu
2f5d0 72 65 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20  re.  If..       
2f5e0 20 2f 2f 2f 20 74 68 65 20 72 65 74 75 72 6e 65   /// the returne
2f5f0 64 20 76 61 6c 75 65 20 69 73 20 6e 75 6c 6c 2c  d value is null,
2f600 20 74 68 65 20 70 72 69 76 61 74 65 20 6d 65 74   the private met
2f610 68 6f 64 73 20 70 72 6f 76 69 64 65 64 20 62 79  hods provided by
2f620 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
2f630 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
2f640 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 63 6c  iteModule" /> cl
2f650 61 73 73 20 61 6e 64 20 72 65 6c 61 74 69 6e 67  ass and relating
2f660 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
2f670 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
2f680 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2f690 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63  ule" /> interfac
2f6a0 65 20 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  e  will be used 
2f6b0 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
2f6c0 63 72 65 61 74 65 20 74 68 65 20 6e 65 63 65 73  create the neces
2f6d0 73 61 72 79 20 64 65 6c 65 67 61 74 65 73 2e 0d  sary delegates..
2f6e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
2f6f0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2f700 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
2f710 61 6c 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  al ISQLiteNative
2f720 4d 6f 64 75 6c 65 20 47 65 74 4e 61 74 69 76 65  Module GetNative
2f730 4d 6f 64 75 6c 65 49 6d 70 6c 28 29 0d 0a 20 20  ModuleImpl()..  
2f740 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f750 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
2f760 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 73 65 20 74  ; /* NOTE: Use t
2f770 68 65 20 62 75 69 6c 74 2d 69 6e 20 64 65 66 61  he built-in defa
2f780 75 6c 74 20 64 65 6c 65 67 61 74 65 73 2e 20 2a  ult delegates. *
2f790 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  /..        }....
2f7a0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2f7f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2f800 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2f810 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e    /// Creates an
2f820 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73  d returns the <s
2f830 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2f840 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e  NativeModule" />
2f850 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
2f860 74 65 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e  terface implemen
2f870 74 61 74 69 6f 6e 20 63 6f 72 72 65 73 70 6f 6e  tation correspon
2f880 64 69 6e 67 20 74 6f 20 74 68 65 20 63 75 72 72  ding to the curr
2f890 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ent..        ///
2f8a0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
2f8b0 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a  teModule" /> obj
2f8c0 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
2f8d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2f8e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2f8f0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
2f900 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
2f910 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2f920 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e  NativeModule" />
2f930 20 69 6e 74 65 72 66 61 63 65 20 69 6d 70 6c 65   interface imple
2f940 6d 65 6e 74 61 74 69 6f 6e 0d 0a 20 20 20 20 20  mentation..     
2f950 20 20 20 2f 2f 2f 20 63 6f 72 72 65 73 70 6f 6e     /// correspon
2f960 64 69 6e 67 20 74 6f 20 74 68 65 20 63 75 72 72  ding to the curr
2f970 65 6e 74 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ent <see cref="S
2f980 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
2f990 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
2f9a0 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  /// instance... 
2f9b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2f9c0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
2f9d0 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
2f9e0 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   ISQLiteNativeMo
2f9f0 64 75 6c 65 20 43 72 65 61 74 65 4e 61 74 69 76  dule CreateNativ
2fa00 65 4d 6f 64 75 6c 65 49 6d 70 6c 28 29 0d 0a 20  eModuleImpl().. 
2fa10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fa20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
2fa30 20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64   SQLiteNativeMod
2fa40 75 6c 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ule(this);..    
2fa50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2fa60 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2fa70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2fa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2fac0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2fad0 4e 61 74 69 76 65 20 54 61 62 6c 65 20 48 65 6c  Native Table Hel
2fae0 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
2faf0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2fb00 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2fb10 41 6c 6c 6f 63 61 74 65 73 20 61 20 6e 61 74 69  Allocates a nati
2fb20 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  ve sqlite3_vtab 
2fb30 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
2fb40 65 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 0d  e and returns a.
2fb50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74  .        /// nat
2fb60 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  ive pointer to i
2fb70 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
2fb80 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2fb90 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2fba0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
2fbb0 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
2fbc0 74 6f 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69  to a native sqli
2fbd0 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
2fbe0 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
2fbf0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2fc00 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  ns>..        pro
2fc10 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 49  tected virtual I
2fc20 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 54 61  ntPtr AllocateTa
2fc30 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ble()..        {
2fc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
2fc50 74 20 73 69 7a 65 20 3d 20 4d 61 72 73 68 61 6c  t size = Marshal
2fc60 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d  .SizeOf(typeof(.
2fc70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fc80 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2fc90 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 74 61  hods.sqlite3_vta
2fca0 62 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  b));....        
2fcb0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
2fcc0 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65  eMemory.Allocate
2fcd0 28 73 69 7a 65 29 3b 0d 0a 20 20 20 20 20 20 20  (size);..       
2fce0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2fcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2fd40 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2fd50 20 20 20 20 20 20 20 20 2f 2f 2f 20 5a 65 72 6f          /// Zero
2fd60 73 20 6f 75 74 20 74 68 65 20 66 69 65 6c 64 73  s out the fields
2fd70 20 6f 66 20 61 20 6e 61 74 69 76 65 20 73 71 6c   of a native sql
2fd80 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
2fd90 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
2fda0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2fdb0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2fdc0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2fdd0 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
2fde0 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
2fdf0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
2fe00 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61  tive sqlite3_vta
2fe10 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
2fe20 75 72 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ure to..        
2fe30 2f 2f 2f 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20  /// zero...     
2fe40 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2fe50 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
2fe60 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20  ed virtual void 
2fe70 5a 65 72 6f 54 61 62 6c 65 28 0d 0a 20 20 20 20  ZeroTable(..    
2fe80 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2fe90 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
2fea0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2feb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2fec0 70 56 74 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e  pVtab == IntPtr.
2fed0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
2fee0 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
2fef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
2ff00 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d  t offset = 0;...
2ff10 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
2ff20 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65  iteMarshal.Write
2ff30 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66  IntPtr(pVtab, of
2ff40 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 5a 65 72  fset, IntPtr.Zer
2ff50 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  o);....         
2ff60 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74     offset += Int
2ff70 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20  Ptr.Size;....   
2ff80 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
2ff90 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 33  arshal.WriteInt3
2ffa0 32 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c  2(pVtab, offset,
2ffb0 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
2ffc0 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69      offset += si
2ffd0 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20  zeof(int);....  
2ffe0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
2fff0 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74  Marshal.WriteInt
30000 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65  Ptr(pVtab, offse
30010 74 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  t, IntPtr.Zero);
30020 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
30030 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
30070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
30080 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
30090 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
300a0 20 2f 2f 2f 20 46 72 65 65 73 20 61 20 6e 61 74   /// Frees a nat
300b0 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ive sqlite3_vtab
300c0 20 73 74 72 75 63 74 75 72 65 20 75 73 69 6e 67   structure using
300d0 20 74 68 65 20 70 72 6f 76 69 64 65 64 20 6e 61   the provided na
300e0 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tive..        //
300f0 2f 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  / pointer to it.
30100 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
30110 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
30120 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
30130 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
30140 20 20 20 20 2f 2f 2f 20 41 20 6e 61 74 69 76 65      /// A native
30150 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 6e 61   pointer to a na
30160 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61  tive sqlite3_vta
30170 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
30180 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
30190 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
301a0 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
301b0 72 74 75 61 6c 20 76 6f 69 64 20 46 72 65 65 54  rtual void FreeT
301c0 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  able(..         
301d0 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
301e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
301f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30200 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
30210 72 72 6f 72 28 70 56 74 61 62 2c 20 6e 75 6c 6c  rror(pVtab, null
30220 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30230 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
30240 65 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20  e(pVtab);..     
30250 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
30260 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
30270 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
302c0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e         #region N
302d0 61 74 69 76 65 20 43 75 72 73 6f 72 20 48 65 6c  ative Cursor Hel
302e0 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
302f0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
30300 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
30310 41 6c 6c 6f 63 61 74 65 73 20 61 20 6e 61 74 69  Allocates a nati
30320 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ve sqlite3_vtab_
30330 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73  cursor derived s
30340 74 72 75 63 74 75 72 65 20 61 6e 64 0d 0a 20 20  tructure and..  
30350 20 20 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e        /// return
30360 73 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  s a native point
30370 65 72 20 74 6f 20 69 74 2e 0d 0a 20 20 20 20 20  er to it...     
30380 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
30390 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
303a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
303b0 20 20 2f 2f 2f 20 41 20 6e 61 74 69 76 65 20 70    /// A native p
303c0 6f 69 6e 74 65 72 20 74 6f 20 61 20 6e 61 74 69  ointer to a nati
303d0 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ve sqlite3_vtab_
303e0 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73  cursor derived s
303f0 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
30400 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
30410 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  >..        prote
30420 63 74 65 64 20 76 69 72 74 75 61 6c 20 49 6e 74  cted virtual Int
30430 50 74 72 20 41 6c 6c 6f 63 61 74 65 43 75 72 73  Ptr AllocateCurs
30440 6f 72 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  or()..        {.
30450 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
30460 20 73 69 7a 65 20 3d 20 4d 61 72 73 68 61 6c 2e   size = Marshal.
30470 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a  SizeOf(typeof(..
30480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30490 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
304a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 74 61 62  ods.sqlite3_vtab
304b0 5f 63 75 72 73 6f 72 29 29 3b 0d 0a 0d 0a 20 20  _cursor));....  
304c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
304d0 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c   SQLiteMemory.Al
304e0 6c 6f 63 61 74 65 28 73 69 7a 65 29 3b 0d 0a 20  locate(size);.. 
304f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30500 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
30550 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
30560 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
30570 2f 20 46 72 65 65 73 20 61 20 6e 61 74 69 76 65  / Frees a native
30580 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
30590 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 75  rsor structure u
305a0 73 69 6e 67 20 74 68 65 20 70 72 6f 76 69 64 65  sing the provide
305b0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  d..        /// n
305c0 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
305d0 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f   it...        //
305e0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
305f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
30600 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e   name="pCursor">
30610 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
30620 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
30630 6f 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69 74  o a native sqlit
30640 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
30650 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
30660 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
30670 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
30680 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
30690 61 6c 20 76 6f 69 64 20 46 72 65 65 43 75 72 73  al void FreeCurs
306a0 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or(..           
306b0 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
306c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
306d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
306e0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
306f0 6f 72 79 2e 46 72 65 65 28 70 43 75 72 73 6f 72  ory.Free(pCursor
30700 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
30710 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
30720 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
30730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30770 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
30780 23 72 65 67 69 6f 6e 20 53 74 61 74 69 63 20 54  #region Static T
30790 61 62 6c 65 20 4c 6f 6f 6b 75 70 20 4d 65 74 68  able Lookup Meth
307a0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
307b0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
307c0 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20 61 6e      /// Reads an
307d0 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 61  d returns the na
307e0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
307f0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
30800 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20   derived..      
30810 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20    /// structure 
30820 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6e 61 74  based on the nat
30830 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
30840 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  he sqlite3_vtab_
30850 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  cursor..        
30860 2f 2f 2f 20 64 65 72 69 76 65 64 20 73 74 72 75  /// derived stru
30870 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
30880 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
30890 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
308a0 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
308b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
308c0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
308d0 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f  LiteModule" /> o
308e0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
308f0 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20  o be used...    
30900 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
30910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
30920 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
30930 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
30940 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
30950 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
30960 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
30970 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
30980 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66  e..        /// f
30990 72 6f 6d 20 77 68 69 63 68 20 74 6f 20 72 65 61  rom which to rea
309a0 64 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69  d the native poi
309b0 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
309c0 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
309d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
309e0 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
309f0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
30a00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
30a10 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
30a20 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
30a30 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
30a40 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
30a50 64 20 73 74 72 75 63 74 75 72 65 20 2d 4f 52 2d  d structure -OR-
30a60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
30a70 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 2e  ee cref="IntPtr.
30a80 5a 65 72 6f 22 2f 3e 20 69 66 20 69 74 20 63 61  Zero"/> if it ca
30a90 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e  nnot be determin
30aa0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
30ab0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
30ac0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
30ad0 74 69 63 20 49 6e 74 50 74 72 20 54 61 62 6c 65  tic IntPtr Table
30ae0 46 72 6f 6d 43 75 72 73 6f 72 28 0d 0a 20 20 20  FromCursor(..   
30af0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
30b00 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20  odule module,.. 
30b10 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
30b20 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
30b30 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
30b40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30b50 20 69 66 20 28 70 43 75 72 73 6f 72 20 3d 3d 20   if (pCursor == 
30b60 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
30b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30b80 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f  turn IntPtr.Zero
30b90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30ba0 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
30bb0 52 65 61 64 49 6e 74 50 74 72 28 70 43 75 72 73  ReadIntPtr(pCurs
30bc0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  or);..        }.
30bd0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
30be0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
30bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c30 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
30c40 20 20 23 72 65 67 69 6f 6e 20 54 61 62 6c 65 20    #region Table 
30c50 4c 6f 6f 6b 75 70 20 4d 65 74 68 6f 64 73 0d 0a  Lookup Methods..
30c60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
30c70 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
30c80 2f 2f 20 52 65 61 64 73 20 61 6e 64 20 72 65 74  // Reads and ret
30c90 75 72 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20  urns the native 
30ca0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
30cb0 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
30cc0 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ved..        ///
30cd0 20 73 74 72 75 63 74 75 72 65 20 62 61 73 65 64   structure based
30ce0 20 6f 6e 20 74 68 65 20 6e 61 74 69 76 65 20 70   on the native p
30cf0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
30d00 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
30d10 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  r..        /// d
30d20 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
30d30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
30d40 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
30d50 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
30d60 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
30d70 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
30d80 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
30d90 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
30da0 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64  b_cursor derived
30db0 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20   structure..    
30dc0 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 77 68 69      /// from whi
30dd0 63 68 20 74 6f 20 72 65 61 64 20 74 68 65 20 6e  ch to read the n
30de0 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
30df0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
30e00 62 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 20  b derived..     
30e10 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65     /// structure
30e20 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
30e30 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
30e40 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
30e50 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
30e60 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
30e70 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
30e80 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
30e90 74 75 72 65 20 2d 4f 52 2d 0d 0a 20 20 20 20 20  ture -OR-..     
30ea0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
30eb0 3d 22 49 6e 74 50 74 72 2e 5a 65 72 6f 22 2f 3e  ="IntPtr.Zero"/>
30ec0 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65   if it cannot be
30ed0 20 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20   determined...  
30ee0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
30ef0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
30f00 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
30f10 49 6e 74 50 74 72 20 54 61 62 6c 65 46 72 6f 6d  IntPtr TableFrom
30f20 43 75 72 73 6f 72 28 0d 0a 20 20 20 20 20 20 20  Cursor(..       
30f30 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
30f40 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
30f50 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
30f60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30f70 6e 20 54 61 62 6c 65 46 72 6f 6d 43 75 72 73 6f  n TableFromCurso
30f80 72 28 74 68 69 73 2c 20 70 43 75 72 73 6f 72 29  r(this, pCursor)
30f90 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
30fa0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
30fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
30ff0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
31000 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
31010 20 20 2f 2f 2f 20 4c 6f 6f 6b 73 20 75 70 20 61    /// Looks up a
31020 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c  nd returns the <
31030 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
31040 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e  VirtualTable" />
31050 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20   object..       
31060 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 62 61   /// instance ba
31070 73 65 64 20 6f 6e 20 74 68 65 20 6e 61 74 69 76  sed on the nativ
31080 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
31090 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
310a0 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  rived..        /
310b0 2f 2f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  // structure... 
310c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
310d0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
310e0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
310f0 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
31100 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
31110 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
31120 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
31130 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
31140 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
31150 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
31160 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
31170 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
31180 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
31190 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
311a0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 6f  bject instance o
311b0 72 20 6e 75 6c 6c 20 69 66 0d 0a 20 20 20 20 20  r null if..     
311c0 20 20 20 2f 2f 2f 20 74 68 65 20 63 6f 72 72 65     /// the corre
311d0 73 70 6f 6e 64 69 6e 67 20 6f 6e 65 20 63 61 6e  sponding one can
311e0 6e 6f 74 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20  not be found... 
311f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
31200 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
31210 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
31220 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
31230 62 6c 65 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74  ble TableFromInt
31240 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
31250 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
31260 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
31270 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31280 20 20 20 20 20 20 69 66 20 28 70 56 74 61 62 20        if (pVtab 
31290 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
312a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
312b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312c0 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56  SetTableError(pV
312d0 74 61 62 2c 20 22 69 6e 76 61 6c 69 64 20 6e 61  tab, "invalid na
312e0 74 69 76 65 20 74 61 62 6c 65 22 29 3b 0d 0a 20  tive table");.. 
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31300 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
31310 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
31320 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
31330 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
31340 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
31350 20 20 20 69 66 20 28 28 74 61 62 6c 65 73 20 21     if ((tables !
31360 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
31370 20 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c              tabl
31380 65 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 70  es.TryGetValue(p
31390 56 74 61 62 2c 20 6f 75 74 20 74 61 62 6c 65 29  Vtab, out table)
313a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
313b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
313c0 20 20 72 65 74 75 72 6e 20 74 61 62 6c 65 3b 0d    return table;.
313d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
313e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65  ..            Se
313f0 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  tTableError(pVta
31400 62 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  b, String.Format
31410 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31420 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
31430 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
31440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31450 22 6d 61 6e 61 67 65 64 20 74 61 62 6c 65 20 66  "managed table f
31460 6f 72 20 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e 64  or {0} not found
31470 22 2c 20 70 56 74 61 62 29 29 3b 0d 0a 0d 0a 20  ", pVtab));.... 
31480 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31490 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
314a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
314b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
314c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
314d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
314e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
314f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31500 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
31510 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f          /// Allo
31520 63 61 74 65 73 20 61 6e 64 20 72 65 74 75 72 6e  cates and return
31530 73 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  s a native point
31540 65 72 20 74 6f 20 61 20 73 71 6c 69 74 65 33 5f  er to a sqlite3_
31550 76 74 61 62 20 64 65 72 69 76 65 64 0d 0a 20 20  vtab derived..  
31560 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74        /// struct
31570 75 72 65 20 61 6e 64 20 63 72 65 61 74 65 73 20  ure and creates 
31580 61 6e 20 61 73 73 6f 63 69 61 74 69 6f 6e 20 62  an association b
31590 65 74 77 65 65 6e 20 69 74 20 61 6e 64 20 74 68  etween it and th
315a0 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20  e specified..   
315b0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
315c0 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
315d0 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  lTable" /> objec
315e0 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
315f0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
31600 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
31610 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61   <param name="ta
31620 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
31630 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
31640 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
31650 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
31660 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65 20 75  instance to be u
31670 73 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  sed..        ///
31680 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74   when creating t
31690 68 65 20 61 73 73 6f 63 69 61 74 69 6f 6e 2e 0d  he association..
316a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
316b0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
316c0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
316d0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
316e0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
316f0 61 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  a sqlite3_vtab d
31700 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
31710 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
31720 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
31730 74 72 2e 5a 65 72 6f 22 2f 3e 20 69 66 20 74 68  tr.Zero"/> if th
31740 65 20 6d 65 74 68 6f 64 20 66 61 69 6c 73 20 66  e method fails f
31750 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e 2e 0d 0a  or any reason...
31760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
31770 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
31780 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
31790 6c 20 49 6e 74 50 74 72 20 54 61 62 6c 65 54 6f  l IntPtr TableTo
317a0 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20  IntPtr(..       
317b0 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
317c0 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 0d 0a 20  alTable table.. 
317d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
317e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
317f0 20 20 20 20 20 69 66 20 28 28 74 61 62 6c 65 20       if ((table 
31800 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 74 61 62  == null) || (tab
31810 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  les == null)).. 
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31830 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72  eturn IntPtr.Zer
31840 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
31850 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 20 3d    IntPtr pVtab =
31860 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
31870 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
31880 73 75 63 63 65 73 73 20 3d 20 66 61 6c 73 65 3b  success = false;
31890 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
318a0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
318b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
318c0 20 20 20 20 70 56 74 61 62 20 3d 20 41 6c 6c 6f      pVtab = Allo
318d0 63 61 74 65 54 61 62 6c 65 28 29 3b 0d 0a 0d 0a  cateTable();....
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318f0 69 66 20 28 70 56 74 61 62 20 21 3d 20 49 6e 74  if (pVtab != Int
31900 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
31910 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31930 20 20 5a 65 72 6f 54 61 62 6c 65 28 70 56 74 61    ZeroTable(pVta
31940 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b);..           
31950 20 20 20 20 20 20 20 20 20 74 61 62 6c 65 2e 4e           table.N
31960 61 74 69 76 65 48 61 6e 64 6c 65 20 3d 20 70 56  ativeHandle = pV
31970 74 61 62 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tab;..          
31980 20 20 20 20 20 20 20 20 20 20 74 61 62 6c 65 73            tables
31990 2e 41 64 64 28 70 56 74 61 62 2c 20 74 61 62 6c  .Add(pVtab, tabl
319a0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
319b0 20 20 20 20 20 20 20 20 20 73 75 63 63 65 73 73           success
319c0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
319d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
319e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
319f0 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
31a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
31a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a20 69 66 20 28 21 73 75 63 63 65 73 73 20 26 26 20  if (!success && 
31a30 28 70 56 74 61 62 20 21 3d 20 49 6e 74 50 74 72  (pVtab != IntPtr
31a40 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20  .Zero))..       
31a50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a70 46 72 65 65 54 61 62 6c 65 28 70 56 74 61 62 29  FreeTable(pVtab)
31a80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
31a90 20 20 20 20 20 20 20 70 56 74 61 62 20 3d 20 49         pVtab = I
31aa0 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
31ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31ac0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
31ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
31ae0 75 72 6e 20 70 56 74 61 62 3b 0d 0a 20 20 20 20  urn pVtab;..    
31af0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
31b00 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
31b10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
31b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
31b60 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
31b70 43 75 72 73 6f 72 20 4c 6f 6f 6b 75 70 20 4d 65  Cursor Lookup Me
31b80 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
31b90 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
31ba0 20 20 20 20 20 20 2f 2f 2f 20 4c 6f 6f 6b 73 20        /// Looks 
31bb0 75 70 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  up and returns t
31bc0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
31bd0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
31be0 43 75 72 73 6f 72 22 20 2f 3e 0d 0a 20 20 20 20  Cursor" />..    
31bf0 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69      /// object i
31c00 6e 73 74 61 6e 63 65 20 62 61 73 65 64 20 6f 6e  nstance based on
31c10 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   the native poin
31c20 74 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ter to the..    
31c30 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
31c40 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69  vtab_cursor deri
31c50 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
31c60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
31c70 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
31c80 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
31c90 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
31ca0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
31cb0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
31cc0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
31cd0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
31ce0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
31cf0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
31d00 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
31d10 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
31d20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
31d30 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
31d40 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
31d50 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72  rsor derived str
31d60 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
31d70 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
31d80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
31d90 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
31da0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
31db0 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
31dc0 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62  bleCursor" /> ob
31dd0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 6f 72  ject instance or
31de0 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   null..        /
31df0 2f 2f 20 69 66 20 74 68 65 20 63 6f 72 72 65 73  // if the corres
31e00 70 6f 6e 64 69 6e 67 20 6f 6e 65 20 63 61 6e 6e  ponding one cann
31e10 6f 74 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20  ot be found...  
31e20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
31e30 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
31e40 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
31e50 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
31e60 6c 65 43 75 72 73 6f 72 20 43 75 72 73 6f 72 46  leCursor CursorF
31e70 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  romIntPtr(..    
31e80 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
31e90 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
31ea0 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f     IntPtr pCurso
31eb0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
31ec0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
31ed0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 75           if (pCu
31ee0 72 73 6f 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  rsor == IntPtr.Z
31ef0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
31f00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31f10 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72       SetTableErr
31f20 6f 72 28 70 56 74 61 62 2c 20 22 69 6e 76 61 6c  or(pVtab, "inval
31f30 69 64 20 6e 61 74 69 76 65 20 63 75 72 73 6f 72  id native cursor
31f40 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
31f50 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
31f60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
31f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31f80 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
31f90 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 3b  leCursor cursor;
31fa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31fb0 69 66 20 28 28 63 75 72 73 6f 72 73 20 21 3d 20  if ((cursors != 
31fc0 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
31fd0 20 20 20 20 20 20 20 20 20 20 63 75 72 73 6f 72            cursor
31fe0 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 70 43  s.TryGetValue(pC
31ff0 75 72 73 6f 72 2c 20 6f 75 74 20 63 75 72 73 6f  ursor, out curso
32000 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
32010 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32020 20 20 20 20 72 65 74 75 72 6e 20 63 75 72 73 6f      return curso
32030 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
32040 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32050 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70   SetTableError(p
32060 56 74 61 62 2c 20 53 74 72 69 6e 67 2e 46 6f 72  Vtab, String.For
32070 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
32080 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
32090 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
320a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
320b0 20 20 20 22 6d 61 6e 61 67 65 64 20 63 75 72 73     "managed curs
320c0 6f 72 20 66 6f 72 20 7b 30 7d 20 6e 6f 74 20 66  or for {0} not f
320d0 6f 75 6e 64 22 2c 20 70 43 75 72 73 6f 72 29 29  ound", pCursor))
320e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
320f0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
32100 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32110 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
32120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
32160 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
32170 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
32180 2f 20 41 6c 6c 6f 63 61 74 65 73 20 61 6e 64 20  / Allocates and 
32190 72 65 74 75 72 6e 73 20 61 20 6e 61 74 69 76 65  returns a native
321a0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 73 71   pointer to a sq
321b0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
321c0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  r..        /// d
321d0 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
321e0 20 61 6e 64 20 63 72 65 61 74 65 73 20 61 6e 20   and creates an 
321f0 61 73 73 6f 63 69 61 74 69 6f 6e 20 62 65 74 77  association betw
32200 65 65 6e 20 69 74 20 61 6e 64 20 74 68 65 0d 0a  een it and the..
32210 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63          /// spec
32220 69 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d  ified <see cref=
32230 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
32240 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62  bleCursor" /> ob
32250 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
32260 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
32270 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
32280 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
32290 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
322a0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
322b0 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
322c0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
322d0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
322e0 63 65 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20  ce to be..      
322f0 20 20 2f 2f 2f 20 75 73 65 64 20 77 68 65 6e 20    /// used when 
32300 63 72 65 61 74 69 6e 67 20 74 68 65 20 61 73 73  creating the ass
32310 6f 63 69 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  ociation...     
32320 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
32330 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
32340 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
32350 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
32360 6f 69 6e 74 65 72 20 74 6f 20 61 20 73 71 6c 69  ointer to a sqli
32370 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
32380 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
32390 65 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e or..        //
323a0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  / <see cref="Int
323b0 50 74 72 2e 5a 65 72 6f 22 2f 3e 20 69 66 20 74  Ptr.Zero"/> if t
323c0 68 65 20 6d 65 74 68 6f 64 20 66 61 69 6c 73 20  he method fails 
323d0 66 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e 2e 0d  for any reason..
323e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
323f0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
32400 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
32410 61 6c 20 49 6e 74 50 74 72 20 43 75 72 73 6f 72  al IntPtr Cursor
32420 54 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  ToIntPtr(..     
32430 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
32440 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
32450 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  cursor..        
32460 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
32470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
32480 20 28 28 63 75 72 73 6f 72 20 3d 3d 20 6e 75 6c   ((cursor == nul
32490 6c 29 20 7c 7c 20 28 63 75 72 73 6f 72 73 20 3d  l) || (cursors =
324a0 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
324b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
324c0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
324d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
324e0 50 74 72 20 70 43 75 72 73 6f 72 20 3d 20 49 6e  Ptr pCursor = In
324f0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
32500 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 75 63          bool suc
32510 63 65 73 73 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  cess = false;...
32520 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
32530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
32540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32550 20 70 43 75 72 73 6f 72 20 3d 20 41 6c 6c 6f 63   pCursor = Alloc
32560 61 74 65 43 75 72 73 6f 72 28 29 3b 0d 0a 0d 0a  ateCursor();....
32570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32580 69 66 20 28 70 43 75 72 73 6f 72 20 21 3d 20 49  if (pCursor != I
32590 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
325a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
325b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325c0 20 20 20 20 63 75 72 73 6f 72 2e 4e 61 74 69 76      cursor.Nativ
325d0 65 48 61 6e 64 6c 65 20 3d 20 70 43 75 72 73 6f  eHandle = pCurso
325e0 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
325f0 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 73 2e          cursors.
32600 41 64 64 28 70 43 75 72 73 6f 72 2c 20 63 75 72  Add(pCursor, cur
32610 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  sor);..         
32620 20 20 20 20 20 20 20 20 20 20 20 73 75 63 63 65             succe
32630 73 73 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ss = true;..    
32640 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32650 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
32660 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
32670 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
32680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32690 20 20 69 66 20 28 21 73 75 63 63 65 73 73 20 26    if (!success &
326a0 26 20 28 70 43 75 72 73 6f 72 20 21 3d 20 49 6e  & (pCursor != In
326b0 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20  tPtr.Zero))..   
326c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
326d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326e0 20 20 20 20 46 72 65 65 43 75 72 73 6f 72 28 70      FreeCursor(p
326f0 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20  Cursor);..      
32700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
32710 75 72 73 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a  ursor = IntPtr.Z
32720 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
32730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
32740 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32750 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 43 75        return pCu
32760 72 73 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rsor;..        }
32770 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
32780 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
32790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
327a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
327b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
327c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
327d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
327e0 20 20 20 23 72 65 67 69 6f 6e 20 54 61 62 6c 65     #region Table
327f0 20 44 65 63 6c 61 72 61 74 69 6f 6e 20 48 65 6c   Declaration Hel
32800 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
32810 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
32820 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
32830 41 74 74 65 6d 70 74 73 20 74 6f 20 64 65 63 6c  Attempts to decl
32840 61 72 65 20 74 68 65 20 73 63 68 65 6d 61 20 66  are the schema f
32850 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  or the virtual t
32860 61 62 6c 65 20 75 73 69 6e 67 20 74 68 65 0d 0a  able using the..
32870 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63          /// spec
32880 69 66 69 65 64 20 64 61 74 61 62 61 73 65 20 63  ified database c
32890 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
328a0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
328b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
328c0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
328d0 6e 65 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20  nection">..     
328e0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
328f0 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e  cref="SQLiteConn
32900 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63  ection" /> objec
32910 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 75 73  t instance to us
32920 65 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20  e when..        
32930 2f 2f 2f 20 64 65 63 6c 61 72 69 6e 67 20 74 68  /// declaring th
32940 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20  e schema of the 
32950 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
32960 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
32970 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
32980 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
32990 71 6c 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ql">..        //
329a0 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e  / The string con
329b0 74 61 69 6e 69 6e 67 20 74 68 65 20 43 52 45 41  taining the CREA
329c0 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
329d0 6e 74 20 74 68 61 74 20 63 6f 6d 70 6c 65 74 65  nt that complete
329e0 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ly..        /// 
329f0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 73 63  describes the sc
32a00 68 65 6d 61 20 66 6f 72 20 74 68 65 20 76 69 72  hema for the vir
32a10 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
32a20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
32a30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
32a40 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f  param name="erro
32a50 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
32a60 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20 74   Upon failure, t
32a70 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
32a80 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
32a90 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 72 72  o contain an err
32aa0 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
32ab0 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20  message...      
32ac0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
32ad0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
32ae0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
32af0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
32b00 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
32b10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
32b20 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
32b30 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
32b40 74 75 61 6c 20 53 51 4c 69 74 65 45 72 72 6f 72  tual SQLiteError
32b50 43 6f 64 65 20 44 65 63 6c 61 72 65 54 61 62 6c  Code DeclareTabl
32b60 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
32b70 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
32b80 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20   connection,..  
32b90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
32ba0 20 73 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20   sql,..         
32bb0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
32bc0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
32bd0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
32be0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
32bf0 6f 6e 6e 65 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c  onnection == nul
32c00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
32c10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32c20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
32c30 6c 69 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 22 3b  lid connection";
32c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32c50 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
32c60 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
32c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
32c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
32c90 4c 69 74 65 42 61 73 65 20 73 71 6c 69 74 65 42  LiteBase sqliteB
32ca0 61 73 65 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  ase = connection
32cb0 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20  ._sql;....      
32cc0 20 20 20 20 20 20 69 66 20 28 73 71 6c 69 74 65        if (sqlite
32cd0 42 61 73 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Base == null).. 
32ce0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
32d00 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f  ror = "connectio
32d10 6e 20 68 61 73 20 69 6e 76 61 6c 69 64 20 68 61  n has invalid ha
32d20 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  ndle";..        
32d30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
32d40 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
32d50 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  rror;..         
32d60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32d70 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74      return sqlit
32d80 65 42 61 73 65 2e 44 65 63 6c 61 72 65 56 69 72  eBase.DeclareVir
32d90 74 75 61 6c 54 61 62 6c 65 28 74 68 69 73 2c 20  tualTable(this, 
32da0 73 71 6c 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  sql, ref error);
32db0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
32dc0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
32dd0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
32de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
32e30 65 67 69 6f 6e 20 45 72 72 6f 72 20 48 61 6e 64  egion Error Hand
32e40 6c 69 6e 67 20 48 65 6c 70 65 72 20 4d 65 74 68  ling Helper Meth
32e50 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
32e60 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
32e70 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73      /// Arranges
32e80 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
32e90 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ed error message
32ea0 20 74 6f 20 62 65 20 70 6c 61 63 65 64 20 69 6e   to be placed in
32eb0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
32ec0 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66 69 65 6c  /// zErrMsg fiel
32ed0 64 20 6f 66 20 61 20 73 71 6c 69 74 65 33 5f 76  d of a sqlite3_v
32ee0 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
32ef0 63 74 75 72 65 2c 20 66 72 65 65 69 6e 67 20 74  cture, freeing t
32f00 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
32f10 65 78 69 73 74 69 6e 67 20 65 72 72 6f 72 20 6d  existing error m
32f20 65 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d  essage, if any..
32f30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
32f40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
32f50 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
32f60 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
32f70 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
32f80 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
32f90 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
32fa0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
32fb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
32fc0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
32fd0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
32fe0 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20  "error">..      
32ff0 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
33000 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20  message...      
33010 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
33020 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
33030 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
33040 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e  // Non-zero upon
33050 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20   success...     
33060 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
33070 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  >..        prote
33080 63 74 65 64 20 76 69 72 74 75 61 6c 20 62 6f 6f  cted virtual boo
33090 6c 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28  l SetTableError(
330a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
330b0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
330c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
330d0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
330e0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
330f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
33100 75 72 6e 20 53 65 74 54 61 62 6c 65 45 72 72 6f  urn SetTableErro
33110 72 28 74 68 69 73 2c 20 70 56 74 61 62 2c 20 4c  r(this, pVtab, L
33120 6f 67 45 72 72 6f 72 73 2c 20 65 72 72 6f 72 29  ogErrors, error)
33130 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
33140 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
33150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
33190 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
331a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
331b0 20 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73 20 66    /// Arranges f
331c0 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64  or the specified
331d0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
331e0 6f 20 62 65 20 70 6c 61 63 65 64 20 69 6e 74 6f  o be placed into
331f0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
33200 2f 20 7a 45 72 72 4d 73 67 20 66 69 65 6c 64 20  / zErrMsg field 
33210 6f 66 20 61 20 73 71 6c 69 74 65 33 5f 76 74 61  of a sqlite3_vta
33220 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
33230 75 72 65 2c 20 66 72 65 65 69 6e 67 20 74 68 65  ure, freeing the
33240 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 78  ..        /// ex
33250 69 73 74 69 6e 67 20 65 72 72 6f 72 20 6d 65 73  isting error mes
33260 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20  sage, if any... 
33270 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
33280 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
33290 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
332a0 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  table">..       
332b0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
332c0 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
332d0 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  lTable" /> objec
332e0 74 20 69 6e 73 74 61 6e 63 65 20 75 73 65 64 20  t instance used 
332f0 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
33300 6c 6f 6f 6b 75 70 20 74 68 65 20 6e 61 74 69 76  lookup the nativ
33310 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
33320 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
33330 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
33340 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
33350 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
33360 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
33370 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20  "error">..      
33380 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
33390 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20  message...      
333a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
333b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
333c0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
333d0 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e  // Non-zero upon
333e0 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20   success...     
333f0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
33400 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  >..        prote
33410 63 74 65 64 20 76 69 72 74 75 61 6c 20 62 6f 6f  cted virtual boo
33420 6c 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28  l SetTableError(
33430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
33440 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
33450 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
33460 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f       string erro
33470 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
33480 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
33490 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
334a0 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 74 68  SetTableError(th
334b0 69 73 2c 20 74 61 62 6c 65 2c 20 4c 6f 67 45 72  is, table, LogEr
334c0 72 6f 72 73 2c 20 65 72 72 6f 72 29 3b 0d 0a 20  rors, error);.. 
334d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
334e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
334f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33530 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
33540 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
33550 2f 20 41 72 72 61 6e 67 65 73 20 66 6f 72 20 74  / Arranges for t
33560 68 65 20 73 70 65 63 69 66 69 65 64 20 65 72 72  he specified err
33570 6f 72 20 6d 65 73 73 61 67 65 20 74 6f 20 62 65  or message to be
33580 20 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65   placed into the
33590 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 7a 45  ..        /// zE
335a0 72 72 4d 73 67 20 66 69 65 6c 64 20 6f 66 20 61  rrMsg field of a
335b0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
335c0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2c  rived structure,
335d0 20 66 72 65 65 69 6e 67 20 74 68 65 0d 0a 20 20   freeing the..  
335e0 20 20 20 20 20 20 2f 2f 2f 20 65 78 69 73 74 69        /// existi
335f0 6e 67 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ng error message
33600 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20  , if any...     
33610 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
33620 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
33630 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73  param name="curs
33640 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
33650 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
33660 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
33670 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62  bleCursor" /> ob
33680 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 75 73  ject instance us
33690 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  ed to..        /
336a0 2f 2f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 6e 61  // lookup the na
336b0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
336c0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
336d0 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
336e0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
336f0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
33700 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
33710 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
33720 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 72 72       /// The err
33730 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20  or message...   
33740 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
33750 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
33760 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
33770 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75    /// Non-zero u
33780 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20  pon success...  
33790 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
337a0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
337b0 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
337c0 62 6f 6f 6c 20 53 65 74 43 75 72 73 6f 72 45 72  bool SetCursorEr
337d0 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ror(..          
337e0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
337f0 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
33800 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
33810 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
33820 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
33830 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33840 20 20 20 20 72 65 74 75 72 6e 20 53 65 74 43 75      return SetCu
33850 72 73 6f 72 45 72 72 6f 72 28 74 68 69 73 2c 20  rsorError(this, 
33860 63 75 72 73 6f 72 2c 20 4c 6f 67 45 72 72 6f 72  cursor, LogError
33870 73 2c 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  s, error);..    
33880 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
33890 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
338a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
338b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
338c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
338d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
338e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
338f0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
33900 53 74 61 74 69 63 20 45 72 72 6f 72 20 48 61 6e  Static Error Han
33910 64 6c 69 6e 67 20 48 65 6c 70 65 72 20 4d 65 74  dling Helper Met
33920 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
33930 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
33940 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e 67 65       /// Arrange
33950 73 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  s for the specif
33960 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ied error messag
33970 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64 20 69  e to be placed i
33980 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20  nto the..       
33990 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66 69 65   /// zErrMsg fie
339a0 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65 33 5f  ld of a sqlite3_
339b0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
339c0 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e 67 20  ucture, freeing 
339d0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
339e0 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f 72 20   existing error 
339f0 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e  message, if any.
33a00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
33a10 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
33a20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
33a30 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
33a40 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
33a50 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
33a60 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  dule" /> object 
33a70 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65 20 75  instance to be u
33a80 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
33a90 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
33aa0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
33ab0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
33ac0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
33ad0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
33ae0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
33af0 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
33b00 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
33b10 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
33b20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
33b30 6d 65 3d 22 6c 6f 67 45 72 72 6f 72 73 22 3e 0d  me="logErrors">.
33b40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
33b50 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 65 72  -zero if this er
33b60 72 6f 72 20 6d 65 73 73 61 67 65 20 73 68 6f 75  ror message shou
33b70 6c 64 20 61 6c 73 6f 20 62 65 20 6c 6f 67 67 65  ld also be logge
33b80 64 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  d using the..   
33b90 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
33ba0 65 66 3d 22 53 51 4c 69 74 65 4c 6f 67 22 20 2f  ef="SQLiteLog" /
33bb0 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20  > class...      
33bc0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
33bd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
33be0 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e  am name="error">
33bf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
33c00 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  e error message.
33c10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
33c20 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
33c30 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
33c40 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
33c50 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65 73 73  ero upon success
33c60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
33c70 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
33c80 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
33c90 63 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c 65 45  c bool SetTableE
33ca0 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20  rror(..         
33cb0 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20     SQLiteModule 
33cc0 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20  module,..       
33cd0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
33ce0 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
33cf0 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d  bool logErrors,.
33d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
33d10 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
33d20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
33d30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33d40 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
33d50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33d60 20 20 20 20 20 69 66 20 28 6c 6f 67 45 72 72 6f       if (logErro
33d70 72 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs)..           
33d80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33d90 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
33da0 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
33db0 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
33dc0 2e 45 72 72 6f 72 2c 0d 0a 20 20 20 20 20 20 20  .Error,..       
33dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33de0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43   String.Format(C
33df0 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
33e00 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
33e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e20 20 20 20 20 22 56 69 72 74 75 61 6c 20 74 61 62      "Virtual tab
33e30 6c 65 20 65 72 72 6f 72 3a 20 7b 30 7d 22 2c 20  le error: {0}", 
33e40 65 72 72 6f 72 29 29 3b 20 2f 2a 20 74 68 72 6f  error)); /* thro
33e50 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
33e60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33e70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
33e80 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
33e90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33ea0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
33eb0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
33ec0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
33ed0 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61 62         if (pVtab
33ee0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
33ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33f00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
33f10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33f20 6e 74 20 6f 66 66 73 65 74 20 3d 20 49 6e 74 50  nt offset = IntP
33f30 74 72 2e 53 69 7a 65 20 2b 20 73 69 7a 65 6f 66  tr.Size + sizeof
33f40 28 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  (int);..        
33f50 20 20 20 20 49 6e 74 50 74 72 20 70 45 72 72 6f      IntPtr pErro
33f60 72 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61  r = SQLiteMarsha
33f70 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 70 56 74  l.ReadIntPtr(pVt
33f80 61 62 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ab, offset);....
33f90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33fa0 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72  pError != IntPtr
33fb0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
33fc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33fd0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
33fe0 6f 72 79 2e 46 72 65 65 28 70 45 72 72 6f 72 29  ory.Free(pError)
33ff0 3b 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74  ; pError = IntPt
34000 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
34010 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
34020 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50  arshal.WriteIntP
34030 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74  tr(pVtab, offset
34040 2c 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  , pError);..    
34050 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34060 20 20 20 20 20 20 20 20 20 69 66 20 28 65 72 72           if (err
34070 6f 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  or == null)..   
34080 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
34090 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
340a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 75           bool su
340b0 63 63 65 73 73 20 3d 20 66 61 6c 73 65 3b 0d 0a  ccess = false;..
340c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
340d0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
340e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
340f0 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74    pError = SQLit
34100 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
34110 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 65 72 72  trFromString(err
34120 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
34130 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73        SQLiteMars
34140 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28  hal.WriteIntPtr(
34150 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c 20 70  pVtab, offset, p
34160 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  Error);..       
34170 20 20 20 20 20 20 20 20 20 73 75 63 63 65 73 73           success
34180 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
34190 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
341a0 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
341b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
341c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
341d0 28 21 73 75 63 63 65 73 73 20 26 26 20 28 70 45  (!success && (pE
341e0 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  rror != IntPtr.Z
341f0 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ero))..         
34200 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
34220 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
34230 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20  pError);..      
34240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
34250 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
34260 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
34270 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
34280 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34290 20 20 20 20 20 72 65 74 75 72 6e 20 73 75 63 63       return succ
342a0 65 73 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ess;..        }.
342b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
342c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34300 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
34310 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
34320 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e 67 65       /// Arrange
34330 73 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  s for the specif
34340 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ied error messag
34350 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64 20 69  e to be placed i
34360 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20  nto the..       
34370 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66 69 65   /// zErrMsg fie
34380 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65 33 5f  ld of a sqlite3_
34390 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
343a0 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e 67 20  ucture, freeing 
343b0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
343c0 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f 72 20   existing error 
343d0 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e  message, if any.
343e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
343f0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
34400 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
34410 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
34420 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
34430 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
34440 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  dule" /> object 
34450 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65 20 75  instance to be u
34460 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
34470 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
34480 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
34490 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
344a0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
344b0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
344c0 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
344d0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
344e0 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20  used to..       
344f0 20 2f 2f 2f 20 6c 6f 6f 6b 75 70 20 74 68 65 20   /// lookup the 
34500 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
34510 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
34520 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
34530 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
34540 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
34550 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
34560 6e 61 6d 65 3d 22 6c 6f 67 45 72 72 6f 72 73 22  name="logErrors"
34570 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
34580 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20  on-zero if this 
34590 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 68  error message sh
345a0 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20 6c 6f 67  ould also be log
345b0 67 65 64 20 75 73 69 6e 67 20 74 68 65 0d 0a 20  ged using the.. 
345c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
345d0 63 72 65 66 3d 22 53 51 4c 69 74 65 4c 6f 67 22  cref="SQLiteLog"
345e0 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20   /> class...    
345f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
34600 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
34610 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72  aram name="error
34620 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
34630 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  The error messag
34640 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
34650 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
34660 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
34670 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
34680 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65  -zero upon succe
34690 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
346a0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
346b0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
346c0 74 69 63 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c  tic bool SetTabl
346d0 65 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20  eError(..       
346e0 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
346f0 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
34700 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
34710 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
34720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
34730 6f 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20  ol logErrors,.. 
34740 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
34750 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
34760 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
34770 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
34780 66 20 28 74 61 62 6c 65 20 3d 3d 20 6e 75 6c 6c  f (table == null
34790 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
347a0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
347b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
347c0 49 6e 74 50 74 72 20 70 56 74 61 62 20 3d 20 74  IntPtr pVtab = t
347d0 61 62 6c 65 2e 4e 61 74 69 76 65 48 61 6e 64 6c  able.NativeHandl
347e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
347f0 20 20 69 66 20 28 70 56 74 61 62 20 3d 3d 20 49    if (pVtab == I
34800 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
34810 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
34820 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
34830 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34840 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 6d   SetTableError(m
34850 6f 64 75 6c 65 2c 20 70 56 74 61 62 2c 20 6c 6f  odule, pVtab, lo
34860 67 45 72 72 6f 72 73 2c 20 65 72 72 6f 72 29 3b  gErrors, error);
34870 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
34880 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
34890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
348a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
348b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
348c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
348d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
348e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
348f0 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73 20 66 6f   /// Arranges fo
34900 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  r the specified 
34910 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f  error message to
34920 20 62 65 20 70 6c 61 63 65 64 20 69 6e 74 6f 20   be placed into 
34930 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
34940 20 7a 45 72 72 4d 73 67 20 66 69 65 6c 64 20 6f   zErrMsg field o
34950 66 20 61 20 73 71 6c 69 74 65 33 5f 76 74 61 62  f a sqlite3_vtab
34960 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
34970 72 65 2c 20 66 72 65 65 69 6e 67 20 74 68 65 0d  re, freeing the.
34980 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 78 69  .        /// exi
34990 73 74 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73  sting error mess
349a0 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20  age, if any...  
349b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
349c0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
349d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
349e0 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  odule">..       
349f0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
34a00 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
34a10 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
34a20 61 6e 63 65 20 74 6f 20 62 65 20 75 73 65 64 2e  ance to be used.
34a30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
34a40 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
34a50 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
34a60 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
34a70 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
34a80 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
34a90 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
34aa0 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
34ab0 72 75 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  ructure..       
34ac0 20 2f 2f 2f 20 75 73 65 64 20 74 6f 20 67 65 74   /// used to get
34ad0 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   the native poin
34ae0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
34af0 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 0d  e3_vtab derived.
34b00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72  .        /// str
34b10 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
34b20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
34b30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
34b40 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72 72 6f 72  m name="logError
34b50 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  s">..        ///
34b60 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69   Non-zero if thi
34b70 73 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  s error message 
34b80 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20 6c  should also be l
34b90 6f 67 67 65 64 20 75 73 69 6e 67 20 74 68 65 0d  ogged using the.
34ba0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
34bb0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4c 6f  e cref="SQLiteLo
34bc0 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20  g" /> class...  
34bd0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
34be0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
34bf0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
34c00 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
34c10 2f 20 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73  / The error mess
34c20 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  age...        //
34c30 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
34c40 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
34c50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
34c60 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63  on-zero upon suc
34c70 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  cess...        /
34c80 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
34c90 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
34ca0 74 61 74 69 63 20 62 6f 6f 6c 20 53 65 74 43 75  tatic bool SetCu
34cb0 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20 20 20 20  rsorError(..    
34cc0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f          SQLiteMo
34cd0 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20  dule module,..  
34ce0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
34cf0 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20   pCursor,..     
34d00 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 67 45         bool logE
34d10 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20 20 20  rrors,..        
34d20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72      string error
34d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
34d40 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
34d50 20 20 20 20 20 20 20 20 69 66 20 28 70 43 75 72          if (pCur
34d60 73 6f 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  sor == IntPtr.Ze
34d70 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
34d80 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
34d90 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
34da0 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 20 3d    IntPtr pVtab =
34db0 20 54 61 62 6c 65 46 72 6f 6d 43 75 72 73 6f 72   TableFromCursor
34dc0 28 6d 6f 64 75 6c 65 2c 20 70 43 75 72 73 6f 72  (module, pCursor
34dd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34de0 20 20 69 66 20 28 70 56 74 61 62 20 3d 3d 20 49    if (pVtab == I
34df0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
34e00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
34e10 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
34e20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34e30 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 6d   SetTableError(m
34e40 6f 64 75 6c 65 2c 20 70 56 74 61 62 2c 20 6c 6f  odule, pVtab, lo
34e50 67 45 72 72 6f 72 73 2c 20 65 72 72 6f 72 29 3b  gErrors, error);
34e60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
34e70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
34e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
34ec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
34ed0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
34ee0 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73 20 66 6f   /// Arranges fo
34ef0 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  r the specified 
34f00 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f  error message to
34f10 20 62 65 20 70 6c 61 63 65 64 20 69 6e 74 6f 20   be placed into 
34f20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
34f30 20 7a 45 72 72 4d 73 67 20 66 69 65 6c 64 20 6f   zErrMsg field o
34f40 66 20 61 20 73 71 6c 69 74 65 33 5f 76 74 61 62  f a sqlite3_vtab
34f50 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
34f60 72 65 2c 20 66 72 65 65 69 6e 67 20 74 68 65 0d  re, freeing the.
34f70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 78 69  .        /// exi
34f80 73 74 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73  sting error mess
34f90 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20  age, if any...  
34fa0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
34fb0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
34fc0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
34fd0 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  odule">..       
34fe0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
34ff0 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
35000 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
35010 61 6e 63 65 20 74 6f 20 62 65 20 75 73 65 64 2e  ance to be used.
35020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
35030 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
35040 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
35050 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
35060 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
35070 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
35080 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
35090 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
350a0 63 65 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20  ce used to..    
350b0 20 20 20 20 2f 2f 2f 20 6c 6f 6f 6b 75 70 20 74      /// lookup t
350c0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
350d0 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
350e0 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
350f0 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
35100 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
35110 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
35120 61 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72 72 6f  am name="logErro
35130 72 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rs">..        //
35140 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
35150 69 73 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  is error message
35160 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20   should also be 
35170 6c 6f 67 67 65 64 20 75 73 69 6e 67 20 74 68 65  logged using the
35180 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
35190 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4c  ee cref="SQLiteL
351a0 6f 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20  og" /> class... 
351b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
351c0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
351d0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72   <param name="er
351e0 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ror">..        /
351f0 2f 2f 20 54 68 65 20 65 72 72 6f 72 20 6d 65 73  // The error mes
35200 73 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sage...        /
35210 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
35220 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
35230 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
35240 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75  Non-zero upon su
35250 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
35260 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
35270 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
35280 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 65 74 43  static bool SetC
35290 75 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20 20 20  ursorError(..   
352a0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
352b0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20  odule module,.. 
352c0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
352d0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
352e0 73 6f 72 20 63 75 72 73 6f 72 2c 0d 0a 20 20 20  sor cursor,..   
352f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f           bool lo
35300 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20  gErrors,..      
35310 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72        string err
35320 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
35330 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
35340 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
35350 72 73 6f 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rsor == null).. 
35360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35370 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
35380 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
35390 74 72 20 70 43 75 72 73 6f 72 20 3d 20 63 75 72  tr pCursor = cur
353a0 73 6f 72 2e 4e 61 74 69 76 65 48 61 6e 64 6c 65  sor.NativeHandle
353b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
353c0 20 69 66 20 28 70 43 75 72 73 6f 72 20 3d 3d 20   if (pCursor == 
353d0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
353e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
353f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
35400 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
35410 6e 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72  n SetCursorError
35420 28 6d 6f 64 75 6c 65 2c 20 70 43 75 72 73 6f 72  (module, pCursor
35430 2c 20 6c 6f 67 45 72 72 6f 72 73 2c 20 65 72 72  , logErrors, err
35440 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  or);..        }.
35450 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
35460 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
35470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35480 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
354c0 20 20 23 72 65 67 69 6f 6e 20 49 6e 64 65 78 20    #region Index 
354d0 48 61 6e 64 6c 69 6e 67 20 48 65 6c 70 65 72 20  Handling Helper 
354e0 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
354f0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
35500 20 20 20 20 20 20 20 20 2f 2f 2f 20 4d 6f 64 69          /// Modi
35510 66 69 65 73 20 74 68 65 20 73 70 65 63 69 66 69  fies the specifi
35520 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
35530 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f 62  LiteIndex" /> ob
35540 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20  ject instance.. 
35550 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 63 6f         /// to co
35560 6e 74 61 69 6e 20 74 68 65 20 73 70 65 63 69 66  ntain the specif
35570 69 65 64 20 65 73 74 69 6d 61 74 65 64 20 63 6f  ied estimated co
35580 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  st...        ///
35590 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
355a0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
355b0 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
355c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
355d0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
355e0 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74  Index" /> object
355f0 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 6d 6f 64   instance to mod
35600 69 66 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ify...        //
35610 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
35620 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
35630 61 6d 65 3d 22 65 73 74 69 6d 61 74 65 64 43 6f  ame="estimatedCo
35640 73 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  st">..        //
35650 2f 20 54 68 65 20 65 73 74 69 6d 61 74 65 64 20  / The estimated 
35660 63 6f 73 74 20 76 61 6c 75 65 20 74 6f 20 75 73  cost value to us
35670 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
35680 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
35690 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
356a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
356b0 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65  -zero upon succe
356c0 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
356d0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
356e0 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76       protected v
356f0 69 72 74 75 61 6c 20 62 6f 6f 6c 20 53 65 74 45  irtual bool SetE
35700 73 74 69 6d 61 74 65 64 43 6f 73 74 28 0d 0a 20  stimatedCost(.. 
35710 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
35720 65 49 6e 64 65 78 20 69 6e 64 65 78 2c 0d 0a 20  eIndex index,.. 
35730 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
35740 65 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74 0d  e estimatedCost.
35750 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
35760 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35770 20 20 20 20 20 20 20 69 66 20 28 28 69 6e 64 65         if ((inde
35780 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 69  x == null) || (i
35790 6e 64 65 78 2e 4f 75 74 70 75 74 73 20 3d 3d 20  ndex.Outputs == 
357a0 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
357b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
357c0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
357d0 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75       index.Outpu
357e0 74 73 2e 45 73 74 69 6d 61 74 65 64 43 6f 73 74  ts.EstimatedCost
357f0 20 3d 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74   = estimatedCost
35800 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
35810 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
35820 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35830 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
35840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35870 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
35880 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
35890 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
358a0 4d 6f 64 69 66 69 65 73 20 74 68 65 20 73 70 65  Modifies the spe
358b0 63 69 66 69 65 64 20 3c 73 65 65 20 63 72 65 66  cified <see cref
358c0 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f  ="SQLiteIndex" /
358d0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
358e0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
358f0 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 64 65  o contain the de
35900 66 61 75 6c 74 20 65 73 74 69 6d 61 74 65 64 20  fault estimated 
35910 63 6f 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  cost...        /
35920 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
35930 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
35940 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d  m name="index">.
35950 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
35960 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
35970 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65  teIndex" /> obje
35980 63 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 6d  ct instance to m
35990 6f 64 69 66 79 2e 0d 0a 20 20 20 20 20 20 20 20  odify...        
359a0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
359b0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
359c0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
359d0 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73   Non-zero upon s
359e0 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  uccess...       
359f0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
35a00 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
35a10 65 64 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20  ed virtual bool 
35a20 53 65 74 45 73 74 69 6d 61 74 65 64 43 6f 73 74  SetEstimatedCost
35a30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
35a40 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78  QLiteIndex index
35a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
35a60 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
35a70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
35a80 65 74 45 73 74 69 6d 61 74 65 64 43 6f 73 74 28  etEstimatedCost(
35a90 69 6e 64 65 78 2c 20 44 65 66 61 75 6c 74 45 73  index, DefaultEs
35aa0 74 69 6d 61 74 65 64 43 6f 73 74 29 3b 0d 0a 20  timatedCost);.. 
35ab0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
35ac0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
35ad0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
35ae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
35af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
35b40 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
35b50 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
35b60 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6c    private bool l
35b70 6f 67 45 72 72 6f 72 73 3b 0d 0a 20 20 20 20 20  ogErrors;..     
35b80 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
35b90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65  ..        /// Re
35ba0 74 75 72 6e 73 20 6f 72 20 73 65 74 73 20 61 20  turns or sets a 
35bb0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 69 6e  boolean value in
35bc0 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
35bd0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
35be0 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 72 72 6f          /// erro
35bf0 72 73 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 67  rs should be log
35c00 67 65 64 20 75 73 69 6e 67 20 74 68 65 20 3c 73  ged using the <s
35c10 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4c  ee cref="SQLiteL
35c20 6f 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20  og" /> class... 
35c30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
35c40 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
35c50 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 62 6f  ublic virtual bo
35c60 6f 6c 20 4c 6f 67 45 72 72 6f 72 73 0d 0a 20 20  ol LogErrors..  
35c70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35c80 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
35c90 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
35ca0 72 6e 20 6c 6f 67 45 72 72 6f 72 73 3b 20 7d 0d  rn logErrors; }.
35cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
35cc0 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
35cd0 28 29 3b 20 6c 6f 67 45 72 72 6f 72 73 20 3d 20  (); logErrors = 
35ce0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
35cf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
35d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
35d50 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6c    private bool l
35d60 6f 67 45 78 63 65 70 74 69 6f 6e 73 3b 0d 0a 20  ogExceptions;.. 
35d70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
35d80 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
35d90 2f 20 52 65 74 75 72 6e 73 20 6f 72 20 73 65 74  / Returns or set
35da0 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
35db0 65 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  e indicating whe
35dc0 74 68 65 72 20 65 78 63 65 70 74 69 6f 6e 73 0d  ther exceptions.
35dd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 75  .        /// cau
35de0 67 68 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ght in the..    
35df0 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
35e00 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
35e10 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65  Module.xDisconne
35e20 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2c 0d 0a  ct" /> method,..
35e30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
35e40 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
35e50 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74  tiveModule.xDest
35e60 72 6f 79 22 20 2f 3e 20 6d 65 74 68 6f 64 2c 20  roy" /> method, 
35e70 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20  and the..       
35e80 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
35e90 44 69 73 70 6f 73 65 28 29 22 20 2f 3e 20 6d 65  Dispose()" /> me
35ea0 74 68 6f 64 20 73 68 6f 75 6c 64 20 62 65 20 6c  thod should be l
35eb0 6f 67 67 65 64 20 75 73 69 6e 67 20 74 68 65 0d  ogged using the.
35ec0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
35ed0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4c 6f  e cref="SQLiteLo
35ee0 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20  g" /> class...  
35ef0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
35f00 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
35f10 62 6c 69 63 20 76 69 72 74 75 61 6c 20 62 6f 6f  blic virtual boo
35f20 6c 20 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 0d  l LogExceptions.
35f30 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
35f40 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
35f50 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
35f60 65 74 75 72 6e 20 6c 6f 67 45 78 63 65 70 74 69  eturn logExcepti
35f70 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ons; }..        
35f80 20 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44      set { CheckD
35f90 69 73 70 6f 73 65 64 28 29 3b 20 6c 6f 67 45 78  isposed(); logEx
35fa0 63 65 70 74 69 6f 6e 73 20 3d 20 76 61 6c 75 65  ceptions = value
35fb0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
35fc0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
35fd0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
35fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36020 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
36030 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65   #region ISQLite
36040 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 4d 65 6d  NativeModule Mem
36050 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  bers..        //
36060 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
36070 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
36080 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
36090 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
360a0 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68  xCreate" /> meth
360b0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
360c0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
360d0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
360e0 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20  name="pDb">..   
360f0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
36100 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
36110 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
36120 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68  xCreate" /> meth
36130 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
36140 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
36150 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
36160 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20 20  me="pAux">..    
36170 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
36180 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
36190 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
361a0 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Create" /> metho
361b0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
361c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
361d0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
361e0 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20  e="argc">..     
361f0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
36200 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
36210 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
36220 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
36230 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
36240 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
36250 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
36260 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20  ="argv">..      
36270 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
36280 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
36290 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
362a0 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  eate" /> method.
362b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
362c0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
362d0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
362e0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
362f0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
36300 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
36310 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
36320 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  eate" /> method.
36330 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
36340 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
36350 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
36360 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20  "pError">..     
36370 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
36380 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
36390 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
363a0 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
363b0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
363c0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
363d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
363e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
363f0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
36400 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
36410 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d  le.xCreate" /> m
36420 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
36430 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
36440 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
36450 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
36460 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20  xCreate(..      
36470 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62        IntPtr pDb
36480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
36490 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
364a0 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
364b0 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
364c0 49 6e 74 50 74 72 5b 5d 20 61 72 67 76 2c 0d 0a  IntPtr[] argv,..
364d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
364e0 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
364f0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
36500 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20  ntPtr pError..  
36510 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
36520 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36530 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
36540 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36550 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
36560 69 6c 65 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65  ileName = SQLite
36570 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f  String.StringFro
36580 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20  mUtf8IntPtr(..  
36590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365a0 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
365b0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62  thods.sqlite3_db
365c0 5f 66 69 6c 65 6e 61 6d 65 28 70 44 62 2c 20 49  _filename(pDb, I
365d0 6e 74 50 74 72 2e 5a 65 72 6f 29 29 3b 0d 0a 0d  ntPtr.Zero));...
365e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
365f0 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
36600 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
36610 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
36620 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
36630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36640 20 20 20 20 20 70 44 62 2c 20 66 69 6c 65 4e 61       pDb, fileNa
36650 6d 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  me, false))..   
36660 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
36670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36680 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
36690 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 6e  lTable table = n
366a0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
366b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
366c0 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a   error = null;..
366d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
366e0 20 20 20 20 20 20 69 66 20 28 43 72 65 61 74 65        if (Create
366f0 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 70 41 75  (connection, pAu
36700 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
36710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36720 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74 72  SQLiteString.Str
36730 69 6e 67 41 72 72 61 79 46 72 6f 6d 55 74 66 38  ingArrayFromUtf8
36740 49 6e 74 50 74 72 41 72 72 61 79 28 61 72 67 76  IntPtrArray(argv
36750 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
36760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36770 72 65 66 20 74 61 62 6c 65 2c 20 72 65 66 20 65  ref table, ref e
36780 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 45  rror) == SQLiteE
36790 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
367a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
367c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
367d0 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d  (table != null).
367e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
367f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
36800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36810 20 20 20 20 20 20 20 20 70 56 74 61 62 20 3d 20          pVtab = 
36820 54 61 62 6c 65 54 6f 49 6e 74 50 74 72 28 74 61  TableToIntPtr(ta
36830 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble);..         
36840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36850 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
36860 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
36870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36880 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
36890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368a0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
368b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
368d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
368e0 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74  Error = SQLiteSt
368f0 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
36900 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20  romString(..    
36910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36920 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20              "no 
36930 74 61 62 6c 65 20 77 61 73 20 63 72 65 61 74 65  table was create
36940 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d");..          
36950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
36960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36970 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
36980 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
36990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
369a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
369b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369c0 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65   pError = SQLite
369d0 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
369e0 72 46 72 6f 6d 53 74 72 69 6e 67 28 65 72 72 6f  rFromString(erro
369f0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
36a00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
36a10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
36a20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
36a30 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
36a40 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
36a50 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
36a60 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
36a70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36a80 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72            pError
36a90 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
36aa0 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
36ab0 72 69 6e 67 28 65 2e 54 6f 53 74 72 69 6e 67 28  ring(e.ToString(
36ac0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
36ad0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36ae0 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
36af0 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
36b00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
36b10 20 20 20 20 20 20 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 2f  ////////////////
36b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
36b60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
36b70 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
36b80 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
36b90 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
36ba0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
36bb0 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ect" /> method..
36bc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
36bd0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
36be0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
36bf0 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20  ="pDb">..       
36c00 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
36c10 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
36c20 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
36c30 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
36c40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
36c50 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
36c60 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
36c70 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20  "pAux">..       
36c80 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
36c90 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
36ca0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
36cb0 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
36cc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
36cd0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
36ce0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
36cf0 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20  "argc">..       
36d00 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
36d10 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
36d20 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
36d30 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
36d40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
36d50 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
36d60 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
36d70 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20  "argv">..       
36d80 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
36d90 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
36da0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
36db0 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
36dc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
36dd0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
36de0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
36df0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
36e00 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
36e10 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
36e20 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
36e30 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
36e40 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
36e50 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
36e60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
36e70 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20  ="pError">..    
36e80 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
36e90 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
36ea0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
36eb0 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68  Connect" /> meth
36ec0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
36ed0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
36ee0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
36ef0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65  ..        /// Se
36f00 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
36f10 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
36f20 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
36f30 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
36f40 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
36f50 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
36f60 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  te SQLiteErrorCo
36f70 64 65 20 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20  de xConnect(..  
36f80 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
36f90 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20 20   pDb,..         
36fa0 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c 0d     IntPtr pAux,.
36fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
36fc0 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
36fd0 20 20 20 20 49 6e 74 50 74 72 5b 5d 20 61 72 67      IntPtr[] arg
36fe0 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  v,..            
36ff0 72 65 66 20 49 6e 74 50 74 72 20 70 56 74 61 62  ref IntPtr pVtab
37000 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
37010 65 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72  ef IntPtr pError
37020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
37030 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
37040 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
37050 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37060 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
37070 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 53 51  ng fileName = SQ
37080 4c 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e  LiteString.Strin
37090 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28  gFromUtf8IntPtr(
370a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
370b0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
370c0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
370d0 33 5f 64 62 5f 66 69 6c 65 6e 61 6d 65 28 70 44  3_db_filename(pD
370e0 62 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29  b, IntPtr.Zero))
370f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37100 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
37110 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
37120 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51  nection = new SQ
37130 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d  LiteConnection(.
37140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37150 20 20 20 20 20 20 20 20 20 70 44 62 2c 20 66 69           pDb, fi
37160 6c 65 4e 61 6d 65 2c 20 66 61 6c 73 65 29 29 0d  leName, false)).
37170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37180 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37190 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
371a0 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
371b0 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
371c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
371d0 72 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c  ring error = nul
371e0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
371f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 43 6f            if (Co
37200 6e 6e 65 63 74 28 63 6f 6e 6e 65 63 74 69 6f 6e  nnect(connection
37210 2c 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20  , pAux,..       
37220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37230 20 20 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e       SQLiteStrin
37240 67 2e 53 74 72 69 6e 67 41 72 72 61 79 46 72 6f  g.StringArrayFro
37250 6d 55 74 66 38 49 6e 74 50 74 72 41 72 72 61 79  mUtf8IntPtrArray
37260 28 61 72 67 76 29 2c 0d 0a 20 20 20 20 20 20 20  (argv),..       
37270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37280 20 20 20 20 20 72 65 66 20 74 61 62 6c 65 2c 20       ref table, 
37290 72 65 66 20 65 72 72 6f 72 29 20 3d 3d 20 53 51  ref error) == SQ
372a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
372b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
372c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
372d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372e0 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e    if (table != n
372f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
37300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37320 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74               pVt
37330 61 62 20 3d 20 54 61 62 6c 65 54 6f 49 6e 74 50  ab = TableToIntP
37340 74 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20  tr(table);..    
37350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37360 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
37370 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
37380 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
37390 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
373a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373b0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
373c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
373e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373f0 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c      pError = SQL
37400 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e  iteString.Utf8In
37410 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d  tPtrFromString(.
37420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37440 20 22 6e 6f 20 74 61 62 6c 65 20 77 61 73 20 63   "no table was c
37450 72 65 61 74 65 64 22 29 3b 0d 0a 20 20 20 20 20  reated");..     
37460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37470 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
37480 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
37490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374a0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
374b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374d0 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53        pError = S
374e0 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
374f0 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
37500 28 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20  (error);..      
37510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
37520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37530 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
37540 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
37550 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
37560 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74  e) /* NOTE: Must
37570 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a   catch ALL. */..
37580 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
375a0 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74  Error = SQLiteSt
375b0 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
375c0 72 6f 6d 53 74 72 69 6e 67 28 65 2e 54 6f 53 74  romString(e.ToSt
375d0 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
375e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
375f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
37600 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
37610 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
37620 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
37630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37670 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
37680 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
37690 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
376a0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
376b0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
376c0 78 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d  xBestIndex" /> m
376d0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
376e0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
376f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
37700 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
37710 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65  ..        /// Se
37720 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
37730 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
37740 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 22  dule.xBestIndex"
37750 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
37760 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
37770 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
37780 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64  param name="pInd
37790 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ex">..        //
377a0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
377b0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
377c0 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e  veModule.xBestIn
377d0 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  dex" /> method..
377e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
377f0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
37800 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
37810 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
37820 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
37830 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
37840 2e 78 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20  .xBestIndex" /> 
37850 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
37860 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
37870 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
37880 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
37890 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20   xBestIndex(..  
378a0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
378b0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
378c0 20 20 20 20 20 49 6e 74 50 74 72 20 70 49 6e 64       IntPtr pInd
378d0 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
378e0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
378f0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
37900 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
37920 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
37930 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72   table = TableFr
37940 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b  omIntPtr(pVtab);
37950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37960 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d      if (table !=
37970 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
37980 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
379a0 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78  QLiteIndex index
379b0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
379c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379d0 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49 6e  SQLiteMarshal.In
379e0 64 65 78 46 72 6f 6d 49 6e 74 50 74 72 28 70 49  dexFromIntPtr(pI
379f0 6e 64 65 78 2c 20 72 65 66 20 69 6e 64 65 78 29  ndex, ref index)
37a00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37a10 20 20 20 20 20 20 20 20 20 69 66 20 28 42 65 73           if (Bes
37a20 74 49 6e 64 65 78 28 74 61 62 6c 65 2c 20 69 6e  tIndex(table, in
37a30 64 65 78 29 20 3d 3d 20 53 51 4c 69 74 65 45 72  dex) == SQLiteEr
37a40 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
37a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37a70 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
37a80 74 65 4d 61 72 73 68 61 6c 2e 49 6e 64 65 78 54  teMarshal.IndexT
37a90 6f 49 6e 74 50 74 72 28 69 6e 64 65 78 2c 20 70  oIntPtr(index, p
37aa0 49 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  Index);..       
37ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ac0 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
37ad0 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
37ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37af0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
37b00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
37b10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
37b20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
37b30 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d  on e) /* NOTE: M
37b40 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a  ust catch ALL. *
37b50 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
37b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37b70 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
37b80 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e  pVtab, e.ToStrin
37b90 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
37ba0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
37bb0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
37bc0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
37bd0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
37be0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
37bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
37c30 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
37c40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
37c50 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
37c60 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
37c70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69  NativeModule.xDi
37c80 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  sconnect" /> met
37c90 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
37ca0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
37cb0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
37cc0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
37cd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
37ce0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
37cf0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
37d00 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20  le.xDisconnect" 
37d10 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
37d20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
37d30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
37d40 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
37d50 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
37d60 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
37d70 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73  ativeModule.xDi