System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 4c0d235881ada299fd034550a29aeb4325de023c:


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 69 6e 74 65 72 6e 61  ass..    interna
201f0 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53  l static class S
20200 51 4c 69 74 65 4d 65 6d 6f 72 79 0d 0a 20 20 20  QLiteMemory..   
20210 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
20220 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74 61  ion Private Data
20230 0d 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f  ..#if TRACK_MEMO
20240 52 59 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20  RY_BYTES..      
20250 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
20260 20 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74   object syncRoot
20270 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b   = new object();
20280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
20290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
202e0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
202f0 74 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64  t bytesAllocated
20300 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
20310 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6d 61  te static int ma
20320 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61  ximumBytesAlloca
20330 74 65 64 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ted;..#endif..  
20340 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
20350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
20360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
203b0 72 65 67 69 6f 6e 20 4d 65 6d 6f 72 79 20 41 6c  region Memory Al
203c0 6c 6f 63 61 74 69 6f 6e 20 48 65 6c 70 65 72 20  location Helper 
203d0 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
203e0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49   public static I
203f0 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 28 69  ntPtr Allocate(i
20400 6e 74 20 73 69 7a 65 29 0d 0a 20 20 20 20 20 20  nt size)..      
20410 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20420 20 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79 20   IntPtr pMemory 
20430 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
20440 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61  thods.sqlite3_ma
20450 6c 6c 6f 63 28 73 69 7a 65 29 3b 0d 0a 0d 0a 23  lloc(size);....#
20460 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f  if TRACK_MEMORY_
20470 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20 20  BYTES..         
20480 20 20 20 69 66 20 28 70 4d 65 6d 6f 72 79 20 21     if (pMemory !
20490 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
204a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
204b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
204c0 6e 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20 53  nt blockSize = S
204d0 69 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d  ize(pMemory);...
204e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
204f0 20 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20 3e   if (blockSize >
20500 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
20510 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20520 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
20530 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
20540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20550 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20560 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
20570 73 41 6c 6c 6f 63 61 74 65 64 20 2b 3d 20 62 6c  sAllocated += bl
20580 6f 63 6b 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20  ockSize;....    
20590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205a0 20 20 20 20 69 66 20 28 62 79 74 65 73 41 6c 6c      if (bytesAll
205b0 6f 63 61 74 65 64 20 3e 20 6d 61 78 69 6d 75 6d  ocated > maximum
205c0 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 29 0d  BytesAllocated).
205d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
205e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78               max
205f0 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74  imumBytesAllocat
20600 65 64 20 3d 20 62 79 74 65 73 41 6c 6c 6f 63 61  ed = bytesAlloca
20610 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
20620 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
20630 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
20640 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
20650 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
20660 20 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d       return pMem
20670 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ory;..        }.
20680 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
206c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
206e0 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
206f0 53 69 7a 65 28 49 6e 74 50 74 72 20 70 4d 65 6d  Size(IntPtr pMem
20700 6f 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ory)..        {.
20710 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
20720 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
20730 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
20740 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
20750 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a  lite3_malloc_siz
20760 65 5f 69 6e 74 65 72 6f 70 28 70 4d 65 6d 6f 72  e_interop(pMemor
20770 79 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  y);..#else..    
20780 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30          return 0
20790 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
207a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
207b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20800 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
20810 20 76 6f 69 64 20 46 72 65 65 28 49 6e 74 50 74   void Free(IntPt
20820 72 20 70 4d 65 6d 6f 72 79 29 0d 0a 20 20 20 20  r pMemory)..    
20830 20 20 20 20 7b 0d 0a 23 69 66 20 54 52 41 43 4b      {..#if TRACK
20840 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20  _MEMORY_BYTES.. 
20850 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
20860 4d 65 6d 6f 72 79 20 21 3d 20 49 6e 74 50 74 72  Memory != IntPtr
20870 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
20880 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20890 20 20 20 20 20 20 20 69 6e 74 20 62 6c 6f 63 6b         int block
208a0 53 69 7a 65 20 3d 20 53 69 7a 65 28 70 4d 65 6d  Size = Size(pMem
208b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
208c0 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6c 6f           if (blo
208d0 63 6b 53 69 7a 65 20 3e 20 30 29 0d 0a 20 20 20  ckSize > 0)..   
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
208f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20900 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f      lock (syncRo
20910 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ot)..           
20920 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20940 20 20 20 20 62 79 74 65 73 41 6c 6c 6f 63 61 74      bytesAllocat
20950 65 64 20 2d 3d 20 62 6c 6f 63 6b 53 69 7a 65 3b  ed -= blockSize;
20960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20970 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20980 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
20990 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
209a0 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
209b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
209c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72 65  hods.sqlite3_fre
209d0 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 20 20 20  e(pMemory);..   
209e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
209f0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
20a00 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
20a10 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
20a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
20a70 69 6f 6e 20 53 51 4c 69 74 65 53 74 72 69 6e 67  ion SQLiteString
20a80 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20   Static Class.. 
20a90 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
20aa0 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 53  ic class SQLiteS
20ab0 74 72 69 6e 67 0d 0a 20 20 20 20 7b 0d 0a 20 20  tring..    {..  
20ac0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
20ad0 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
20ae0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
20af0 20 73 74 61 74 69 63 20 69 6e 74 20 54 68 69 72   static int Thir
20b00 74 79 42 69 74 73 20 3d 20 30 78 33 66 66 66 66  tyBits = 0x3ffff
20b10 66 66 66 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  fff;..        pr
20b20 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
20b30 64 6f 6e 6c 79 20 45 6e 63 6f 64 69 6e 67 20 55  donly Encoding U
20b40 74 66 38 45 6e 63 6f 64 69 6e 67 20 3d 20 45 6e  tf8Encoding = En
20b50 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20  coding.UTF8;..  
20b60 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
20b70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
20b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bc0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
20bd0 72 65 67 69 6f 6e 20 55 54 46 2d 38 20 45 6e 63  region UTF-8 Enc
20be0 6f 64 69 6e 67 20 48 65 6c 70 65 72 20 4d 65 74  oding Helper Met
20bf0 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75  hods..        pu
20c00 62 6c 69 63 20 73 74 61 74 69 63 20 62 79 74 65  blic static byte
20c10 5b 5d 20 47 65 74 55 74 66 38 42 79 74 65 73 46  [] GetUtf8BytesF
20c20 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20  romString(..    
20c30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
20c40 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
20c50 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
20c60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20c70 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c90 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20cb0 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e 67 2e  rn Utf8Encoding.
20cc0 47 65 74 42 79 74 65 73 28 76 61 6c 75 65 29 3b  GetBytes(value);
20cd0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
20ce0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20d30 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
20d40 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
20d50 65 74 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38  etStringFromUtf8
20d60 42 79 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Bytes(..        
20d70 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73      byte[] bytes
20d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
20d90 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
20da0 20 20 20 20 20 20 20 20 69 66 20 28 62 79 74 65          if (byte
20db0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
20dc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20dd0 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20  rn null;....#if 
20de0 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
20df0 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
20e00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
20e10 74 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 53  tf8Encoding.GetS
20e20 74 72 69 6e 67 28 62 79 74 65 73 29 3b 0d 0a 23  tring(bytes);..#
20e30 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
20e40 20 20 72 65 74 75 72 6e 20 55 74 66 38 45 6e 63    return Utf8Enc
20e50 6f 64 69 6e 67 2e 47 65 74 53 74 72 69 6e 67 28  oding.GetString(
20e60 62 79 74 65 73 2c 20 30 2c 20 62 79 74 65 73 2e  bytes, 0, bytes.
20e70 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66  Length);..#endif
20e80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
20e90 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
20ea0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
20eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ef0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
20f00 65 67 69 6f 6e 20 55 54 46 2d 38 20 53 74 72 69  egion UTF-8 Stri
20f10 6e 67 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  ng Helper Method
20f20 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  s..        publi
20f30 63 20 73 74 61 74 69 63 20 69 6e 74 20 50 72 6f  c static int Pro
20f40 62 65 46 6f 72 55 74 66 38 42 79 74 65 4c 65 6e  beForUtf8ByteLen
20f50 67 74 68 28 0d 0a 20 20 20 20 20 20 20 20 20 20  gth(..          
20f60 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65 2c    IntPtr pValue,
20f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
20f80 74 20 6c 69 6d 69 74 0d 0a 20 20 20 20 20 20 20  t limit..       
20f90 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
20fa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
20fb0 6e 74 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0d 0a  nt length = 0;..
20fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
20fd0 20 28 70 56 61 6c 75 65 20 21 3d 20 49 6e 74 50   (pValue != IntP
20fe0 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
20ff0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21000 20 20 20 20 20 20 20 20 20 64 6f 0d 0a 20 20 20           do..   
21010 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
21020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21030 20 20 20 20 69 66 20 28 4d 61 72 73 68 61 6c 2e      if (Marshal.
21040 52 65 61 64 42 79 74 65 28 70 56 61 6c 75 65 2c  ReadByte(pValue,
21050 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 0d 0a   length) == 0)..
21060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21070 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
21080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21090 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68        if (length
210a0 20 3e 3d 20 6c 69 6d 69 74 29 0d 0a 20 20 20 20   >= limit)..    
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210c0 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a 20 20      break;....  
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210e0 20 20 6c 65 6e 67 74 68 2b 2b 3b 0d 0a 20 20 20    length++;..   
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 77               } w
21100 68 69 6c 65 20 28 74 72 75 65 29 3b 0d 0a 20 20  hile (true);..  
21110 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21120 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21130 6e 20 6c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20  n length;..     
21140 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21190 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
211a0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
211b0 20 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46 72   string StringFr
211c0 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20  omUtf8IntPtr(.. 
211d0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
211e0 72 20 70 56 61 6c 75 65 0d 0a 20 20 20 20 20 20  r pValue..      
211f0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
21200 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21210 72 65 74 75 72 6e 20 53 74 72 69 6e 67 46 72 6f  return StringFro
21220 6d 55 74 66 38 49 6e 74 50 74 72 28 70 56 61 6c  mUtf8IntPtr(pVal
21230 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
21240 20 20 20 20 20 50 72 6f 62 65 46 6f 72 55 74 66       ProbeForUtf
21250 38 42 79 74 65 4c 65 6e 67 74 68 28 70 56 61 6c  8ByteLength(pVal
21260 75 65 2c 20 54 68 69 72 74 79 42 69 74 73 29 29  ue, ThirtyBits))
21270 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
21280 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
212d0 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
212e0 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
212f0 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
21300 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
21310 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65     IntPtr pValue
21320 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
21330 6e 74 20 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20  nt length..     
21340 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
21350 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21360 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49   if (pValue == I
21370 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
21380 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
21390 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
213a0 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e           if (len
213b0 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
213c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
213d0 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
213e0 62 79 74 65 73 20 3d 20 6e 65 77 20 62 79 74 65  bytes = new byte
213f0 5b 6c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20  [length];....   
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72               Mar
21410 73 68 61 6c 2e 43 6f 70 79 28 70 56 61 6c 75 65  shal.Copy(pValue
21420 2c 20 62 79 74 65 73 2c 20 30 2c 20 6c 65 6e 67  , bytes, 0, leng
21430 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  th);....        
21440 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
21450 65 74 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38  etStringFromUtf8
21460 42 79 74 65 73 28 62 79 74 65 73 29 3b 0d 0a 20  Bytes(bytes);.. 
21470 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21480 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21490 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b  rn String.Empty;
214a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
214b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
214c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21500 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
21510 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20 55   static IntPtr U
21520 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
21530 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ing(..          
21540 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0d 0a    string value..
21550 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
21560 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21570 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
21580 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21590 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
215a0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
215b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
215c0 50 74 72 20 72 65 73 75 6c 74 20 3d 20 49 6e 74  Ptr result = Int
215d0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
215e0 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79         byte[] by
215f0 74 65 73 20 3d 20 47 65 74 55 74 66 38 42 79 74  tes = GetUtf8Byt
21600 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 76 61 6c  esFromString(val
21610 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
21620 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d      if (bytes ==
21630 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
21640 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
21650 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
21660 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
21670 65 6e 67 74 68 20 3d 20 62 79 74 65 73 2e 4c 65  ength = bytes.Le
21680 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ngth;....       
21690 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 51       result = SQ
216a0 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63  LiteMemory.Alloc
216b0 61 74 65 28 6c 65 6e 67 74 68 20 2b 20 31 29 3b  ate(length + 1);
216c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
216d0 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 49 6e  if (result == In
216e0 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
216f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21700 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d  rn IntPtr.Zero;.
21710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
21720 61 72 73 68 61 6c 2e 43 6f 70 79 28 62 79 74 65  arshal.Copy(byte
21730 73 2c 20 30 2c 20 72 65 73 75 6c 74 2c 20 6c 65  s, 0, result, le
21740 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 20 20  ngth);..        
21750 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74      Marshal.Writ
21760 65 42 79 74 65 28 72 65 73 75 6c 74 2c 20 6c 65  eByte(result, le
21770 6e 67 74 68 2c 20 30 29 3b 0d 0a 0d 0a 20 20 20  ngth, 0);....   
21780 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21790 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
217a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
217b0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
217c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
217d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21800 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21810 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54 46       #region UTF
21820 2d 38 20 53 74 72 69 6e 67 20 41 72 72 61 79 20  -8 String Array 
21830 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
21840 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
21850 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 53  tatic string[] S
21860 74 72 69 6e 67 41 72 72 61 79 46 72 6f 6d 55 74  tringArrayFromUt
21870 66 38 49 6e 74 50 74 72 41 72 72 61 79 28 0d 0a  f8IntPtrArray(..
21880 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
21890 74 72 5b 5d 20 70 56 61 6c 75 65 73 0d 0a 20 20  tr[] pValues..  
218a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
218b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
218c0 20 20 20 20 69 66 20 28 70 56 61 6c 75 65 73 20      if (pValues 
218d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
218e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
218f0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
21900 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 72        string[] r
21910 65 73 75 6c 74 20 3d 20 6e 65 77 20 73 74 72 69  esult = new stri
21920 6e 67 5b 70 56 61 6c 75 65 73 2e 4c 65 6e 67 74  ng[pValues.Lengt
21930 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  h];....         
21940 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
21950 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 72  x = 0; index < r
21960 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 20 69 6e  esult.Length; in
21970 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
21980 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 5b 69          result[i
21990 6e 64 65 78 5d 20 3d 20 53 74 72 69 6e 67 46 72  ndex] = StringFr
219a0 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 70 56 61  omUtf8IntPtr(pVa
219b0 6c 75 65 73 5b 69 6e 64 65 78 5d 29 3b 0d 0a 0d  lues[index]);...
219c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
219d0 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
219e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
219f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21a40 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
21a50 69 63 20 49 6e 74 50 74 72 5b 5d 20 55 74 66 38  ic IntPtr[] Utf8
21a60 49 6e 74 50 74 72 41 72 72 61 79 46 72 6f 6d 53  IntPtrArrayFromS
21a70 74 72 69 6e 67 41 72 72 61 79 28 0d 0a 20 20 20  tringArray(..   
21a80 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
21a90 5d 20 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  ] values..      
21aa0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
21ab0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21ac0 69 66 20 28 76 61 6c 75 65 73 20 3d 3d 20 6e 75  if (values == nu
21ad0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
21ae0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
21af0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
21b00 20 49 6e 74 50 74 72 5b 5d 20 72 65 73 75 6c 74   IntPtr[] result
21b10 20 3d 20 6e 65 77 20 49 6e 74 50 74 72 5b 76 61   = new IntPtr[va
21b20 6c 75 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d  lues.Length];...
21b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
21b40 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
21b50 20 69 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e   index < result.
21b60 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  Length; index++)
21b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21b80 20 20 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20    result[index] 
21b90 3d 20 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  = Utf8IntPtrFrom
21ba0 53 74 72 69 6e 67 28 76 61 6c 75 65 73 5b 69 6e  String(values[in
21bb0 64 65 78 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dex]);....      
21bc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
21bd0 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
21be0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
21bf0 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
21c00 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
21c10 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21c60 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
21c70 69 74 65 4d 61 72 73 68 61 6c 20 53 74 61 74 69  iteMarshal Stati
21c80 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 69 6e 74  c Class..    int
21c90 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61  ernal static cla
21ca0 73 73 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c  ss SQLiteMarshal
21cb0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
21cc0 20 23 72 65 67 69 6f 6e 20 49 6e 74 50 74 72 20   #region IntPtr 
21cd0 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
21ce0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
21cf0 74 61 74 69 63 20 49 6e 74 50 74 72 20 49 6e 74  tatic IntPtr Int
21d00 50 74 72 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20  PtrForOffset(.. 
21d10 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
21d20 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20  r pointer,..    
21d30 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
21d40 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
21d50 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
21d60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21d70 20 6e 65 77 20 49 6e 74 50 74 72 28 70 6f 69 6e   new IntPtr(poin
21d80 74 65 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20  ter.ToInt64() + 
21d90 6f 66 66 73 65 74 29 3b 0d 0a 20 20 20 20 20 20  offset);..      
21da0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
21db0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
21dc0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21e10 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 61        #region Ma
21e20 72 73 68 61 6c 20 52 65 61 64 20 48 65 6c 70 65  rshal Read Helpe
21e30 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
21e40 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
21e50 20 69 6e 74 20 52 65 61 64 49 6e 74 33 32 28 0d   int ReadInt32(.
21e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
21e70 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20  Ptr pointer,..  
21e80 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66            int of
21e90 66 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20  fset..          
21ea0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
21eb0 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
21ec0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
21ed0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21ee0 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  rn Marshal.ReadI
21ef0 6e 74 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66  nt32(pointer, of
21f00 66 73 65 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  fset);..#else.. 
21f10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21f20 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  n Marshal.ReadIn
21f30 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  t32(IntPtrForOff
21f40 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
21f50 73 65 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  set));..#endif..
21f60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21f70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21fc0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
21fd0 74 61 74 69 63 20 64 6f 75 62 6c 65 20 52 65 61  tatic double Rea
21fe0 64 44 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20 20  dDouble(..      
21ff0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69        IntPtr poi
22000 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  nter,..         
22010 20 20 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20     int offset.. 
22020 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
22030 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
22040 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
22050 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
22060 20 20 20 20 20 72 65 74 75 72 6e 20 42 69 74 43       return BitC
22070 6f 6e 76 65 72 74 65 72 2e 49 6e 74 36 34 42 69  onverter.Int64Bi
22080 74 73 54 6f 44 6f 75 62 6c 65 28 4d 61 72 73 68  tsToDouble(Marsh
22090 61 6c 2e 52 65 61 64 49 6e 74 36 34 28 0d 0a 20  al.ReadInt64(.. 
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
220b0 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29  ointer, offset))
220c0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
220d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 42 69 74        return Bit
220e0 43 6f 6e 76 65 72 74 65 72 2e 54 6f 44 6f 75 62  Converter.ToDoub
220f0 6c 65 28 42 69 74 43 6f 6e 76 65 72 74 65 72 2e  le(BitConverter.
22100 47 65 74 42 79 74 65 73 28 0d 0a 20 20 20 20 20  GetBytes(..     
22110 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
22120 61 6c 2e 52 65 61 64 49 6e 74 36 34 28 49 6e 74  al.ReadInt64(Int
22130 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69  PtrForOffset(poi
22140 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29 29 2c  nter, offset))),
22150 20 30 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20   0);..#endif..  
22160 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22170 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
221c0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
221d0 74 69 63 20 49 6e 74 50 74 72 20 52 65 61 64 49  tic IntPtr ReadI
221e0 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
221f0 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74      IntPtr point
22200 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
22210 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20 20   int offset..   
22220 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
22230 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
22240 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
22250 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
22260 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61     return Marsha
22270 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 70 6f 69  l.ReadIntPtr(poi
22280 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  nter, offset);..
22290 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
222a0 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61     return Marsha
222b0 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 49 6e 74  l.ReadIntPtr(Int
222c0 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69  PtrForOffset(poi
222d0 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29 3b 0d  nter, offset));.
222e0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
222f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
22300 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
22310 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22350 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22360 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 61 72       #region Mar
22370 73 68 61 6c 20 57 72 69 74 65 20 48 65 6c 70 65  shal Write Helpe
22380 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
22390 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
223a0 20 76 6f 69 64 20 57 72 69 74 65 49 6e 74 33 32   void WriteInt32
223b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
223c0 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a  ntPtr pointer,..
223d0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
223e0 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20  offset,..       
223f0 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65 0d 0a       int value..
22400 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
22410 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
22420 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
22430 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
22440 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72        Marshal.Wr
22450 69 74 65 49 6e 74 33 32 28 70 6f 69 6e 74 65 72  iteInt32(pointer
22460 2c 20 6f 66 66 73 65 74 2c 20 76 61 6c 75 65 29  , offset, value)
22470 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
22480 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72        Marshal.Wr
22490 69 74 65 49 6e 74 33 32 28 49 6e 74 50 74 72 46  iteInt32(IntPtrF
224a0 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72  orOffset(pointer
224b0 2c 20 6f 66 66 73 65 74 29 2c 20 76 61 6c 75 65  , offset), value
224c0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
224d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
224e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
224f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22500 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
22530 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
22540 63 20 76 6f 69 64 20 57 72 69 74 65 44 6f 75 62  c void WriteDoub
22550 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
22560 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c   IntPtr pointer,
22570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
22580 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20  t offset,..     
22590 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61         double va
225a0 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
225b0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23   )..        {..#
225c0 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
225d0 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
225e0 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
225f0 61 6c 2e 57 72 69 74 65 49 6e 74 36 34 28 70 6f  al.WriteInt64(po
22600 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 2c 0d 0a  inter, offset,..
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 44 6f 75  BitConverter.Dou
22630 62 6c 65 54 6f 49 6e 74 36 34 42 69 74 73 28 76  bleToInt64Bits(v
22640 61 6c 75 65 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a  alue));..#else..
22650 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
22660 68 61 6c 2e 57 72 69 74 65 49 6e 74 36 34 28 49  hal.WriteInt64(I
22670 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
22680 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c  ointer, offset),
22690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
226a0 20 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 54    BitConverter.T
226b0 6f 49 6e 74 36 34 28 42 69 74 43 6f 6e 76 65 72  oInt64(BitConver
226c0 74 65 72 2e 47 65 74 42 79 74 65 73 28 76 61 6c  ter.GetBytes(val
226d0 75 65 29 2c 20 30 29 29 3b 0d 0a 23 65 6e 64 69  ue), 0));..#endi
226e0 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
226f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22740 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
22750 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 57 72  c static void Wr
22760 69 74 65 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  iteIntPtr(..    
22770 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
22780 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20  ointer,..       
22790 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 2c       int offset,
227a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
227b0 74 50 74 72 20 76 61 6c 75 65 0d 0a 20 20 20 20  tPtr value..    
227c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
227d0 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
227e0 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
227f0 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
22800 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49    Marshal.WriteI
22810 6e 74 50 74 72 28 70 6f 69 6e 74 65 72 2c 20 6f  ntPtr(pointer, o
22820 66 66 73 65 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ffset, value);..
22830 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
22840 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65     Marshal.Write
22850 49 6e 74 50 74 72 28 49 6e 74 50 74 72 46 6f 72  IntPtr(IntPtrFor
22860 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20  Offset(pointer, 
22870 6f 66 66 73 65 74 29 2c 20 76 61 6c 75 65 29 3b  offset), value);
22880 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
22890 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
228a0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
228b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
228c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22900 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 42 79        #region By
22910 74 65 20 41 72 72 61 79 20 48 65 6c 70 65 72 20  te Array Helper 
22920 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
22930 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62   public static b
22940 79 74 65 5b 5d 20 42 79 74 65 73 46 72 6f 6d 49  yte[] BytesFromI
22950 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
22960 20 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75      IntPtr pValu
22970 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
22980 69 6e 74 20 6c 65 6e 67 74 68 0d 0a 20 20 20 20  int length..    
22990 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
229a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
229b0 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20    if (pValue == 
229c0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
229d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
229e0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
229f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 65            if (le
22a00 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ngth == 0)..    
22a10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22a20 72 6e 20 6e 65 77 20 62 79 74 65 5b 30 5d 3b 0d  rn new byte[0];.
22a30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ...            b
22a40 79 74 65 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e  yte[] result = n
22a50 65 77 20 62 79 74 65 5b 6c 65 6e 67 74 68 5d 3b  ew byte[length];
22a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22a70 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 70 56 61  Marshal.Copy(pVa
22a80 6c 75 65 2c 20 72 65 73 75 6c 74 2c 20 30 2c 20  lue, result, 0, 
22a90 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20  length);....    
22aa0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
22ab0 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
22ac0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
22ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b10 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22b20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e  public static In
22b30 74 50 74 72 20 42 79 74 65 73 54 6f 49 6e 74 50  tPtr BytesToIntP
22b40 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
22b50 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 0d 0a 20   byte[] value.. 
22b60 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
22b70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22b80 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
22b90 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
22ba0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22bb0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
22bd0 6c 65 6e 67 74 68 20 3d 20 76 61 6c 75 65 2e 4c  length = value.L
22be0 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
22bf0 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68        if (length
22c00 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
22c10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
22c20 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
22c30 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
22c40 72 20 72 65 73 75 6c 74 20 3d 20 53 51 4c 69 74  r result = SQLit
22c50 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65  eMemory.Allocate
22c60 28 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20  (length);....   
22c70 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
22c80 75 6c 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ult == IntPtr.Ze
22c90 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
22ca0 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50       return IntP
22cb0 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
22cc0 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
22cd0 43 6f 70 79 28 76 61 6c 75 65 2c 20 30 2c 20 72  Copy(value, 0, r
22ce0 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68 29 3b 0d  esult, length);.
22cf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
22d00 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
22d10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
22d20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
22d30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22d80 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
22d90 6f 6e 20 53 51 4c 69 74 65 56 61 6c 75 65 20 48  on SQLiteValue H
22da0 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
22db0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
22dc0 61 74 69 63 20 53 51 4c 69 74 65 56 61 6c 75 65  atic SQLiteValue
22dd0 5b 5d 20 56 61 6c 75 65 41 72 72 61 79 46 72 6f  [] ValueArrayFro
22de0 6d 53 69 7a 65 41 6e 64 49 6e 74 50 74 72 28 0d  mSizeAndIntPtr(.
22df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
22e00 20 6e 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20   nData,..       
22e10 20 20 20 20 20 49 6e 74 50 74 72 20 61 70 44 61       IntPtr apDa
22e20 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
22e30 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
22e40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 44            if (nD
22e50 61 74 61 20 3c 20 30 29 0d 0a 20 20 20 20 20 20  ata < 0)..      
22e60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
22e70 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
22e80 20 20 20 20 20 20 69 66 20 28 61 70 44 61 74 61        if (apData
22e90 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
22ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22eb0 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
22ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
22ed0 4c 69 74 65 56 61 6c 75 65 5b 5d 20 72 65 73 75  LiteValue[] resu
22ee0 6c 74 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56  lt = new SQLiteV
22ef0 61 6c 75 65 5b 6e 44 61 74 61 5d 3b 0d 0a 0d 0a  alue[nData];....
22f00 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
22f10 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 2c 20  (int index = 0, 
22f20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 20 20 20  offset = 0;..   
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f40 20 69 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e   index < result.
22f50 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20  Length;..       
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
22f70 65 78 2b 2b 2c 20 6f 66 66 73 65 74 20 2b 3d 20  ex++, offset += 
22f80 49 6e 74 50 74 72 2e 53 69 7a 65 29 0d 0a 20 20  IntPtr.Size)..  
22f90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
22fb0 50 74 72 20 70 44 61 74 61 20 3d 20 52 65 61 64  Ptr pData = Read
22fc0 49 6e 74 50 74 72 28 61 70 44 61 74 61 2c 20 6f  IntPtr(apData, o
22fd0 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
22fe0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
22ff0 74 5b 69 6e 64 65 78 5d 20 3d 20 28 70 44 61 74  t[index] = (pDat
23000 61 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  a != IntPtr.Zero
23010 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
23020 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
23030 69 74 65 56 61 6c 75 65 28 70 44 61 74 61 29 20  iteValue(pData) 
23040 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  : null;..       
23050 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23060 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
23070 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
23080 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
23090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
230e0 62 6c 69 63 20 73 74 61 74 69 63 20 53 51 4c 69  blic static SQLi
230f0 74 65 56 61 6c 75 65 5b 5d 20 56 61 6c 75 65 41  teValue[] ValueA
23100 72 72 61 79 46 72 6f 6d 49 6e 74 50 74 72 41 72  rrayFromIntPtrAr
23110 72 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ray(..          
23120 20 20 49 6e 74 50 74 72 5b 5d 20 76 61 6c 75 65    IntPtr[] value
23130 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  s..            )
23140 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
23150 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
23160 75 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ues == null)..  
23170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23180 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
23190 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
231a0 56 61 6c 75 65 5b 5d 20 72 65 73 75 6c 74 20 3d  Value[] result =
231b0 20 6e 65 77 20 53 51 4c 69 74 65 56 61 6c 75 65   new SQLiteValue
231c0 5b 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 5d 3b  [values.Length];
231d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
231e0 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
231f0 20 30 3b 20 69 6e 64 65 78 20 3c 20 72 65 73 75   0; index < resu
23200 6c 74 2e 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78  lt.Length; index
23210 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
23220 20 20 20 20 20 72 65 73 75 6c 74 5b 69 6e 64 65       result[inde
23230 78 5d 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56  x] = new SQLiteV
23240 61 6c 75 65 28 76 61 6c 75 65 73 5b 69 6e 64 65  alue(values[inde
23250 78 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x]);....        
23260 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
23270 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
23280 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
23290 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
232a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
232f0 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e  #region SQLiteIn
23300 64 65 78 20 48 65 6c 70 65 72 20 4d 65 74 68 6f  dex Helper Metho
23310 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ds..        publ
23320 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 49  ic static void I
23330 6e 64 65 78 46 72 6f 6d 49 6e 74 50 74 72 28 0d  ndexFromIntPtr(.
23340 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
23350 50 74 72 20 70 49 6e 64 65 78 2c 0d 0a 20 20 20  Ptr pIndex,..   
23360 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
23370 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a  iteIndex index..
23380 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
23390 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
233a0 20 20 20 20 20 20 69 66 20 28 70 49 6e 64 65 78        if (pIndex
233b0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
233c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
233d0 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
233e0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
233f0 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  set = 0;....    
23400 20 20 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e          int nCon
23410 73 74 72 61 69 6e 74 20 3d 20 52 65 61 64 49 6e  straint = ReadIn
23420 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  t32(pIndex, offs
23430 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
23440 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69      offset += si
23450 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20  zeof(int);....  
23460 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
23470 20 70 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 52   pConstraint = R
23480 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78  eadIntPtr(pIndex
23490 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20  , offset);....  
234a0 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
234b0 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b   += IntPtr.Size;
234c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
234d0 69 6e 74 20 6e 4f 72 64 65 72 42 79 20 3d 20 52  int nOrderBy = R
234e0 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c  eadInt32(pIndex,
234f0 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
23500 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 3d           index =
23510 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
23520 28 6e 43 6f 6e 73 74 72 61 69 6e 74 2c 20 6e 4f  (nConstraint, nO
23530 72 64 65 72 42 79 29 3b 0d 0a 0d 0a 20 20 20 20  rderBy);....    
23540 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b          offset +
23550 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a  = sizeof(int);..
23560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
23570 74 50 74 72 20 70 4f 72 64 65 72 42 79 20 3d 20  tPtr pOrderBy = 
23580 52 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64 65  ReadIntPtr(pInde
23590 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20  x, offset);.... 
235a0 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65             offse
235b0 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65  t += IntPtr.Size
235c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
235d0 20 49 6e 74 50 74 72 20 70 43 6f 6e 73 74 72 61   IntPtr pConstra
235e0 69 6e 74 55 73 61 67 65 20 3d 20 52 65 61 64 49  intUsage = ReadI
235f0 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66  ntPtr(pIndex, of
23600 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
23610 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
23620 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a  IntPtr.Size;....
23630 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
23640 78 2e 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 4e  x.Outputs.IndexN
23650 75 6d 62 65 72 20 3d 20 52 65 61 64 49 6e 74 33  umber = ReadInt3
23660 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  2(pIndex, offset
23670 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23680 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a 65    offset += size
23690 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  of(int);....    
236a0 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75          index.Ou
236b0 74 70 75 74 73 2e 49 6e 64 65 78 53 74 72 69 6e  tputs.IndexStrin
236c0 67 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  g = SQLiteString
236d0 2e 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49  .StringFromUtf8I
236e0 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
236f0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 46 6f          IntPtrFo
23700 72 4f 66 66 73 65 74 28 70 49 6e 64 65 78 2c 20  rOffset(pIndex, 
23710 6f 66 66 73 65 74 29 29 3b 0d 0a 0d 0a 20 20 20  offset));....   
23720 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
23730 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d  += IntPtr.Size;.
23740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
23750 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 4e 65 65  ndex.Outputs.Nee
23760 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69  dToFreeIndexStri
23770 6e 67 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70  ng = ReadInt32(p
23780 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d  Index, offset);.
23790 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ...            o
237a0 66 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28  ffset += sizeof(
237b0 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  int);....       
237c0 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75       index.Outpu
237d0 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d  ts.OrderByConsum
237e0 65 64 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70  ed = ReadInt32(p
237f0 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d  Index, offset);.
23800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ...            o
23810 66 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28  ffset += sizeof(
23820 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  int);....       
23830 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75       index.Outpu
23840 74 73 2e 45 73 74 69 6d 61 74 65 64 43 6f 73 74  ts.EstimatedCost
23850 20 3d 20 52 65 61 64 44 6f 75 62 6c 65 28 70 49   = ReadDouble(pI
23860 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
23870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
23880 74 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69  t sizeOfConstrai
23890 6e 74 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c  ntType = Marshal
238a0 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d  .SizeOf(typeof(.
238b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
238c0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
238d0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
238e0 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 29 29 3b  ex_constraint));
238f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23900 66 6f 72 20 28 69 6e 74 20 69 43 6f 6e 73 74 72  for (int iConstr
23910 61 69 6e 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74  aint = 0; iConst
23920 72 61 69 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61  raint < nConstra
23930 69 6e 74 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74  int; iConstraint
23940 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
23950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23960 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
23970 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
23980 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74  index_constraint
23990 20 63 6f 6e 73 74 72 61 69 6e 74 20 3d 0d 0a 20   constraint =.. 
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239b0 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74     new UnsafeNat
239c0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
239d0 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
239e0 69 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  int();....      
239f0 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
23a00 6c 2e 50 74 72 54 6f 53 74 72 75 63 74 75 72 65  l.PtrToStructure
23a10 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74  (IntPtrForOffset
23a20 28 70 43 6f 6e 73 74 72 61 69 6e 74 2c 0d 0a 20  (pConstraint,.. 
23a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a40 20 20 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 2a     iConstraint *
23a50 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e   sizeOfConstrain
23a60 74 54 79 70 65 29 2c 20 63 6f 6e 73 74 72 61 69  tType), constrai
23a70 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
23a80 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 49 6e          index.In
23a90 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73  puts.Constraints
23aa0 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20 3d 0d  [iConstraint] =.
23ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ac0 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 49       new SQLiteI
23ad0 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 63  ndexConstraint(c
23ae0 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 20 20 20  onstraint);..   
23af0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23b00 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 69            int si
23b10 7a 65 4f 66 4f 72 64 65 72 42 79 54 79 70 65 20  zeOfOrderByType 
23b20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66  = Marshal.SizeOf
23b30 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20  (typeof(..      
23b40 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
23b50 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
23b60 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65  lite3_index_orde
23b70 72 62 79 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rby));....      
23b80 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
23b90 4f 72 64 65 72 42 79 20 3d 20 30 3b 20 69 4f 72  OrderBy = 0; iOr
23ba0 64 65 72 42 79 20 3c 20 6e 4f 72 64 65 72 42 79  derBy < nOrderBy
23bb0 3b 20 69 4f 72 64 65 72 42 79 2b 2b 29 0d 0a 20  ; iOrderBy++).. 
23bc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
23be0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
23bf0 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
23c00 6f 72 64 65 72 62 79 20 6f 72 64 65 72 42 79 20  orderby orderBy 
23c10 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
23c20 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73 61 66         new Unsaf
23c30 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
23c40 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64  qlite3_index_ord
23c50 65 72 62 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  erby();....     
23c60 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
23c70 61 6c 2e 50 74 72 54 6f 53 74 72 75 63 74 75 72  al.PtrToStructur
23c80 65 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  e(IntPtrForOffse
23c90 74 28 70 4f 72 64 65 72 42 79 2c 0d 0a 20 20 20  t(pOrderBy,..   
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 69 4f 72 64 65 72 42 79 20 2a 20 73 69 7a 65   iOrderBy * size
23cc0 4f 66 4f 72 64 65 72 42 79 54 79 70 65 29 2c 20  OfOrderByType), 
23cd0 6f 72 64 65 72 42 79 29 3b 0d 0a 0d 0a 20 20 20  orderBy);....   
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
23cf0 65 78 2e 49 6e 70 75 74 73 2e 4f 72 64 65 72 42  ex.Inputs.OrderB
23d00 79 73 5b 69 4f 72 64 65 72 42 79 5d 20 3d 0d 0a  ys[iOrderBy] =..
23d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 49 6e      new SQLiteIn
23d30 64 65 78 4f 72 64 65 72 42 79 28 6f 72 64 65 72  dexOrderBy(order
23d40 42 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  By);..          
23d50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23d60 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f 6e     int sizeOfCon
23d70 73 74 72 61 69 6e 74 55 73 61 67 65 54 79 70 65  straintUsageType
23d80 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f   = Marshal.SizeO
23d90 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20  f(typeof(..     
23da0 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
23db0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
23dc0 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
23dd0 73 74 72 61 69 6e 74 5f 75 73 61 67 65 29 29 3b  straint_usage));
23de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23df0 66 6f 72 20 28 69 6e 74 20 69 43 6f 6e 73 74 72  for (int iConstr
23e00 61 69 6e 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74  aint = 0; iConst
23e10 72 61 69 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61  raint < nConstra
23e20 69 6e 74 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74  int; iConstraint
23e30 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
23e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23e50 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
23e60 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
23e70 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74  index_constraint
23e80 5f 75 73 61 67 65 20 63 6f 6e 73 74 72 61 69 6e  _usage constrain
23e90 74 55 73 61 67 65 20 3d 0d 0a 20 20 20 20 20 20  tUsage =..      
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
23eb0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
23ec0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
23ed0 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75  dex_constraint_u
23ee0 73 61 67 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  sage();....     
23ef0 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
23f00 61 6c 2e 50 74 72 54 6f 53 74 72 75 63 74 75 72  al.PtrToStructur
23f10 65 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  e(IntPtrForOffse
23f20 74 28 70 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  t(pConstraintUsa
23f30 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
23f40 20 20 20 20 20 20 20 20 20 69 43 6f 6e 73 74 72           iConstr
23f50 61 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e  aint * sizeOfCon
23f60 73 74 72 61 69 6e 74 55 73 61 67 65 54 79 70 65  straintUsageType
23f70 29 2c 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61  ), constraintUsa
23f80 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ge);....        
23f90 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75          index.Ou
23fa0 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
23fb0 55 73 61 67 65 73 5b 69 43 6f 6e 73 74 72 61 69  Usages[iConstrai
23fc0 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  nt] =..         
23fd0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
23fe0 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
23ff0 61 69 6e 74 55 73 61 67 65 28 63 6f 6e 73 74 72  aintUsage(constr
24000 61 69 6e 74 55 73 61 67 65 29 3b 0d 0a 20 20 20  aintUsage);..   
24010 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24020 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24030 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24070 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24080 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
24090 63 20 76 6f 69 64 20 49 6e 64 65 78 54 6f 49 6e  c void IndexToIn
240a0 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
240b0 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69     SQLiteIndex i
240c0 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndex,..         
240d0 20 20 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78     IntPtr pIndex
240e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
240f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
24100 20 20 20 20 20 20 20 20 69 66 20 28 28 69 6e 64          if ((ind
24110 65 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  ex == null) || (
24120 69 6e 64 65 78 2e 49 6e 70 75 74 73 20 3d 3d 20  index.Inputs == 
24130 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20  null) ||..      
24140 20 20 20 20 20 20 20 20 20 20 28 69 6e 64 65 78            (index
24150 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69  .Inputs.Constrai
24160 6e 74 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d  nts == null) ||.
24170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24180 20 28 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 4f   (index.Inputs.O
24190 72 64 65 72 42 79 73 20 3d 3d 20 6e 75 6c 6c 29  rderBys == null)
241a0 20 7c 7c 20 28 69 6e 64 65 78 2e 4f 75 74 70 75   || (index.Outpu
241b0 74 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a  ts == null) ||..
241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241d0 28 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43  (index.Outputs.C
241e0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 20  onstraintUsages 
241f0 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
24200 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24210 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24220 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
24230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24240 69 66 20 28 70 49 6e 64 65 78 20 3d 3d 20 49 6e  if (pIndex == In
24250 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
24260 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24270 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
24280 20 20 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20     int offset = 
24290 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
242a0 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e    int nConstrain
242b0 74 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49  t = ReadInt32(pI
242c0 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
242d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
242e0 20 28 6e 43 6f 6e 73 74 72 61 69 6e 74 20 21 3d   (nConstraint !=
242f0 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f   index.Inputs.Co
24300 6e 73 74 72 61 69 6e 74 73 2e 4c 65 6e 67 74 68  nstraints.Length
24310 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24320 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
24330 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 43            if (nC
24340 6f 6e 73 74 72 61 69 6e 74 20 21 3d 20 69 6e 64  onstraint != ind
24350 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74  ex.Outputs.Const
24360 72 61 69 6e 74 55 73 61 67 65 73 2e 4c 65 6e 67  raintUsages.Leng
24370 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  th)..           
24380 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
24390 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
243a0 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74  et += sizeof(int
243b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
243c0 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 73 74 72    IntPtr pConstr
243d0 61 69 6e 74 20 3d 20 52 65 61 64 49 6e 74 50 74  aint = ReadIntPt
243e0 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  r(pIndex, offset
243f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24400 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50    offset += IntP
24410 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20  tr.Size;....    
24420 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4f 72 64          int nOrd
24430 65 72 42 79 20 3d 20 52 65 61 64 49 6e 74 33 32  erBy = ReadInt32
24440 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29  (pIndex, offset)
24450 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24460 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f   offset += sizeo
24470 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  f(int);....     
24480 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4f         IntPtr pO
24490 72 64 65 72 42 79 20 3d 20 52 65 61 64 49 6e 74  rderBy = ReadInt
244a0 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  Ptr(pIndex, offs
244b0 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
244c0 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e      offset += In
244d0 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20  tPtr.Size;....  
244e0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
244f0 20 70 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67   pConstraintUsag
24500 65 20 3d 20 52 65 61 64 49 6e 74 50 74 72 28 70  e = ReadIntPtr(p
24510 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d  Index, offset);.
24520 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
24530 6e 74 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61  nt sizeOfConstra
24540 69 6e 74 54 79 70 65 20 3d 20 4d 61 72 73 68 61  intType = Marsha
24550 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28  l.SizeOf(typeof(
24560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24570 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
24580 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
24590 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 29 29  dex_constraint))
245a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
245b0 20 66 6f 72 20 28 69 6e 74 20 69 43 6f 6e 73 74   for (int iConst
245c0 72 61 69 6e 74 20 3d 20 30 3b 20 69 43 6f 6e 73  raint = 0; iCons
245d0 74 72 61 69 6e 74 20 3c 20 6e 43 6f 6e 73 74 72  traint < nConstr
245e0 61 69 6e 74 3b 20 69 43 6f 6e 73 74 72 61 69 6e  aint; iConstrain
245f0 74 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t++)..          
24600 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24610 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
24620 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
24630 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
24640 74 20 63 6f 6e 73 74 72 61 69 6e 74 20 3d 0d 0a  t constraint =..
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24660 20 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61      new UnsafeNa
24670 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
24680 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
24690 61 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  aint(..         
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
246b0 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73  ndex.Inputs.Cons
246c0 74 72 61 69 6e 74 73 5b 69 43 6f 6e 73 74 72 61  traints[iConstra
246d0 69 6e 74 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  int]);....      
246e0 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
246f0 6c 2e 53 74 72 75 63 74 75 72 65 54 6f 50 74 72  l.StructureToPtr
24700 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24710 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e         constrain
24720 74 2c 20 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  t, IntPtrForOffs
24730 65 74 28 70 43 6f 6e 73 74 72 61 69 6e 74 2c 0d  et(pConstraint,.
24740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24750 20 20 20 20 20 69 43 6f 6e 73 74 72 61 69 6e 74       iConstraint
24760 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61   * sizeOfConstra
24770 69 6e 74 54 79 70 65 29 2c 20 66 61 6c 73 65 29  intType), false)
24780 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24790 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74       index.Input
247a0 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 5b 69 43  s.Constraints[iC
247b0 6f 6e 73 74 72 61 69 6e 74 5d 20 3d 0d 0a 20 20  onstraint] =..  
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65    new SQLiteInde
247e0 78 43 6f 6e 73 74 72 61 69 6e 74 28 63 6f 6e 73  xConstraint(cons
247f0 74 72 61 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20  traint);..      
24800 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24810 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f         int sizeO
24820 66 4f 72 64 65 72 42 79 54 79 70 65 20 3d 20 4d  fOrderByType = M
24830 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79  arshal.SizeOf(ty
24840 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20  peof(..         
24850 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
24860 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
24870 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79  e3_index_orderby
24880 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
24890 20 20 20 66 6f 72 20 28 69 6e 74 20 69 4f 72 64     for (int iOrd
248a0 65 72 42 79 20 3d 20 30 3b 20 69 4f 72 64 65 72  erBy = 0; iOrder
248b0 42 79 20 3c 20 6e 4f 72 64 65 72 42 79 3b 20 69  By < nOrderBy; i
248c0 4f 72 64 65 72 42 79 2b 2b 29 0d 0a 20 20 20 20  OrderBy++)..    
248d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
248e0 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
248f0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
24900 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64  qlite3_index_ord
24910 65 72 62 79 20 6f 72 64 65 72 42 79 20 3d 0d 0a  erby orderBy =..
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24930 20 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61      new UnsafeNa
24940 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
24950 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62  te3_index_orderb
24960 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
24970 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
24980 78 2e 49 6e 70 75 74 73 2e 4f 72 64 65 72 42 79  x.Inputs.OrderBy
24990 73 5b 69 4f 72 64 65 72 42 79 5d 29 3b 0d 0a 0d  s[iOrderBy]);...
249a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
249b0 20 4d 61 72 73 68 61 6c 2e 53 74 72 75 63 74 75   Marshal.Structu
249c0 72 65 54 6f 50 74 72 28 0d 0a 20 20 20 20 20 20  reToPtr(..      
249d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 72                or
249e0 64 65 72 42 79 2c 20 49 6e 74 50 74 72 46 6f 72  derBy, IntPtrFor
249f0 4f 66 66 73 65 74 28 70 4f 72 64 65 72 42 79 2c  Offset(pOrderBy,
24a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24a10 20 20 20 20 20 20 69 4f 72 64 65 72 42 79 20 2a        iOrderBy *
24a20 20 73 69 7a 65 4f 66 4f 72 64 65 72 42 79 54 79   sizeOfOrderByTy
24a30 70 65 29 2c 20 66 61 6c 73 65 29 3b 0d 0a 0d 0a  pe), false);....
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 4f 72 64  index.Inputs.Ord
24a60 65 72 42 79 73 5b 69 4f 72 64 65 72 42 79 5d 20  erBys[iOrderBy] 
24a70 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
24a80 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
24a90 65 49 6e 64 65 78 4f 72 64 65 72 42 79 28 6f 72  eIndexOrderBy(or
24aa0 64 65 72 42 79 29 3b 0d 0a 20 20 20 20 20 20 20  derBy);..       
24ab0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24ac0 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66        int sizeOf
24ad0 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 54  ConstraintUsageT
24ae0 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69  ype = Marshal.Si
24af0 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20  zeOf(typeof(..  
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
24b10 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
24b20 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
24b30 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65  constraint_usage
24b40 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
24b50 20 20 20 66 6f 72 20 28 69 6e 74 20 69 43 6f 6e     for (int iCon
24b60 73 74 72 61 69 6e 74 20 3d 20 30 3b 20 69 43 6f  straint = 0; iCo
24b70 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43 6f 6e 73  nstraint < nCons
24b80 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73 74 72 61  traint; iConstra
24b90 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  int++)..        
24ba0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24bb0 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
24bc0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
24bd0 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
24be0 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e 73 74 72  int_usage constr
24bf0 61 69 6e 74 55 73 61 67 65 20 3d 0d 0a 20 20 20  aintUsage =..   
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c10 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
24c20 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
24c30 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
24c40 74 5f 75 73 61 67 65 28 0d 0a 20 20 20 20 20 20  t_usage(..      
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c60 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e    index.Outputs.
24c70 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
24c80 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 29 3b 0d  [iConstraint]);.
24c90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24ca0 20 20 20 4d 61 72 73 68 61 6c 2e 53 74 72 75 63     Marshal.Struc
24cb0 74 75 72 65 54 6f 50 74 72 28 0d 0a 20 20 20 20  tureToPtr(..    
24cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cd0 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2c  constraintUsage,
24ce0 20 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74   IntPtrForOffset
24cf0 28 70 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  (pConstraintUsag
24d00 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
24d10 20 20 20 20 20 20 20 20 69 43 6f 6e 73 74 72 61          iConstra
24d20 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73  int * sizeOfCons
24d30 74 72 61 69 6e 74 55 73 61 67 65 54 79 70 65 29  traintUsageType)
24d40 2c 20 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20  , false);....   
24d50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
24d60 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74  ex.Outputs.Const
24d70 72 61 69 6e 74 55 73 61 67 65 73 5b 69 43 6f 6e  raintUsages[iCon
24d80 73 74 72 61 69 6e 74 5d 20 3d 0d 0a 20 20 20 20  straint] =..    
24d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24da0 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 43  new SQLiteIndexC
24db0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 63  onstraintUsage(c
24dc0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 29 3b  onstraintUsage);
24dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24de0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
24df0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
24e00 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
24e10 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
24e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24e70 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 6f  #region SQLiteMo
24e80 64 75 6c 65 20 42 61 73 65 20 43 6c 61 73 73 0d  dule Base Class.
24e90 0a 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74  .    public abst
24ea0 72 61 63 74 20 63 6c 61 73 73 20 53 51 4c 69 74  ract class SQLit
24eb0 65 4d 6f 64 75 6c 65 20 3a 0d 0a 20 20 20 20 20  eModule :..     
24ec0 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 4d 61         ISQLiteMa
24ed0 6e 61 67 65 64 4d 6f 64 75 6c 65 2c 20 2f 2a 49  nagedModule, /*I
24ee0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
24ef0 6c 65 2c 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  le,*/..         
24f00 20 20 20 49 44 69 73 70 6f 73 61 62 6c 65 20 2f     IDisposable /
24f10 2a 20 4e 4f 54 20 53 45 41 4c 45 44 20 2a 2f 0d  * NOT SEALED */.
24f20 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
24f30 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4e 61  #region SQLiteNa
24f40 74 69 76 65 4d 6f 64 75 6c 65 20 50 72 69 76 61  tiveModule Priva
24f50 74 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  te Class..      
24f60 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
24f70 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4e 61 74   class SQLiteNat
24f80 69 76 65 4d 6f 64 75 6c 65 20 3a 0d 0a 20 20 20  iveModule :..   
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51               ISQ
24fa0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
24fb0 2c 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20  , IDisposable.. 
24fc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24fd0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
24fe0 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
24ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
25000 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
25010 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
25020 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68   is the value th
25030 61 74 20 69 73 20 61 6c 77 61 79 73 20 75 73 65  at is always use
25040 64 20 66 6f 72 20 74 68 65 20 22 6c 6f 67 45 72  d for the "logEr
25050 72 6f 72 73 22 0d 0a 20 20 20 20 20 20 20 20 20  rors"..         
25060 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72     /// parameter
25070 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20   to the various 
25080 73 74 61 74 69 63 20 65 72 72 6f 72 20 68 61 6e  static error han
25090 64 6c 69 6e 67 20 6d 65 74 68 6f 64 73 20 70 72  dling methods pr
250a0 6f 76 69 64 65 64 0d 0a 20 20 20 20 20 20 20 20  ovided..        
250b0 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 65 20 3c      /// by the <
250c0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
250d0 4d 6f 64 75 6c 65 22 20 2f 3e 20 63 6c 61 73 73  Module" /> class
250e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
250f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
25100 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
25110 74 65 20 63 6f 6e 73 74 20 62 6f 6f 6c 20 44 65  te const bool De
25120 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72 73 20 3d  faultLogErrors =
25130 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
25140 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25180 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25190 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
251a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
251b0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20      /// This is 
251c0 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
251d0 65 20 74 65 78 74 20 75 73 65 64 20 77 68 65 6e  e text used when
251e0 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 0d 0a   the contained..
251f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
25200 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
25210 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65  eModule" /> obje
25220 63 74 20 69 6e 73 74 61 6e 63 65 20 69 73 20 6e  ct instance is n
25230 6f 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20  ot available..  
25240 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f            /// fo
25250 72 20 61 6e 79 20 72 65 61 73 6f 6e 2e 0d 0a 20  r any reason... 
25260 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
25270 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
25280 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
25290 6f 6e 73 74 20 73 74 72 69 6e 67 20 4d 6f 64 75  onst string Modu
252a0 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72  leNotAvailableEr
252b0 72 6f 72 4d 65 73 73 61 67 65 20 3d 0d 0a 20 20  rorMessage =..  
252c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
252d0 61 74 69 76 65 20 6d 6f 64 75 6c 65 20 69 6d 70  ative module imp
252e0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6e 6f 74 20  lementation not 
252f0 61 76 61 69 6c 61 62 6c 65 22 3b 0d 0a 20 20 20  available";..   
25300 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
25310 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
25320 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25360 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25370 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
25380 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20  ivate Data..    
25390 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
253a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
253b0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
253c0 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75  cref="SQLiteModu
253d0 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
253e0 73 74 61 6e 63 65 20 75 73 65 64 20 74 6f 20 70  stance used to p
253f0 72 6f 76 69 64 65 0d 0a 20 20 20 20 20 20 20 20  rovide..        
25400 20 20 20 20 2f 2f 2f 20 61 6e 20 69 6d 70 6c 65      /// an imple
25410 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
25420 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
25430 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22  iteNativeModule"
25440 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   />..           
25450 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65 2e 0d   /// interface..
25460 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
25470 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
25480 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
25490 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f   SQLiteModule mo
254a0 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  dule;..         
254b0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
254c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
254d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25520 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
25530 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
25540 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
25550 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
25560 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
25570 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
25580 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20  f this class... 
25590 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
255a0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
255b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
255c0 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
255d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
255e0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
255f0 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f  "SQLiteModule" /
25600 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
25610 65 20 75 73 65 64 20 74 6f 20 70 72 6f 76 69 64  e used to provid
25620 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  e..            /
25630 2f 2f 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  // an implementa
25640 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c 73 65 65  tion of the <see
25650 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
25660 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a  tiveModule" />..
25670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
25680 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20  interface...    
25690 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
256a0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
256b0 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 4e    public SQLiteN
256c0 61 74 69 76 65 4d 6f 64 75 6c 65 28 0d 0a 20 20  ativeModule(..  
256d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
256e0 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
256f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
25700 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
25710 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25720 20 20 20 20 20 74 68 69 73 2e 6d 6f 64 75 6c 65       this.module
25730 20 3d 20 6d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20   = module;..    
25740 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25750 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
25760 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
25770 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
257a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
257b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
257c0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
257d0 61 74 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f  ate Static Metho
257e0 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
257f0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
25800 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
25810 65 74 73 20 74 68 65 20 74 61 62 6c 65 20 65 72  ets the table er
25820 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f 20 6f  ror message to o
25830 6e 65 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ne that indicate
25840 73 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20  s the native..  
25850 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 6f            /// mo
25860 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
25870 69 6f 6e 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ion is not avail
25880 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  able...         
25890 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
258a0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
258b0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
258c0 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
258d0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
258e0 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
258f0 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
25900 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
25910 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
25920 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
25930 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
25940 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
25950 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c       /// The val
25960 75 65 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d  ue of <see cref=
25970 22 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  "SQLiteErrorCode
25980 2e 45 72 72 6f 72 22 2f 3e 2e 0d 0a 20 20 20 20  .Error"/>...    
25990 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
259a0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
259b0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
259c0 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
259d0 64 65 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  de ModuleNotAvai
259e0 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
259f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25a00 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
25a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25a40 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
25a50 6e 75 6c 6c 2c 20 70 56 74 61 62 2c 20 44 65 66  null, pVtab, Def
25a60 61 75 6c 74 4c 6f 67 45 72 72 6f 72 73 2c 0d 0a  aultLogErrors,..
25a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a80 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61      ModuleNotAva
25a90 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73 73 61  ilableErrorMessa
25aa0 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ge);....        
25ab0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
25ac0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
25ad0 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  rror;..         
25ae0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25af0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
25b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b30 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25b40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
25b50 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
25b60 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 74    /// Sets the t
25b70 61 62 6c 65 20 65 72 72 6f 72 20 6d 65 73 73 61  able error messa
25b80 67 65 20 74 6f 20 6f 6e 65 20 74 68 61 74 20 69  ge to one that i
25b90 6e 64 69 63 61 74 65 73 20 74 68 65 20 6e 61 74  ndicates the nat
25ba0 69 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ive..           
25bb0 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   /// module impl
25bc0 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 6e 6f  ementation is no
25bd0 74 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20  t available...  
25be0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
25bf0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
25c00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
25c10 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e   name="pCursor">
25c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25c30 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
25c40 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
25c50 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
25c60 64 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20  derived..       
25c70 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75       /// structu
25c80 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re...           
25c90 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
25ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
25cb0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
25cc0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61        /// The va
25cd0 6c 75 65 20 6f 66 20 3c 73 65 65 20 63 72 65 66  lue of <see cref
25ce0 3d 22 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  ="SQLiteErrorCod
25cf0 65 2e 45 72 72 6f 72 22 2f 3e 2e 0d 0a 20 20 20  e.Error"/>...   
25d00 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
25d10 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
25d20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
25d30 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  tic SQLiteErrorC
25d40 6f 64 65 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  ode ModuleNotAva
25d50 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f  ilableCursorErro
25d60 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
25d70 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73      IntPtr pCurs
25d80 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
25d90 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
25da0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25db0 20 20 20 20 20 20 53 65 74 43 75 72 73 6f 72 45        SetCursorE
25dc0 72 72 6f 72 28 6e 75 6c 6c 2c 20 70 43 75 72 73  rror(null, pCurs
25dd0 6f 72 2c 20 44 65 66 61 75 6c 74 4c 6f 67 45 72  or, DefaultLogEr
25de0 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  rors,..         
25df0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c             Modul
25e00 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72  eNotAvailableErr
25e10 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  orMessage);.... 
25e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25e30 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
25e40 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
25e50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25e60 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
25e70 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
25e80 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ec0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25ed0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53        #region IS
25ee0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
25ef0 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  e Members..     
25f00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
25f10 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
25f20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
25f30 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
25f40 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
25f50 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  eate" /> method.
25f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25f70 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
25f80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
25f90 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e  aram name="pDb">
25fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25fb0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
25fc0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
25fd0 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
25fe0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
25ff0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
26000 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
26010 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
26020 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20  ame="pAux">..   
26030 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
26040 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
26050 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
26060 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
26070 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
26080 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
26090 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
260a0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
260b0 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
260c0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
260d0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
260e0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
260f0 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Create" /> metho
26100 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
26110 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
26120 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
26130 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22  aram name="argv"
26140 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
26150 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
26160 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
26170 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
26180 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
26190 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
261a0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
261b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
261c0 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
261d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
261e0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
261f0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
26200 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
26210 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
26220 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
26230 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
26240 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
26250 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20  ="pError">..    
26260 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
26270 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
26280 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
26290 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d  le.xCreate" /> m
262a0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
262b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
262c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
262d0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
262e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
262f0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
26300 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
26310 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
26320 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
26330 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
26340 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
26350 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
26360 72 6f 72 43 6f 64 65 20 78 43 72 65 61 74 65 28  rorCode xCreate(
26370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26380 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
263a0 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
263b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
263c0 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
263d0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d          IntPtr[]
263e0 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20   argv,..        
263f0 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
26400 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
26410 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
26420 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20  ntPtr pError..  
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
26440 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26460 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
26470 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
26480 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
26490 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
264a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264c0 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69     pError = SQLi
264d0 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
264e0 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a  PtrFromString(..
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26500 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f          ModuleNo
26510 74 41 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d  tAvailableErrorM
26520 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20  essage);....    
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26540 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
26550 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26580 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c      return modul
26590 65 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20  e.xCreate(..    
265a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265b0 70 44 62 2c 20 70 41 75 78 2c 20 61 72 67 63 2c  pDb, pAux, argc,
265c0 20 61 72 67 76 2c 20 72 65 66 20 70 56 74 61 62   argv, ref pVtab
265d0 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a  , ref pError);..
265e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
265f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
26600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26650 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
26660 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
26670 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
26680 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
26690 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20  odule.xConnect" 
266a0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
266b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
266c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
266d0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
266e0 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20  ame="pDb">..    
266f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
26700 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
26710 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
26720 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
26730 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
26740 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
26750 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
26760 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
26770 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  pAux">..        
26780 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
26790 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
267a0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
267b0 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68  Connect" /> meth
267c0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
267d0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
267e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
267f0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
26800 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
26810 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
26820 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
26830 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
26840 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ect" /> method..
26850 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
26860 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
26870 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
26880 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a  m name="argv">..
26890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
268a0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
268b0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
268c0 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
268d0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
268e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
268f0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
26900 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
26910 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
26920 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
26930 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
26940 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
26950 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
26960 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
26970 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
26980 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
26990 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
269a0 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20  "pError">..     
269b0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
269c0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
269d0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
269e0 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
269f0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
26a00 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
26a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26a20 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
26a30 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
26a40 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
26a50 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
26a60 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
26a70 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
26a80 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
26a90 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
26aa0 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45    public SQLiteE
26ab0 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63  rrorCode xConnec
26ac0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
26ad0 20 20 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d      IntPtr pDb,.
26ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26af0 20 49 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20   IntPtr pAux,.. 
26b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26b10 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
26b20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
26b30 5b 5d 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  [] argv,..      
26b40 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
26b50 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
26b70 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a   IntPtr pError..
26b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
26ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26bb0 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
26bc0 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
26bd0 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
26be0 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
26bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
26c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c10 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51       pError = SQ
26c20 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
26c30 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
26c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26c50 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65            Module
26c60 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72 6f  NotAvailableErro
26c70 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20  rMessage);....  
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c90 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
26ca0 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
26cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26cc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
26cd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
26ce0 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a 20  ule.xConnect(.. 
26cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d00 20 20 20 70 44 62 2c 20 70 41 75 78 2c 20 61 72     pDb, pAux, ar
26d10 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20 70 56  gc, argv, ref pV
26d20 74 61 62 2c 20 72 65 66 20 70 45 72 72 6f 72 29  tab, ref pError)
26d30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
26d40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d90 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
26da0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
26db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26dc0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
26dd0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
26de0 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e  veModule.xBestIn
26df0 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  dex" /> method..
26e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
26e10 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
26e20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
26e30 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
26e40 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
26e50 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
26e60 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
26e70 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
26e80 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ndex" /> method.
26e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26ea0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
26eb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
26ec0 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65 78 22  am name="pIndex"
26ed0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
26ee0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
26ef0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
26f00 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
26f10 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ndex" /> method.
26f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26f30 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
26f40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
26f50 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
26f60 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
26f70 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
26f80 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42  eNativeModule.xB
26f90 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74  estIndex" /> met
26fa0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
26fb0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
26fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
26fd0 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
26fe0 43 6f 64 65 20 78 42 65 73 74 49 6e 64 65 78 28  Code xBestIndex(
26ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27000 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
27010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27020 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a   IntPtr pIndex..
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27040 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
27050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27060 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
27070 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
27080 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
27090 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
270c0 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
270d0 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d  Error(pVtab);...
270e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
270f0 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
27100 42 65 73 74 49 6e 64 65 78 28 70 56 74 61 62 2c  BestIndex(pVtab,
27110 20 70 49 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20   pIndex);..     
27120 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27130 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
27140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
27180 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
27190 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
271a0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
271b0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
271c0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
271d0 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e  .xDisconnect" />
271e0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
271f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
27200 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
27210 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
27220 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
27230 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
27240 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
27250 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
27260 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20  le.xDisconnect" 
27270 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
27280 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
27290 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
272a0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
272b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
272c0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
272d0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
272e0 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e  eModule.xDisconn
272f0 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ect" /> method..
27300 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27310 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
27320 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
27330 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
27340 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20  xDisconnect(..  
27350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
27360 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
27370 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
27380 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
273a0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
273b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
273c0 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
273d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
273e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
273f0 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
27400 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f  ailableTableErro
27410 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  r(pVtab);....   
27420 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27430 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 44 69 73 63  urn module.xDisc
27440 6f 6e 6e 65 63 74 28 70 56 74 61 62 29 3b 0d 0a  onnect(pVtab);..
27450 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27460 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
274c0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
274d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
274e0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
274f0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
27500 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22 20  odule.xDestroy" 
27510 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
27520 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
27530 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
27540 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
27550 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
27560 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
27570 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
27580 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
27590 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22 20 2f  dule.xDestroy" /
275a0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
275b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
275c0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
275d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
275e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
275f0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
27600 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
27610 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22  Module.xDestroy"
27620 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
27630 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
27640 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
27650 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
27660 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44 65 73  teErrorCode xDes
27670 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20  troy(..         
27680 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
27690 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tab..           
276a0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
276b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
276c0 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
276d0 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
276f0 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
27700 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27710 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
27720 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
27730 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
27740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27750 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
27760 75 6c 65 2e 78 44 65 73 74 72 6f 79 28 70 56 74  ule.xDestroy(pVt
27770 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ab);..          
27780 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27790 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
277a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
277e0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
277f0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
27800 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
27810 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
27820 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65  ativeModule.xOpe
27830 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
27840 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
27850 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
27860 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
27870 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
27880 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27890 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
278a0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
278b0 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f  eModule.xOpen" /
278c0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
278d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
278e0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
278f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
27900 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
27910 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
27920 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
27930 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
27940 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65  ule.xOpen" /> me
27950 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
27960 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
27970 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27980 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
27990 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
279a0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
279b0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
279c0 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74  le.xOpen" /> met
279d0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
279e0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
279f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
27a00 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
27a10 43 6f 64 65 20 78 4f 70 65 6e 28 0d 0a 20 20 20  Code xOpen(..   
27a20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
27a30 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
27a40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
27a50 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
27a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
27a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27a90 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
27aa0 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
27ab0 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
27ac0 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ae0 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
27af0 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
27b00 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d  Error(pVtab);...
27b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
27b30 4f 70 65 6e 28 70 56 74 61 62 2c 20 72 65 66 20  Open(pVtab, ref 
27b40 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20  pCursor);..     
27b50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27b60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
27b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
27bb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
27bc0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
27bd0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
27be0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
27bf0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
27c00 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68  .xClose" /> meth
27c10 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
27c20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
27c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27c40 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
27c50 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
27c60 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
27c70 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
27c80 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
27c90 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68 6f  xClose" /> metho
27ca0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
27cb0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
27cc0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
27cd0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
27ce0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
27cf0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
27d00 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
27d10 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68 6f  xClose" /> metho
27d20 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
27d30 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
27d40 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
27d50 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
27d60 64 65 20 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20  de xClose(..    
27d70 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
27d80 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
27d90 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
27da0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
27dc0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
27dd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27de0 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
27df0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
27e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27e10 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
27e20 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72  ailableCursorErr
27e30 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  or(pCursor);....
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e50 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43  return module.xC
27e60 6c 6f 73 65 28 70 43 75 72 73 6f 72 29 3b 0d 0a  lose(pCursor);..
27e70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27ee0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
27ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
27f00 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
27f10 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
27f20 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
27f30 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
27f40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
27f50 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
27f60 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
27f70 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
27f80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
27f90 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
27fa0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
27fb0 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
27fc0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
27fd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
27fe0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
27ff0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
28000 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20 20 20 20  ="idxNum">..    
28010 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
28020 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
28030 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
28040 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d  le.xFilter" /> m
28050 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
28060 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
28070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28080 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
28090 64 78 53 74 72 22 3e 0d 0a 20 20 20 20 20 20 20  dxStr">..       
280a0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
280b0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
280c0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
280d0 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68  xFilter" /> meth
280e0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
280f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
28100 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28110 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
28120 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
28130 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
28140 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
28150 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74  tiveModule.xFilt
28160 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  er" /> method...
28170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28180 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
28190 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
281a0 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20   name="argv">.. 
281b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
281c0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
281d0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
281e0 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
281f0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
28200 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
28210 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
28220 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
28230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28240 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
28250 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
28260 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
28270 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
28280 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
28290 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
282a0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
282b0 65 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c 74  eErrorCode xFilt
282c0 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
282d0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
282e0 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
282f0 20 20 20 20 20 20 69 6e 74 20 69 64 78 4e 75 6d        int idxNum
28300 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28310 20 20 20 49 6e 74 50 74 72 20 69 64 78 53 74 72     IntPtr idxStr
28320 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28330 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
28340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
28350 74 50 74 72 5b 5d 20 61 72 67 76 0d 0a 20 20 20  tPtr[] argv..   
28360 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
28370 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28390 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
283a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
283b0 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
283c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
283d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
283e0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
283f0 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72  vailableCursorEr
28400 72 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d  ror(pCursor);...
28410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28420 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
28430 46 69 6c 74 65 72 28 70 43 75 72 73 6f 72 2c 20  Filter(pCursor, 
28440 69 64 78 4e 75 6d 2c 20 69 64 78 53 74 72 2c 20  idxNum, idxStr, 
28450 61 72 67 63 2c 20 61 72 67 76 29 3b 0d 0a 20 20  argc, argv);..  
28460 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28470 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
28480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
284c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
284d0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
284e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
284f0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
28500 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
28510 75 6c 65 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65  ule.xNext" /> me
28520 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
28530 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
28540 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
28550 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28560 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
28570 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
28580 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
28590 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
285a0 65 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68  e.xNext" /> meth
285b0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
285c0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
285d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
285e0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
285f0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
28600 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
28610 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
28620 2e 78 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f  .xNext" /> metho
28630 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
28640 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
28650 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
28660 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
28670 64 65 20 78 4e 65 78 74 28 0d 0a 20 20 20 20 20  de xNext(..     
28680 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
28690 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
286a0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
286b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
286c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
286d0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
286e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
286f0 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
28700 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
28710 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28720 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
28730 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f  ilableCursorErro
28740 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  r(pCursor);.... 
28750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28760 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 4e 65  eturn module.xNe
28770 78 74 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20  xt(pCursor);..  
28780 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28790 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
287a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
287e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
287f0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
28800 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
28810 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
28820 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
28830 75 6c 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74  ule.xEof" /> met
28840 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
28850 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
28860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28870 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
28880 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
28890 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
288a0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
288b0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
288c0 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64  .xEof" /> method
288d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
288e0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
288f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
28900 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
28910 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
28920 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
28930 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
28940 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  Eof" /> method..
28950 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28960 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
28970 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
28980 69 6e 74 20 78 45 6f 66 28 0d 0a 20 20 20 20 20  int xEof(..     
28990 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
289a0 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
289b0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
289c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
289d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
289e0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
289f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28a00 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
28a10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
28a20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a40 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
28a50 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43  leCursorError(pC
28a60 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  ursor);..       
28a70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28a80 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20 20  urn 1;..        
28a90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28ab0 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 45 6f 66 28  urn module.xEof(
28ac0 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20  pCursor);..     
28ad0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28ae0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28b30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28b40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
28b50 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
28b60 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
28b70 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
28b80 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74  .xColumn" /> met
28b90 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
28ba0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
28bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28bc0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
28bd0 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
28be0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
28bf0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
28c00 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
28c10 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74  .xColumn" /> met
28c20 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
28c30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
28c40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28c50 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6f  <param name="pCo
28c60 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20  ntext">..       
28c70 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
28c80 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
28c90 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
28ca0 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68  xColumn" /> meth
28cb0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
28cc0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
28cd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28ce0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65  param name="inde
28cf0 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x">..           
28d00 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
28d10 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
28d20 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c  ativeModule.xCol
28d30 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  umn" /> method..
28d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28d50 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
28d60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
28d70 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
28d80 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
28d90 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
28da0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
28db0 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lumn" /> method.
28dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28dd0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
28de0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
28df0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
28e00 20 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20   xColumn(..     
28e10 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
28e20 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20  r pCursor,..    
28e30 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
28e40 74 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20  tr pContext,..  
28e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
28e60 74 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20  t index..       
28e70 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
28e80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28e90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
28ea0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
28eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28ec0 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
28ed0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
28ee0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28ef0 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
28f00 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28  ableCursorError(
28f10 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20  pCursor);....   
28f20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28f30 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75  urn module.xColu
28f40 6d 6e 28 70 43 75 72 73 6f 72 2c 20 70 43 6f 6e  mn(pCursor, pCon
28f50 74 65 78 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  text, index);.. 
28f60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
28f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
28fd0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
28fe0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
28ff0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
29000 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
29010 64 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20  dule.xRowId" /> 
29020 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
29030 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
29040 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
29050 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
29060 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
29070 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
29080 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
29090 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
290a0 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d  ule.xRowId" /> m
290b0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
290c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
290d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
290e0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
290f0 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20  owId">..        
29100 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29110 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29120 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29130 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64  RowId" /> method
29140 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29150 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
29160 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
29170 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
29180 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29190 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
291a0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
291b0 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64  RowId" /> method
291c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
291d0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
291e0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
291f0 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
29200 65 20 78 52 6f 77 49 64 28 0d 0a 20 20 20 20 20  e xRowId(..     
29210 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
29220 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20  r pCursor,..    
29230 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
29240 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20  long rowId..    
29250 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
29260 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29280 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
29290 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
292a0 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
292b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
292d0 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
292e0 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72  ailableCursorErr
292f0 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  or(pCursor);....
29300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29310 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52  return module.xR
29320 6f 77 49 64 28 70 43 75 72 73 6f 72 2c 20 72 65  owId(pCursor, re
29330 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20  f rowId);..     
29340 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29350 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
29360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
293a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
293b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
293c0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
293d0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
293e0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
293f0 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74  .xUpdate" /> met
29400 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
29410 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
29420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29430 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
29440 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
29450 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29460 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29470 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29480 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Update" /> metho
29490 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
294a0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
294b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
294c0 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22  aram name="argc"
294d0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
294e0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
294f0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
29500 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74  iveModule.xUpdat
29510 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
29520 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
29530 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
29540 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
29550 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20  name="argv">..  
29560 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
29570 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
29580 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
29590 64 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e  dule.xUpdate" />
295a0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
295b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
295c0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
295d0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
295e0 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20  "rowId">..      
295f0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
29600 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
29610 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
29620 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74  .xUpdate" /> met
29630 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
29640 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
29650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29660 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
29670 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
29680 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
29690 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
296a0 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65  e.xUpdate" /> me
296b0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
296c0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
296d0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
296e0 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
296f0 72 43 6f 64 65 20 78 55 70 64 61 74 65 28 0d 0a  rCode xUpdate(..
29700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29710 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29730 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
29740 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
29750 5b 5d 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  [] argv,..      
29760 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f            ref lo
29770 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20  ng rowId..      
29780 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
29790 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
297a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
297b0 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
297c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
297d0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
297e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
297f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
29800 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
29810 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
29820 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
29830 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29840 6e 20 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65  n module.xUpdate
29850 28 70 56 74 61 62 2c 20 61 72 67 63 2c 20 61 72  (pVtab, argc, ar
29860 67 76 2c 20 72 65 66 20 72 6f 77 49 64 29 3b 0d  gv, ref rowId);.
29870 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
298e0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
298f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29900 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
29910 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
29920 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f  Module.xBegin" /
29930 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
29940 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
29950 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
29960 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
29970 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
29980 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
29990 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
299a0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
299b0 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d  ule.xBegin" /> m
299c0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
299d0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
299e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
299f0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
29a00 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
29a10 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
29a20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
29a30 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d  ule.xBegin" /> m
29a40 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
29a50 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
29a60 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
29a70 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
29a80 6f 72 43 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a  orCode xBegin(..
29a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29aa0 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
29ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
29ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ae0 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
29af0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
29b00 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
29b10 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
29b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b30 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
29b40 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
29b50 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
29b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29b70 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 42 65  eturn module.xBe
29b80 67 69 6e 28 70 56 74 61 62 29 3b 0d 0a 20 20 20  gin(pVtab);..   
29b90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29ba0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
29bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
29bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29c00 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
29c10 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
29c20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
29c30 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
29c40 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20 6d 65 74  le.xSync" /> met
29c50 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
29c60 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
29c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29c80 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
29c90 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
29ca0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29cb0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29cc0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29cd0 53 79 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Sync" /> method.
29ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29cf0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
29d00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
29d10 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
29d20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
29d30 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
29d40 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53  eNativeModule.xS
29d50 79 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ync" /> method..
29d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29d70 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
29d80 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
29d90 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
29da0 78 53 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20  xSync(..        
29db0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
29dc0 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
29dd0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
29de0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29df0 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
29e00 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
29e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29e20 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
29e30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29e40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
29e50 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
29e60 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
29e70 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
29e80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
29e90 64 75 6c 65 2e 78 53 79 6e 63 28 70 56 74 61 62  dule.xSync(pVtab
29ea0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
29eb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29ec0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29f10 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
29f20 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29f30 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
29f40 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
29f50 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69  iveModule.xCommi
29f60 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
29f70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
29f80 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
29f90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
29fa0 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
29fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29fc0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
29fd0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
29fe0 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22  eModule.xCommit"
29ff0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2a000 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2a010 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2a020 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2a030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a040 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2a050 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2a060 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74  veModule.xCommit
2a070 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2a080 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2a090 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2a0a0 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2a0b0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f  iteErrorCode xCo
2a0c0 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  mmit(..         
2a0d0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
2a0e0 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tab..           
2a0f0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2a100 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a110 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2a120 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a140 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
2a150 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a160 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
2a170 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2a180 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
2a190 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a1a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
2a1b0 75 6c 65 2e 78 43 6f 6d 6d 69 74 28 70 56 74 61  ule.xCommit(pVta
2a1c0 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b);..           
2a1d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a1e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2a1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a220 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2a230 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2a240 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2a250 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2a260 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2a270 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
2a280 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  back" /> method.
2a290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a2a0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2a2b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2a2c0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
2a2d0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2a2e0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2a2f0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2a300 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
2a310 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  back" /> method.
2a320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a330 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2a340 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2a350 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2a360 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2a370 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2a380 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2a390 6f 6c 6c 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68  ollback" /> meth
2a3a0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2a3b0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2a3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2a3d0 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
2a3e0 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a  ode xRollback(..
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a400 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
2a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2a420 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a440 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2a450 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2a460 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2a470 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a490 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
2a4a0 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
2a4b0 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
2a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a4d0 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f  eturn module.xRo
2a4e0 6c 6c 62 61 63 6b 28 70 56 74 61 62 29 3b 0d 0a  llback(pVtab);..
2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a500 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a550 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a560 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2a570 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2a580 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2a590 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2a5a0 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74  odule.xFindFunct
2a5b0 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ion" /> method..
2a5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a5d0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2a5e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2a5f0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
2a600 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2a610 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2a620 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2a630 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  iveModule.xFindF
2a640 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68  unction" /> meth
2a650 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2a660 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2a670 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2a680 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 41 72 67  param name="nArg
2a690 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2a6a0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2a6b0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2a6c0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64  tiveModule.xFind
2a6d0 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74  Function" /> met
2a6e0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2a6f0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2a700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a710 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61  <param name="zNa
2a720 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  me">..          
2a730 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2a740 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2a750 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
2a760 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d  ndFunction" /> m
2a770 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2a780 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2a790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a7a0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
2a7b0 61 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20 20 20 20  allback">..     
2a7c0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2a7d0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2a7e0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2a7f0 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22  e.xFindFunction"
2a800 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2a810 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2a820 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2a830 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2a840 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74 61 22  me="pClientData"
2a850 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2a860 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2a870 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2a880 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  iveModule.xFindF
2a890 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68  unction" /> meth
2a8a0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2a8b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2a8c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2a8d0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2a8e0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2a8f0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2a900 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2a910 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20  .xFindFunction" 
2a920 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2a930 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
2a940 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2a950 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 78      public int x
2a960 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  FindFunction(.. 
2a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2a980 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
2a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2a9a0 74 20 6e 41 72 67 2c 0d 0a 20 20 20 20 20 20 20  t nArg,..       
2a9b0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2a9c0 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  zName,..        
2a9d0 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69          ref SQLi
2a9e0 74 65 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62  teCallback callb
2a9f0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
2aa00 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
2aa10 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20   pClientData..  
2aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2aa30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa50 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2aa60 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2aa70 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2aa80 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2aa90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aab0 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69     ModuleNotAvai
2aac0 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
2aad0 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20  pVtab);..       
2aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2aaf0 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  urn 0;..        
2ab00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ab20 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 46 69 6e 64  urn module.xFind
2ab30 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
2ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2ab50 56 74 61 62 2c 20 6e 41 72 67 2c 20 7a 4e 61 6d  Vtab, nArg, zNam
2ab60 65 2c 20 72 65 66 20 63 61 6c 6c 62 61 63 6b 2c  e, ref callback,
2ab70 20 72 65 66 20 70 43 6c 69 65 6e 74 44 61 74 61   ref pClientData
2ab80 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2ab90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2aba0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2abb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abe0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2abf0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2ac00 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2ac10 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2ac20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2ac30 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d  iveModule.xRenam
2ac40 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
2ac50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ac60 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2ac70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2ac80 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
2ac90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2aca0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2acb0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2acc0 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22  eModule.xRename"
2acd0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2ace0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2acf0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2ad00 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2ad10 6d 65 3d 22 7a 4e 65 77 22 3e 0d 0a 20 20 20 20  me="zNew">..    
2ad20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2ad30 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2ad40 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2ad50 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d  le.xRename" /> m
2ad60 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2ad70 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2ad80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ad90 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2ada0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2adb0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2adc0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2add0 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20  ule.xRename" /> 
2ade0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2adf0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2ae00 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2ae10 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2ae20 72 6f 72 43 6f 64 65 20 78 52 65 6e 61 6d 65 28  rorCode xRename(
2ae30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ae40 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
2ae50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae60 20 49 6e 74 50 74 72 20 7a 4e 65 77 0d 0a 20 20   IntPtr zNew..  
2ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2ae80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aea0 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2aeb0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2aec0 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2aed0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aef0 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
2af00 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
2af10 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
2af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2af30 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 65  eturn module.xRe
2af40 6e 61 6d 65 28 70 56 74 61 62 2c 20 7a 4e 65 77  name(pVtab, zNew
2af50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2af60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2af70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2af80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afb0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2afc0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2afd0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2afe0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2aff0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2b000 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70  iveModule.xSavep
2b010 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  oint" /> method.
2b020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b030 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2b040 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2b050 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
2b060 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2b070 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2b080 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2b090 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65  tiveModule.xSave
2b0a0 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64  point" /> method
2b0b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b0c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2b0d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2b0e0 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70  ram name="iSavep
2b0f0 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  oint">..        
2b100 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2b110 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2b120 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2b130 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65  Savepoint" /> me
2b140 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2b150 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2b160 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b170 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2b180 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2b190 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2b1a0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2b1b0 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f  le.xSavepoint" /
2b1c0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2b1d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2b1e0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2b1f0 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
2b200 45 72 72 6f 72 43 6f 64 65 20 78 53 61 76 65 70  ErrorCode xSavep
2b210 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  oint(..         
2b220 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
2b230 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
2b240 20 20 20 20 20 20 69 6e 74 20 69 53 61 76 65 70        int iSavep
2b250 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  oint..          
2b260 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2b270 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b280 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2b290 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b2b0 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2b2c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2b2d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2b2e0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2b2f0 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2b300 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
2b310 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2b320 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 28  dule.xSavepoint(
2b330 70 56 74 61 62 2c 20 69 53 61 76 65 70 6f 69 6e  pVtab, iSavepoin
2b340 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
2b350 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b360 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2b370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2b3b0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2b3c0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2b3d0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2b3e0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2b3f0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65  tiveModule.xRele
2b400 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ase" /> method..
2b410 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b420 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2b430 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2b440 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
2b450 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2b460 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2b470 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2b480 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61  iveModule.xRelea
2b490 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  se" /> method...
2b4a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b4b0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2b4c0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2b4d0 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e   name="iSavepoin
2b4e0 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t">..           
2b4f0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2b500 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2b510 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c  ativeModule.xRel
2b520 65 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ease" /> method.
2b530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b540 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2b550 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2b560 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2b570 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2b580 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2b590 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2b5a0 65 6c 65 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f  elease" /> metho
2b5b0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2b5c0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2b5e0 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2b5f0 64 65 20 78 52 65 6c 65 61 73 65 28 0d 0a 20 20  de xRelease(..  
2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2b610 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
2b620 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2b630 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20   iSavepoint..   
2b640 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2b650 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2b670 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2b680 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b690 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2b6a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b6c0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2b6d0 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2b6e0 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
2b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b700 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 65 6c  turn module.xRel
2b710 65 61 73 65 28 70 56 74 61 62 2c 20 69 53 61 76  ease(pVtab, iSav
2b720 65 70 6f 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20  epoint);..      
2b730 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b740 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b790 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2b7a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2b7b0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2b7c0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2b7d0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2b7e0 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20  xRollbackTo" /> 
2b7f0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2b800 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2b810 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2b820 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2b830 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2b840 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2b850 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2b860 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2b870 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f  e.xRollbackTo" /
2b880 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2b890 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2b8a0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2b8b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2b8c0 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a  ="iSavepoint">..
2b8d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b8e0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b8f0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b900 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
2b910 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  To" /> method...
2b920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b930 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2b940 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2b950 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2b960 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2b970 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2b980 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c  ativeModule.xRol
2b990 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68  lbackTo" /> meth
2b9a0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2b9b0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2b9c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2b9d0 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
2b9e0 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28  ode xRollbackTo(
2b9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ba00 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
2ba10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ba20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d   int iSavepoint.
2ba30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ba40 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2ba50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ba60 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2ba70 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2ba80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2ba90 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bab0 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2bac0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2bad0 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2bae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2baf0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2bb00 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 70 56 74 61  xRollbackTo(pVta
2bb10 62 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d  b, iSavepoint);.
2bb20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2bb40 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2bb50 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2bb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2bba0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
2bbb0 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d   IDisposable Mem
2bbc0 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  bers..          
2bbd0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2bbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bbf0 20 44 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69   Disposes of thi
2bc00 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
2bc10 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
2bc20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2bc30 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2bc40 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
2bc50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2bc60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bc70 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
2bc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bc90 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
2bca0 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
2bcb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2bcc0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2bcd0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
2bce0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2bcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2bd30 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
2bd40 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65  isposable "Patte
2bd50 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  rn" Members..   
2bd60 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2bd70 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
2bd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bd90 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2bda0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f          /// Thro
2bdb0 77 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d  ws an <see cref=
2bdc0 22 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 44 69  "System.ObjectDi
2bdd0 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 22  sposedException"
2bde0 2f 3e 20 69 66 20 74 68 69 73 0d 0a 20 20 20 20  /> if this..    
2bdf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65          /// obje
2be00 63 74 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20  ct instance has 
2be10 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a  been disposed...
2be20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2be30 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2be40 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2be50 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
2be60 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
2be70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2be80 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
2be90 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
2bea0 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
2beb0 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
2bec0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
2bee0 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
2bef0 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
2bf00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bf10 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
2bf20 28 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  (SQLiteNativeMod
2bf30 75 6c 65 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20  ule).Name);..   
2bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2bf50 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
2bf60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2bf70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2bf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfb0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2bfc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2bfd0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2bfe0 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20     /// Disposes 
2bff0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  of this object i
2c000 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
2c010 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2c020 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2c030 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2c040 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a  e="disposing">..
2c050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c060 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73  Non-zero if this
2c070 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67   method is being
2c080 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   called from the
2c090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c0a0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44 69 73  / <see cref="Dis
2c0b0 70 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74 68 6f  pose()" /> metho
2c0c0 64 2e 20 20 5a 65 72 6f 20 69 66 20 74 68 69 73  d.  Zero if this
2c0d0 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67   method is being
2c0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c0f0 2f 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74 68  / called from th
2c100 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a 20 20  e finalizer...  
2c110 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2c120 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2c130 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70      private /* p
2c140 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
2c150 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65   */ void Dispose
2c160 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
2c170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c190 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d   if (!disposed).
2c1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c1b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c1c0 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69          //if (di
2c1d0 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
2c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2c1f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c200 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f         //    ///
2c210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c230 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2c240 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
2c250 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
2c260 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
2c270 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c280 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f         //    ///
2c290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2c2c0 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
2c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2c2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c300 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
2c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2c320 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
2c330 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
2c340 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
2c350 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2c360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c390 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3b0 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f 64  // NOTE: The mod
2c3c0 75 6c 65 20 69 73 20 6e 6f 74 20 6f 77 6e 65 64  ule is not owned
2c3d0 20 62 79 20 75 73 3b 20 74 68 65 72 65 66 6f 72   by us; therefor
2c3e0 65 2c 20 64 6f 20 6e 6f 74 0d 0a 20 20 20 20 20  e, do not..     
2c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2c400 2f 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 20  /       dispose 
2c410 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it...           
2c420 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c440 20 69 66 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e   if (module != n
2c450 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
2c470 64 75 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  dule = null;....
2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c490 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
2c4a0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2c4b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2c4c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2c4d0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2c4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c530 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2c540 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63   #region Destruc
2c550 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tor..           
2c560 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2c570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c580 46 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f  Finalizes this o
2c590 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
2c5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c5b0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2c5c0 20 20 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65           ~SQLite
2c5d0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 0d 0a  NativeModule()..
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
2c600 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a  ispose(false);..
2c610 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2c620 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2c630 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
2c640 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2c650 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2c660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2c6b0 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
2c6c0 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  te Constants..  
2c6d0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2c6e0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
2c6f0 20 54 68 65 20 64 65 66 61 75 6c 74 20 65 73 74   The default est
2c700 69 6d 61 74 65 64 20 63 6f 73 74 20 66 6f 72 20  imated cost for 
2c710 75 73 65 20 77 69 74 68 20 74 68 65 0d 0a 20 20  use with the..  
2c720 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
2c730 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
2c740 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e  gedModule.BestIn
2c750 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  dex" /> method..
2c760 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
2c770 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2c780 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2c790 72 65 61 64 6f 6e 6c 79 20 64 6f 75 62 6c 65 20  readonly double 
2c7a0 44 65 66 61 75 6c 74 45 73 74 69 6d 61 74 65 64  DefaultEstimated
2c7b0 43 6f 73 74 20 3d 20 64 6f 75 62 6c 65 2e 4d 61  Cost = double.Ma
2c7c0 78 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  xValue;....     
2c7d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2c7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c820 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2c830 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
2c840 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 65 72   The default ver
2c850 73 69 6f 6e 20 6f 66 20 74 68 65 20 6e 61 74 69  sion of the nati
2c860 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ve sqlite3_modul
2c870 65 20 73 74 72 75 63 74 75 72 65 20 69 6e 20 75  e structure in u
2c880 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
2c890 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2c8a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2c8b0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 69 6e 74  tic readonly int
2c8c0 20 44 65 66 61 75 6c 74 4d 6f 64 75 6c 65 56 65   DefaultModuleVe
2c8d0 72 73 69 6f 6e 20 3d 20 32 3b 0d 0a 20 20 20 20  rsion = 2;..    
2c8e0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2c8f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2c900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c940 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2c950 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
2c960 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  a..        /// <
2c970 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2c980 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64    /// This field
2c990 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2c9a0 65 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  e the native sql
2c9b0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75  ite3_module stru
2c9c0 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 2f  cture..        /
2c9d0 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
2c9e0 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  th this object i
2c9f0 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
2ca00 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2ca10 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2ca20 65 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e UnsafeNativeMe
2ca30 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f  thods.sqlite3_mo
2ca40 64 75 6c 65 20 6e 61 74 69 76 65 4d 6f 64 75 6c  dule nativeModul
2ca50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
2ca60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2caa0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2cab0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2cac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
2cad0 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 74   field is used t
2cae0 6f 20 73 74 6f 72 65 20 74 68 65 20 76 69 72 74  o store the virt
2caf0 75 61 6c 20 74 61 62 6c 65 20 69 6e 73 74 61 6e  ual table instan
2cb00 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  ces associated..
2cb10 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
2cb20 20 74 68 69 73 20 6d 6f 64 75 6c 65 2e 20 20 54   this module.  T
2cb30 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
2cb40 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
2cb50 5f 76 74 61 62 20 64 65 72 69 76 65 64 0d 0a 20  _vtab derived.. 
2cb60 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63         /// struc
2cb70 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
2cb80 6b 65 79 20 69 6e 74 6f 20 74 68 69 73 20 63 6f  key into this co
2cb90 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  llection...     
2cba0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2cbb0 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
2cbc0 74 65 20 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e  te Dictionary<In
2cbd0 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69 72 74  tPtr, SQLiteVirt
2cbe0 75 61 6c 54 61 62 6c 65 3e 20 74 61 62 6c 65 73  ualTable> tables
2cbf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
2cc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2cc50 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2cc60 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
2cc70 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 74 6f  field is used to
2cc80 20 73 74 6f 72 65 20 74 68 65 20 76 69 72 74 75   store the virtu
2cc90 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  al table cursor 
2cca0 69 6e 73 74 61 6e 63 65 73 0d 0a 20 20 20 20 20  instances..     
2ccb0 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65     /// associate
2ccc0 64 20 77 69 74 68 20 74 68 69 73 20 6d 6f 64 75  d with this modu
2ccd0 6c 65 2e 20 20 54 68 65 20 6e 61 74 69 76 65 20  le.  The native 
2cce0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0d 0a  pointer to the..
2ccf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
2cd00 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
2cd10 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
2cd20 65 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 79  e is used to key
2cd30 20 69 6e 74 6f 20 74 68 69 73 0d 0a 20 20 20 20   into this..    
2cd40 20 20 20 20 2f 2f 2f 20 63 6f 6c 6c 65 63 74 69      /// collecti
2cd50 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
2cd60 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2cd70 20 20 20 20 20 70 72 69 76 61 74 65 20 44 69 63       private Dic
2cd80 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20  tionary<IntPtr, 
2cd90 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
2cda0 6c 65 43 75 72 73 6f 72 3e 20 63 75 72 73 6f 72  leCursor> cursor
2cdb0 73 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  s;..        #end
2cdc0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2cdd0 20 20 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 2f 2f 2f 2f 2f  ////////////////
2ce10 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ce20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
2ce30 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
2ce40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2ce50 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ce60 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
2ce70 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
2ce80 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
2ce90 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2cea0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2ceb0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d  <param name="nam
2cec0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
2ced0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
2cee0 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 20 20   module...      
2cef0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2cf00 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2cf10 51 4c 69 74 65 4d 6f 64 75 6c 65 28 73 74 72 69  QLiteModule(stri
2cf20 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  ng name)..      
2cf30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cf40 20 69 66 20 28 6e 61 6d 65 20 3d 3d 20 6e 75 6c   if (name == nul
2cf50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2cf60 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
2cf70 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
2cf80 69 6f 6e 28 22 6e 61 6d 65 22 29 3b 0d 0a 0d 0a  ion("name");....
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
2cfa0 2e 6e 61 6d 65 20 3d 20 6e 61 6d 65 3b 0d 0a 20  .name = name;.. 
2cfb0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
2cfc0 74 61 62 6c 65 73 20 3d 20 6e 65 77 20 44 69 63  tables = new Dic
2cfd0 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20  tionary<IntPtr, 
2cfe0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
2cff0 6c 65 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  le>();..        
2d000 20 20 20 20 74 68 69 73 2e 63 75 72 73 6f 72 73      this.cursors
2d010 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
2d020 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65  y<IntPtr, SQLite
2d030 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
2d040 6f 72 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  or>();..        
2d050 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2d060 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2d070 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2d080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d0c0 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65      #region Inte
2d0d0 72 6e 61 6c 20 4d 65 74 68 6f 64 73 0d 0a 20 20  rnal Methods..  
2d0e0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2d0f0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
2d100 20 43 72 65 61 74 65 73 20 61 6e 64 20 72 65 74   Creates and ret
2d110 75 72 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20  urns the native 
2d120 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74  sqlite_module st
2d130 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 74 68  ructure using th
2d140 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
2d150 6f 6e 66 69 67 75 72 65 64 20 28 6f 72 20 64 65  onfigured (or de
2d160 66 61 75 6c 74 29 20 3c 73 65 65 20 63 72 65 66  fault) <see cref
2d170 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2d180 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20  odule" />..     
2d190 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65     /// interface
2d1a0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
2d1b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2d1c0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2d1d0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2d1e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
2d1f0 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f 6d   native sqlite_m
2d200 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 20  odule structure 
2d210 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 66 69 67  using the config
2d220 75 72 65 64 20 28 6f 72 0d 0a 20 20 20 20 20 20  ured (or..      
2d230 20 20 2f 2f 2f 20 64 65 66 61 75 6c 74 29 20 3c    /// default) <
2d240 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2d250 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f  eNativeModule" /
2d260 3e 20 69 6e 74 65 72 66 61 63 65 0d 0a 20 20 20  > interface..   
2d270 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
2d280 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ntation...      
2d290 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2d2a0 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
2d2b0 61 6c 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  al UnsafeNativeM
2d2c0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
2d2d0 6f 64 75 6c 65 20 43 72 65 61 74 65 4e 61 74 69  odule CreateNati
2d2e0 76 65 4d 6f 64 75 6c 65 28 29 0d 0a 20 20 20 20  veModule()..    
2d2f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d300 20 20 20 72 65 74 75 72 6e 20 43 72 65 61 74 65     return Create
2d310 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 47 65 74  NativeModule(Get
2d320 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6d 70 6c  NativeModuleImpl
2d330 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
2d340 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2d350 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f  ////////////////
2d380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d3b0 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
2d3c0 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  e Methods..     
2d3d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2d3e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 72  ..        /// Cr
2d3f0 65 61 74 65 73 20 61 6e 64 20 72 65 74 75 72 6e  eates and return
2d400 73 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  s the native sql
2d410 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63  ite_module struc
2d420 74 75 72 65 20 75 73 69 6e 67 20 74 68 65 0d 0a  ture using the..
2d430 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63          /// spec
2d440 69 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d  ified <see cref=
2d450 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2d460 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61  dule" /> interfa
2d470 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
2d480 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
2d490 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
2d4a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2d4b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2d4c0 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
2d4d0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
2d4e0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d4f0 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69  tiveModule" /> i
2d500 6e 74 65 72 66 61 63 65 20 69 6d 70 6c 65 6d 65  nterface impleme
2d510 6e 74 61 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20  ntation to..    
2d520 20 20 20 20 2f 2f 2f 20 75 73 65 2e 0d 0a 20 20      /// use...  
2d530 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2d540 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
2d550 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
2d560 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
2d570 65 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20  e sqlite_module 
2d580 73 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20  structure using 
2d590 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20  the specified.. 
2d5a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
2d5b0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2d5c0 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e  iveModule" /> in
2d5d0 74 65 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e  terface implemen
2d5e0 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  tation...       
2d5f0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2d600 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2d610 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2d620 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64  hods.sqlite3_mod
2d630 75 6c 65 20 43 72 65 61 74 65 4e 61 74 69 76 65  ule CreateNative
2d640 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20  Module(..       
2d650 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69       ISQLiteNati
2d660 76 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d  veModule module.
2d670 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2d680 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d690 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
2d6a0 75 6c 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ule = new Unsafe
2d6b0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2d6c0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 28 29 3b 0d  lite3_module();.
2d6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74  .            nat
2d6e0 69 76 65 4d 6f 64 75 6c 65 2e 69 56 65 72 73 69  iveModule.iVersi
2d6f0 6f 6e 20 3d 20 44 65 66 61 75 6c 74 4d 6f 64 75  on = DefaultModu
2d700 6c 65 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20  leVersion;....  
2d710 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2d720 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  dule != null).. 
2d730 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
2d750 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
2d760 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  te = new UnsafeN
2d770 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 72  ativeMethods.xCr
2d780 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
2d790 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
2d7a0 65 2e 78 43 72 65 61 74 65 29 3b 0d 0a 0d 0a 20  e.xCreate);.... 
2d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
2d7c0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
2d7d0 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  nect = new Unsaf
2d7e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
2d7f0 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  Connect(..      
2d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
2d810 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 29 3b 0d  dule.xConnect);.
2d820 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d830 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2d840 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65 77  xBestIndex = new
2d850 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2d860 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78 28  hods.xBestIndex(
2d870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d880 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 42 65        module.xBe
2d890 73 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  stIndex);....   
2d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2d8b0 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f  iveModule.xDisco
2d8c0 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61  nnect = new Unsa
2d8d0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2d8e0 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20  xDisconnect(..  
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d900 20 20 6d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e    module.xDiscon
2d910 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nect);....      
2d920 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
2d930 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20  Module.xDestroy 
2d940 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
2d950 76 65 4d 65 74 68 6f 64 73 2e 78 44 65 73 74 72  veMethods.xDestr
2d960 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oy(..           
2d970 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
2d980 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20  xDestroy);....  
2d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
2d9a0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e  tiveModule.xOpen
2d9b0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
2d9c0 69 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65 6e  iveMethods.xOpen
2d9d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d9e0 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 4f         module.xO
2d9f0 70 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  pen);....       
2da00 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
2da10 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3d 20 6e  odule.xClose = n
2da20 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
2da30 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65 28 0d 0a  ethods.xClose(..
2da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da50 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73      module.xClos
2da60 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2da70 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
2da80 75 6c 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65  ule.xFilter = ne
2da90 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
2daa0 74 68 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a  thods.xFilter(..
2dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dac0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74      module.xFilt
2dad0 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  er);....        
2dae0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
2daf0 64 75 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77  dule.xNext = new
2db00 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2db10 68 6f 64 73 2e 78 4e 65 78 74 28 0d 0a 20 20 20  hods.xNext(..   
2db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db30 20 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 29 3b 0d   module.xNext);.
2db40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2db50 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2db60 78 45 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61 66  xEof = new Unsaf
2db70 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
2db80 45 6f 66 28 6d 6f 64 75 6c 65 2e 78 45 6f 66 29  Eof(module.xEof)
2db90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2dba0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
2dbb0 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20  e.xColumn = new 
2dbc0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2dbd0 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20  ods.xColumn(..  
2dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbf0 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e    module.xColumn
2dc00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2dc10 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
2dc20 6c 65 2e 78 52 6f 77 49 64 20 3d 20 6e 65 77 20  le.xRowId = new 
2dc30 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2dc40 6f 64 73 2e 78 52 6f 77 49 64 28 0d 0a 20 20 20  ods.xRowId(..   
2dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc60 20 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 29 3b   module.xRowId);
2dc70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dc80 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
2dc90 2e 78 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55  .xUpdate = new U
2dca0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2dcb0 64 73 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20  ds.xUpdate(..   
2dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcd0 20 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 29   module.xUpdate)
2dce0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2dcf0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
2dd00 65 2e 78 42 65 67 69 6e 20 3d 20 6e 65 77 20 55  e.xBegin = new U
2dd10 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2dd20 64 73 2e 78 42 65 67 69 6e 28 0d 0a 20 20 20 20  ds.xBegin(..    
2dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd40 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 29 3b 0d  module.xBegin);.
2dd50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2dd60 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2dd70 78 53 79 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61  xSync = new Unsa
2dd80 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2dd90 78 53 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20  xSync(..        
2dda0 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
2ddb0 6c 65 2e 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20  le.xSync);....  
2ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
2ddd0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d  tiveModule.xComm
2dde0 69 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  it = new UnsafeN
2ddf0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
2de00 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  mmit(..         
2de10 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
2de20 65 2e 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20  e.xCommit);.... 
2de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
2de40 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c  ativeModule.xRol
2de50 6c 62 61 63 6b 20 3d 20 6e 65 77 20 55 6e 73 61  lback = new Unsa
2de60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2de70 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  xRollback(..    
2de80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de90 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  module.xRollback
2dea0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2deb0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
2dec0 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
2ded0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
2dee0 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64  iveMethods.xFind
2def0 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
2df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
2df10 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74  odule.xFindFunct
2df20 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
2df30 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
2df40 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3d 20  odule.xRename = 
2df50 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
2df60 4d 65 74 68 6f 64 73 2e 78 52 65 6e 61 6d 65 28  Methods.xRename(
2df70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2df80 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 65        module.xRe
2df90 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  name);....      
2dfa0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
2dfb0 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  Module.xSavepoin
2dfc0 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
2dfd0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61 76  tiveMethods.xSav
2dfe0 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20  epoint(..       
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
2e000 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 29 3b  ule.xSavepoint);
2e010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e020 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
2e030 2e 78 52 65 6c 65 61 73 65 20 3d 20 6e 65 77 20  .xRelease = new 
2e040 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2e050 6f 64 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a 20  ods.xRelease(.. 
2e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e070 20 20 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61     module.xRelea
2e080 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2e090 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
2e0a0 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f  dule.xRollbackTo
2e0b0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
2e0c0 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c  iveMethods.xRoll
2e0d0 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20  backTo(..       
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
2e0f0 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 29  ule.xRollbackTo)
2e100 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2e110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2e120 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2e130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e140 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2e150 78 43 72 65 61 74 65 20 3d 20 6e 65 77 20 55 6e  xCreate = new Un
2e160 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2e170 73 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20  s.xCreate(..    
2e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e190 78 43 72 65 61 74 65 29 3b 0d 0a 0d 0a 20 20 20  xCreate);....   
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2e1b0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65  iveModule.xConne
2e1c0 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ct = new UnsafeN
2e1d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
2e1e0 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
2e1f0 20 20 20 20 20 20 20 20 20 20 20 20 78 43 6f 6e              xCon
2e200 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nect);....      
2e210 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
2e220 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  Module.xBestInde
2e230 78 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  x = new UnsafeNa
2e240 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 73  tiveMethods.xBes
2e250 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20  tIndex(..       
2e260 20 20 20 20 20 20 20 20 20 20 20 20 20 78 42 65               xBe
2e270 73 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  stIndex);....   
2e280 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2e290 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f  iveModule.xDisco
2e2a0 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61  nnect = new Unsa
2e2b0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2e2c0 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20  xDisconnect(..  
2e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2e0 20 20 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d    xDisconnect);.
2e2f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e300 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2e310 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20 55  xDestroy = new U
2e320 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2e330 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20 20  ds.xDestroy(..  
2e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e350 20 20 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a    xDestroy);....
2e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e370 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70  nativeModule.xOp
2e380 65 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  en = new UnsafeN
2e390 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70  ativeMethods.xOp
2e3a0 65 6e 28 78 4f 70 65 6e 29 3b 0d 0a 20 20 20 20  en(xOpen);..    
2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
2e3c0 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20  veModule.xClose 
2e3d0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
2e3e0 76 65 4d 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65  veMethods.xClose
2e3f0 28 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  (xClose);....   
2e400 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
2e410 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65  iveModule.xFilte
2e420 72 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  r = new UnsafeNa
2e430 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c  tiveMethods.xFil
2e440 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
2e450 20 20 20 20 20 20 20 20 20 20 78 46 69 6c 74 65            xFilte
2e460 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
2e470 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
2e480 75 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20  ule.xNext = new 
2e490 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2e4a0 6f 64 73 2e 78 4e 65 78 74 28 78 4e 65 78 74 29  ods.xNext(xNext)
2e4b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2e4c0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2e4d0 78 45 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61 66  xEof = new Unsaf
2e4e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
2e4f0 45 6f 66 28 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20  Eof(xEof);....  
2e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
2e510 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
2e520 6d 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  mn = new UnsafeN
2e530 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
2e540 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  lumn(..         
2e550 20 20 20 20 20 20 20 20 20 20 20 78 43 6f 6c 75             xColu
2e560 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  mn);....        
2e570 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
2e580 64 75 6c 65 2e 78 52 6f 77 49 64 20 3d 20 6e 65  dule.xRowId = ne
2e590 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
2e5a0 74 68 6f 64 73 2e 78 52 6f 77 49 64 28 78 52 6f  thods.xRowId(xRo
2e5b0 77 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  wId);....       
2e5c0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
2e5d0 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 20 3d 20  odule.xUpdate = 
2e5e0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
2e5f0 4d 65 74 68 6f 64 73 2e 78 55 70 64 61 74 65 28  Methods.xUpdate(
2e600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e610 20 20 20 20 20 20 78 55 70 64 61 74 65 29 3b 0d        xUpdate);.
2e620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e630 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2e640 78 42 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e 73  xBegin = new Uns
2e650 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2e660 2e 78 42 65 67 69 6e 28 78 42 65 67 69 6e 29 3b  .xBegin(xBegin);
2e670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e680 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
2e690 53 79 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61 66  Sync = new Unsaf
2e6a0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
2e6b0 53 79 6e 63 28 78 53 79 6e 63 29 3b 0d 0a 0d 0a  Sync(xSync);....
2e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6d0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  nativeModule.xCo
2e6e0 6d 6d 69 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  mmit = new Unsaf
2e6f0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
2e700 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20  Commit(..       
2e710 20 20 20 20 20 20 20 20 20 20 20 20 20 78 43 6f               xCo
2e720 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mmit);....      
2e730 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
2e740 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
2e750 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
2e760 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c  iveMethods.xRoll
2e770 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
2e780 20 20 20 20 20 20 20 20 20 20 20 78 52 6f 6c 6c             xRoll
2e790 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  back);....      
2e7a0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
2e7b0 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
2e7c0 74 69 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66  tion = new Unsaf
2e7d0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
2e7e0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  FindFunction(.. 
2e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e800 20 20 20 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e     xFindFunction
2e810 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e820 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
2e830 6c 65 2e 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77  le.xRename = new
2e840 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2e850 68 6f 64 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20  hods.xRename(.. 
2e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e870 20 20 20 78 52 65 6e 61 6d 65 29 3b 0d 0a 0d 0a     xRename);....
2e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e890 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61  nativeModule.xSa
2e8a0 76 65 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e  vepoint = new Un
2e8b0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2e8c0 73 2e 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20  s.xSavepoint(.. 
2e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8e0 20 20 20 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d     xSavepoint);.
2e8f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e900 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
2e910 78 52 65 6c 65 61 73 65 20 3d 20 6e 65 77 20 55  xRelease = new U
2e920 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2e930 64 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a 20 20  ds.xRelease(..  
2e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e950 20 20 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a    xRelease);....
2e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e970 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  nativeModule.xRo
2e980 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20 55  llbackTo = new U
2e990 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2e9a0 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d  ds.xRollbackTo(.
2e9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e9c0 20 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 54 6f       xRollbackTo
2e9d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2e9e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e9f0 20 72 65 74 75 72 6e 20 6e 61 74 69 76 65 4d 6f   return nativeMo
2ea00 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  dule;..        }
2ea10 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2ea20 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2ea30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2ea80 20 20 20 23 72 65 67 69 6f 6e 20 50 72 6f 74 65     #region Prote
2ea90 63 74 65 64 20 4d 65 6d 62 65 72 73 0d 0a 20 20  cted Members..  
2eaa0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f        #region Mo
2eab0 64 75 6c 65 20 48 65 6c 70 65 72 20 4d 65 74 68  dule Helper Meth
2eac0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
2ead0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2eae0 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64      /// Gets and
2eaf0 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73 65   returns the <se
2eb00 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2eb10 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  ativeModule" /> 
2eb20 69 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 20  interface..     
2eb30 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74     /// implement
2eb40 61 74 69 6f 6e 20 74 6f 20 62 65 20 75 73 65 64  ation to be used
2eb50 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74   when creating t
2eb60 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
2eb70 33 5f 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20  3_module..      
2eb80 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 2e    /// structure.
2eb90 20 20 44 65 72 69 76 65 64 20 63 6c 61 73 73 65    Derived classe
2eba0 73 20 6d 61 79 20 6f 76 65 72 72 69 64 65 20 74  s may override t
2ebb0 68 69 73 20 6d 65 74 68 6f 64 20 74 6f 20 73 75  his method to su
2ebc0 70 70 6c 79 20 61 6e 0d 0a 20 20 20 20 20 20 20  pply an..       
2ebd0 20 2f 2f 2f 20 61 6c 74 65 72 6e 61 74 65 20 69   /// alternate i
2ebe0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6f  mplementation fo
2ebf0 72 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  r the <see cref=
2ec00 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2ec10 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20  dule" />..      
2ec20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65 2e    /// interface.
2ec30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2ec40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2ec50 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2ec60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
2ec70 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2ec80 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22  iteNativeModule"
2ec90 20 2f 3e 20 69 6e 74 65 72 66 61 63 65 20 69 6d   /> interface im
2eca0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0d  plementation to.
2ecb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20  .        /// be 
2ecc0 75 73 65 64 20 77 68 65 6e 20 70 6f 70 75 6c 61  used when popula
2ecd0 74 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20  ting the native 
2ece0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73  sqlite3_module s
2ecf0 74 72 75 63 74 75 72 65 2e 20 20 49 66 0d 0a 20  tructure.  If.. 
2ed00 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 72         /// the r
2ed10 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 69 73  eturned value is
2ed20 20 6e 75 6c 6c 2c 20 74 68 65 20 70 72 69 76 61   null, the priva
2ed30 74 65 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69  te methods provi
2ed40 64 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ded by the..    
2ed50 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
2ed60 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22  f="SQLiteModule"
2ed70 20 2f 3e 20 63 6c 61 73 73 20 61 6e 64 20 72 65   /> class and re
2ed80 6c 61 74 69 6e 67 20 74 6f 20 74 68 65 0d 0a 20  lating to the.. 
2ed90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
2eda0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2edb0 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e  iveModule" /> in
2edc0 74 65 72 66 61 63 65 20 20 77 69 6c 6c 20 62 65  terface  will be
2edd0 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20   used to..      
2ede0 20 20 2f 2f 2f 20 63 72 65 61 74 65 20 74 68 65    /// create the
2edf0 20 6e 65 63 65 73 73 61 72 79 20 64 65 6c 65 67   necessary deleg
2ee00 61 74 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ates...        /
2ee10 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2ee20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
2ee30 20 76 69 72 74 75 61 6c 20 49 53 51 4c 69 74 65   virtual ISQLite
2ee40 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 47 65 74  NativeModule Get
2ee50 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6d 70 6c  NativeModuleImpl
2ee60 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
2ee70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ee80 6e 20 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f 54 45 3a  n null; /* NOTE:
2ee90 20 55 73 65 20 74 68 65 20 62 75 69 6c 74 2d 69   Use the built-i
2eea0 6e 20 64 65 66 61 75 6c 74 20 64 65 6c 65 67 61  n default delega
2eeb0 74 65 73 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  tes. */..       
2eec0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2eed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2ef20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2ef30 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 72 65 61          /// Crea
2ef40 74 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  tes and returns 
2ef50 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2ef60 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2ef70 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  le" />..        
2ef80 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65 20 69 6d  /// interface im
2ef90 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 63 6f 72  plementation cor
2efa0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68  responding to th
2efb0 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20  e current..     
2efc0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
2efd0 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20  ="SQLiteModule" 
2efe0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
2eff0 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
2f000 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2f010 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2f020 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
2f030 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
2f040 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2f050 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65  le" /> interface
2f060 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0d   implementation.
2f070 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72  .        /// cor
2f080 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68  responding to th
2f090 65 20 63 75 72 72 65 6e 74 20 3c 73 65 65 20 63  e current <see c
2f0a0 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c  ref="SQLiteModul
2f0b0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20  e" /> object..  
2f0c0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
2f0d0 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
2f0e0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2f0f0 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76       protected v
2f100 69 72 74 75 61 6c 20 49 53 51 4c 69 74 65 4e 61  irtual ISQLiteNa
2f110 74 69 76 65 4d 6f 64 75 6c 65 20 43 72 65 61 74  tiveModule Creat
2f120 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6d 70  eNativeModuleImp
2f130 6c 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  l()..        {..
2f140 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f150 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 4e 61 74  rn new SQLiteNat
2f160 69 76 65 4d 6f 64 75 6c 65 28 74 68 69 73 29 3b  iveModule(this);
2f170 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2f180 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2f190 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2f1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2f1f0 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 54 61 62  egion Native Tab
2f200 6c 65 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  le Helper Method
2f210 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
2f220 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2f230 20 20 2f 2f 2f 20 41 6c 6c 6f 63 61 74 65 73 20    /// Allocates 
2f240 61 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  a native sqlite3
2f250 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
2f260 72 75 63 74 75 72 65 20 61 6e 64 20 72 65 74 75  ructure and retu
2f270 72 6e 73 20 61 0d 0a 20 20 20 20 20 20 20 20 2f  rns a..        /
2f280 2f 2f 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  // native pointe
2f290 72 20 74 6f 20 69 74 2e 0d 0a 20 20 20 20 20 20  r to it...      
2f2a0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2f2b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
2f2c0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2f2d0 20 2f 2f 2f 20 41 20 6e 61 74 69 76 65 20 70 6f   /// A native po
2f2e0 69 6e 74 65 72 20 74 6f 20 61 20 6e 61 74 69 76  inter to a nativ
2f2f0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
2f300 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
2f310 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2f320 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2f330 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
2f340 74 75 61 6c 20 49 6e 74 50 74 72 20 41 6c 6c 6f  tual IntPtr Allo
2f350 63 61 74 65 54 61 62 6c 65 28 29 0d 0a 20 20 20  cateTable()..   
2f360 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f370 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 4d      int size = M
2f380 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79  arshal.SizeOf(ty
2f390 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20  peof(..         
2f3a0 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
2f3b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2f3c0 65 33 5f 76 74 61 62 29 29 3b 0d 0a 0d 0a 20 20  e3_vtab));....  
2f3d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f3e0 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c   SQLiteMemory.Al
2f3f0 6c 6f 63 61 74 65 28 73 69 7a 65 29 3b 0d 0a 20  locate(size);.. 
2f400 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f410 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2f420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2f460 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2f470 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2f480 2f 20 5a 65 72 6f 73 20 6f 75 74 20 74 68 65 20  / Zeros out the 
2f490 66 69 65 6c 64 73 20 6f 66 20 61 20 6e 61 74 69  fields of a nati
2f4a0 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  ve sqlite3_vtab 
2f4b0 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
2f4c0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
2f4d0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2f4e0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2f4f0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
2f500 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
2f510 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
2f520 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74  the native sqlit
2f530 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
2f540 73 74 72 75 63 74 75 72 65 20 74 6f 0d 0a 20 20  structure to..  
2f550 20 20 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 2e 0d        /// zero..
2f560 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
2f570 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70  aram>..        p
2f580 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
2f590 20 76 6f 69 64 20 5a 65 72 6f 54 61 62 6c 65 28   void ZeroTable(
2f5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
2f5b0 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
2f5c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2f5d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f5e0 20 20 69 66 20 28 70 56 74 61 62 20 3d 3d 20 49    if (pVtab == I
2f5f0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
2f600 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f610 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
2f620 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 20 3d      int offset =
2f630 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
2f640 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c     SQLiteMarshal
2f650 2e 57 72 69 74 65 49 6e 74 50 74 72 28 70 56 74  .WriteIntPtr(pVt
2f660 61 62 2c 20 6f 66 66 73 65 74 2c 20 49 6e 74 50  ab, offset, IntP
2f670 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20  tr.Zero);....   
2f680 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
2f690 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d  += IntPtr.Size;.
2f6a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
2f6b0 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69  QLiteMarshal.Wri
2f6c0 74 65 49 6e 74 33 32 28 70 56 74 61 62 2c 20 6f  teInt32(pVtab, o
2f6d0 66 66 73 65 74 2c 20 30 29 3b 0d 0a 0d 0a 20 20  ffset, 0);....  
2f6e0 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
2f6f0 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b   += sizeof(int);
2f700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f710 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72  SQLiteMarshal.Wr
2f720 69 74 65 49 6e 74 50 74 72 28 70 56 74 61 62 2c  iteIntPtr(pVtab,
2f730 20 6f 66 66 73 65 74 2c 20 49 6e 74 50 74 72 2e   offset, IntPtr.
2f740 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20  Zero);..        
2f750 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2f760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f7a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f7b0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2f7c0 20 20 20 20 20 20 20 2f 2f 2f 20 46 72 65 65 73         /// Frees
2f7d0 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65   a native sqlite
2f7e0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2f7f0 20 75 73 69 6e 67 20 74 68 65 20 70 72 6f 76 69   using the provi
2f800 64 65 64 20 6e 61 74 69 76 65 0d 0a 20 20 20 20  ded native..    
2f810 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65 72 20      /// pointer 
2f820 74 6f 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  to it...        
2f830 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2f840 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2f850 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
2f860 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
2f870 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
2f880 6f 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69 74  o a native sqlit
2f890 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
2f8a0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
2f8b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2f8c0 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
2f8d0 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64  ted virtual void
2f8e0 20 46 72 65 65 54 61 62 6c 65 28 0d 0a 20 20 20   FreeTable(..   
2f8f0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2f900 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20  pVtab..         
2f910 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2f920 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74  .            Set
2f930 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
2f940 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
2f950 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
2f960 72 79 2e 46 72 65 65 28 70 56 74 61 62 29 3b 0d  ry.Free(pVtab);.
2f970 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2f980 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2f990 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2f9f0 67 69 6f 6e 20 4e 61 74 69 76 65 20 43 75 72 73  gion Native Curs
2fa00 6f 72 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  or Helper Method
2fa10 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
2fa20 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2fa30 20 20 2f 2f 2f 20 41 6c 6c 6f 63 61 74 65 73 20    /// Allocates 
2fa40 61 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  a native sqlite3
2fa50 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
2fa60 69 76 65 64 20 73 74 72 75 63 74 75 72 65 20 61  ived structure a
2fa70 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  nd..        /// 
2fa80 72 65 74 75 72 6e 73 20 61 20 6e 61 74 69 76 65  returns a native
2fa90 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 0d   pointer to it..
2faa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
2fab0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2fac0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2fad0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 6e 61          /// A na
2fae0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
2faf0 61 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  a native sqlite3
2fb00 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
2fb10 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
2fb20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
2fb30 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2fb40 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
2fb50 61 6c 20 49 6e 74 50 74 72 20 41 6c 6c 6f 63 61  al IntPtr Alloca
2fb60 74 65 43 75 72 73 6f 72 28 29 0d 0a 20 20 20 20  teCursor()..    
2fb70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2fb80 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 4d 61     int size = Ma
2fb90 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70  rshal.SizeOf(typ
2fba0 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20  eof(..          
2fbb0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
2fbc0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2fbd0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 29 29 3b  3_vtab_cursor));
2fbe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fbf0 72 65 74 75 72 6e 20 53 51 4c 69 74 65 4d 65 6d  return SQLiteMem
2fc00 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28 73 69 7a  ory.Allocate(siz
2fc10 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
2fc20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2fc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc70 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
2fc80 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2fc90 20 20 20 20 2f 2f 2f 20 46 72 65 65 73 20 61 20      /// Frees a 
2fca0 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76  native sqlite3_v
2fcb0 74 61 62 5f 63 75 72 73 6f 72 20 73 74 72 75 63  tab_cursor struc
2fcc0 74 75 72 65 20 75 73 69 6e 67 20 74 68 65 20 70  ture using the p
2fcd0 72 6f 76 69 64 65 64 0d 0a 20 20 20 20 20 20 20  rovided..       
2fce0 20 2f 2f 2f 20 6e 61 74 69 76 65 20 70 6f 69 6e   /// native poin
2fcf0 74 65 72 20 74 6f 20 69 74 2e 0d 0a 20 20 20 20  ter to it...    
2fd00 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2fd10 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2fd20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75  <param name="pCu
2fd30 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rsor">..        
2fd40 2f 2f 2f 20 41 20 6e 61 74 69 76 65 20 70 6f 69  /// A native poi
2fd50 6e 74 65 72 20 74 6f 20 61 20 6e 61 74 69 76 65  nter to a native
2fd60 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2fd70 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72  rsor derived str
2fd80 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
2fd90 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2fda0 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
2fdb0 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 46 72   virtual void Fr
2fdc0 65 65 43 75 72 73 6f 72 28 0d 0a 20 20 20 20 20  eeCursor(..     
2fdd0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
2fde0 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
2fdf0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2fe00 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
2fe10 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
2fe20 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20  Cursor);..      
2fe30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2fe40 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2fe50 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2fea0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74        #region St
2feb0 61 74 69 63 20 54 61 62 6c 65 20 4c 6f 6f 6b 75  atic Table Looku
2fec0 70 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  p Methods..     
2fed0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2fee0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65  ..        /// Re
2fef0 61 64 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ads and returns 
2ff00 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  the native point
2ff10 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
2ff20 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 0d 0a  3_vtab derived..
2ff30 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75          /// stru
2ff40 63 74 75 72 65 20 62 61 73 65 64 20 6f 6e 20 74  cture based on t
2ff50 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
2ff60 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
2ff70 5f 76 74 61 62 5f 63 75 72 73 6f 72 0d 0a 20 20  _vtab_cursor..  
2ff80 20 20 20 20 20 20 2f 2f 2f 20 64 65 72 69 76 65        /// derive
2ff90 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
2ffa0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2ffb0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2ffc0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
2ffd0 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  odule">..       
2ffe0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
2fff0 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
30000 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
30010 61 6e 63 65 20 74 6f 20 62 65 20 75 73 65 64 2e  ance to be used.
30020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
30030 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
30040 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
30050 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
30060 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
30070 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
30080 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
30090 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
300a0 72 75 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  ructure..       
300b0 20 2f 2f 2f 20 66 72 6f 6d 20 77 68 69 63 68 20   /// from which 
300c0 74 6f 20 72 65 61 64 20 74 68 65 20 6e 61 74 69  to read the nati
300d0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
300e0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
300f0 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20 20  erived..        
30100 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  /// structure...
30110 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
30120 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
30130 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
30140 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
30150 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
30160 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
30170 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
30180 65 20 2d 4f 52 2d 0d 0a 20 20 20 20 20 20 20 20  e -OR-..        
30190 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
301a0 6e 74 50 74 72 2e 5a 65 72 6f 22 2f 3e 20 69 66  ntPtr.Zero"/> if
301b0 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 64 65   it cannot be de
301c0 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20 20  termined...     
301d0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
301e0 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
301f0 74 65 20 73 74 61 74 69 63 20 49 6e 74 50 74 72  te static IntPtr
30200 20 54 61 62 6c 65 46 72 6f 6d 43 75 72 73 6f 72   TableFromCursor
30210 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
30220 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
30230 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
30240 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
30250 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
30260 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30270 20 20 20 20 20 20 20 69 66 20 28 70 43 75 72 73         if (pCurs
30280 6f 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  or == IntPtr.Zer
30290 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
302a0 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74      return IntPt
302b0 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
302c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61         return Ma
302d0 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72  rshal.ReadIntPtr
302e0 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20  (pCursor);..    
302f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
30300 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
30310 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
30320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
30360 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
30370 54 61 62 6c 65 20 4c 6f 6f 6b 75 70 20 4d 65 74  Table Lookup Met
30380 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
30390 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
303a0 20 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20 61       /// Reads a
303b0 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  nd returns the n
303c0 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
303d0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
303e0 62 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 20  b derived..     
303f0 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65     /// structure
30400 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6e 61   based on the na
30410 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
30420 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
30430 5f 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  _cursor..       
30440 20 2f 2f 2f 20 64 65 72 69 76 65 64 20 73 74 72   /// derived str
30450 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
30460 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
30470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
30480 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
30490 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
304a0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
304b0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
304c0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
304d0 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
304e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 72  ..        /// fr
304f0 6f 6d 20 77 68 69 63 68 20 74 6f 20 72 65 61 64  om which to read
30500 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   the native poin
30510 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
30520 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 0d  e3_vtab derived.
30530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72  .        /// str
30540 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
30550 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
30560 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
30570 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
30580 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
30590 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
305a0 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
305b0 20 73 74 72 75 63 74 75 72 65 20 2d 4f 52 2d 0d   structure -OR-.
305c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
305d0 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 2e 5a  e cref="IntPtr.Z
305e0 65 72 6f 22 2f 3e 20 69 66 20 69 74 20 63 61 6e  ero"/> if it can
305f0 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e 65  not be determine
30600 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
30610 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
30620 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
30630 72 74 75 61 6c 20 49 6e 74 50 74 72 20 54 61 62  rtual IntPtr Tab
30640 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 0d 0a 20  leFromCursor(.. 
30650 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
30660 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
30670 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
30680 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30690 20 72 65 74 75 72 6e 20 54 61 62 6c 65 46 72 6f   return TableFro
306a0 6d 43 75 72 73 6f 72 28 74 68 69 73 2c 20 70 43  mCursor(this, pC
306b0 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  ursor);..       
306c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
306d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30710 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
30720 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
30730 20 20 20 20 20 20 20 20 2f 2f 2f 20 4c 6f 6f 6b          /// Look
30740 73 20 75 70 20 61 6e 64 20 72 65 74 75 72 6e 73  s up and returns
30750 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
30760 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
30770 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20  le" /> object.. 
30780 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61         /// insta
30790 6e 63 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65  nce based on the
307a0 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
307b0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
307c0 74 61 62 20 64 65 72 69 76 65 64 0d 0a 20 20 20  tab derived..   
307d0 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75       /// structu
307e0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
307f0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
30800 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
30810 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
30820 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
30830 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
30840 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
30850 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
30860 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
30870 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
30880 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
30890 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
308a0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
308b0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
308c0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
308d0 61 6e 63 65 20 6f 72 20 6e 75 6c 6c 20 69 66 0d  ance or null if.
308e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
308f0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
30900 6e 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75  ne cannot be fou
30910 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nd...        ///
30920 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
30930 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76       protected v
30940 69 72 74 75 61 6c 20 53 51 4c 69 74 65 56 69 72  irtual SQLiteVir
30950 74 75 61 6c 54 61 62 6c 65 20 54 61 62 6c 65 46  tualTable TableF
30960 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  romIntPtr(..    
30970 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
30980 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
30990 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
309a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
309b0 70 56 74 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e  pVtab == IntPtr.
309c0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
309d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
309e0 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
309f0 72 6f 72 28 70 56 74 61 62 2c 20 22 69 6e 76 61  ror(pVtab, "inva
30a00 6c 69 64 20 6e 61 74 69 76 65 20 74 61 62 6c 65  lid native table
30a10 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
30a20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
30a30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
30a40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30a50 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
30a60 6c 65 20 74 61 62 6c 65 3b 0d 0a 0d 0a 20 20 20  le table;....   
30a70 20 20 20 20 20 20 20 20 20 69 66 20 28 28 74 61           if ((ta
30a80 62 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26  bles != null) &&
30a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30aa0 20 20 74 61 62 6c 65 73 2e 54 72 79 47 65 74 56    tables.TryGetV
30ab0 61 6c 75 65 28 70 56 74 61 62 2c 20 6f 75 74 20  alue(pVtab, out 
30ac0 74 61 62 6c 65 29 29 0d 0a 20 20 20 20 20 20 20  table))..       
30ad0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30ae0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
30af0 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  able;..         
30b00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30b10 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
30b20 72 28 70 56 74 61 62 2c 20 53 74 72 69 6e 67 2e  r(pVtab, String.
30b30 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
30b40 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
30b50 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
30b60 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
30b70 20 20 20 20 20 20 22 6d 61 6e 61 67 65 64 20 74        "managed t
30b80 61 62 6c 65 20 66 6f 72 20 7b 30 7d 20 6e 6f 74  able for {0} not
30b90 20 66 6f 75 6e 64 22 2c 20 70 56 74 61 62 29 29   found", pVtab))
30ba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30bb0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
30bc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30bd0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
30c20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
30c30 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
30c40 2f 20 41 6c 6c 6f 63 61 74 65 73 20 61 6e 64 20  / Allocates and 
30c50 72 65 74 75 72 6e 73 20 61 20 6e 61 74 69 76 65  returns a native
30c60 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 73 71   pointer to a sq
30c70 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
30c80 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
30c90 73 74 72 75 63 74 75 72 65 20 61 6e 64 20 63 72  structure and cr
30ca0 65 61 74 65 73 20 61 6e 20 61 73 73 6f 63 69 61  eates an associa
30cb0 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 69 74 20  tion between it 
30cc0 61 6e 64 20 74 68 65 20 73 70 65 63 69 66 69 65  and the specifie
30cd0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  d..        /// <
30ce0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
30cf0 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e  VirtualTable" />
30d00 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
30d10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
30d20 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
30d30 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
30d40 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
30d50 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
30d60 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
30d70 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
30d80 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
30d90 6f 20 62 65 20 75 73 65 64 0d 0a 20 20 20 20 20  o be used..     
30da0 20 20 20 2f 2f 2f 20 77 68 65 6e 20 63 72 65 61     /// when crea
30db0 74 69 6e 67 20 74 68 65 20 61 73 73 6f 63 69 61  ting the associa
30dc0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
30dd0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
30de0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
30df0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
30e00 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
30e10 65 72 20 74 6f 20 61 20 73 71 6c 69 74 65 33 5f  er to a sqlite3_
30e20 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
30e30 75 63 74 75 72 65 20 6f 72 0d 0a 20 20 20 20 20  ucture or..     
30e40 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
30e50 3d 22 49 6e 74 50 74 72 2e 5a 65 72 6f 22 2f 3e  ="IntPtr.Zero"/>
30e60 20 69 66 20 74 68 65 20 6d 65 74 68 6f 64 20 66   if the method f
30e70 61 69 6c 73 20 66 6f 72 20 61 6e 79 20 72 65 61  ails for any rea
30e80 73 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  son...        //
30e90 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
30ea0 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
30eb0 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20 54  virtual IntPtr T
30ec0 61 62 6c 65 54 6f 49 6e 74 50 74 72 28 0d 0a 20  ableToIntPtr(.. 
30ed0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
30ee0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
30ef0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ble..           
30f00 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
30f10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
30f20 74 61 62 6c 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c  table == null) |
30f30 7c 20 28 74 61 62 6c 65 73 20 3d 3d 20 6e 75 6c  | (tables == nul
30f40 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
30f50 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50       return IntP
30f60 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
30f70 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
30f80 56 74 61 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Vtab = IntPtr.Ze
30f90 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
30fa0 20 62 6f 6f 6c 20 73 75 63 63 65 73 73 20 3d 20   bool success = 
30fb0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
30fc0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
30fd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30fe0 20 20 20 20 20 20 20 20 20 20 70 56 74 61 62 20            pVtab 
30ff0 3d 20 41 6c 6c 6f 63 61 74 65 54 61 62 6c 65 28  = AllocateTable(
31000 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31010 20 20 20 20 20 20 69 66 20 28 70 56 74 61 62 20        if (pVtab 
31020 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
31030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31040 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31050 20 20 20 20 20 20 20 20 5a 65 72 6f 54 61 62 6c          ZeroTabl
31060 65 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20  e(pVtab);..     
31070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
31080 61 62 6c 65 2e 4e 61 74 69 76 65 48 61 6e 64 6c  able.NativeHandl
31090 65 20 3d 20 70 56 74 61 62 3b 0d 0a 20 20 20 20  e = pVtab;..    
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310b0 74 61 62 6c 65 73 2e 41 64 64 28 70 56 74 61 62  tables.Add(pVtab
310c0 2c 20 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20  , table);..     
310d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
310e0 75 63 63 65 73 73 20 3d 20 74 72 75 65 3b 0d 0a  uccess = true;..
310f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31100 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
31110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69  ..            fi
31120 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
31130 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31140 20 20 20 20 20 20 69 66 20 28 21 73 75 63 63 65        if (!succe
31150 73 73 20 26 26 20 28 70 56 74 61 62 20 21 3d 20  ss && (pVtab != 
31160 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20  IntPtr.Zero)).. 
31170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31190 20 20 20 20 20 20 46 72 65 65 54 61 62 6c 65 28        FreeTable(
311a0 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20  pVtab);..       
311b0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74               pVt
311c0 61 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ab = IntPtr.Zero
311d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
311e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
311f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31200 20 20 20 72 65 74 75 72 6e 20 70 56 74 61 62 3b     return pVtab;
31210 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
31220 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
31230 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
31240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31280 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
31290 65 67 69 6f 6e 20 43 75 72 73 6f 72 20 4c 6f 6f  egion Cursor Loo
312a0 6b 75 70 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  kup Methods..   
312b0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
312c0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
312d0 4c 6f 6f 6b 73 20 75 70 20 61 6e 64 20 72 65 74  Looks up and ret
312e0 75 72 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72  urns the <see cr
312f0 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
31300 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e  lTableCursor" />
31310 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62  ..        /// ob
31320 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 62 61  ject instance ba
31330 73 65 64 20 6f 6e 20 74 68 65 20 6e 61 74 69 76  sed on the nativ
31340 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
31350 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
31360 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
31370 72 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  r derived struct
31380 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
31390 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
313a0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
313b0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
313c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
313d0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
313e0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
313f0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
31400 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
31410 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
31420 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
31430 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
31440 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
31450 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
31460 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
31470 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76  tab_cursor deriv
31480 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
31490 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
314a0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
314b0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
314c0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
314d0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
314e0 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22  tualTableCursor"
314f0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
31500 6e 63 65 20 6f 72 20 6e 75 6c 6c 0d 0a 20 20 20  nce or null..   
31510 20 20 20 20 20 2f 2f 2f 20 69 66 20 74 68 65 20       /// if the 
31520 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 6e  corresponding on
31530 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  e cannot be foun
31540 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
31550 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
31560 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
31570 72 74 75 61 6c 20 53 51 4c 69 74 65 56 69 72 74  rtual SQLiteVirt
31580 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 43  ualTableCursor C
31590 75 72 73 6f 72 46 72 6f 6d 49 6e 74 50 74 72 28  ursorFromIntPtr(
315a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
315b0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
315c0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
315d0 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
315e0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
315f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
31600 66 20 28 70 43 75 72 73 6f 72 20 3d 3d 20 49 6e  f (pCursor == In
31610 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
31620 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31630 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
31640 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
31650 22 69 6e 76 61 6c 69 64 20 6e 61 74 69 76 65 20  "invalid native 
31660 63 75 72 73 6f 72 22 29 3b 0d 0a 20 20 20 20 20  cursor");..     
31670 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31680 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
31690 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
316a0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
316b0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
316c0 75 72 73 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20  ursor;....      
316d0 20 20 20 20 20 20 69 66 20 28 28 63 75 72 73 6f        if ((curso
316e0 72 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  rs != null) &&..
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31700 63 75 72 73 6f 72 73 2e 54 72 79 47 65 74 56 61  cursors.TryGetVa
31710 6c 75 65 28 70 43 75 72 73 6f 72 2c 20 6f 75 74  lue(pCursor, out
31720 20 63 75 72 73 6f 72 29 29 0d 0a 20 20 20 20 20   cursor))..     
31730 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31740 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31750 20 63 75 72 73 6f 72 3b 0d 0a 20 20 20 20 20 20   cursor;..      
31760 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31770 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
31780 72 72 6f 72 28 70 56 74 61 62 2c 20 53 74 72 69  rror(pVtab, Stri
31790 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
317a0 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
317b0 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
317c0 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
317d0 20 20 20 20 20 20 20 20 20 22 6d 61 6e 61 67 65           "manage
317e0 64 20 63 75 72 73 6f 72 20 66 6f 72 20 7b 30 7d  d cursor for {0}
317f0 20 6e 6f 74 20 66 6f 75 6e 64 22 2c 20 70 43 75   not found", pCu
31800 72 73 6f 72 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rsor));....     
31810 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
31820 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
31830 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
31840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31880 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
31890 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
318a0 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 63 61 74 65      /// Allocate
318b0 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20  s and returns a 
318c0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
318d0 6f 20 61 20 73 71 6c 69 74 65 33 5f 76 74 61 62  o a sqlite3_vtab
318e0 5f 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  _cursor..       
318f0 20 2f 2f 2f 20 64 65 72 69 76 65 64 20 73 74 72   /// derived str
31900 75 63 74 75 72 65 20 61 6e 64 20 63 72 65 61 74  ucture and creat
31910 65 73 20 61 6e 20 61 73 73 6f 63 69 61 74 69 6f  es an associatio
31920 6e 20 62 65 74 77 65 65 6e 20 69 74 20 61 6e 64  n between it and
31930 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
31940 2f 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65  / specified <see
31950 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
31960 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22  tualTableCursor"
31970 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
31980 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
31990 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
319a0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
319b0 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d   name="cursor">.
319c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
319d0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
319e0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
319f0 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
31a00 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65 0d 0a  instance to be..
31a10 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64          /// used
31a20 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74   when creating t
31a30 68 65 20 61 73 73 6f 63 69 61 74 69 6f 6e 2e 0d  he association..
31a40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
31a50 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
31a60 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
31a70 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
31a80 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
31a90 61 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  a sqlite3_vtab_c
31aa0 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
31ab0 72 75 63 74 75 72 65 20 6f 72 0d 0a 20 20 20 20  ructure or..    
31ac0 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
31ad0 66 3d 22 49 6e 74 50 74 72 2e 5a 65 72 6f 22 2f  f="IntPtr.Zero"/
31ae0 3e 20 69 66 20 74 68 65 20 6d 65 74 68 6f 64 20  > if the method 
31af0 66 61 69 6c 73 20 66 6f 72 20 61 6e 79 20 72 65  fails for any re
31b00 61 73 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ason...        /
31b10 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
31b20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
31b30 20 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20   virtual IntPtr 
31b40 43 75 72 73 6f 72 54 6f 49 6e 74 50 74 72 28 0d  CursorToIntPtr(.
31b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
31b60 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
31b70 75 72 73 6f 72 20 63 75 72 73 6f 72 0d 0a 20 20  ursor cursor..  
31b80 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
31b90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31ba0 20 20 20 20 69 66 20 28 28 63 75 72 73 6f 72 20      if ((cursor 
31bb0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 63 75 72  == null) || (cur
31bc0 73 6f 72 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  sors == null))..
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31be0 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65  return IntPtr.Ze
31bf0 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ro;....         
31c00 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f     IntPtr pCurso
31c10 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
31c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31c30 6f 6c 20 73 75 63 63 65 73 73 20 3d 20 66 61 6c  ol success = fal
31c40 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
31c50 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
31c60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31c70 20 20 20 20 20 20 20 70 43 75 72 73 6f 72 20 3d         pCursor =
31c80 20 41 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   AllocateCursor(
31c90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31ca0 20 20 20 20 20 20 69 66 20 28 70 43 75 72 73 6f        if (pCurso
31cb0 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
31cc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31cd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31ce0 20 20 20 20 20 20 20 20 20 20 63 75 72 73 6f 72            cursor
31cf0 2e 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 3d 20  .NativeHandle = 
31d00 70 43 75 72 73 6f 72 3b 0d 0a 20 20 20 20 20 20  pCursor;..      
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
31d20 72 73 6f 72 73 2e 41 64 64 28 70 43 75 72 73 6f  rsors.Add(pCurso
31d30 72 2c 20 63 75 72 73 6f 72 29 3b 0d 0a 20 20 20  r, cursor);..   
31d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d50 20 73 75 63 63 65 73 73 20 3d 20 74 72 75 65 3b   success = true;
31d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31d70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
31d80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
31d90 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
31da0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31db0 20 20 20 20 20 20 20 20 69 66 20 28 21 73 75 63          if (!suc
31dc0 63 65 73 73 20 26 26 20 28 70 43 75 72 73 6f 72  cess && (pCursor
31dd0 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
31de0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31df0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31e00 20 20 20 20 20 20 20 20 20 20 46 72 65 65 43 75            FreeCu
31e10 72 73 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a  rsor(pCursor);..
31e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e30 20 20 20 20 70 43 75 72 73 6f 72 20 3d 20 49 6e      pCursor = In
31e40 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
31e50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
31e60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31e70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
31e80 72 6e 20 70 43 75 72 73 6f 72 3b 0d 0a 20 20 20  rn pCursor;..   
31e90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
31ea0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
31eb0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
31f00 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
31f10 20 54 61 62 6c 65 20 44 65 63 6c 61 72 61 74 69   Table Declarati
31f20 6f 6e 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  on Helper Method
31f30 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
31f40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
31f50 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74    /// Attempts t
31f60 6f 20 64 65 63 6c 61 72 65 20 74 68 65 20 73 63  o declare the sc
31f70 68 65 6d 61 20 66 6f 72 20 74 68 65 20 76 69 72  hema for the vir
31f80 74 75 61 6c 20 74 61 62 6c 65 20 75 73 69 6e 67  tual table using
31f90 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
31fa0 2f 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  / specified data
31fb0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
31fc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
31fd0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
31fe0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
31ff0 65 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d  e="connection">.
32000 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
32010 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
32020 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e  teConnection" />
32030 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
32040 20 74 6f 20 75 73 65 20 77 68 65 6e 0d 0a 20 20   to use when..  
32050 20 20 20 20 20 20 2f 2f 2f 20 64 65 63 6c 61 72        /// declar
32060 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 20 6f  ing the schema o
32070 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
32080 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
32090 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
320a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
320b0 61 6d 65 3d 22 73 71 6c 22 3e 0d 0a 20 20 20 20  ame="sql">..    
320c0 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 72 69      /// The stri
320d0 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
320e0 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  e CREATE TABLE s
320f0 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 6f  tatement that co
32100 6d 70 6c 65 74 65 6c 79 0d 0a 20 20 20 20 20 20  mpletely..      
32110 20 20 2f 2f 2f 20 64 65 73 63 72 69 62 65 73 20    /// describes 
32120 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 74  the schema for t
32130 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
32140 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
32150 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
32160 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
32170 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20  ="error">..     
32180 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c     /// Upon fail
32190 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ure, this parame
321a0 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
321b0 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
321c0 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  an error..      
321d0 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2e 0d 0a    /// message...
321e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
321f0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
32200 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
32210 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
32220 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
32230 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
32240 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
32250 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
32260 65 64 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74  ed virtual SQLit
32270 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61  eErrorCode Decla
32280 72 65 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  reTable(..      
32290 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
322a0 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
322b0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
322c0 73 74 72 69 6e 67 20 73 71 6c 2c 0d 0a 20 20 20  string sql,..   
322d0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
322e0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
322f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
32300 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32310 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20   if (connection 
32320 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
32330 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32340 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
32350 20 22 69 6e 76 61 6c 69 64 20 63 6f 6e 6e 65 63   "invalid connec
32360 74 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  tion";..        
32370 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
32380 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
32390 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  rror;..         
323a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
323b0 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 20 73      SQLiteBase s
323c0 71 6c 69 74 65 42 61 73 65 20 3d 20 63 6f 6e 6e  qliteBase = conn
323d0 65 63 74 69 6f 6e 2e 5f 73 71 6c 3b 0d 0a 0d 0a  ection._sql;....
323e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
323f0 73 71 6c 69 74 65 42 61 73 65 20 3d 3d 20 6e 75  sqliteBase == nu
32400 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
32410 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32420 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e      error = "con
32430 6e 65 63 74 69 6f 6e 20 68 61 73 20 69 6e 76 61  nection has inva
32440 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20  lid handle";..  
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
32460 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
32470 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
32480 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32490 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
324a0 20 73 71 6c 69 74 65 42 61 73 65 2e 44 65 63 6c   sqliteBase.Decl
324b0 61 72 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  areVirtualTable(
324c0 74 68 69 73 2c 20 73 71 6c 2c 20 72 65 66 20 65  this, sql, ref e
324d0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
324e0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
324f0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
32500 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
32510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32540 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
32550 20 20 20 20 23 72 65 67 69 6f 6e 20 45 72 72 6f      #region Erro
32560 72 20 48 61 6e 64 6c 69 6e 67 20 48 65 6c 70 65  r Handling Helpe
32570 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
32580 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
32590 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 72  ..        /// Ar
325a0 72 61 6e 67 65 73 20 66 6f 72 20 74 68 65 20 73  ranges for the s
325b0 70 65 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d  pecified error m
325c0 65 73 73 61 67 65 20 74 6f 20 62 65 20 70 6c 61  essage to be pla
325d0 63 65 64 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20  ced into the..  
325e0 20 20 20 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73        /// zErrMs
325f0 67 20 66 69 65 6c 64 20 6f 66 20 61 20 73 71 6c  g field of a sql
32600 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
32610 64 20 73 74 72 75 63 74 75 72 65 2c 20 66 72 65  d structure, fre
32620 65 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  eing the..      
32630 20 20 2f 2f 2f 20 65 78 69 73 74 69 6e 67 20 65    /// existing e
32640 72 72 6f 72 20 6d 65 73 73 61 67 65 2c 20 69 66  rror message, if
32650 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f   any...        /
32660 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
32670 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
32680 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
32690 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
326a0 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
326b0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
326c0 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
326d0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
326e0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
326f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
32700 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a   name="error">..
32710 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
32720 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a  error message...
32730 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
32740 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
32750 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
32760 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
32770 6f 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d  o upon success..
32780 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
32790 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
327a0 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
327b0 61 6c 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c 65  al bool SetTable
327c0 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20  Error(..        
327d0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
327e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
327f0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
32800 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
32810 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32820 20 20 20 72 65 74 75 72 6e 20 53 65 74 54 61 62     return SetTab
32830 6c 65 45 72 72 6f 72 28 74 68 69 73 2c 20 70 56  leError(this, pV
32840 74 61 62 2c 20 4c 6f 67 45 72 72 6f 72 73 2c 20  tab, LogErrors, 
32850 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
32860 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
32870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
328c0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
328d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72 61          /// Arra
328e0 6e 67 65 73 20 66 6f 72 20 74 68 65 20 73 70 65  nges for the spe
328f0 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73  cified error mes
32900 73 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63 65  sage to be place
32910 64 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20  d into the..    
32920 20 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20      /// zErrMsg 
32930 66 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69 74  field of a sqlit
32940 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
32950 73 74 72 75 63 74 75 72 65 2c 20 66 72 65 65 69  structure, freei
32960 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ng the..        
32970 2f 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72 72  /// existing err
32980 6f 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61  or message, if a
32990 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ny...        ///
329a0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
329b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
329c0 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20  name="table">.. 
329d0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
329e0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
329f0 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e  VirtualTable" />
32a00 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
32a10 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20   used to..      
32a20 20 20 2f 2f 2f 20 6c 6f 6f 6b 75 70 20 74 68 65    /// lookup the
32a30 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
32a40 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
32a50 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
32a60 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
32a70 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
32a80 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
32a90 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a   name="error">..
32aa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
32ab0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a  error message...
32ac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
32ad0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
32ae0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
32af0 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
32b00 6f 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d  o upon success..
32b10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
32b20 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
32b30 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
32b40 61 6c 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c 65  al bool SetTable
32b50 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20  Error(..        
32b60 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
32b70 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20  lTable table,.. 
32b80 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
32b90 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
32ba0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
32bb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
32bc0 65 74 75 72 6e 20 53 65 74 54 61 62 6c 65 45 72  eturn SetTableEr
32bd0 72 6f 72 28 74 68 69 73 2c 20 74 61 62 6c 65 2c  ror(this, table,
32be0 20 4c 6f 67 45 72 72 6f 72 73 2c 20 65 72 72 6f   LogErrors, erro
32bf0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  r);..        }..
32c00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
32c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
32c60 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
32c70 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73      /// Arranges
32c80 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
32c90 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ed error message
32ca0 20 74 6f 20 62 65 20 70 6c 61 63 65 64 20 69 6e   to be placed in
32cb0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
32cc0 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66 69 65 6c  /// zErrMsg fiel
32cd0 64 20 6f 66 20 61 20 73 71 6c 69 74 65 33 5f 76  d of a sqlite3_v
32ce0 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
32cf0 63 74 75 72 65 2c 20 66 72 65 65 69 6e 67 20 74  cture, freeing t
32d00 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
32d10 65 78 69 73 74 69 6e 67 20 65 72 72 6f 72 20 6d  existing error m
32d20 65 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d  essage, if any..
32d30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
32d40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
32d50 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
32d60 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  ="cursor">..    
32d70 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
32d80 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
32d90 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22  tualTableCursor"
32da0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
32db0 6e 63 65 20 75 73 65 64 20 74 6f 0d 0a 20 20 20  nce used to..   
32dc0 20 20 20 20 20 2f 2f 2f 20 6c 6f 6f 6b 75 70 20       /// lookup 
32dd0 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  the native point
32de0 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
32df0 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
32e00 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
32e10 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
32e20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
32e30 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22  ram name="error"
32e40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
32e50 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
32e60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
32e70 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
32e80 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
32e90 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
32ea0 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65 73  zero upon succes
32eb0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
32ec0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
32ed0 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
32ee0 72 74 75 61 6c 20 62 6f 6f 6c 20 53 65 74 43 75  rtual bool SetCu
32ef0 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20 20 20 20  rsorError(..    
32f00 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
32f10 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
32f20 20 63 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20   cursor,..      
32f30 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72        string err
32f40 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
32f50 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
32f60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32f70 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72 28   SetCursorError(
32f80 74 68 69 73 2c 20 63 75 72 73 6f 72 2c 20 4c 6f  this, cursor, Lo
32f90 67 45 72 72 6f 72 73 2c 20 65 72 72 6f 72 29 3b  gErrors, error);
32fa0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
32fb0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
32fc0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
32fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33010 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
33020 65 67 69 6f 6e 20 53 74 61 74 69 63 20 45 72 72  egion Static Err
33030 6f 72 20 48 61 6e 64 6c 69 6e 67 20 48 65 6c 70  or Handling Help
33040 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
33050 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
33060 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
33070 72 72 61 6e 67 65 73 20 66 6f 72 20 74 68 65 20  rranges for the 
33080 73 70 65 63 69 66 69 65 64 20 65 72 72 6f 72 20  specified error 
33090 6d 65 73 73 61 67 65 20 74 6f 20 62 65 20 70 6c  message to be pl
330a0 61 63 65 64 20 69 6e 74 6f 20 74 68 65 0d 0a 20  aced into the.. 
330b0 20 20 20 20 20 20 20 2f 2f 2f 20 7a 45 72 72 4d         /// zErrM
330c0 73 67 20 66 69 65 6c 64 20 6f 66 20 61 20 73 71  sg field of a sq
330d0 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
330e0 65 64 20 73 74 72 75 63 74 75 72 65 2c 20 66 72  ed structure, fr
330f0 65 65 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  eeing the..     
33100 20 20 20 2f 2f 2f 20 65 78 69 73 74 69 6e 67 20     /// existing 
33110 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2c 20 69  error message, i
33120 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20  f any...        
33130 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
33140 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
33150 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
33160 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
33170 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
33180 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f  LiteModule" /> o
33190 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
331a0 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20  o be used...    
331b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
331c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
331d0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
331e0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
331f0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
33200 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
33210 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
33220 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
33230 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
33240 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
33250 72 61 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72 72  ram name="logErr
33260 6f 72 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ors">..        /
33270 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
33280 68 69 73 20 65 72 72 6f 72 20 6d 65 73 73 61 67  his error messag
33290 65 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62 65  e should also be
332a0 20 6c 6f 67 67 65 64 20 75 73 69 6e 67 20 74 68   logged using th
332b0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
332c0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
332d0 4c 6f 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a  Log" /> class...
332e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
332f0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
33300 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65  / <param name="e
33310 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rror">..        
33320 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20 6d 65  /// The error me
33330 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20  ssage...        
33340 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
33350 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
33360 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
33370 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73   Non-zero upon s
33380 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  uccess...       
33390 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
333a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
333b0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 65 74   static bool Set
333c0 54 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20 20 20  TableError(..   
333d0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
333e0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20  odule module,.. 
333f0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
33400 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
33410 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 67 45 72        bool logEr
33420 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  rors,..         
33430 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d     string error.
33440 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
33450 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33460 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
33470 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33480 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c             if (l
33490 6f 67 45 72 72 6f 72 73 29 0d 0a 20 20 20 20 20  ogErrors)..     
334a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
334b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334c0 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
334d0 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72  essage(SQLiteErr
334e0 6f 72 43 6f 64 65 2e 45 72 72 6f 72 2c 0d 0a 20  orCode.Error,.. 
334f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33500 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
33510 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
33520 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
33530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33540 20 20 20 20 20 20 20 20 20 20 22 56 69 72 74 75            "Virtu
33550 61 6c 20 74 61 62 6c 65 20 65 72 72 6f 72 3a 20  al table error: 
33560 7b 30 7d 22 2c 20 65 72 72 6f 72 29 29 3b 20 2f  {0}", error)); /
33570 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
33580 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
33590 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
335a0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
335b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
335c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335d0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
335e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
335f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
33600 28 70 56 74 61 62 20 3d 3d 20 49 6e 74 50 74 72  (pVtab == IntPtr
33610 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
33620 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
33630 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
33640 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 20       int offset 
33650 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 20 2b 20  = IntPtr.Size + 
33660 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 20 20  sizeof(int);..  
33670 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
33680 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65   pError = SQLite
33690 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50  Marshal.ReadIntP
336a0 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74  tr(pVtab, offset
336b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
336c0 20 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20    if (pError != 
336d0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
336e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
336f0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
33700 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
33710 45 72 72 6f 72 29 3b 20 70 45 72 72 6f 72 20 3d  Error); pError =
33720 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
33730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
33740 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69  QLiteMarshal.Wri
33750 74 65 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20  teIntPtr(pVtab, 
33760 6f 66 66 73 65 74 2c 20 70 45 72 72 6f 72 29 3b  offset, pError);
33770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33780 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33790 66 20 28 65 72 72 6f 72 20 3d 3d 20 6e 75 6c 6c  f (error == null
337a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
337b0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
337c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ...            b
337d0 6f 6f 6c 20 73 75 63 63 65 73 73 20 3d 20 66 61  ool success = fa
337e0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
337f0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
33800 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33810 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
33820 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
33830 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
33840 6e 67 28 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ng(error);..    
33850 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
33860 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49  teMarshal.WriteI
33870 6e 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66  ntPtr(pVtab, off
33880 73 65 74 2c 20 70 45 72 72 6f 72 29 3b 0d 0a 20  set, pError);.. 
33890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
338a0 75 63 63 65 73 73 20 3d 20 74 72 75 65 3b 0d 0a  uccess = true;..
338b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
338c0 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
338d0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
338e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
338f0 20 20 20 69 66 20 28 21 73 75 63 63 65 73 73 20     if (!success 
33900 26 26 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e  && (pError != In
33910 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20  tPtr.Zero))..   
33920 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
33930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33940 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79      SQLiteMemory
33950 2e 46 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a  .Free(pError);..
33960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33970 20 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e 74      pError = Int
33980 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
33990 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
339a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
339b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
339c0 6e 20 73 75 63 63 65 73 73 3b 0d 0a 20 20 20 20  n success;..    
339d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
339e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
339f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a20 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
33a30 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
33a40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
33a50 72 72 61 6e 67 65 73 20 66 6f 72 20 74 68 65 20  rranges for the 
33a60 73 70 65 63 69 66 69 65 64 20 65 72 72 6f 72 20  specified error 
33a70 6d 65 73 73 61 67 65 20 74 6f 20 62 65 20 70 6c  message to be pl
33a80 61 63 65 64 20 69 6e 74 6f 20 74 68 65 0d 0a 20  aced into the.. 
33a90 20 20 20 20 20 20 20 2f 2f 2f 20 7a 45 72 72 4d         /// zErrM
33aa0 73 67 20 66 69 65 6c 64 20 6f 66 20 61 20 73 71  sg field of a sq
33ab0 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
33ac0 65 64 20 73 74 72 75 63 74 75 72 65 2c 20 66 72  ed structure, fr
33ad0 65 65 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  eeing the..     
33ae0 20 20 20 2f 2f 2f 20 65 78 69 73 74 69 6e 67 20     /// existing 
33af0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2c 20 69  error message, i
33b00 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20  f any...        
33b10 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
33b20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
33b30 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
33b40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
33b50 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
33b60 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f  LiteModule" /> o
33b70 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
33b80 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20  o be used...    
33b90 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
33ba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
33bb0 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
33bc0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
33bd0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
33be0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
33bf0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
33c00 74 61 6e 63 65 20 75 73 65 64 20 74 6f 0d 0a 20  tance used to.. 
33c10 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 6f 6b 75         /// looku
33c20 70 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69  p the native poi
33c30 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
33c40 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
33c50 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
33c60 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
33c70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
33c80 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45  param name="logE
33c90 72 72 6f 72 73 22 3e 0d 0a 20 20 20 20 20 20 20  rrors">..       
33ca0 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
33cb0 20 74 68 69 73 20 65 72 72 6f 72 20 6d 65 73 73   this error mess
33cc0 61 67 65 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20  age should also 
33cd0 62 65 20 6c 6f 67 67 65 64 20 75 73 69 6e 67 20  be logged using 
33ce0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
33cf0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
33d00 74 65 4c 6f 67 22 20 2f 3e 20 63 6c 61 73 73 2e  teLog" /> class.
33d10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
33d20 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
33d30 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
33d40 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20  "error">..      
33d50 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
33d60 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20  message...      
33d70 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
33d80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
33d90 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
33da0 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e  // Non-zero upon
33db0 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20   success...     
33dc0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
33dd0 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
33de0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53  te static bool S
33df0 65 74 54 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20  etTableError(.. 
33e00 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
33e10 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d  eModule module,.
33e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
33e30 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
33e40 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
33e50 20 20 20 20 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f      bool logErro
33e60 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs,..           
33e70 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
33e80 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
33e90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33ea0 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 3d       if (table =
33eb0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33ec0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
33ed0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
33ee0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
33ef0 61 62 20 3d 20 74 61 62 6c 65 2e 4e 61 74 69 76  ab = table.Nativ
33f00 65 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20  eHandle;....    
33f10 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61          if (pVta
33f20 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b == IntPtr.Zero
33f30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33f40 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
33f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33f60 72 65 74 75 72 6e 20 53 65 74 54 61 62 6c 65 45  return SetTableE
33f70 72 72 6f 72 28 6d 6f 64 75 6c 65 2c 20 70 56 74  rror(module, pVt
33f80 61 62 2c 20 6c 6f 67 45 72 72 6f 72 73 2c 20 65  ab, logErrors, e
33f90 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
33fa0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
33fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ff0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
34000 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
34010 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e         /// Arran
34020 67 65 73 20 66 6f 72 20 74 68 65 20 73 70 65 63  ges for the spec
34030 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
34040 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64  age to be placed
34050 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20   into the..     
34060 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66     /// zErrMsg f
34070 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65  ield of a sqlite
34080 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
34090 74 72 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e  tructure, freein
340a0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
340b0 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f  // existing erro
340c0 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e  r message, if an
340d0 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
340e0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
340f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
34100 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
34110 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
34120 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
34130 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  Module" /> objec
34140 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65  t instance to be
34150 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20   used...        
34160 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
34170 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
34180 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e   name="pCursor">
34190 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
341a0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
341b0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
341c0 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69  vtab_cursor deri
341d0 76 65 64 20 73 74 72 75 63 74 75 72 65 0d 0a 20  ved structure.. 
341e0 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 20         /// used 
341f0 74 6f 20 67 65 74 20 74 68 65 20 6e 61 74 69 76  to get the nativ
34200 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
34210 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
34220 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  rived..        /
34230 2f 2f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  // structure... 
34240 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
34250 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
34260 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 6f   <param name="lo
34270 67 45 72 72 6f 72 73 22 3e 0d 0a 20 20 20 20 20  gErrors">..     
34280 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
34290 69 66 20 74 68 69 73 20 65 72 72 6f 72 20 6d 65  if this error me
342a0 73 73 61 67 65 20 73 68 6f 75 6c 64 20 61 6c 73  ssage should als
342b0 6f 20 62 65 20 6c 6f 67 67 65 64 20 75 73 69 6e  o be logged usin
342c0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
342d0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
342e0 4c 69 74 65 4c 6f 67 22 20 2f 3e 20 63 6c 61 73  LiteLog" /> clas
342f0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
34300 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
34310 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
34320 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
34330 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f      /// The erro
34340 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20  r message...    
34350 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
34360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
34370 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
34380 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70   /// Non-zero up
34390 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20  on success...   
343a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
343b0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ns>..        pri
343c0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
343d0 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72 28   SetCursorError(
343e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
343f0 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
34400 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
34410 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d  IntPtr pCursor,.
34420 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
34430 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20  l logErrors,..  
34440 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34450 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
34460 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
34470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
34480 20 28 70 43 75 72 73 6f 72 20 3d 3d 20 49 6e 74   (pCursor == Int
34490 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
344a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
344b0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
344c0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
344d0 56 74 61 62 20 3d 20 54 61 62 6c 65 46 72 6f 6d  Vtab = TableFrom
344e0 43 75 72 73 6f 72 28 6d 6f 64 75 6c 65 2c 20 70  Cursor(module, p
344f0 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  Cursor);....    
34500 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61          if (pVta
34510 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b == IntPtr.Zero
34520 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34530 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34550 72 65 74 75 72 6e 20 53 65 74 54 61 62 6c 65 45  return SetTableE
34560 72 72 6f 72 28 6d 6f 64 75 6c 65 2c 20 70 56 74  rror(module, pVt
34570 61 62 2c 20 6c 6f 67 45 72 72 6f 72 73 2c 20 65  ab, logErrors, e
34580 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
34590 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
345a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
345f0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
34600 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e         /// Arran
34610 67 65 73 20 66 6f 72 20 74 68 65 20 73 70 65 63  ges for the spec
34620 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
34630 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64  age to be placed
34640 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20   into the..     
34650 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66     /// zErrMsg f
34660 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65  ield of a sqlite
34670 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
34680 74 72 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e  tructure, freein
34690 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
346a0 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f  // existing erro
346b0 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e  r message, if an
346c0 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
346d0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
346e0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
346f0 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
34700 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
34710 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
34720 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  Module" /> objec
34730 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65  t instance to be
34740 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20   used...        
34750 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
34760 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
34770 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d   name="cursor">.
34780 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
34790 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
347a0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
347b0 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
347c0 69 6e 73 74 61 6e 63 65 20 75 73 65 64 20 74 6f  instance used to
347d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f  ..        /// lo
347e0 6f 6b 75 70 20 74 68 65 20 6e 61 74 69 76 65 20  okup the native 
347f0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
34800 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
34810 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
34820 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
34830 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
34840 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
34850 6f 67 45 72 72 6f 72 73 22 3e 0d 0a 20 20 20 20  ogErrors">..    
34860 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
34870 20 69 66 20 74 68 69 73 20 65 72 72 6f 72 20 6d   if this error m
34880 65 73 73 61 67 65 20 73 68 6f 75 6c 64 20 61 6c  essage should al
34890 73 6f 20 62 65 20 6c 6f 67 67 65 64 20 75 73 69  so be logged usi
348a0 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ng the..        
348b0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
348c0 51 4c 69 74 65 4c 6f 67 22 20 2f 3e 20 63 6c 61  QLiteLog" /> cla
348d0 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
348e0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
348f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
34900 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
34910 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 72 72       /// The err
34920 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20  or message...   
34930 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
34940 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
34950 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
34960 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75    /// Non-zero u
34970 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20  pon success...  
34980 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
34990 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
349a0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
349b0 6c 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72  l SetCursorError
349c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
349d0 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
349e0 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
349f0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
34a00 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
34a10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
34a20 6f 6f 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d 0a  ool logErrors,..
34a30 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
34a40 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
34a50 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
34a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34a70 69 66 20 28 63 75 72 73 6f 72 20 3d 3d 20 6e 75  if (cursor == nu
34a80 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
34a90 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
34aa0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
34ab0 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72    IntPtr pCursor
34ac0 20 3d 20 63 75 72 73 6f 72 2e 4e 61 74 69 76 65   = cursor.Native
34ad0 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  Handle;....     
34ae0 20 20 20 20 20 20 20 69 66 20 28 70 43 75 72 73         if (pCurs
34af0 6f 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  or == IntPtr.Zer
34b00 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
34b10 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
34b20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34b30 20 72 65 74 75 72 6e 20 53 65 74 43 75 72 73 6f   return SetCurso
34b40 72 45 72 72 6f 72 28 6d 6f 64 75 6c 65 2c 20 70  rError(module, p
34b50 43 75 72 73 6f 72 2c 20 6c 6f 67 45 72 72 6f 72  Cursor, logError
34b60 73 2c 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  s, error);..    
34b70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
34b80 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
34b90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
34ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
34be0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
34bf0 49 6e 64 65 78 20 48 61 6e 64 6c 69 6e 67 20 48  Index Handling H
34c00 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
34c10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
34c20 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
34c30 2f 20 4d 6f 64 69 66 69 65 73 20 74 68 65 20 73  / Modifies the s
34c40 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63 72  pecified <see cr
34c50 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22  ef="SQLiteIndex"
34c60 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
34c70 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nce..        ///
34c80 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20   to contain the 
34c90 73 70 65 63 69 66 69 65 64 20 65 73 74 69 6d 61  specified estima
34ca0 74 65 64 20 63 6f 73 74 2e 0d 0a 20 20 20 20 20  ted cost...     
34cb0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
34cc0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
34cd0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65  param name="inde
34ce0 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  x">..        ///
34cf0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
34d00 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20  SQLiteIndex" /> 
34d10 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
34d20 74 6f 20 6d 6f 64 69 66 79 2e 0d 0a 20 20 20 20  to modify...    
34d30 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
34d40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
34d50 61 72 61 6d 20 6e 61 6d 65 3d 22 65 73 74 69 6d  aram name="estim
34d60 61 74 65 64 43 6f 73 74 22 3e 0d 0a 20 20 20 20  atedCost">..    
34d70 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 73 74 69      /// The esti
34d80 6d 61 74 65 64 20 63 6f 73 74 20 76 61 6c 75 65  mated cost value
34d90 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20   to use...      
34da0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
34db0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
34dc0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
34dd0 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e  // Non-zero upon
34de0 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20   success...     
34df0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
34e00 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  >..        prote
34e10 63 74 65 64 20 76 69 72 74 75 61 6c 20 62 6f 6f  cted virtual boo
34e20 6c 20 53 65 74 45 73 74 69 6d 61 74 65 64 43 6f  l SetEstimatedCo
34e30 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st(..           
34e40 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64   SQLiteIndex ind
34e50 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ex,..           
34e60 20 64 6f 75 62 6c 65 20 65 73 74 69 6d 61 74 65   double estimate
34e70 64 43 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 20  dCost..         
34e80 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
34e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
34ea0 28 28 69 6e 64 65 78 20 3d 3d 20 6e 75 6c 6c 29  ((index == null)
34eb0 20 7c 7c 20 28 69 6e 64 65 78 2e 4f 75 74 70 75   || (index.Outpu
34ec0 74 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  ts == null))..  
34ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34ee0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
34ef0 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
34f00 2e 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74  .Outputs.Estimat
34f10 65 64 43 6f 73 74 20 3d 20 65 73 74 69 6d 61 74  edCost = estimat
34f20 65 64 43 6f 73 74 3b 0d 0a 20 20 20 20 20 20 20  edCost;..       
34f30 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
34f40 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
34f50 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
34f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
34fa0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
34fb0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
34fc0 20 20 2f 2f 2f 20 4d 6f 64 69 66 69 65 73 20 74    /// Modifies t
34fd0 68 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65  he specified <se
34fe0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
34ff0 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  dex" /> object i
35000 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20  nstance..       
35010 20 2f 2f 2f 20 74 6f 20 63 6f 6e 74 61 69 6e 20   /// to contain 
35020 74 68 65 20 64 65 66 61 75 6c 74 20 65 73 74 69  the default esti
35030 6d 61 74 65 64 20 63 6f 73 74 2e 0d 0a 20 20 20  mated cost...   
35040 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
35050 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
35060 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e   <param name="in
35070 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  dex">..        /
35080 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
35090 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f  ="SQLiteIndex" /
350a0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
350b0 65 20 74 6f 20 6d 6f 64 69 66 79 2e 0d 0a 20 20  e to modify...  
350c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
350d0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
350e0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
350f0 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
35100 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20  upon success... 
35110 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
35120 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
35130 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
35140 20 62 6f 6f 6c 20 53 65 74 45 73 74 69 6d 61 74   bool SetEstimat
35150 65 64 43 6f 73 74 28 0d 0a 20 20 20 20 20 20 20  edCost(..       
35160 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78       SQLiteIndex
35170 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20   index..        
35180 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
35190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
351a0 74 75 72 6e 20 53 65 74 45 73 74 69 6d 61 74 65  turn SetEstimate
351b0 64 43 6f 73 74 28 69 6e 64 65 78 2c 20 44 65 66  dCost(index, Def
351c0 61 75 6c 74 45 73 74 69 6d 61 74 65 64 43 6f 73  aultEstimatedCos
351d0 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  t);..        }..
351e0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
351f0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  on..        #end
35200 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
35210 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
35220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35250 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
35260 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
35270 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
35280 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
35290 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f 72 73 3b 0d  bool logErrors;.
352a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
352b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
352c0 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6f 72 20 73  /// Returns or s
352d0 65 74 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61  ets a boolean va
352e0 6c 75 65 20 69 6e 64 69 63 61 74 69 6e 67 20 77  lue indicating w
352f0 68 65 74 68 65 72 20 76 69 72 74 75 61 6c 20 74  hether virtual t
35300 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
35310 2f 20 65 72 72 6f 72 73 20 73 68 6f 75 6c 64 20  / errors should 
35320 62 65 20 6c 6f 67 67 65 64 20 75 73 69 6e 67 20  be logged using 
35330 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
35340 51 4c 69 74 65 4c 6f 67 22 20 2f 3e 20 63 6c 61  QLiteLog" /> cla
35350 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
35360 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
35370 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
35380 75 61 6c 20 62 6f 6f 6c 20 4c 6f 67 45 72 72 6f  ual bool LogErro
35390 72 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  rs..        {.. 
353a0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
353b0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
353c0 3b 20 72 65 74 75 72 6e 20 6c 6f 67 45 72 72 6f  ; return logErro
353d0 72 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  rs; }..         
353e0 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69     set { CheckDi
353f0 73 70 6f 73 65 64 28 29 3b 20 6c 6f 67 45 72 72  sposed(); logErr
35400 6f 72 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ors = value; }..
35410 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35420 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
35430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
35470 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
35480 62 6f 6f 6c 20 6c 6f 67 45 78 63 65 70 74 69 6f  bool logExceptio
35490 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns;..        ///
354a0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
354b0 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
354c0 6f 72 20 73 65 74 73 20 61 20 62 6f 6f 6c 65 61  or sets a boolea
354d0 6e 20 76 61 6c 75 65 20 69 6e 64 69 63 61 74 69  n value indicati
354e0 6e 67 20 77 68 65 74 68 65 72 20 65 78 63 65 70  ng whether excep
354f0 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 2f  tions..        /
35500 2f 2f 20 63 61 75 67 68 74 20 69 6e 20 74 68 65  // caught in the
35510 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
35520 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
35530 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69  NativeModule.xDi
35540 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  sconnect" /> met
35550 68 6f 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod,..        //
35560 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
35570 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
35580 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65  .xDestroy" /> me
35590 74 68 6f 64 2c 20 61 6e 64 20 74 68 65 0d 0a 20  thod, and the.. 
355a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
355b0 63 72 65 66 3d 22 44 69 73 70 6f 73 65 28 29 22  cref="Dispose()"
355c0 20 2f 3e 20 6d 65 74 68 6f 64 20 73 68 6f 75 6c   /> method shoul
355d0 64 20 62 65 20 6c 6f 67 67 65 64 20 75 73 69 6e  d be logged usin
355e0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
355f0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
35600 4c 69 74 65 4c 6f 67 22 20 2f 3e 20 63 6c 61 73  LiteLog" /> clas
35610 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
35620 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
35630 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75      public virtu
35640 61 6c 20 62 6f 6f 6c 20 4c 6f 67 45 78 63 65 70  al bool LogExcep
35650 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 7b  tions..        {
35660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
35670 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
35680 64 28 29 3b 20 72 65 74 75 72 6e 20 6c 6f 67 45  d(); return logE
35690 78 63 65 70 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20  xceptions; }..  
356a0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
356b0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
356c0 20 6c 6f 67 45 78 63 65 70 74 69 6f 6e 73 20 3d   logExceptions =
356d0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
356e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
356f0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
35700 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
35710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
35750 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
35760 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
35770 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  le Members..    
35780 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
35790 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53  >..        /// S
357a0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
357b0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
357c0 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
357d0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
357e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
357f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
35800 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22  param name="pDb"
35810 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53  >..        /// S
35820 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
35830 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
35840 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
35850 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
35860 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
35870 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
35880 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22 3e  ram name="pAux">
35890 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65  ..        /// Se
358a0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
358b0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
358c0 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e  dule.xCreate" />
358d0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
358e0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
358f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
35900 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d  am name="argc">.
35910 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65  .        /// See
35920 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
35930 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
35940 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
35950 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
35960 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
35970 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
35980 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a  m name="argv">..
35990 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
359a0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
359b0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
359c0 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d  le.xCreate" /> m
359d0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
359e0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
359f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
35a00 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
35a10 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
35a20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
35a30 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
35a40 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d  le.xCreate" /> m
35a50 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
35a60 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
35a70 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
35a80 20 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d   name="pError">.
35a90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65  .        /// See
35aa0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
35ab0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
35ac0 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
35ad0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
35ae0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
35af0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
35b00 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
35b10 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
35b20 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
35b30 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
35b40 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
35b50 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
35b60 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
35b70 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f  ivate SQLiteErro
35b80 72 43 6f 64 65 20 78 43 72 65 61 74 65 28 0d 0a  rCode xCreate(..
35b90 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
35ba0 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20  tr pDb,..       
35bb0 20 20 20 20 20 49 6e 74 50 74 72 20 70 41 75 78       IntPtr pAux
35bc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
35bd0 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
35be0 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d 20 61        IntPtr[] a
35bf0 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgv,..          
35c00 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 56 74    ref IntPtr pVt
35c10 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
35c20 20 72 65 66 20 49 6e 74 50 74 72 20 70 45 72 72   ref IntPtr pErr
35c30 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
35c40 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
35c50 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
35c60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
35c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
35c80 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20  ring fileName = 
35c90 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74 72  SQLiteString.Str
35ca0 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74  ingFromUtf8IntPt
35cb0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
35cc0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
35cd0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
35ce0 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61 6d 65 28  te3_db_filename(
35cf0 70 44 62 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  pDb, IntPtr.Zero
35d00 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
35d10 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
35d20 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
35d30 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
35d40 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
35d50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35d60 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2c 20             pDb, 
35d70 66 69 6c 65 4e 61 6d 65 2c 20 66 61 6c 73 65 29  fileName, false)
35d80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35d90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35da0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
35db0 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
35dc0 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  le = null;..    
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35de0 73 74 72 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e  string error = n
35df0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
35e00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35e10 43 72 65 61 74 65 28 63 6f 6e 6e 65 63 74 69 6f  Create(connectio
35e20 6e 2c 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20  n, pAux,..      
35e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e40 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 72 69        SQLiteStri
35e50 6e 67 2e 53 74 72 69 6e 67 41 72 72 61 79 46 72  ng.StringArrayFr
35e60 6f 6d 55 74 66 38 49 6e 74 50 74 72 41 72 72 61  omUtf8IntPtrArra
35e70 79 28 61 72 67 76 29 2c 0d 0a 20 20 20 20 20 20  y(argv),..      
35e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e90 20 20 20 20 20 20 72 65 66 20 74 61 62 6c 65 2c        ref table,
35ea0 20 72 65 66 20 65 72 72 6f 72 29 20 3d 3d 20 53   ref error) == S
35eb0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
35ec0 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
35ed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ef0 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20     if (table != 
35f00 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
35f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56                pV
35f40 74 61 62 20 3d 20 54 61 62 6c 65 54 6f 49 6e 74  tab = TableToInt
35f50 50 74 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20  Ptr(table);..   
35f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35f80 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
35f90 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok;..           
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
35fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fc0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fe0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36000 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51       pError = SQ
36010 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
36020 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
36030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36050 20 20 22 6e 6f 20 74 61 62 6c 65 20 77 61 73 20    "no table was 
36060 63 72 65 61 74 65 64 22 29 3b 0d 0a 20 20 20 20  created");..    
36070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36080 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
36090 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
360a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360b0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
360c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
360d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360e0 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
360f0 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
36100 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
36110 67 28 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  g(error);..     
36120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
36130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36140 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
36150 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36160 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
36170 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73   e) /* NOTE: Mus
36180 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d  t catch ALL. */.
36190 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
361a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361b0 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53  pError = SQLiteS
361c0 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
361d0 46 72 6f 6d 53 74 72 69 6e 67 28 65 2e 54 6f 53  FromString(e.ToS
361e0 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
361f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
36200 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
36210 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
36220 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
36230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
36240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36280 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
36290 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
362a0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
362b0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
362c0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
362d0 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  .xConnect" /> me
362e0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
362f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
36300 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
36310 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20  m name="pDb">.. 
36320 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
36330 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
36340 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
36350 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
36360 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
36370 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
36380 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
36390 20 6e 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20   name="pAux">.. 
363a0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
363b0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
363c0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
363d0 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
363e0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
363f0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
36400 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
36410 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20   name="argc">.. 
36420 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
36430 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
36440 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
36450 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
36460 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
36470 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
36480 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
36490 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20   name="argv">.. 
364a0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
364b0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
364c0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
364d0 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
364e0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
364f0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
36500 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
36510 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
36520 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
36530 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
36540 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
36550 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
36560 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
36570 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
36580 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
36590 6d 20 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e  m name="pError">
365a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65  ..        /// Se
365b0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
365c0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
365d0 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
365e0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
365f0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
36600 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
36610 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
36620 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
36630 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
36640 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
36650 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ect" /> method..
36660 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
36670 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
36680 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 45   private SQLiteE
36690 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63  rrorCode xConnec
366a0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
366b0 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20 20 20  IntPtr pDb,..   
366c0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
366d0 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  pAux,..         
366e0 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
366f0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
36700 5b 5d 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  [] argv,..      
36710 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
36720 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
36730 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
36740 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20  pError..        
36750 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
36760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
36770 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
36780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36790 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
367a0 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  e = SQLiteString
367b0 2e 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49  .StringFromUtf8I
367c0 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
367d0 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
367e0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
367f0 73 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e  sqlite3_db_filen
36800 61 6d 65 28 70 44 62 2c 20 49 6e 74 50 74 72 2e  ame(pDb, IntPtr.
36810 5a 65 72 6f 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Zero));....     
36820 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
36830 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
36840 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
36850 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
36860 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
36870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
36880 44 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 66 61  Db, fileName, fa
36890 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lse))..         
368a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
368b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
368c0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
368d0 20 74 61 62 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a   table = null;..
368e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368f0 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72      string error
36900 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
36910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36920 69 66 20 28 43 6f 6e 6e 65 63 74 28 63 6f 6e 6e  if (Connect(conn
36930 65 63 74 69 6f 6e 2c 20 70 41 75 78 2c 0d 0a 20  ection, pAux,.. 
36940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36950 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
36960 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 41 72  eString.StringAr
36970 72 61 79 46 72 6f 6d 55 74 66 38 49 6e 74 50 74  rayFromUtf8IntPt
36980 72 41 72 72 61 79 28 61 72 67 76 29 2c 0d 0a 20  rArray(argv),.. 
36990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369a0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 74             ref t
369b0 61 62 6c 65 2c 20 72 65 66 20 65 72 72 6f 72 29  able, ref error)
369c0 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
369d0 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
369e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
369f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a00 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c          if (tabl
36a10 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
36a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a50 20 20 20 70 56 74 61 62 20 3d 20 54 61 62 6c 65     pVtab = Table
36a60 54 6f 49 6e 74 50 74 72 28 74 61 62 6c 65 29 3b  ToIntPtr(table);
36a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
36a90 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
36aa0 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20  Code.Ok;..      
36ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ac0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
36ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
36ae0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
36af0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b10 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72            pError
36b20 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
36b30 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
36b40 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ring(..         
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b60 20 20 20 20 20 20 20 22 6e 6f 20 74 61 62 6c 65         "no table
36b70 20 77 61 73 20 63 72 65 61 74 65 64 22 29 3b 0d   was created");.
36b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36b90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
36ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
36bc0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
36bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36bf0 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72              pErr
36c00 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  or = SQLiteStrin
36c10 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
36c20 53 74 72 69 6e 67 28 65 72 72 6f 72 29 3b 0d 0a  String(error);..
36c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
36c50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
36c60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
36c70 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
36c80 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
36c90 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
36ca0 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
36cb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36cc0 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51       pError = SQ
36cd0 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
36ce0 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
36cf0 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
36d00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
36d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
36d20 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
36d30 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
36d40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36d50 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
36d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
36da0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
36db0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53  >..        /// S
36dc0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
36dd0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
36de0 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
36df0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
36e00 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
36e10 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
36e20 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
36e30 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
36e40 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
36e50 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
36e60 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74  tiveModule.xBest
36e70 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
36e80 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
36e90 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
36ea0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
36eb0 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20  ="pIndex">..    
36ec0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
36ed0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
36ee0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
36ef0 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65  BestIndex" /> me
36f00 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
36f10 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
36f20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
36f30 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
36f40 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
36f50 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
36f60 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  Module.xBestInde
36f70 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  x" /> method... 
36f80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
36f90 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
36fa0 72 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72  rivate SQLiteErr
36fb0 6f 72 43 6f 64 65 20 78 42 65 73 74 49 6e 64 65  orCode xBestInde
36fc0 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x(..            
36fd0 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
36fe0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
36ff0 72 20 70 49 6e 64 65 78 0d 0a 20 20 20 20 20 20  r pIndex..      
37000 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
37010 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37020 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
37030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37040 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
37050 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54  lTable table = T
37060 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70  ableFromIntPtr(p
37070 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
37080 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 61            if (ta
37090 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ble != null)..  
370a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
370b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
370c0 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78       SQLiteIndex
370d0 20 69 6e 64 65 78 20 3d 20 6e 75 6c 6c 3b 0d 0a   index = null;..
370e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
370f0 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73        SQLiteMars
37100 68 61 6c 2e 49 6e 64 65 78 46 72 6f 6d 49 6e 74  hal.IndexFromInt
37110 50 74 72 28 70 49 6e 64 65 78 2c 20 72 65 66 20  Ptr(pIndex, ref 
37120 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
37130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
37140 66 20 28 42 65 73 74 49 6e 64 65 78 28 74 61 62  f (BestIndex(tab
37150 6c 65 2c 20 69 6e 64 65 78 29 20 3d 3d 20 53 51  le, index) == SQ
37160 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
37170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37180 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371a0 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e    SQLiteMarshal.
371b0 49 6e 64 65 78 54 6f 49 6e 74 50 74 72 28 69 6e  IndexToIntPtr(in
371c0 64 65 78 2c 20 70 49 6e 64 65 78 29 3b 0d 0a 20  dex, pIndex);.. 
371d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
371f0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
37200 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
37210 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
37220 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
37230 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
37240 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
37250 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
37260 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
37270 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
37280 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37290 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
372a0 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54  Error(pVtab, e.T
372b0 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
372c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
372d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
372e0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
372f0 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
37300 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
37310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37350 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
37360 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
37370 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
37380 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
37390 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
373a0 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20  le.xDisconnect" 
373b0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
373c0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
373d0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
373e0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
373f0 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
37400 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
37410 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
37420 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e  veModule.xDiscon
37430 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
37440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
37450 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
37460 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
37470 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
37480 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
37490 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
374a0 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f  e.xDisconnect" /
374b0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
374c0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
374d0 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
374e0 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  te SQLiteErrorCo
374f0 64 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d  de xDisconnect(.
37500 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
37510 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
37520 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
37530 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37540 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
37550 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37560 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
37570 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20  alTable table = 
37580 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28  TableFromIntPtr(
37590 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
375a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
375b0 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  able != null).. 
375c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
375d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
375e0 20 20 20 20 20 20 69 66 20 28 44 69 73 63 6f 6e        if (Discon
375f0 6e 65 63 74 28 74 61 62 6c 65 29 20 3d 3d 20 53  nect(table) == S
37600 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
37610 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
37620 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37640 20 20 20 69 66 20 28 74 61 62 6c 65 73 20 21 3d     if (tables !=
37650 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
37660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37670 20 20 20 20 74 61 62 6c 65 73 2e 52 65 6d 6f 76      tables.Remov
37680 65 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  e(pVtab);....   
37690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376a0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
376b0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
376c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
376d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
376e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
376f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
37700 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
37710 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54  eption e) /* NOT
37720 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c  E: Must catch AL
37730 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  L. */..         
37740 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37750 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
37760 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
37770 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74  E: At this point
37780 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 77 61  , there is no wa
37790 79 20 74 6f 20 72 65 70 6f 72 74 20 74 68 65 20  y to report the 
377a0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
377b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
377c0 63 6f 6e 64 69 74 69 6f 6e 20 62 61 63 6b 20 74  condition back t
377d0 6f 20 74 68 65 20 63 61 6c 6c 65 72 3b 20 74 68  o the caller; th
377e0 65 72 65 66 6f 72 65 2c 20 75 73 65 20 74 68 65  erefore, use the
377f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37800 20 20 2f 2f 20 20 20 20 20 20 20 6c 6f 67 67 69    //       loggi
37810 6e 67 20 66 61 63 69 6c 69 74 79 20 69 6e 73 74  ng facility inst
37820 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ead...          
37830 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
37840 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
37850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
37860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37870 20 20 20 20 20 20 69 66 20 28 4c 6f 67 45 78 63        if (LogExc
37880 65 70 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  eptions)..      
37890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
378a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
378b0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
378c0 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  og.LogMessage(SQ
378d0 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45  LiteBase.COR_E_E
378e0 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20  XCEPTION,..     
378f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37900 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
37910 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
37920 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
37930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
37950 61 75 67 68 74 20 65 78 63 65 70 74 69 6f 6e 20  aught exception 
37960 69 6e 20 5c 22 78 44 69 73 63 6f 6e 6e 65 63 74  in \"xDisconnect
37970 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22 2c  \" method: {0}",
37980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29                e)
379a0 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
379b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
379d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
379e0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
379f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37a00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37a10 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
37a20 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
37a30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
37a40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
37a50 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
37a60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 72                Fr
37a80 65 65 54 61 62 6c 65 28 70 56 74 61 62 29 3b 0d  eeTable(pVtab);.
37a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
37aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
37ab0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
37ac0 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
37ad0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
37ae0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
37af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
37b30 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
37b40 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
37b50 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
37b60 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
37b70 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22  Module.xDestroy"
37b80 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
37b90 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
37ba0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
37bb0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
37bc0 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tab">..        /
37bd0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
37be0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
37bf0 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72  iveModule.xDestr
37c00 6f 79 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  oy" /> method...
37c10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
37c20 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
37c30 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
37c40 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
37c50 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
37c60 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
37c70 78 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65 74  xDestroy" /> met
37c80 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
37c90 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
37ca0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
37cb0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44  LiteErrorCode xD
37cc0 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20  estroy(..       
37cd0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
37ce0 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
37cf0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
37d00 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
37d10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
37d20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
37d30 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
37d40 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f  table = TableFro
37d50 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d  mIntPtr(pVtab);.
37d60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37d70 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20     if (table != 
37d80 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
37d90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..