System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 718641123ebde290773eb211d6c8079ca9127ffb:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 4a 6f   * Written by Jo
0080: 65 20 4d 69 73 74 61 63 68 6b 69 6e 20 28 6a 6f  e Mistachkin (jo
0090: 65 40 6d 69 73 74 61 63 68 6b 69 6e 2e 63 6f 6d  e@mistachkin.com
00a0: 29 0d 0a 20 2a 0d 0a 20 2a 20 52 65 6c 65 61 73  ).. *.. * Releas
00b0: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00c0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at 
00d0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00e0: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 75 73  *********/....us
0120: 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65  ing System.Colle
0130: 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d  ctions.Generic;.
0140: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c  .using System.Gl
0150: 6f 62 61 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 75 73  obalization;..us
0160: 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69  ing System.Runti
0170: 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63  me.InteropServic
0180: 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  es;..using Syste
0190: 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 6e 61 6d 65 73  m.Text;....names
01a0: 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61  pace System.Data
01b0: 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20  .SQLite..{..    
01c0: 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 43 6f  #region SQLiteCo
01d0: 6e 74 65 78 74 20 48 65 6c 70 65 72 20 43 6c 61  ntext Helper Cla
01e0: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
01f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
0200: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
0210: 65 6e 74 73 20 61 20 63 6f 6e 74 65 78 74 20 66  ents a context f
0220: 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63  rom the SQLite c
0230: 6f 72 65 20 6c 69 62 72 61 72 79 20 74 68 61 74  ore library that
0240: 20 63 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 62 65   can..    /// be
0250: 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
0260: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 2a 28  qlite3_result_*(
0270: 29 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64  ) and associated
0280: 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20   functions...   
0290: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
02a0: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c  .    public seal
02b0: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 43  ed class SQLiteC
02c0: 6f 6e 74 65 78 74 20 3a 20 49 53 51 4c 69 74 65  ontext : ISQLite
02d0: 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20  NativeHandle..  
02e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
02f0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
0300: 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  a..        /// <
0310: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
0320: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
0330: 20 63 6f 6e 74 65 78 74 20 68 61 6e 64 6c 65 2e   context handle.
0340: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
0350: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
0360: 20 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72    private IntPtr
0370: 20 70 43 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20   pContext;..    
0380: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0390: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
03a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
03f0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
0400: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
0410: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0420: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
0430: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
0440: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
0450: 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65  ss using the spe
0460: 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20  cified native.. 
0470: 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 65         /// conte
0480: 78 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  xt handle...    
0490: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
04a0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
04b0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6f  <param name="pCo
04c0: 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20  ntext">..       
04d0: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
04e0: 63 6f 6e 74 65 78 74 20 68 61 6e 64 6c 65 20 74  context handle t
04f0: 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  o use...        
0500: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0510: 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53        internal S
0520: 51 4c 69 74 65 43 6f 6e 74 65 78 74 28 49 6e 74  QLiteContext(Int
0530: 50 74 72 20 70 43 6f 6e 74 65 78 74 29 0d 0a 20  Ptr pContext).. 
0540: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0550: 20 20 20 20 20 20 74 68 69 73 2e 70 43 6f 6e 74        this.pCont
0560: 65 78 74 20 3d 20 70 43 6f 6e 74 65 78 74 3b 0d  ext = pContext;.
0570: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
0580: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0590: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
05a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
05f0: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
0600: 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72 73  veHandle Members
0610: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
0620: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
0630: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
0640: 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69   underlying SQLi
0650: 74 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65  te native handle
0660: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
0670: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
0680: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
0690: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
06a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
06b0: 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 74 50       public IntP
06c0: 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d  tr NativeHandle.
06d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
06e0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
06f0: 74 75 72 6e 20 70 43 6f 6e 74 65 78 74 3b 20 7d  turn pContext; }
0700: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
0710: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
0720: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
0730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0770: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
0780: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74  egion Public Met
0790: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
07a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
07b0: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
07c0: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
07d0: 20 74 6f 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20   to NULL...     
07e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
07f0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
0800: 63 20 76 6f 69 64 20 53 65 74 4e 75 6c 6c 28 29  c void SetNull()
0810: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
0820: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
0830: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
0840: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
0850: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
0860: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
0870: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
0880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
0890: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
08a0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
08b0: 6e 75 6c 6c 28 70 43 6f 6e 74 65 78 74 29 3b 0d  null(pContext);.
08c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
08d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
08e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0920: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
0930: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
0940: 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e  /// Sets the con
0950: 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74  text result to t
0960: 68 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65  he specified <se
0970: 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20  e cref="Double" 
0980: 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
0990: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...        
09a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
09b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
09c0: 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e  am name="value">
09d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
09e0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75  e <see cref="Dou
09f0: 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  ble" /> value to
0a00: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
0a10: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
0a20: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
0a30: 20 53 65 74 44 6f 75 62 6c 65 28 64 6f 75 62 6c   SetDouble(doubl
0a40: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  e value)..      
0a50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0a60: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
0a70: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
0a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0a90: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
0aa0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
0ab0: 6f 6e 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  on();....#if !PL
0ac0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
0ad0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
0ae0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
0af0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
0b00: 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 70  _result_double(p
0b10: 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  Context, value);
0b20: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
0b30: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
0b40: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
0b50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
0b60: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f  3_result_double_
0b70: 69 6e 74 65 72 6f 70 28 70 43 6f 6e 74 65 78 74  interop(pContext
0b80: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
0b90: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
0ba0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
0bb0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
0bc0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
0bd0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
0be0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0c30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
0c40: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
0c50: 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74  // Sets the cont
0c60: 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68  ext result to th
0c70: 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65  e specified <see
0c80: 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
0c90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61  ..        /// va
0ca0: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
0cb0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0cc0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
0cd0: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a   name="value">..
0ce0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
0cf0: 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32  <see cref="Int32
0d00: 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75 73  " /> value to us
0d10: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
0d20: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
0d30: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
0d40: 74 49 6e 74 28 69 6e 74 20 76 61 6c 75 65 29 0d  tInt(int value).
0d50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
0d60: 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e          if (pCon
0d70: 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  text == IntPtr.Z
0d80: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
0d90: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
0da0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
0db0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a  Exception();....
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
0dd0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
0de0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
0df0: 6e 74 28 70 43 6f 6e 74 65 78 74 2c 20 76 61 6c  nt(pContext, val
0e00: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
0e10: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
0e70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0e80: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
0e90: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
0ea0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
0eb0: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  d <see cref="Int
0ec0: 36 34 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  64" />..        
0ed0: 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  /// value...    
0ee0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ef0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
0f00: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
0f10: 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ue">..        //
0f20: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
0f30: 22 49 6e 74 36 34 22 20 2f 3e 20 76 61 6c 75 65  "Int64" /> value
0f40: 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20   to use...      
0f50: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
0f60: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
0f70: 6f 69 64 20 53 65 74 49 6e 74 36 34 28 6c 6f 6e  oid SetInt64(lon
0f80: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  g value)..      
0f90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0fa0: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
0fb0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0fd0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
0fe0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
0ff0: 6f 6e 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  on();....#if !PL
1000: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
1010: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
1020: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1030: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1040: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 70 43  _result_int64(pC
1050: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
1060: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
1070: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
1080: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1090: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10a0: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e  _result_int64_in
10b0: 74 65 72 6f 70 28 70 43 6f 6e 74 65 78 74 2c 20  terop(pContext, 
10c0: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
10d0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
10e0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
10f0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
1100: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
1110: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1120: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1170: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1180: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1190: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
11a0: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
11b0: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
11c0: 72 65 66 3d 22 53 74 72 69 6e 67 22 20 2f 3e 0d  ref="String" />.
11d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c  .        /// val
11e0: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
11f0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1200: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1210: 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20  name="value">.. 
1220: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1230: 73 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67  see cref="String
1240: 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75 73  " /> value to us
1250: 65 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 77  e.  This value w
1260: 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
1270: 2f 2f 2f 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  /// converted to
1280: 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64   the UTF-8 encod
1290: 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 62 65 69  ing prior to bei
12a0: 6e 67 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20  ng used...      
12b0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
12c0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
12d0: 6f 69 64 20 53 65 74 53 74 72 69 6e 67 28 73 74  oid SetString(st
12e0: 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
12f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1300: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1310: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1330: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1340: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1350: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
1360: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
1370: 79 74 65 73 20 3d 20 53 51 4c 69 74 65 53 74 72  ytes = SQLiteStr
1380: 69 6e 67 2e 47 65 74 55 74 66 38 42 79 74 65 73  ing.GetUtf8Bytes
1390: 46 72 6f 6d 53 74 72 69 6e 67 28 76 61 6c 75 65  FromString(value
13a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13b0: 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d 20 6e    if (bytes == n
13c0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
13d0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
13e0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
13f0: 70 74 69 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d  ption("value");.
1400: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
1410: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1420: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
1430: 74 5f 74 65 78 74 28 0d 0a 20 20 20 20 20 20 20  t_text(..       
1440: 20 20 20 20 20 20 20 20 20 70 43 6f 6e 74 65 78           pContex
1450: 74 2c 20 62 79 74 65 73 2c 20 62 79 74 65 73 2e  t, bytes, bytes.
1460: 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29  Length, (IntPtr)
1470: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  (-1));..        
1480: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
14e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
14f0: 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20         /// Sets 
1500: 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75  the context resu
1510: 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  lt to the specif
1520: 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ied <see cref="S
1530: 74 72 69 6e 67 22 20 2f 3e 0d 0a 20 20 20 20 20  tring" />..     
1540: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 63 6f 6e     /// value con
1550: 74 61 69 6e 69 6e 67 20 61 6e 20 65 72 72 6f 72  taining an error
1560: 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20   message...     
1570: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1580: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1590: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
15a0: 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
15b0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
15c0: 53 74 72 69 6e 67 22 20 2f 3e 20 76 61 6c 75 65  String" /> value
15d0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15e0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65  error message te
15f0: 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  xt...        ///
1600: 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
1610: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f   be converted to
1620: 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64   the UTF-8 encod
1630: 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 62 65 69  ing prior to bei
1640: 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
1650: 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
1660: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1670: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
1680: 20 53 65 74 45 72 72 6f 72 28 73 74 72 69 6e 67   SetError(string
1690: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20   value)..       
16a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16b0: 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20  if (pContext == 
16c0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
16e0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
16f0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
1700: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
1710: 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73      byte[] bytes
1720: 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
1730: 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d  GetUtf8BytesFrom
1740: 53 74 72 69 6e 67 28 76 61 6c 75 65 29 3b 0d 0a  String(value);..
1750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1760: 20 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29   (bytes == null)
1770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1780: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
1790: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
17a0: 6e 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  n("value");.... 
17b0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
17c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17d0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
17e0: 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ror(..          
17f0: 20 20 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20        pContext, 
1800: 62 79 74 65 73 2c 20 62 79 74 65 73 2e 4c 65 6e  bytes, bytes.Len
1810: 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  gth);..        }
1820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1880: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1890: 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74        /// Sets t
18a0: 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c  he context resul
18b0: 74 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  t to the specifi
18c0: 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
18d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 22 20 2f  LiteErrorCode" /
18e0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  >..        /// v
18f0: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
1900: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1910: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1920: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
1930: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1940: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1950: 74 65 45 72 72 6f 72 43 6f 64 65 22 20 2f 3e 20  teErrorCode" /> 
1960: 76 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20  value to use... 
1970: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1980: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
1990: 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72 72 6f  lic void SetErro
19a0: 72 43 6f 64 65 28 53 51 4c 69 74 65 45 72 72 6f  rCode(SQLiteErro
19b0: 72 43 6f 64 65 20 76 61 6c 75 65 29 0d 0a 20 20  rCode value)..  
19c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19d0: 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78       if (pContex
19e0: 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  t == IntPtr.Zero
19f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a00: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
1a10: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
1a20: 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20  eption();....   
1a30: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
1a40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1a50: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
1a60: 72 5f 63 6f 64 65 28 70 43 6f 6e 74 65 78 74 2c  r_code(pContext,
1a70: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
1a80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ae0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1af0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74  .        /// Set
1b00: 73 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65  s the context re
1b10: 73 75 6c 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20  sult to contain 
1b20: 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 53  the error code S
1b30: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 2e 0d 0a 20  QLITE_TOOBIG... 
1b40: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1b50: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
1b60: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72  ublic void SetEr
1b70: 72 6f 72 54 6f 6f 42 69 67 28 29 0d 0a 20 20 20  rorTooBig()..   
1b80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b90: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1ba0: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bc0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1bd0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1be0: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
1bf0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
1c00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1c10: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
1c20: 5f 74 6f 6f 62 69 67 28 70 43 6f 6e 74 65 78 74  _toobig(pContext
1c30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
1c40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1ca0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1cb0: 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20     /// Sets the 
1cc0: 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74  context result t
1cd0: 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 65 72  o contain the er
1ce0: 72 6f 72 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  ror code SQLITE_
1cf0: 4e 4f 4d 45 4d 2e 0d 0a 20 20 20 20 20 20 20 20  NOMEM...        
1d00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1d10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
1d20: 6f 69 64 20 53 65 74 45 72 72 6f 72 4e 6f 4d 65  oid SetErrorNoMe
1d30: 6d 6f 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20  mory()..        
1d40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1d50: 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49  f (pContext == I
1d60: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
1d80: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
1d90: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
1da0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1db0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
1dc0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
1dd0: 65 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d 65  esult_error_nome
1de0: 6d 28 70 43 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  m(pContext);..  
1df0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e50: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1e60: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1e70: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
1e80: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
1e90: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
1ea0: 72 65 66 3d 22 42 79 74 65 22 20 2f 3e 20 61 72  ref="Byte" /> ar
1eb0: 72 61 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ray..        ///
1ec0: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
1ed0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1ee0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1ef0: 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
1f00: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1f10: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 42 79  he <see cref="By
1f20: 74 65 22 20 2f 3e 20 61 72 72 61 79 20 76 61 6c  te" /> array val
1f30: 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20  ue to use...    
1f40: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1f50: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
1f60: 20 76 6f 69 64 20 53 65 74 42 6c 6f 62 28 62 79   void SetBlob(by
1f70: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
1f80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f90: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1fa0: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fc0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1fd0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1fe0: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
1ff0: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
2000: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2010: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2020: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
2030: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 76 61 6c  llException("val
2040: 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
2050: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
2060: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2070: 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 0d 0a 20  _result_blob(.. 
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2090: 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20  Context, value, 
20a0: 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49  value.Length, (I
20b0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
20c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2120: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2130: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
2140: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
2150: 74 20 72 65 73 75 6c 74 20 74 6f 20 61 20 42 4c  t result to a BL
2160: 4f 42 20 6f 66 20 7a 65 72 6f 73 20 6f 66 20 74  OB of zeros of t
2170: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 69 7a  he specified siz
2180: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
2190: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
21a0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
21b0: 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20  ame="value">..  
21c0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75        /// The nu
21d0: 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
21e0: 65 73 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68  es to use for th
21f0: 65 20 42 4c 4f 42 20 63 6f 6e 74 65 78 74 20 72  e BLOB context r
2200: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20  esult...        
2210: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2220: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
2230: 64 20 53 65 74 5a 65 72 6f 42 6c 6f 62 28 69 6e  d SetZeroBlob(in
2240: 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  t value)..      
2250: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2260: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
2270: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2290: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
22a0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
22b0: 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  on();....       
22c0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
22d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
22e0: 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62  _result_zeroblob
22f0: 28 70 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  (pContext, value
2300: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
2310: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
2370: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2380: 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20     /// Sets the 
2390: 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74  context result t
23a0: 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified 
23b0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
23c0: 65 56 61 6c 75 65 22 20 2f 3e 2e 0d 0a 20 20 20  eValue" />...   
23d0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
23e0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
23f0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
2400: 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  lue">..        /
2410: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
2420: 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f  ="SQLiteValue" /
2430: 3e 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  > to use...     
2440: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2450: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2460: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 53 51  void SetValue(SQ
2470: 4c 69 74 65 56 61 6c 75 65 20 76 61 6c 75 65 29  LiteValue value)
2480: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2490: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
24a0: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
24b0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
24c0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
24d0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
24e0: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
24f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2500: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
2510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2520: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
2530: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
2540: 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  ("value");....  
2550: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
2560: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2570: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c  lite3_result_val
2580: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2590: 20 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20 76       pContext, v
25a0: 61 6c 75 65 2e 4e 61 74 69 76 65 48 61 6e 64 6c  alue.NativeHandl
25b0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
25c0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
25d0: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
25e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
25f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2640: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
2650: 74 65 56 61 6c 75 65 20 48 65 6c 70 65 72 20 43  teValue Helper C
2660: 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
2670: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2680: 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72   This class repr
2690: 65 73 65 6e 74 73 20 61 20 76 61 6c 75 65 20 66  esents a value f
26a0: 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63  rom the SQLite c
26b0: 6f 72 65 20 6c 69 62 72 61 72 79 20 74 68 61 74  ore library that
26c0: 20 63 61 6e 20 62 65 0d 0a 20 20 20 20 2f 2f 2f   can be..    ///
26d0: 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
26e0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29  qlite3_value_*()
26f0: 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64 20   and associated 
2700: 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  functions...    
2710: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2720: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
2730: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 56 61  d class SQLiteVa
2740: 6c 75 65 20 3a 20 49 53 51 4c 69 74 65 4e 61 74  lue : ISQLiteNat
2750: 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b  iveHandle..    {
2760: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2770: 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a  n Private Data..
2780: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2790: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
27a0: 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 76 61  // The native va
27b0: 6c 75 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20  lue handle...   
27c0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
27d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
27e0: 76 61 74 65 20 49 6e 74 50 74 72 20 70 56 61 6c  vate IntPtr pVal
27f0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ue;..        #en
2800: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2810: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2860: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
2870: 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f  ivate Constructo
2880: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
2890: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
28a0: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
28b0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
28c0: 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e   this class usin
28d0: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
28e0: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
28f0: 2f 2f 2f 20 76 61 6c 75 65 20 68 61 6e 64 6c 65  /// value handle
2900: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2910: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2920: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2930: 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20  me="pValue">..  
2940: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
2950: 74 69 76 65 20 76 61 6c 75 65 20 68 61 6e 64 6c  tive value handl
2960: 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  e to use...     
2970: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2980: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2990: 20 53 51 4c 69 74 65 56 61 6c 75 65 28 49 6e 74   SQLiteValue(Int
29a0: 50 74 72 20 70 56 61 6c 75 65 29 0d 0a 20 20 20  Ptr pValue)..   
29b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29c0: 20 20 20 20 74 68 69 73 2e 70 56 61 6c 75 65 20      this.pValue 
29d0: 3d 20 70 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  = pValue;..     
29e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
29f0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2a00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2a50: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2a60: 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a  rivate Methods..
2a70: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2a80: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2a90: 2f 2f 20 49 6e 76 61 6c 69 64 61 74 65 73 20 74  // Invalidates t
2aa0: 68 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20  he native value 
2ab0: 68 61 6e 64 6c 65 2c 20 74 68 65 72 65 62 79 20  handle, thereby 
2ac0: 70 72 65 76 65 6e 74 69 6e 67 20 66 75 72 74 68  preventing furth
2ad0: 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  er..        /// 
2ae0: 61 63 63 65 73 73 20 74 6f 20 69 74 20 66 72 6f  access to it fro
2af0: 6d 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  m this object in
2b00: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
2b10: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2b20: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2b30: 20 76 6f 69 64 20 50 72 65 76 65 6e 74 4e 61 74   void PreventNat
2b40: 69 76 65 41 63 63 65 73 73 28 29 0d 0a 20 20 20  iveAccess()..   
2b50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b60: 20 20 20 20 70 56 61 6c 75 65 20 3d 20 49 6e 74      pValue = Int
2b70: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
2b80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2b90: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2ba0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2bf0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
2c00: 6e 74 65 72 6e 61 6c 20 4d 61 72 73 68 61 6c 20  nternal Marshal 
2c10: 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
2c20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2c30: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2c40: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6c 6f  // Converts a lo
2c50: 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20 6e  gical array of n
2c60: 61 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74  ative pointers t
2c70: 6f 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  o native sqlite3
2c80: 5f 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20  _value..        
2c90: 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20 69  /// structures i
2ca0: 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 61 72  nto a managed ar
2cb0: 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72 65 66  ray of <see cref
2cc0: 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f  ="SQLiteValue" /
2cd0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  >..        /// o
2ce0: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 2e  bject instances.
2cf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2d00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2d10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2d20: 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20  e="argc">..     
2d30: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
2d40: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
2d50: 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 61 72 72   the logical arr
2d60: 61 79 20 6f 66 20 6e 61 74 69 76 65 20 73 71 6c  ay of native sql
2d70: 69 74 65 33 5f 76 61 6c 75 65 0d 0a 20 20 20 20  ite3_value..    
2d80: 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72      /// structur
2d90: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  es...        ///
2da0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2db0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2dc0: 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
2dd0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
2de0: 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
2df0: 65 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20  e logical array 
2e00: 6f 66 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  of native sqlite
2e10: 33 5f 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  3_value..       
2e20: 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20   /// structures 
2e30: 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
2e40: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2e50: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
2e60: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2e70: 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65    /// The manage
2e80: 64 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20  d array of <see 
2e90: 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75  cref="SQLiteValu
2ea0: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
2eb0: 74 61 6e 63 65 73 20 6f 72 0d 0a 20 20 20 20 20  tances or..     
2ec0: 20 20 20 2f 2f 2f 20 6e 75 6c 6c 20 75 70 6f 6e     /// null upon
2ed0: 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
2ee0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
2ef0: 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  >..        inter
2f00: 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
2f10: 65 56 61 6c 75 65 5b 5d 20 41 72 72 61 79 46 72  eValue[] ArrayFr
2f20: 6f 6d 53 69 7a 65 41 6e 64 49 6e 74 50 74 72 28  omSizeAndIntPtr(
2f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
2f40: 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20  t argc,..       
2f50: 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76       IntPtr argv
2f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2f70: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2f80: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67 63          if (argc
2f90: 20 3c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   < 0)..         
2fa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
2fb0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
2fc0: 20 20 20 69 66 20 28 61 72 67 76 20 3d 3d 20 49     if (argv == I
2fd0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ff0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
3000: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
3010: 61 6c 75 65 5b 5d 20 72 65 73 75 6c 74 20 3d 20  alue[] result = 
3020: 6e 65 77 20 53 51 4c 69 74 65 56 61 6c 75 65 5b  new SQLiteValue[
3030: 61 72 67 63 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  argc];....      
3040: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
3050: 6e 64 65 78 20 3d 20 30 2c 20 6f 66 66 73 65 74  ndex = 0, offset
3060: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
3070: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
3080: 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68   < result.Length
3090: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30a0: 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 2c 20         index++, 
30b0: 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72  offset += IntPtr
30c0: 2e 53 69 7a 65 29 0d 0a 20 20 20 20 20 20 20 20  .Size)..        
30d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30e0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 41         IntPtr pA
30f0: 72 67 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68  rg = SQLiteMarsh
3100: 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 61 72  al.ReadIntPtr(ar
3110: 67 76 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  gv, offset);....
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3130: 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20  result[index] = 
3140: 28 70 41 72 67 20 21 3d 20 49 6e 74 50 74 72 2e  (pArg != IntPtr.
3150: 5a 65 72 6f 29 20 3f 0d 0a 20 20 20 20 20 20 20  Zero) ?..       
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
3170: 20 53 51 4c 69 74 65 56 61 6c 75 65 28 70 41 72   SQLiteValue(pAr
3180: 67 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  g) : null;..    
3190: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
31b0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
31c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
31d0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
31e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3230: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51       #region ISQ
3240: 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65  LiteNativeHandle
3250: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
3260: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3270: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74  .        /// Ret
3280: 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79  urns the underly
3290: 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76  ing SQLite nativ
32a0: 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61  e handle associa
32b0: 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20  ted with this.. 
32c0: 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63         /// objec
32d0: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
32e0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
32f0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
3300: 6c 69 63 20 49 6e 74 50 74 72 20 4e 61 74 69 76  lic IntPtr Nativ
3310: 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20  eHandle..       
3320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3330: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 56 61  get { return pVa
3340: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
3350: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
3360: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
3370: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
33c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
33d0: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
33e0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
33f0: 6f 6f 6c 20 70 65 72 73 69 73 74 65 64 3b 0d 0a  ool persisted;..
3400: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
3410: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
3420: 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  // Returns non-z
3430: 65 72 6f 20 69 66 20 74 68 65 20 6e 61 74 69 76  ero if the nativ
3440: 65 20 53 51 4c 69 74 65 20 76 61 6c 75 65 20 68  e SQLite value h
3450: 61 73 20 62 65 65 6e 20 73 75 63 63 65 73 73 66  as been successf
3460: 75 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ully..        //
3470: 2f 20 70 65 72 73 69 73 74 65 64 20 61 73 20 61  / persisted as a
3480: 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 20 77   managed value w
3490: 69 74 68 69 6e 20 74 68 69 73 20 6f 62 6a 65 63  ithin this objec
34a0: 74 20 69 6e 73 74 61 6e 63 65 20 28 69 2e 65 2e  t instance (i.e.
34b0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
34c0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 56 61 6c  / <see cref="Val
34d0: 75 65 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20  ue" /> property 
34e0: 6d 61 79 20 74 68 65 6e 20 62 65 20 72 65 61 64  may then be read
34f0: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 29 2e 0d   successfully)..
3500: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
3510: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
3520: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72   public bool Per
3530: 73 69 73 74 65 64 0d 0a 20 20 20 20 20 20 20 20  sisted..        
3540: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
3550: 65 74 20 7b 20 72 65 74 75 72 6e 20 70 65 72 73  et { return pers
3560: 69 73 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20  isted; }..      
3570: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
35d0: 20 20 70 72 69 76 61 74 65 20 6f 62 6a 65 63 74    private object
35e0: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20   value;..       
35f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3600: 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74          /// If t
3610: 68 65 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65  he managed value
3620: 20 66 6f 72 20 74 68 69 73 20 6f 62 6a 65 63 74   for this object
3630: 20 69 6e 73 74 61 6e 63 65 20 69 73 20 61 76 61   instance is ava
3640: 69 6c 61 62 6c 65 20 28 69 2e 65 2e 20 69 74 0d  ilable (i.e. it.
3650: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 73  .        /// has
3660: 20 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79   been previously
3670: 20 70 65 72 73 69 73 74 65 64 20 76 69 61 20 74   persisted via t
3680: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 50 65  he <see cref="Pe
3690: 72 73 69 73 74 22 20 2f 3e 29 20 6d 65 74 68 6f  rsist" />) metho
36a0: 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d,..        /// 
36b0: 74 68 61 74 20 76 61 6c 75 65 20 69 73 20 72 65  that value is re
36c0: 74 75 72 6e 65 64 3b 20 6f 74 68 65 72 77 69 73  turned; otherwis
36d0: 65 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  e, an exception 
36e0: 69 73 20 74 68 72 6f 77 6e 2e 20 20 54 68 65 0d  is thrown.  The.
36f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 74  .        /// ret
3700: 75 72 6e 65 64 20 76 61 6c 75 65 20 6d 61 79 20  urned value may 
3710: 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  be null...      
3720: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3730: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
3740: 20 6f 62 6a 65 63 74 20 56 61 6c 75 65 0d 0a 20   object Value.. 
3750: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3760: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
3770: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3780: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 70            if (!p
3790: 65 72 73 69 73 74 65 64 29 0d 0a 20 20 20 20 20  ersisted)..     
37a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
37d0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
37e0: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3800: 22 76 61 6c 75 65 20 77 61 73 20 6e 6f 74 20 70  "value was not p
3810: 65 72 73 69 73 74 65 64 22 29 3b 0d 0a 20 20 20  ersisted");..   
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3840: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
3850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3860: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3870: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
3880: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
3890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
38e0: 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
38f0: 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
3900: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
3910: 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64 20     /// Gets and 
3920: 72 65 74 75 72 6e 73 20 74 68 65 20 74 79 70 65  returns the type
3930: 20 61 66 66 69 6e 69 74 79 20 61 73 73 6f 63 69   affinity associ
3940: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76  ated with this v
3950: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
3960: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3970: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
3980: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
3990: 2f 20 54 68 65 20 74 79 70 65 20 61 66 66 69 6e  / The type affin
39a0: 69 74 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ity associated w
39b0: 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e 0d  ith this value..
39c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
39d0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
39e0: 20 70 75 62 6c 69 63 20 54 79 70 65 41 66 66 69   public TypeAffi
39f0: 6e 69 74 79 20 47 65 74 54 79 70 65 41 66 66 69  nity GetTypeAffi
3a00: 6e 69 74 79 28 29 0d 0a 20 20 20 20 20 20 20 20  nity()..        
3a10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
3a20: 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74  f (pValue == Int
3a30: 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e  Ptr.Zero) return
3a40: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 6f   TypeAffinity.No
3a50: 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne;..           
3a60: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
3a70: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3a80: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
3a90: 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  Value);..       
3aa0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
3ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3af0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3b00: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3b10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73          /// Gets
3b20: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
3b30: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
3b40: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3b50: 20 74 68 69 73 20 76 61 6c 75 65 2c 20 69 66 0d   this value, if.
3b60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 74 20  .        /// it 
3b70: 72 65 66 65 72 73 20 74 6f 20 61 20 55 54 46 2d  refers to a UTF-
3b80: 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67  8 encoded string
3b90: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
3ba0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
3bb0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3bc0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
3bd0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
3be0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
3bf0: 68 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20 54  h this value.  T
3c00: 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75  he returned valu
3c10: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  e..        /// m
3c20: 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a 20 20 20  ay be zero...   
3c30: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
3c40: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
3c50: 6c 69 63 20 69 6e 74 20 47 65 74 42 79 74 65 73  lic int GetBytes
3c60: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
3c70: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
3c80: 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e  Value == IntPtr.
3c90: 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 30 3b 0d  Zero) return 0;.
3ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3cb0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
3cc0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3cd0: 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c  value_bytes(pVal
3ce0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
3cf0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
3d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d40: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
3d50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3d60: 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e       /// Gets an
3d70: 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73  d returns the <s
3d80: 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20  ee cref="Int32" 
3d90: 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  /> associated wi
3da0: 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  th this..       
3db0: 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20   /// value...   
3dc0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
3dd0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
3de0: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
3df0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
3e00: 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
3e10: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3e20: 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20   this value...  
3e30: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
3e40: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
3e50: 62 6c 69 63 20 69 6e 74 20 47 65 74 49 6e 74 28  blic int GetInt(
3e60: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
3e70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56            if (pV
3e80: 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  alue == IntPtr.Z
3e90: 65 72 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61  ero) return defa
3ea0: 75 6c 74 28 69 6e 74 29 3b 0d 0a 20 20 20 20 20  ult(int);..     
3eb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
3ec0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3ed0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
3ee0: 69 6e 74 28 70 56 61 6c 75 65 29 3b 0d 0a 20 20  int(pValue);..  
3ef0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3f00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3f50: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
3f60: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
3f70: 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e   Gets and return
3f80: 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  s the <see cref=
3f90: 22 49 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f 63  "Int64" /> assoc
3fa0: 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20  iated with..    
3fb0: 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 76 61 6c      /// this val
3fc0: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
3fd0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3fe0: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
3ff0: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
4000: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
4010: 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f 63 69 61  nt64" /> associa
4020: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61  ted with this va
4030: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
4040: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
4050: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6c 6f 6e        public lon
4060: 67 20 47 65 74 49 6e 74 36 34 28 29 0d 0a 20 20  g GetInt64()..  
4070: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4080: 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65 20       if (pValue 
4090: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  == IntPtr.Zero) 
40a0: 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 28 6c  return default(l
40b0: 6f 6e 67 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  ong);....#if !PL
40c0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
40d0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
40e0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
40f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4100: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
4110: 74 36 34 28 70 56 61 6c 75 65 29 3b 0d 0a 23 65  t64(pValue);..#e
4120: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
4130: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
4140: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 20    long value;.. 
4150: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
4160: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4170: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
4180: 36 34 5f 69 6e 74 65 72 6f 70 28 70 56 61 6c 75  64_interop(pValu
4190: 65 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a  e, out value);..
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
41b0: 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65  rn value;..#else
41c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
41d0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
41e0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
41f0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
4200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4210: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4250: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4260: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4270: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47  >..        /// G
4280: 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ets and returns 
4290: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44  the <see cref="D
42a0: 6f 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63 69  ouble" /> associ
42b0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a  ated with this..
42c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75          /// valu
42d0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
42e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
42f0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4300: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
4310: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f  he <see cref="Do
4320: 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63 69 61  uble" /> associa
4330: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61  ted with this va
4340: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
4350: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
4360: 20 20 20 20 20 20 70 75 62 6c 69 63 20 64 6f 75        public dou
4370: 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 29 0d  ble GetDouble().
4380: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4390: 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
43a0: 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
43b0: 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  o) return defaul
43c0: 74 28 64 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 23 69  t(double);....#i
43d0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
43e0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
43f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4400: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4410: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
4420: 75 65 5f 64 6f 75 62 6c 65 28 70 56 61 6c 75 65  ue_double(pValue
4430: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
4440: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
4450: 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76          double v
4460: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
4470: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
4480: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
4490: 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  alue_double_inte
44a0: 72 6f 70 28 70 56 61 6c 75 65 2c 20 6f 75 74 20  rop(pValue, out 
44b0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
44c0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
44d0: 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  e;..#else..     
44e0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
44f0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
4500: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
4510: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
4520: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
4530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4570: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
4580: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
4590: 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64      /// Gets and
45a0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73 65   returns the <se
45b0: 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22 20  e cref="String" 
45c0: 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  /> associated wi
45d0: 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  th this..       
45e0: 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20   /// value...   
45f0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
4600: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
4610: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
4620: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
4630: 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22 20 2f   cref="String" /
4640: 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  > associated wit
4650: 68 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20 54  h this value.  T
4660: 68 65 20 76 61 6c 75 65 20 69 73 0d 0a 20 20 20  he value is..   
4670: 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 74       /// convert
4680: 65 64 20 66 72 6f 6d 20 74 68 65 20 55 54 46 2d  ed from the UTF-
4690: 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f 72  8 encoding prior
46a0: 20 74 6f 20 62 65 69 6e 67 20 72 65 74 75 72 6e   to being return
46b0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
46c0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
46d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
46e0: 6e 67 20 47 65 74 53 74 72 69 6e 67 28 29 0d 0a  ng GetString()..
46f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4700: 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75         if (pValu
4710: 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e == IntPtr.Zero
4720: 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a  ) return null;..
4730: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4740: 72 6e 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e  rn SQLiteString.
4750: 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
4760: 74 50 74 72 28 70 56 61 6c 75 65 2c 20 47 65 74  tPtr(pValue, Get
4770: 42 79 74 65 73 28 29 29 3b 0d 0a 20 20 20 20 20  Bytes());..     
4780: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
47e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
47f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65  ..        /// Ge
4800: 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  ts and returns t
4810: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 42 79  he <see cref="By
4820: 74 65 22 20 2f 3e 20 61 72 72 61 79 20 61 73 73  te" /> array ass
4830: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
4840: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  s..        /// v
4850: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
4860: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
4870: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
4880: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
4890: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
48a0: 22 42 79 74 65 22 20 2f 3e 20 61 72 72 61 79 20  "Byte" /> array 
48b0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
48c0: 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20  this value...   
48d0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
48e0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
48f0: 6c 69 63 20 62 79 74 65 5b 5d 20 47 65 74 42 6c  lic byte[] GetBl
4900: 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ob()..        {.
4910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4920: 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74  (pValue == IntPt
4930: 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 6e  r.Zero) return n
4940: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
4950: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42    return SQLiteB
4960: 79 74 65 73 2e 46 72 6f 6d 49 6e 74 50 74 72 28  ytes.FromIntPtr(
4970: 70 56 61 6c 75 65 2c 20 47 65 74 42 79 74 65 73  pValue, GetBytes
4980: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
4990: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
49a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
49f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4a00: 20 20 20 20 20 2f 2f 2f 20 55 73 65 73 20 74 68       /// Uses th
4a10: 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20 68  e native value h
4a20: 61 6e 64 6c 65 20 74 6f 20 6f 62 74 61 69 6e 20  andle to obtain 
4a30: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 6d 61  and store the ma
4a40: 6e 61 67 65 64 20 76 61 6c 75 65 0d 0a 20 20 20  naged value..   
4a50: 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 74 68 69       /// for thi
4a60: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
4a70: 65 2c 20 74 68 75 73 20 73 61 76 69 6e 67 20 69  e, thus saving i
4a80: 74 20 66 6f 72 20 6c 61 74 65 72 20 75 73 65 2e  t for later use.
4a90: 20 20 54 68 65 20 74 79 70 65 0d 0a 20 20 20 20    The type..    
4aa0: 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20 6d      /// of the m
4ab0: 61 6e 61 67 65 64 20 76 61 6c 75 65 20 69 73 20  anaged value is 
4ac0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
4ad0: 65 20 74 79 70 65 20 61 66 66 69 6e 69 74 79 20  e type affinity 
4ae0: 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
4af0: 2f 2f 2f 20 6e 61 74 69 76 65 20 76 61 6c 75 65  /// native value
4b00: 2e 20 20 49 66 20 74 68 65 20 74 79 70 65 20 61  .  If the type a
4b10: 66 66 69 6e 69 74 79 20 69 73 20 6e 6f 74 20 72  ffinity is not r
4b20: 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 74 68 69  ecognized by thi
4b30: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  s..        /// m
4b40: 65 74 68 6f 64 2c 20 6e 6f 20 77 6f 72 6b 20 69  ethod, no work i
4b50: 73 20 64 6f 6e 65 20 61 6e 64 20 66 61 6c 73 65  s done and false
4b60: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20   is returned... 
4b70: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
4b80: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
4b90: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
4ba0: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
4bb0: 72 6f 20 69 66 20 74 68 65 20 6e 61 74 69 76 65  ro if the native
4bc0: 20 76 61 6c 75 65 20 77 61 73 20 70 65 72 73 69   value was persi
4bd0: 73 74 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c  sted successfull
4be0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
4bf0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4c00: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
4c10: 50 65 72 73 69 73 74 28 29 0d 0a 20 20 20 20 20  Persist()..     
4c20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4c30: 20 20 73 77 69 74 63 68 20 28 47 65 74 54 79 70    switch (GetTyp
4c40: 65 41 66 66 69 6e 69 74 79 28 29 29 0d 0a 20 20  eAffinity())..  
4c50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
4c70: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 55  e TypeAffinity.U
4c80: 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3a 0d 0a 20  ninitialized:.. 
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ca0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
4cc0: 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  lue = null;..   
4cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ce0: 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69       PreventNati
4cf0: 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20  veAccess();..   
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d10: 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72       return (per
4d20: 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d  sisted = true);.
4d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4d50: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
4d60: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a  eAffinity.Int64:
4d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4da0: 20 76 61 6c 75 65 20 3d 20 47 65 74 49 6e 74 36   value = GetInt6
4db0: 34 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  4();..          
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
4dd0: 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73  eventNativeAcces
4de0: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4e00: 74 75 72 6e 20 28 70 65 72 73 69 73 74 65 64 20  turn (persisted 
4e10: 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  = true);..      
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4e40: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
4e50: 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20  ty.Double:..    
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4e80: 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65             value
4e90: 20 3d 20 47 65 74 44 6f 75 62 6c 65 28 29 3b 0d   = GetDouble();.
4ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4eb0: 20 20 20 20 20 20 20 20 20 50 72 65 76 65 6e 74           Prevent
4ec0: 4e 61 74 69 76 65 41 63 63 65 73 73 28 29 3b 0d  NativeAccess();.
4ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ee0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4ef0: 28 70 65 72 73 69 73 74 65 64 20 3d 20 74 72 75  (persisted = tru
4f00: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
4f10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
4f30: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65   TypeAffinity.Te
4f40: 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt:..           
4f50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f70: 20 20 20 20 76 61 6c 75 65 20 3d 20 47 65 74 53      value = GetS
4f80: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fa0: 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76 65 41    PreventNativeA
4fb0: 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20  ccess();..      
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fd0: 20 20 72 65 74 75 72 6e 20 28 70 65 72 73 69 73    return (persis
4fe0: 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20  ted = true);..  
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5000: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
5010: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
5020: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5050: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c               val
5060: 75 65 20 3d 20 47 65 74 42 79 74 65 73 28 29 3b  ue = GetBytes();
5070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5080: 20 20 20 20 20 20 20 20 20 20 50 72 65 76 65 6e            Preven
5090: 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29 3b  tNativeAccess();
50a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
50b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
50c0: 20 28 70 65 72 73 69 73 74 65 64 20 3d 20 74 72   (persisted = tr
50d0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
50e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
5100: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  e TypeAffinity.N
5110: 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ull:..          
5120: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5140: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 44 42 4e       value = DBN
5150: 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20  ull.Value;..    
5160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5170: 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76      PreventNativ
5180: 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20  eAccess();..    
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51a0: 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72 73      return (pers
51b0: 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a  isted = true);..
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
51e0: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d         default:.
51f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5200: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5220: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5240: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5250: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
5260: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5270: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
5280: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
5290: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
52a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
52e0: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
52f0: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
5300: 74 4f 70 20 45 6e 75 6d 65 72 61 74 69 6f 6e 0d  tOp Enumeration.
5310: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
5320: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 73  y>..    /// Thes
5330: 65 20 61 72 65 20 74 68 65 20 61 6c 6c 6f 77 65  e are the allowe
5340: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
5350: 20 6f 70 65 72 61 74 6f 72 73 20 74 68 61 74 20   operators that 
5360: 61 72 65 20 70 61 72 74 20 6f 66 20 61 0d 0a 20  are part of a.. 
5370: 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 61 69 6e     /// constrain
5380: 74 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57 48  t term in the WH
5390: 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ERE clause of a 
53a0: 71 75 65 72 79 20 74 68 61 74 20 75 73 65 73 20  query that uses 
53b0: 61 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 2f  a virtual..    /
53c0: 2f 2f 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  // table...    /
53d0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
53e0: 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 53     public enum S
53f0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
5400: 61 69 6e 74 4f 70 20 3a 20 62 79 74 65 0d 0a 20  aintOp : byte.. 
5410: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
5420: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5430: 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61       /// This va
5440: 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 74  lue represents t
5450: 68 65 20 65 71 75 61 6c 69 74 79 20 6f 70 65 72  he equality oper
5460: 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ator...        /
5470: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5480: 20 20 20 20 20 20 20 45 71 75 61 6c 54 6f 20 3d         EqualTo =
5490: 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   2,....        /
54a0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
54b0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76        /// This v
54c0: 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20  alue represents 
54d0: 74 68 65 20 67 72 65 61 74 65 72 20 74 68 61 6e  the greater than
54e0: 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20   operator...    
54f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5500: 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72 65 61  y>..        Grea
5510: 74 65 72 54 68 61 6e 20 3d 20 34 2c 0d 0a 0d 0a  terThan = 4,....
5520: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
5530: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
5540: 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72 65  // This value re
5550: 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 65 73  presents the les
5560: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
5570: 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20  to operator...  
5580: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
5590: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 4c 65  ary>..        Le
55a0: 73 73 54 68 61 6e 4f 72 45 71 75 61 6c 54 6f 20  ssThanOrEqualTo 
55b0: 3d 20 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 8,....        
55c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
55d0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
55e0: 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73  value represents
55f0: 20 74 68 65 20 6c 65 73 73 20 74 68 61 6e 20 6f   the less than o
5600: 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20  perator...      
5610: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5620: 0d 0a 20 20 20 20 20 20 20 20 4c 65 73 73 54 68  ..        LessTh
5630: 61 6e 20 3d 20 31 36 2c 0d 0a 0d 0a 20 20 20 20  an = 16,....    
5640: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5650: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
5660: 68 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73  his value repres
5670: 65 6e 74 73 20 74 68 65 20 67 72 65 61 74 65 72  ents the greater
5680: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
5690: 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20  o operator...   
56a0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
56b0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72 65  ry>..        Gre
56c0: 61 74 65 72 54 68 61 6e 4f 72 45 71 75 61 6c 54  aterThanOrEqualT
56d0: 6f 20 3d 20 33 32 2c 0d 0a 0d 0a 20 20 20 20 20  o = 32,....     
56e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
56f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
5700: 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73 65  is value represe
5710: 6e 74 73 20 74 68 65 20 4d 41 54 43 48 20 6f 70  nts the MATCH op
5720: 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20  erator...       
5730: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5740: 0a 20 20 20 20 20 20 20 20 4d 61 74 63 68 20 3d  .        Match =
5750: 20 36 34 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20   64..    }..    
5760: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5770: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
57c0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
57d0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
57e0: 6e 74 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d  nt Helper Class.
57f0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
5800: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
5810: 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74   class represent
5820: 73 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  s the native sql
5830: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
5840: 72 61 69 6e 74 20 73 74 72 75 63 74 75 72 65 0d  raint structure.
5850: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
5860: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
5870: 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  brary...    /// 
5880: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5890: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
58a0: 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78 43  ass SQLiteIndexC
58b0: 6f 6e 73 74 72 61 69 6e 74 0d 0a 20 20 20 20 7b  onstraint..    {
58c0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
58d0: 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74  n Internal Const
58e0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
58f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5900: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
5910: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
5920: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
5930: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
5940: 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20 20 20  fied native..   
5950: 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
5960: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
5970: 74 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  t structure...  
5980: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
5990: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
59a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
59b0: 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20  onstraint">..   
59c0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
59d0: 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  ive sqlite3_inde
59e0: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 73 74 72  x_constraint str
59f0: 75 63 74 75 72 65 20 74 6f 20 75 73 65 2e 0d 0a  ucture to use...
5a00: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
5a10: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  ram>..        in
5a20: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64  ternal SQLiteInd
5a30: 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 0d 0a 20  exConstraint(.. 
5a40: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
5a50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5a60: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
5a70: 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69  straint constrai
5a80: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
5a90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 3a  )..            :
5aa0: 20 74 68 69 73 28 63 6f 6e 73 74 72 61 69 6e 74   this(constraint
5ab0: 2e 69 43 6f 6c 75 6d 6e 2c 20 63 6f 6e 73 74 72  .iColumn, constr
5ac0: 61 69 6e 74 2e 6f 70 2c 20 63 6f 6e 73 74 72 61  aint.op, constra
5ad0: 69 6e 74 2e 75 73 61 62 6c 65 2c 0d 0a 20 20 20  int.usable,..   
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5af0: 63 6f 6e 73 74 72 61 69 6e 74 2e 69 54 65 72 6d  constraint.iTerm
5b00: 4f 66 66 73 65 74 29 0d 0a 20 20 20 20 20 20 20  Offset)..       
5b10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5b20: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
5b30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5b40: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
5b50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
5b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5ba0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
5bb0: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
5bc0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
5bd0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5be0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
5bf0: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
5c00: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
5c10: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
5c20: 66 69 65 64 20 66 69 65 6c 64 0d 0a 20 20 20 20  fied field..    
5c30: 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d      /// values..
5c40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
5c50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
5c60: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5c70: 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20 20 20  ="iColumn">..   
5c80: 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20       /// Column 
5c90: 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64  on left-hand sid
5ca0: 65 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e 74 2e  e of constraint.
5cb0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5cc0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
5cd0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5ce0: 22 6f 70 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  "op">..        /
5cf0: 2f 2f 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70  // Constraint op
5d00: 65 72 61 74 6f 72 20 28 3c 73 65 65 20 63 72 65  erator (<see cre
5d10: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  f="SQLiteIndexCo
5d20: 6e 73 74 72 61 69 6e 74 4f 70 22 20 2f 3e 29 2e  nstraintOp" />).
5d30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5d40: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
5d50: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5d60: 22 75 73 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  "usable">..     
5d70: 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74     /// True if t
5d80: 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  his constraint i
5d90: 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20 20 20 20  s usable...     
5da0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
5db0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
5dc0: 72 61 6d 20 6e 61 6d 65 3d 22 69 54 65 72 6d 4f  ram name="iTermO
5dd0: 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20  ffset">..       
5de0: 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e   /// Used intern
5df0: 61 6c 6c 79 20 2d 20 3c 73 65 65 20 63 72 65 66  ally - <see cref
5e00: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
5e10: 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78  Module.BestIndex
5e20: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  " />..        //
5e30: 2f 20 73 68 6f 75 6c 64 20 69 67 6e 6f 72 65 2e  / should ignore.
5e40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5e50: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
5e60: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e  private SQLiteIn
5e70: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 0d 0a  dexConstraint(..
5e80: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
5e90: 69 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20  iColumn,..      
5ea0: 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65        SQLiteInde
5eb0: 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20 6f 70  xConstraintOp op
5ec0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
5ed0: 79 74 65 20 75 73 61 62 6c 65 2c 0d 0a 20 20 20  yte usable,..   
5ee0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 54 65           int iTe
5ef0: 72 6d 4f 66 66 73 65 74 0d 0a 20 20 20 20 20 20  rmOffset..      
5f00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
5f10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5f20: 74 68 69 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20 69  this.iColumn = i
5f30: 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20 20 20 20  Column;..       
5f40: 20 20 20 20 20 74 68 69 73 2e 6f 70 20 3d 20 6f       this.op = o
5f50: 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p;..            
5f60: 74 68 69 73 2e 75 73 61 62 6c 65 20 3d 20 75 73  this.usable = us
5f70: 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  able;..         
5f80: 20 20 20 74 68 69 73 2e 69 54 65 72 6d 4f 66 66     this.iTermOff
5f90: 73 65 74 20 3d 20 69 54 65 72 6d 4f 66 66 73 65  set = iTermOffse
5fa0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
5fb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5fc0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
5fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6010: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
6020: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69  region Public Fi
6030: 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  elds..        //
6040: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6050: 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20       /// Column 
6060: 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64  on left-hand sid
6070: 65 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e 74 2e  e of constraint.
6080: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
6090: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
60a0: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 69 43 6f    public int iCo
60b0: 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lumn;....       
60c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6100: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6110: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6120: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
6130: 6e 73 74 72 61 69 6e 74 20 6f 70 65 72 61 74 6f  nstraint operato
6140: 72 20 28 3c 73 65 65 20 63 72 65 66 3d 22 53 51  r (<see cref="SQ
6150: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
6160: 69 6e 74 4f 70 22 20 2f 3e 29 2e 0d 0a 20 20 20  intOp" />)...   
6170: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
6180: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
6190: 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65 78 43  lic SQLiteIndexC
61a0: 6f 6e 73 74 72 61 69 6e 74 4f 70 20 6f 70 3b 0d  onstraintOp op;.
61b0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
61c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6200: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
6210: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
6220: 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20      /// True if 
6230: 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 20  this constraint 
6240: 69 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20 20 20  is usable...    
6250: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6260: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
6270: 69 63 20 62 79 74 65 20 75 73 61 62 6c 65 3b 0d  ic byte usable;.
6280: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
6290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
62e0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
62f0: 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74      /// Used int
6300: 65 72 6e 61 6c 6c 79 20 2d 20 3c 73 65 65 20 63  ernally - <see c
6310: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
6320: 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e  gedModule.BestIn
6330: 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20  dex" />..       
6340: 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 69 67 6e 6f   /// should igno
6350: 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
6360: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
6370: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
6380: 69 54 65 72 6d 4f 66 66 73 65 74 3b 0d 0a 20 20  iTermOffset;..  
6390: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
63a0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
63b0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6410: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
6420: 49 6e 64 65 78 4f 72 64 65 72 42 79 20 48 65 6c  IndexOrderBy Hel
6430: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f  per Class..    /
6440: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6450: 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
6460: 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
6470: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
6480: 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 73 74 72  ndex_orderby str
6490: 75 63 74 75 72 65 20 66 72 6f 6d 0d 0a 20 20 20  ucture from..   
64a0: 20 2f 2f 2f 20 74 68 65 20 53 51 4c 69 74 65 20   /// the SQLite 
64b0: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
64c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
64d0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65  >..    public se
64e0: 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74  aled class SQLit
64f0: 65 49 6e 64 65 78 4f 72 64 65 72 42 79 0d 0a 20  eIndexOrderBy.. 
6500: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
6510: 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43  egion Internal C
6520: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
6530: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
6540: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6550: 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e  Constructs an in
6560: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
6570: 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73  lass using the s
6580: 70 65 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d  pecified native.
6590: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
65a0: 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72  ite3_index_order
65b0: 62 79 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  by structure... 
65c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
65d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
65e0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
65f0: 6f 72 64 65 72 42 79 22 3e 0d 0a 20 20 20 20 20  orderBy">..     
6600: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
6610: 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
6620: 6f 72 64 65 72 62 79 20 73 74 72 75 63 74 75 72  orderby structur
6630: 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  e to use...     
6640: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6650: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
6660: 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  l SQLiteIndexOrd
6670: 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20 20  erBy(..         
6680: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
6690: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
66a0: 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f 72 64  ndex_orderby ord
66b0: 65 72 42 79 0d 0a 20 20 20 20 20 20 20 20 20 20  erBy..          
66c0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
66d0: 20 3a 20 74 68 69 73 28 6f 72 64 65 72 42 79 2e   : this(orderBy.
66e0: 69 43 6f 6c 75 6d 6e 2c 20 6f 72 64 65 72 42 79  iColumn, orderBy
66f0: 2e 64 65 73 63 29 0d 0a 20 20 20 20 20 20 20 20  .desc)..        
6700: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
6710: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
6720: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6730: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6740: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6790: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
67a0: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 72  n Private Constr
67b0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
67c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
67d0: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
67e0: 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
67f0: 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20  e of this class 
6800: 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66  using the specif
6810: 69 65 64 20 66 69 65 6c 64 0d 0a 20 20 20 20 20  ied field..     
6820: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a     /// values...
6830: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
6840: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
6850: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6860: 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20 20 20 20  "iColumn">..    
6870: 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20 6e      /// Column n
6880: 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  umber...        
6890: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
68a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
68b0: 20 6e 61 6d 65 3d 22 64 65 73 63 22 3e 0d 0a 20   name="desc">.. 
68c0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20         /// True 
68d0: 66 6f 72 20 44 45 53 43 2e 20 20 46 61 6c 73 65  for DESC.  False
68e0: 20 66 6f 72 20 41 53 43 2e 0d 0a 20 20 20 20 20   for ASC...     
68f0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6900: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
6910: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65   SQLiteIndexOrde
6920: 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rBy(..          
6930: 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 2c 0d 0a    int iColumn,..
6940: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
6950: 20 64 65 73 63 0d 0a 20 20 20 20 20 20 20 20 20   desc..         
6960: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
6970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
6980: 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20 69 43 6f 6c  s.iColumn = iCol
6990: 75 6d 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  umn;..          
69a0: 20 20 74 68 69 73 2e 64 65 73 63 20 3d 20 64 65    this.desc = de
69b0: 73 63 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  sc;..        }..
69c0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
69d0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
69e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6a30: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46  #region Public F
6a40: 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  ields..        /
6a50: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6a60: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e        /// Column
6a70: 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20   number...      
6a80: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6a90: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
6aa0: 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 0d   int iColumn;...
6ab0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
6ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6b00: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
6b10: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
6b20: 20 20 2f 2f 2f 20 54 72 75 65 20 66 6f 72 20 44    /// True for D
6b30: 45 53 43 2e 20 20 46 61 6c 73 65 20 66 6f 72 20  ESC.  False for 
6b40: 41 53 43 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ASC...        //
6b50: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6b60: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 79 74        public byt
6b70: 65 20 64 65 73 63 3b 0d 0a 20 20 20 20 20 20 20  e desc;..       
6b80: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
6b90: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
6ba0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
6bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bf0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
6c00: 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78  gion SQLiteIndex
6c10: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20  ConstraintUsage 
6c20: 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20  Helper Class..  
6c30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6c40: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
6c50: 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74  ass represents t
6c60: 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
6c70: 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69  3_index_constrai
6c80: 6e 74 5f 75 73 61 67 65 0d 0a 20 20 20 20 2f 2f  nt_usage..    //
6c90: 2f 20 73 74 72 75 63 74 75 72 65 20 66 72 6f 6d  / structure from
6ca0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
6cb0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
6cc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6cd0: 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64     public sealed
6ce0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64   class SQLiteInd
6cf0: 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  exConstraintUsag
6d00: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
6d10: 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e    #region Intern
6d20: 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  al Constructors.
6d30: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
6d40: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
6d50: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
6d60: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
6d70: 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  is class using t
6d80: 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 74  he specified nat
6d90: 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ive..        ///
6da0: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63   sqlite3_index_c
6db0: 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20  onstraint_usage 
6dc0: 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
6dd0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6de0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6df0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
6e00: 73 74 72 61 69 6e 74 55 73 61 67 65 22 3e 0d 0a  straintUsage">..
6e10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
6e20: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
6e30: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f  ndex_constraint_
6e40: 75 73 61 67 65 20 73 74 72 75 63 74 75 72 65 20  usage structure 
6e50: 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20  to use...       
6e60: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
6e70: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
6e80: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
6e90: 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20 20 20  raintUsage(..   
6ea0: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
6eb0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6ec0: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
6ed0: 72 61 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e 73  raint_usage cons
6ee0: 74 72 61 69 6e 74 55 73 61 67 65 0d 0a 20 20 20  traintUsage..   
6ef0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
6f00: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 63          : this(c
6f10: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2e 61  onstraintUsage.a
6f20: 72 67 76 49 6e 64 65 78 2c 20 63 6f 6e 73 74 72  rgvIndex, constr
6f30: 61 69 6e 74 55 73 61 67 65 2e 6f 6d 69 74 29 0d  aintUsage.omit).
6f40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6f50: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
6f60: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
6f70: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
6f80: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6f90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fd0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6fe0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
6ff0: 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  te Constructors.
7000: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
7010: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7020: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
7030: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
7040: 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  is class using t
7050: 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69 65  he specified fie
7060: 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ld..        /// 
7070: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20 20 20  values...       
7080: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7090: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
70a0: 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 49 6e  ram name="argvIn
70b0: 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  dex">..        /
70c0: 2f 2f 20 49 66 20 67 72 65 61 74 65 72 20 74 68  // If greater th
70d0: 61 6e 20 30 2c 20 63 6f 6e 73 74 72 61 69 6e 74  an 0, constraint
70e0: 20 69 73 20 70 61 72 74 20 6f 66 20 61 72 67 76   is part of argv
70f0: 20 74 6f 20 78 46 69 6c 74 65 72 2e 0d 0a 20 20   to xFilter...  
7100: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
7110: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
7120: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 6d 69  <param name="omi
7130: 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
7140: 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20 74   Do not code a t
7150: 65 73 74 20 66 6f 72 20 74 68 69 73 20 63 6f 6e  est for this con
7160: 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20  straint...      
7170: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
7180: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7190: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
71a0: 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20 20 20  raintUsage(..   
71b0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
71c0: 76 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20  vIndex,..       
71d0: 20 20 20 20 20 62 79 74 65 20 6f 6d 69 74 0d 0a       byte omit..
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
71f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7200: 20 20 20 20 20 20 74 68 69 73 2e 61 72 67 76 49        this.argvI
7210: 6e 64 65 78 20 3d 20 61 72 67 76 49 6e 64 65 78  ndex = argvIndex
7220: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
7230: 68 69 73 2e 6f 6d 69 74 20 3d 20 6f 6d 69 74 3b  his.omit = omit;
7240: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7250: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
7260: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
7270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72b0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
72c0: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65  egion Public Fie
72d0: 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  lds..        ///
72e0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
72f0: 20 20 20 20 2f 2f 2f 20 49 66 20 67 72 65 61 74      /// If great
7300: 65 72 20 74 68 61 6e 20 30 2c 20 63 6f 6e 73 74  er than 0, const
7310: 72 61 69 6e 74 20 69 73 20 70 61 72 74 20 6f 66  raint is part of
7320: 20 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72   argv to xFilter
7330: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7340: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7350: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 61 72     public int ar
7360: 67 76 49 6e 64 65 78 3b 0d 0a 0d 0a 20 20 20 20  gvIndex;....    
7370: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
73c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
73d0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
73e0: 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20  / Do not code a 
73f0: 74 65 73 74 20 66 6f 72 20 74 68 69 73 20 63 6f  test for this co
7400: 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20  nstraint...     
7410: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7420: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
7430: 63 20 62 79 74 65 20 6f 6d 69 74 3b 0d 0a 20 20  c byte omit;..  
7440: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7450: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
7460: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
7470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
74c0: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
74d0: 49 6e 64 65 78 49 6e 70 75 74 73 20 48 65 6c 70  IndexInputs Help
74e0: 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  er Class..    //
74f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7500: 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
7510: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 76  represents the v
7520: 61 72 69 6f 75 73 20 69 6e 70 75 74 73 20 70 72  arious inputs pr
7530: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 53 51  ovided by the SQ
7540: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 2f  Lite core..    /
7550: 2f 2f 20 6c 69 62 72 61 72 79 20 74 6f 20 74 68  // library to th
7560: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
7570: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
7580: 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20  e.BestIndex" /> 
7590: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f  method...    ///
75a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
75b0: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
75c0: 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78  lass SQLiteIndex
75d0: 49 6e 70 75 74 73 0d 0a 20 20 20 20 7b 0d 0a 20  Inputs..    {.. 
75e0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
75f0: 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63  nternal Construc
7600: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tors..        //
7610: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7620: 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75       /// Constru
7630: 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  cts an instance 
7640: 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a  of this class...
7650: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
7660: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7670: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7680: 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a  "nConstraint">..
7690: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
76a0: 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20 63  number of <see c
76b0: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
76c0: 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e 20 69  Constraint" /> i
76d0: 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20  nstances to..   
76e0: 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c       /// pre-all
76f0: 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e  ocate space for.
7700: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
7710: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
7720: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7730: 22 6e 4f 72 64 65 72 42 79 22 3e 0d 0a 20 20 20  "nOrderBy">..   
7740: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d       /// The num
7750: 62 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66  ber of <see cref
7760: 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  ="SQLiteIndexOrd
7770: 65 72 42 79 22 20 2f 3e 20 69 6e 73 74 61 6e 63  erBy" /> instanc
7780: 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  es to..        /
7790: 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20  // pre-allocate 
77a0: 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20  space for...    
77b0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
77c0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
77d0: 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e  al SQLiteIndexIn
77e0: 70 75 74 73 28 69 6e 74 20 6e 43 6f 6e 73 74 72  puts(int nConstr
77f0: 61 69 6e 74 2c 20 69 6e 74 20 6e 4f 72 64 65 72  aint, int nOrder
7800: 42 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  By)..        {..
7810: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
7820: 74 72 61 69 6e 74 73 20 3d 20 6e 65 77 20 53 51  traints = new SQ
7830: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
7840: 69 6e 74 5b 6e 43 6f 6e 73 74 72 61 69 6e 74 5d  int[nConstraint]
7850: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ;..            o
7860: 72 64 65 72 42 79 73 20 3d 20 6e 65 77 20 53 51  rderBys = new SQ
7870: 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79  LiteIndexOrderBy
7880: 5b 6e 4f 72 64 65 72 42 79 5d 3b 0d 0a 20 20 20  [nOrderBy];..   
7890: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
78a0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
78b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7900: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
7910: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
7920: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
7930: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 43  ate SQLiteIndexC
7940: 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 63 6f 6e 73  onstraint[] cons
7950: 74 72 61 69 6e 74 73 3b 0d 0a 20 20 20 20 20 20  traints;..      
7960: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
7970: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20  .        /// An 
7980: 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72  array of <see cr
7990: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43  ef="SQLiteIndexC
79a0: 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e 20 6f 62  onstraint" /> ob
79b0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 2c 0d  ject instances,.
79c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 61 63  .        /// eac
79d0: 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6e 66  h containing inf
79e0: 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70 6c 69 65  ormation supplie
79f0: 64 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20  d by the SQLite 
7a00: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
7a10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
7a20: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
7a30: 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65  ublic SQLiteInde
7a40: 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 43 6f  xConstraint[] Co
7a50: 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 20 20  nstraints..     
7a60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7a70: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63    get { return c
7a80: 6f 6e 73 74 72 61 69 6e 74 73 3b 20 7d 0d 0a 20  onstraints; }.. 
7a90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7aa0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7af0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
7b00: 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42  QLiteIndexOrderB
7b10: 79 5b 5d 20 6f 72 64 65 72 42 79 73 3b 0d 0a 20  y[] orderBys;.. 
7b20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
7b30: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
7b40: 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20 3c 73  / An array of <s
7b50: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
7b60: 6e 64 65 78 4f 72 64 65 72 42 79 22 20 2f 3e 20  ndexOrderBy" /> 
7b70: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73  object instances
7b80: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65  ,..        /// e
7b90: 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69  ach containing i
7ba0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70 6c  nformation suppl
7bb0: 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  ied by the SQLit
7bc0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
7bd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
7be0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7bf0: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e   public SQLiteIn
7c00: 64 65 78 4f 72 64 65 72 42 79 5b 5d 20 4f 72 64  dexOrderBy[] Ord
7c10: 65 72 42 79 73 0d 0a 20 20 20 20 20 20 20 20 7b  erBys..        {
7c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
7c30: 74 20 7b 20 72 65 74 75 72 6e 20 6f 72 64 65 72  t { return order
7c40: 42 79 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  Bys; }..        
7c50: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
7c60: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
7c70: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
7c80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7cd0: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
7ce0: 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74  QLiteIndexOutput
7cf0: 73 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a  s Helper Class..
7d00: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7d10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
7d20: 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
7d30: 20 74 68 65 20 76 61 72 69 6f 75 73 20 6f 75 74   the various out
7d40: 70 75 74 73 20 70 72 6f 76 69 64 65 64 20 74 6f  puts provided to
7d50: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
7d60: 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72  ..    /// librar
7d70: 79 20 62 79 20 74 68 65 20 3c 73 65 65 20 63 72  y by the <see cr
7d80: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
7d90: 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64  edModule.BestInd
7da0: 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  ex" /> method...
7db0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7dc0: 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  y>..    public s
7dd0: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
7de0: 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73 0d 0a  teIndexOutputs..
7df0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
7e00: 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20  region Internal 
7e10: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
7e20: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
7e30: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
7e40: 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
7e50: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
7e60: 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
7e70: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7e80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
7e90: 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e 73 74 72  am name="nConstr
7ea0: 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  aint">..        
7eb0: 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
7ec0: 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
7ed0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
7ee0: 6e 74 55 73 61 67 65 22 20 2f 3e 20 69 6e 73 74  ntUsage" /> inst
7ef0: 61 6e 63 65 73 0d 0a 20 20 20 20 20 20 20 20 2f  ances..        /
7f00: 2f 2f 20 74 6f 20 70 72 65 2d 61 6c 6c 6f 63 61  // to pre-alloca
7f10: 74 65 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20  te space for... 
7f20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
7f30: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  am>..        int
7f40: 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65  ernal SQLiteInde
7f50: 78 4f 75 74 70 75 74 73 28 69 6e 74 20 6e 43 6f  xOutputs(int nCo
7f60: 6e 73 74 72 61 69 6e 74 29 0d 0a 20 20 20 20 20  nstraint)..     
7f70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7f80: 20 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67    constraintUsag
7f90: 65 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49  es = new SQLiteI
7fa0: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73  ndexConstraintUs
7fb0: 61 67 65 5b 6e 43 6f 6e 73 74 72 61 69 6e 74 5d  age[nConstraint]
7fc0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
7fd0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7fe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
7ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8030: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
8040: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
8050: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
8060: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
8070: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
8080: 73 61 67 65 5b 5d 20 63 6f 6e 73 74 72 61 69 6e  sage[] constrain
8090: 74 55 73 61 67 65 73 3b 0d 0a 20 20 20 20 20 20  tUsages;..      
80a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
80b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20  .        /// An 
80c0: 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72  array of <see cr
80d0: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43  ef="SQLiteIndexC
80e0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22 20  onstraintUsage" 
80f0: 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20  /> object..     
8100: 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 73     /// instances
8110: 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e  , each containin
8120: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f  g information to
8130: 20 62 65 20 73 75 70 70 6c 69 65 64 20 74 6f 20   be supplied to 
8140: 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20  the SQLite..    
8150: 20 20 20 20 2f 2f 2f 20 63 6f 72 65 20 6c 69 62      /// core lib
8160: 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
8170: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8180: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
8190: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
81a0: 69 6e 74 55 73 61 67 65 5b 5d 20 43 6f 6e 73 74  intUsage[] Const
81b0: 72 61 69 6e 74 55 73 61 67 65 73 0d 0a 20 20 20  raintUsages..   
81c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
81d0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
81e0: 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65   constraintUsage
81f0: 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  s; }..        }.
8200: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
8210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8250: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
8260: 69 76 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e  ivate int indexN
8270: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
8280: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8290: 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65         /// Numbe
82a0: 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  r used to help i
82b0: 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
82c0: 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54 68 69  cted index.  Thi
82d0: 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20  s value will..  
82e0: 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74 65 72 20        /// later 
82f0: 62 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74  be provided to t
8300: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
8310: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
8320: 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e 0d 0a 20  le.Filter" />.. 
8330: 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
8340: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
8350: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8360: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 49      public int I
8370: 6e 64 65 78 4e 75 6d 62 65 72 0d 0a 20 20 20 20  ndexNumber..    
8380: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8390: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
83a0: 69 6e 64 65 78 4e 75 6d 62 65 72 3b 20 7d 0d 0a  indexNumber; }..
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
83c0: 7b 20 69 6e 64 65 78 4e 75 6d 62 65 72 20 3d 20  { indexNumber = 
83d0: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
83e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
83f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8430: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8440: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
8450: 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a 20   indexString;.. 
8460: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
8470: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
8480: 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20 74 6f  / String used to
8490: 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74   help identify t
84a0: 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65  he selected inde
84b0: 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 77  x.  This value w
84c0: 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ill..        ///
84d0: 20 6c 61 74 65 72 20 62 65 20 70 72 6f 76 69 64   later be provid
84e0: 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63  ed to the <see c
84f0: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
8500: 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72  gedModule.Filter
8510: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  " />..        //
8520: 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  / method...     
8530: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8540: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
8550: 63 20 73 74 72 69 6e 67 20 49 6e 64 65 78 53 74  c string IndexSt
8560: 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ring..        {.
8570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
8580: 20 7b 20 72 65 74 75 72 6e 20 69 6e 64 65 78 53   { return indexS
8590: 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20  tring; }..      
85a0: 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 64 65        set { inde
85b0: 78 53 74 72 69 6e 67 20 3d 20 76 61 6c 75 65 3b  xString = value;
85c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
85d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
85e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
8630: 61 74 65 20 69 6e 74 20 6e 65 65 64 54 6f 46 72  ate int needToFr
8640: 65 65 49 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a  eeIndexString;..
8650: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
8660: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
8670: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
8680: 68 65 20 69 6e 64 65 78 20 73 74 72 69 6e 67 20  he index string 
8690: 6d 75 73 74 20 62 65 20 66 72 65 65 64 20 62 79  must be freed by
86a0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
86b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69  ..        /// li
86c0: 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  brary...        
86d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
86e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69          public i
86f0: 6e 74 20 4e 65 65 64 54 6f 46 72 65 65 49 6e 64  nt NeedToFreeInd
8700: 65 78 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20  exString..      
8710: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8720: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 65   get { return ne
8730: 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72  edToFreeIndexStr
8740: 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ing; }..        
8750: 20 20 20 20 73 65 74 20 7b 20 6e 65 65 64 54 6f      set { needTo
8760: 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 20  FreeIndexString 
8770: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
8780: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8790: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
87a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
87e0: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
87f0: 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 3b  orderByConsumed;
8800: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
8810: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
8820: 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 6f 75 74   /// True if out
8830: 70 75 74 20 69 73 20 61 6c 72 65 61 64 79 20 6f  put is already o
8840: 72 64 65 72 65 64 2e 0d 0a 20 20 20 20 20 20 20  rdered...       
8850: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8860: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
8870: 69 6e 74 20 4f 72 64 65 72 42 79 43 6f 6e 73 75  int OrderByConsu
8880: 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  med..        {..
8890: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
88a0: 7b 20 72 65 74 75 72 6e 20 6f 72 64 65 72 42 79  { return orderBy
88b0: 43 6f 6e 73 75 6d 65 64 3b 20 7d 0d 0a 20 20 20  Consumed; }..   
88c0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6f           set { o
88d0: 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20 3d  rderByConsumed =
88e0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
88f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8940: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8950: 20 20 20 70 72 69 76 61 74 65 20 64 6f 75 62 6c     private doubl
8960: 65 3f 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74  e? estimatedCost
8970: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
8980: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8990: 20 20 2f 2f 2f 20 45 73 74 69 6d 61 74 65 64 20    /// Estimated 
89a0: 63 6f 73 74 20 6f 66 20 75 73 69 6e 67 20 74 68  cost of using th
89b0: 69 73 20 69 6e 64 65 78 2e 20 20 55 73 69 6e 67  is index.  Using
89c0: 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20 68 65   a null value he
89d0: 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  re..        /// 
89e0: 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 61  indicates that a
89f0: 20 64 65 66 61 75 6c 74 20 65 73 74 69 6d 61 74   default estimat
8a00: 65 64 20 63 6f 73 74 20 76 61 6c 75 65 20 73 68  ed cost value sh
8a10: 6f 75 6c 64 20 62 65 20 75 73 65 64 2e 0d 0a 20  ould be used... 
8a20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
8a30: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
8a40: 75 62 6c 69 63 20 64 6f 75 62 6c 65 3f 20 45 73  ublic double? Es
8a50: 74 69 6d 61 74 65 64 43 6f 73 74 0d 0a 20 20 20  timatedCost..   
8a60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8a70: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
8a80: 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74 3b 20   estimatedCost; 
8a90: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  }..            s
8aa0: 65 74 20 7b 20 65 73 74 69 6d 61 74 65 64 43 6f  et { estimatedCo
8ab0: 73 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  st = value; }.. 
8ac0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8ad0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
8ae0: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
8af0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
8b50: 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65  egion SQLiteInde
8b60: 78 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a  x Helper Class..
8b70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8b80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
8b90: 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
8ba0: 20 74 68 65 20 76 61 72 69 6f 75 73 20 69 6e 70   the various inp
8bb0: 75 74 73 20 61 6e 64 20 6f 75 74 70 75 74 73 20  uts and outputs 
8bc0: 75 73 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20  used with the.. 
8bd0: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
8be0: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
8bf0: 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78  Module.BestIndex
8c00: 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
8c10: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8c20: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65 61  ..    public sea
8c30: 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
8c40: 49 6e 64 65 78 0d 0a 20 20 20 20 7b 0d 0a 20 20  Index..    {..  
8c50: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
8c60: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
8c70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
8c80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
8c90: 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20  /// The default 
8ca0: 65 73 74 69 6d 61 74 65 64 20 63 6f 73 74 20 66  estimated cost f
8cb0: 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65 0d  or use with the.
8cc0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
8cd0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
8ce0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73  anagedModule.Bes
8cf0: 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f  tIndex" /> metho
8d00: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
8d10: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8d20: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
8d30: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 64 6f 75  tic readonly dou
8d40: 62 6c 65 20 44 65 66 61 75 6c 74 45 73 74 69 6d  ble DefaultEstim
8d50: 61 74 65 64 43 6f 73 74 20 3d 20 64 6f 75 62 6c  atedCost = doubl
8d60: 65 2e 4d 61 78 56 61 6c 75 65 3b 0d 0a 20 20 20  e.MaxValue;..   
8d70: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
8d80: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
8de0: 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43  egion Internal C
8df0: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
8e00: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
8e10: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
8e20: 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e  Constructs an in
8e30: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
8e40: 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lass...        /
8e50: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8e60: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
8e70: 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e 73 74 72 61  m name="nConstra
8e80: 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  int">..        /
8e90: 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
8ea0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
8eb0: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
8ec0: 74 22 20 2f 3e 20 28 61 6e 64 0d 0a 20 20 20 20  t" /> (and..    
8ed0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
8ee0: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  f="SQLiteIndexCo
8ef0: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22 20 2f  nstraintUsage" /
8f00: 3e 29 20 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d  >) instances to.
8f10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 65  .        /// pre
8f20: 2d 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20  -allocate space 
8f30: 66 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  for...        //
8f40: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
8f50: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
8f60: 61 6d 65 3d 22 6e 4f 72 64 65 72 42 79 22 3e 0d  ame="nOrderBy">.
8f70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
8f80: 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20   number of <see 
8f90: 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
8fa0: 78 4f 72 64 65 72 42 79 22 20 2f 3e 20 69 6e 73  xOrderBy" /> ins
8fb0: 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20 20 20  tances to..     
8fc0: 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63     /// pre-alloc
8fd0: 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a  ate space for...
8fe0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
8ff0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  ram>..        in
9000: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64  ternal SQLiteInd
9010: 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ex(..           
9020: 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74   int nConstraint
9030: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
9040: 6e 74 20 6e 4f 72 64 65 72 42 79 0d 0a 20 20 20  nt nOrderBy..   
9050: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9060: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9070: 20 20 20 69 6e 70 75 74 73 20 3d 20 6e 65 77 20     inputs = new 
9080: 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74  SQLiteIndexInput
9090: 73 28 6e 43 6f 6e 73 74 72 61 69 6e 74 2c 20 6e  s(nConstraint, n
90a0: 4f 72 64 65 72 42 79 29 3b 0d 0a 20 20 20 20 20  OrderBy);..     
90b0: 20 20 20 20 20 20 20 6f 75 74 70 75 74 73 20 3d         outputs =
90c0: 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
90d0: 4f 75 74 70 75 74 73 28 6e 43 6f 6e 73 74 72 61  Outputs(nConstra
90e0: 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  int);..        }
90f0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
9100: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
9110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9150: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9160: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72     #region Inter
9170: 6e 61 6c 20 4d 61 72 73 68 61 6c 20 48 65 6c 70  nal Marshal Help
9180: 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
9190: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
91a0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
91b0: 6f 6e 76 65 72 74 73 20 61 20 6e 61 74 69 76 65  onverts a native
91c0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 6e 61   pointer to a na
91d0: 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64  tive sqlite3_ind
91e0: 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72  ex_info structur
91f0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
9200: 6e 74 6f 20 61 20 6e 65 77 20 3c 73 65 65 20 63  nto a new <see c
9210: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
9220: 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
9230: 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
9240: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9250: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
9260: 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65 78 22 3e  m name="pIndex">
9270: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
9280: 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
9290: 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 73   to the native s
92a0: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
92b0: 6f 20 73 74 72 75 63 74 75 72 65 20 74 6f 0d 0a  o structure to..
92c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76          /// conv
92d0: 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ert...        //
92e0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
92f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9300: 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20  ame="index">..  
9310: 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73        /// Upon s
9320: 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72  uccess, this par
9330: 61 6d 65 74 65 72 20 77 69 6c 6c 20 62 65 20 6d  ameter will be m
9340: 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61  odified to conta
9350: 69 6e 20 74 68 65 20 6e 65 77 6c 79 0d 0a 20 20  in the newly..  
9360: 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 65        /// create
9370: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
9380: 69 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a  iteIndex" /> obj
9390: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
93a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
93b0: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  am>..        int
93c0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69  ernal static voi
93d0: 64 20 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20  d FromIntPtr(.. 
93e0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
93f0: 72 20 70 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20  r pIndex,..     
9400: 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74         ref SQLit
9410: 65 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a 20 20  eIndex index..  
9420: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
9430: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9440: 20 20 20 20 69 66 20 28 70 49 6e 64 65 78 20 3d      if (pIndex =
9450: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
9460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9470: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
9480: 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
9490: 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  t = 0;....      
94a0: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e 73 74        int nConst
94b0: 72 61 69 6e 74 20 3d 20 53 51 4c 69 74 65 4d 61  raint = SQLiteMa
94c0: 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33 32 28  rshal.ReadInt32(
94d0: 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b  pIndex, offset);
94e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
94f0: 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d  offset = SQLiteM
9500: 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65  arshal.NextOffse
9510: 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69 7a 65  tOf(offset, size
9520: 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20 20 20  of(int),..      
9530: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
9540: 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Size);....     
9550: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
9560: 6f 6e 73 74 72 61 69 6e 74 20 3d 20 53 51 4c 69  onstraint = SQLi
9570: 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  teMarshal.ReadIn
9580: 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66  tPtr(pIndex, off
9590: 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  set);....       
95a0: 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51       offset = SQ
95b0: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74  LiteMarshal.Next
95c0: 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c  OffsetOf(offset,
95d0: 20 49 6e 74 50 74 72 2e 53 69 7a 65 2c 0d 0a 20   IntPtr.Size,.. 
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
95f0: 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 0d 0a  izeof(int));....
9600: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
9610: 6e 4f 72 64 65 72 42 79 20 3d 20 53 51 4c 69 74  nOrderBy = SQLit
9620: 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74  eMarshal.ReadInt
9630: 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65  32(pIndex, offse
9640: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
9650: 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69     offset = SQLi
9660: 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66  teMarshal.NextOf
9670: 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 73  fsetOf(offset, s
9680: 69 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20  izeof(int),..   
9690: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
96a0: 50 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20  Ptr.Size);....  
96b0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
96c0: 20 70 4f 72 64 65 72 42 79 20 3d 20 53 51 4c 69   pOrderBy = SQLi
96d0: 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  teMarshal.ReadIn
96e0: 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66  tPtr(pIndex, off
96f0: 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  set);....       
9700: 20 20 20 20 20 69 6e 64 65 78 20 3d 20 6e 65 77       index = new
9710: 20 53 51 4c 69 74 65 49 6e 64 65 78 28 6e 43 6f   SQLiteIndex(nCo
9720: 6e 73 74 72 61 69 6e 74 2c 20 6e 4f 72 64 65 72  nstraint, nOrder
9730: 42 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  By);....        
9740: 20 20 20 20 54 79 70 65 20 69 6e 64 65 78 43 6f      Type indexCo
9750: 6e 73 74 72 61 69 6e 74 54 79 70 65 20 3d 20 74  nstraintType = t
9760: 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20  ypeof(..        
9770: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
9780: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9790: 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
97a0: 61 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  aint);....      
97b0: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66        int sizeOf
97c0: 43 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 20 3d  ConstraintType =
97d0: 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28   Marshal.SizeOf(
97e0: 69 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 54  indexConstraintT
97f0: 79 70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ype);....       
9800: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 43       for (int iC
9810: 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b 20 69  onstraint = 0; i
9820: 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43 6f  Constraint < nCo
9830: 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73 74  nstraint; iConst
9840: 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20 20  raint++)..      
9850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9860: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
9870: 70 4f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65  pOffset = SQLite
9880: 4d 61 72 73 68 61 6c 2e 49 6e 74 50 74 72 46 6f  Marshal.IntPtrFo
9890: 72 4f 66 66 73 65 74 28 0d 0a 20 20 20 20 20 20  rOffset(..      
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
98b0: 6f 6e 73 74 72 61 69 6e 74 2c 20 69 43 6f 6e 73  onstraint, iCons
98c0: 74 72 61 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43  traint * sizeOfC
98d0: 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 29 3b 0d  onstraintType);.
98e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
98f0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
9900: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
9910: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20  ndex_constraint 
9920: 63 6f 6e 73 74 72 61 69 6e 74 20 3d 0d 0a 20 20  constraint =..  
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9940: 20 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d    (UnsafeNativeM
9950: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
9960: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 29  ndex_constraint)
9970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9980: 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
9990: 6c 2e 50 74 72 54 6f 53 74 72 75 63 74 75 72 65  l.PtrToStructure
99a0: 28 70 4f 66 66 73 65 74 2c 20 69 6e 64 65 78 43  (pOffset, indexC
99b0: 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 29 3b 0d  onstraintType);.
99c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
99d0: 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e     index.Inputs.
99e0: 43 6f 6e 73 74 72 61 69 6e 74 73 5b 69 43 6f 6e  Constraints[iCon
99f0: 73 74 72 61 69 6e 74 5d 20 3d 0d 0a 20 20 20 20  straint] =..    
9a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a10: 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 43  new SQLiteIndexC
9a20: 6f 6e 73 74 72 61 69 6e 74 28 63 6f 6e 73 74 72  onstraint(constr
9a30: 61 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  aint);..        
9a40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9a50: 20 20 20 20 20 54 79 70 65 20 69 6e 64 65 78 4f       Type indexO
9a60: 72 64 65 72 42 79 54 79 70 65 20 3d 20 74 79 70  rderByType = typ
9a70: 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20  eof(..          
9a80: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
9a90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9aa0: 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 29  3_index_orderby)
9ab0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9ac0: 20 69 6e 74 20 73 69 7a 65 4f 66 4f 72 64 65 72   int sizeOfOrder
9ad0: 42 79 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c  ByType = Marshal
9ae0: 2e 53 69 7a 65 4f 66 28 69 6e 64 65 78 4f 72 64  .SizeOf(indexOrd
9af0: 65 72 42 79 54 79 70 65 29 3b 0d 0a 0d 0a 20 20  erByType);....  
9b00: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
9b10: 6e 74 20 69 4f 72 64 65 72 42 79 20 3d 20 30 3b  nt iOrderBy = 0;
9b20: 20 69 4f 72 64 65 72 42 79 20 3c 20 6e 4f 72 64   iOrderBy < nOrd
9b30: 65 72 42 79 3b 20 69 4f 72 64 65 72 42 79 2b 2b  erBy; iOrderBy++
9b40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9b60: 20 20 49 6e 74 50 74 72 20 70 4f 66 66 73 65 74    IntPtr pOffset
9b70: 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c   = SQLiteMarshal
9b80: 2e 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74  .IntPtrForOffset
9b90: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9ba0: 20 20 20 20 20 20 20 70 4f 72 64 65 72 42 79 2c         pOrderBy,
9bb0: 20 69 4f 72 64 65 72 42 79 20 2a 20 73 69 7a 65   iOrderBy * size
9bc0: 4f 66 4f 72 64 65 72 42 79 54 79 70 65 29 3b 0d  OfOrderByType);.
9bd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9be0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
9bf0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
9c00: 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f 72 64  ndex_orderby ord
9c10: 65 72 42 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  erBy =..        
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 28 55 6e 73              (Uns
9c30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9c40: 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f  .sqlite3_index_o
9c50: 72 64 65 72 62 79 29 0d 0a 20 20 20 20 20 20 20  rderby)..       
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c70: 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74   Marshal.PtrToSt
9c80: 72 75 63 74 75 72 65 28 70 4f 66 66 73 65 74 2c  ructure(pOffset,
9c90: 20 69 6e 64 65 78 4f 72 64 65 72 42 79 54 79 70   indexOrderByTyp
9ca0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
9cb0: 20 20 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70         index.Inp
9cc0: 75 74 73 2e 4f 72 64 65 72 42 79 73 5b 69 4f 72  uts.OrderBys[iOr
9cd0: 64 65 72 42 79 5d 20 3d 0d 0a 20 20 20 20 20 20  derBy] =..      
9ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
9cf0: 77 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  w SQLiteIndexOrd
9d00: 65 72 42 79 28 6f 72 64 65 72 42 79 29 3b 0d 0a  erBy(orderBy);..
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9d20: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9d30: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9d80: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
9d90: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
9da0: 2f 20 50 6f 70 75 6c 61 74 65 73 20 74 68 65 20  / Populates the 
9db0: 6f 75 74 70 75 74 73 20 6f 66 20 61 20 70 72 65  outputs of a pre
9dc0: 2d 61 6c 6c 6f 63 61 74 65 64 20 6e 61 74 69 76  -allocated nativ
9dd0: 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
9de0: 69 6e 66 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  info..        //
9df0: 2f 20 73 74 72 75 63 74 75 72 65 20 75 73 69 6e  / structure usin
9e00: 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 3c 73  g an existing <s
9e10: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
9e20: 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 0d  ndex" /> object.
9e30: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73  .        /// ins
9e40: 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
9e50: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9e60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
9e70: 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e  am name="index">
9e80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
9e90: 65 20 65 78 69 73 74 69 6e 67 20 3c 73 65 65 20  e existing <see 
9ea0: 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
9eb0: 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  x" /> object ins
9ec0: 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
9ed0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
9ee0: 65 20 6f 75 74 70 75 74 20 64 61 74 61 20 74 6f  e output data to
9ef0: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
9f00: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
9f10: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
9f20: 6e 61 6d 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a  name="pIndex">..
9f30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
9f40: 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
9f50: 6f 20 74 68 65 20 70 72 65 2d 61 6c 6c 6f 63 61  o the pre-alloca
9f60: 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74  ted native sqlit
9f70: 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 0d 0a 20  e3_index_info.. 
9f80: 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63         /// struc
9f90: 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
9fa0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
9fb0: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74       internal st
9fc0: 61 74 69 63 20 76 6f 69 64 20 54 6f 49 6e 74 50  atic void ToIntP
9fd0: 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
9fe0: 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64   SQLiteIndex ind
9ff0: 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ex,..           
a000: 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a   IntPtr pIndex..
a010: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
a020: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a030: 20 20 20 20 20 20 69 66 20 28 28 69 6e 64 65 78        if ((index
a040: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e   == null) || (in
a050: 64 65 78 2e 49 6e 70 75 74 73 20 3d 3d 20 6e 75  dex.Inputs == nu
a060: 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  ll) ||..        
a070: 20 20 20 20 20 20 20 20 28 69 6e 64 65 78 2e 49          (index.I
a080: 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  nputs.Constraint
a090: 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20  s == null) ||.. 
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
a0b0: 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 20 3d 3d  index.Outputs ==
a0c0: 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20   null) ||..     
a0d0: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 64 65             (inde
a0e0: 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72  x.Outputs.Constr
a0f0: 61 69 6e 74 55 73 61 67 65 73 20 3d 3d 20 6e 75  aintUsages == nu
a100: 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
a110: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a120: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20       return;..  
a130: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a140: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
a150: 49 6e 64 65 78 20 3d 3d 20 49 6e 74 50 74 72 2e  Index == IntPtr.
a160: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
a170: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
a180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
a190: 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d  t offset = 0;...
a1a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
a1b0: 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 53   nConstraint = S
a1c0: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61  QLiteMarshal.Rea
a1d0: 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f  dInt32(pIndex, o
a1e0: 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
a1f0: 20 20 20 20 20 20 20 69 66 20 28 6e 43 6f 6e 73         if (nCons
a200: 74 72 61 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e  traint != index.
a210: 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  Inputs.Constrain
a220: 74 73 2e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  ts.Length)..    
a230: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
a240: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
a250: 20 20 20 69 66 20 28 6e 43 6f 6e 73 74 72 61 69     if (nConstrai
a260: 6e 74 20 21 3d 20 69 6e 64 65 78 2e 4f 75 74 70  nt != index.Outp
a270: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73  uts.ConstraintUs
a280: 61 67 65 73 2e 4c 65 6e 67 74 68 29 0d 0a 20 20  ages.Length)..  
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
a2a0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
a2b0: 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51       offset = SQ
a2c0: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74  LiteMarshal.Next
a2d0: 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c  OffsetOf(offset,
a2e0: 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20   sizeof(int),.. 
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
a300: 6e 74 50 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a  ntPtr.Size);....
a310: 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
a320: 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68  et = SQLiteMarsh
a330: 61 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f 66 28  al.NextOffsetOf(
a340: 6f 66 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 53  offset, IntPtr.S
a350: 69 7a 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ize,..          
a360: 20 20 20 20 20 20 73 69 7a 65 6f 66 28 69 6e 74        sizeof(int
a370: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
a380: 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69     offset = SQLi
a390: 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66  teMarshal.NextOf
a3a0: 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 73  fsetOf(offset, s
a3b0: 69 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20  izeof(int),..   
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
a3d0: 50 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20  Ptr.Size);....  
a3e0: 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
a3f0: 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c   = SQLiteMarshal
a400: 2e 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66  .NextOffsetOf(of
a410: 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 53 69 7a  fset, IntPtr.Siz
a420: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
a430: 20 20 20 20 73 69 7a 65 6f 66 28 69 6e 74 29 29      sizeof(int))
a440: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a450: 20 49 6e 74 50 74 72 20 70 43 6f 6e 73 74 72 61   IntPtr pConstra
a460: 69 6e 74 55 73 61 67 65 20 3d 20 53 51 4c 69 74  intUsage = SQLit
a470: 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74  eMarshal.ReadInt
a480: 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  Ptr(pIndex, offs
a490: 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
a4a0: 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f      int sizeOfCo
a4b0: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 54 79 70  nstraintUsageTyp
a4c0: 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65  e = Marshal.Size
a4d0: 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20  Of(typeof(..    
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
a4f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a500: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
a510: 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 29 29  nstraint_usage))
a520: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a530: 20 66 6f 72 20 28 69 6e 74 20 69 43 6f 6e 73 74   for (int iConst
a540: 72 61 69 6e 74 20 3d 20 30 3b 20 69 43 6f 6e 73  raint = 0; iCons
a550: 74 72 61 69 6e 74 20 3c 20 6e 43 6f 6e 73 74 72  traint < nConstr
a560: 61 69 6e 74 3b 20 69 43 6f 6e 73 74 72 61 69 6e  aint; iConstrain
a570: 74 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t++)..          
a580: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a590: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
a5a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a5b0: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
a5c0: 74 5f 75 73 61 67 65 20 63 6f 6e 73 74 72 61 69  t_usage constrai
a5d0: 6e 74 55 73 61 67 65 20 3d 0d 0a 20 20 20 20 20  ntUsage =..     
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
a5f0: 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
a600: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
a610: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f  ndex_constraint_
a620: 75 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  usage(..        
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a640: 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f  index.Outputs.Co
a650: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 5b 69  nstraintUsages[i
a660: 43 6f 6e 73 74 72 61 69 6e 74 5d 29 3b 0d 0a 0d  Constraint]);...
a670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a680: 20 4d 61 72 73 68 61 6c 2e 53 74 72 75 63 74 75   Marshal.Structu
a690: 72 65 54 6f 50 74 72 28 0d 0a 20 20 20 20 20 20  reToPtr(..      
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
a6b0: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2c 20 53  nstraintUsage, S
a6c0: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49 6e 74  QLiteMarshal.Int
a6d0: 50 74 72 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20  PtrForOffset(.. 
a6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6f0: 20 20 20 70 43 6f 6e 73 74 72 61 69 6e 74 55 73     pConstraintUs
a700: 61 67 65 2c 20 69 43 6f 6e 73 74 72 61 69 6e 74  age, iConstraint
a710: 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61   * sizeOfConstra
a720: 69 6e 74 55 73 61 67 65 54 79 70 65 29 2c 0d 0a  intUsageType),..
a730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a740: 20 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20      false);..   
a750: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
a760: 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
a770: 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c   = SQLiteMarshal
a780: 2e 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66  .NextOffsetOf(of
a790: 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 53 69 7a  fset, IntPtr.Siz
a7a0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
a7b0: 20 20 20 20 73 69 7a 65 6f 66 28 69 6e 74 29 29      sizeof(int))
a7c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a7d0: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57   SQLiteMarshal.W
a7e0: 72 69 74 65 49 6e 74 33 32 28 70 49 6e 64 65 78  riteInt32(pIndex
a7f0: 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20  , offset,..     
a800: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
a810: 2e 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 4e 75  .Outputs.IndexNu
a820: 6d 62 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mber);....      
a830: 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53        offset = S
a840: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78  QLiteMarshal.Nex
a850: 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74  tOffsetOf(offset
a860: 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a  , sizeof(int),..
a870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a880: 49 6e 74 50 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d  IntPtr.Size);...
a890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
a8a0: 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65  iteMarshal.Write
a8b0: 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f  IntPtr(pIndex, o
a8c0: 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
a8d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
a8e0: 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
a8f0: 72 6f 6d 53 74 72 69 6e 67 28 69 6e 64 65 78 2e  romString(index.
a900: 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 53 74 72  Outputs.IndexStr
a910: 69 6e 67 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing));....      
a920: 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53        offset = S
a930: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78  QLiteMarshal.Nex
a940: 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74  tOffsetOf(offset
a950: 2c 20 49 6e 74 50 74 72 2e 53 69 7a 65 2c 0d 0a  , IntPtr.Size,..
a960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a970: 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 0d  sizeof(int));...
a980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
a990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
a9a0: 4e 4f 54 45 3a 20 57 65 20 6a 75 73 74 20 61 6c  NOTE: We just al
a9b0: 6c 6f 63 61 74 65 64 20 74 68 65 20 49 6e 64 65  located the Inde
a9c0: 78 53 74 72 69 6e 67 20 66 69 65 6c 64 3b 20 74  xString field; t
a9d0: 68 65 72 65 66 6f 72 65 2c 20 77 65 0d 0a 20 20  herefore, we..  
a9e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
a9f0: 20 20 20 6e 65 65 64 20 74 6f 20 73 65 74 20 74     need to set t
aa00: 68 65 20 4e 65 65 64 54 6f 46 72 65 65 49 6e 64  he NeedToFreeInd
aa10: 65 78 53 74 72 69 6e 67 20 66 69 65 6c 64 20 74  exString field t
aa20: 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 0d 0a 20 20 20  o non-zero...   
aa30: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
aa40: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
aa50: 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 33  arshal.WriteInt3
aa60: 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  2(pIndex, offset
aa70: 2c 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  , 1);....       
aa80: 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51       offset = SQ
aa90: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74  LiteMarshal.Next
aaa0: 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c  OffsetOf(offset,
aab0: 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20   sizeof(int),.. 
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
aad0: 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 0d 0a  izeof(int));....
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
aaf0: 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49  teMarshal.WriteI
ab00: 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66  nt32(pIndex, off
ab10: 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  set,..          
ab20: 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70        index.Outp
ab30: 75 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73 75  uts.OrderByConsu
ab40: 6d 65 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  med);....       
ab50: 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51       offset = SQ
ab60: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74  LiteMarshal.Next
ab70: 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c  OffsetOf(offset,
ab80: 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20   sizeof(int),.. 
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
aba0: 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 29 3b 0d  izeof(double));.
abb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
abc0: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69  QLiteMarshal.Wri
abd0: 74 65 44 6f 75 62 6c 65 28 70 49 6e 64 65 78 2c  teDouble(pIndex,
abe0: 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20   offset,..      
abf0: 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e            index.
ac00: 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65  Outputs.Estimate
ac10: 64 43 6f 73 74 2e 47 65 74 56 61 6c 75 65 4f 72  dCost.GetValueOr
ac20: 44 65 66 61 75 6c 74 28 29 29 3b 0d 0a 20 20 20  Default());..   
ac30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ac40: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
ac50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ac60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
aca0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
acb0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
acc0: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
acd0: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 49  ate SQLiteIndexI
ace0: 6e 70 75 74 73 20 69 6e 70 75 74 73 3b 0d 0a 20  nputs inputs;.. 
acf0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
ad00: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
ad10: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
ad20: 22 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75  "SQLiteIndexInpu
ad30: 74 73 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ts" /> object in
ad40: 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e  stance containin
ad50: 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  g..        /// t
ad60: 68 65 20 69 6e 70 75 74 73 20 74 6f 20 74 68 65  he inputs to the
ad70: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
ad80: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
ad90: 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a  .BestIndex" />..
ada0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68          /// meth
adb0: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
adc0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
add0: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
ade0: 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20 49 6e  teIndexInputs In
adf0: 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  puts..        {.
ae00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
ae10: 20 7b 20 72 65 74 75 72 6e 20 69 6e 70 75 74 73   { return inputs
ae20: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
ae30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
ae40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
ae90: 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78  vate SQLiteIndex
aea0: 4f 75 74 70 75 74 73 20 6f 75 74 70 75 74 73 3b  Outputs outputs;
aeb0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
aec0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
aed0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
aee0: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f  ef="SQLiteIndexO
aef0: 75 74 70 75 74 73 22 20 2f 3e 20 6f 62 6a 65 63  utputs" /> objec
af00: 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61  t instance conta
af10: 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f  ining..        /
af20: 2f 2f 20 74 68 65 20 6f 75 74 70 75 74 73 20 66  // the outputs f
af30: 72 6f 6d 20 74 68 65 20 3c 73 65 65 20 63 72 65  rom the <see cre
af40: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
af50: 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65  dModule.BestInde
af60: 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  x" />..        /
af70: 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  // method...    
af80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
af90: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
afa0: 69 63 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75  ic SQLiteIndexOu
afb0: 74 70 75 74 73 20 4f 75 74 70 75 74 73 0d 0a 20  tputs Outputs.. 
afc0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
afd0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
afe0: 72 6e 20 6f 75 74 70 75 74 73 3b 20 7d 0d 0a 20  rn outputs; }.. 
aff0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b000: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
b010: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
b020: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
b030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b070: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
b080: 65 67 69 6f 6e 20 53 51 4c 69 74 65 56 69 72 74  egion SQLiteVirt
b090: 75 61 6c 54 61 62 6c 65 20 42 61 73 65 20 43 6c  ualTable Base Cl
b0a0: 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
b0b0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
b0c0: 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65  This class repre
b0d0: 73 65 6e 74 73 20 61 20 6d 61 6e 61 67 65 64 20  sents a managed 
b0e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
b0f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 49  plementation.  I
b100: 74 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e 6f  t is..    /// no
b110: 74 20 73 65 61 6c 65 64 20 61 6e 64 20 73 68 6f  t sealed and sho
b120: 75 6c 64 20 62 65 20 75 73 65 64 20 61 73 20 74  uld be used as t
b130: 68 65 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f  he base class fo
b140: 72 20 61 6e 79 20 75 73 65 72 2d 64 65 66 69 6e  r any user-defin
b150: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 76 69 72 74  ed..    /// virt
b160: 75 61 6c 20 74 61 62 6c 65 20 63 6c 61 73 73 65  ual table classe
b170: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e  s implemented in
b180: 20 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a   managed code...
b190: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b1a0: 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 63  y>..    public c
b1b0: 6c 61 73 73 20 53 51 4c 69 74 65 56 69 72 74 75  lass SQLiteVirtu
b1c0: 61 6c 54 61 62 6c 65 20 3a 0d 0a 20 20 20 20 20  alTable :..     
b1d0: 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61         ISQLiteNa
b1e0: 74 69 76 65 48 61 6e 64 6c 65 2c 20 49 44 69 73  tiveHandle, IDis
b1f0: 70 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53  posable /* NOT S
b200: 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d  EALED */..    {.
b210: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
b220: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
b230: 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ts..        /// 
b240: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
b250: 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78     /// The index
b260: 20 77 69 74 68 69 6e 20 74 68 65 20 61 72 72 61   within the arra
b270: 79 20 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f  y of strings pro
b280: 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20  vided to the..  
b290: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
b2a0: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
b2b0: 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65  gedModule.Create
b2c0: 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20  " /> and..      
b2d0: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
b2e0: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
b2f0: 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f  odule.Connect" /
b300: 3e 20 6d 65 74 68 6f 64 73 20 63 6f 6e 74 61 69  > methods contai
b310: 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  ning the..      
b320: 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66 20 74 68    /// name of th
b330: 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
b340: 6e 74 69 6e 67 20 74 68 69 73 20 76 69 72 74 75  nting this virtu
b350: 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
b360: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
b370: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
b380: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 4d 6f 64  te const int Mod
b390: 75 6c 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 30  uleNameIndex = 0
b3a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
b3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b400: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
b410: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69         /// The i
b420: 6e 64 65 78 20 77 69 74 68 69 6e 20 74 68 65 20  ndex within the 
b430: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73  array of strings
b440: 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65   provided to the
b450: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b460: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
b470: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72  ManagedModule.Cr
b480: 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20  eate" /> and..  
b490: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
b4a0: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
b4b0: 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63  gedModule.Connec
b4c0: 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f  t" /> methods co
b4d0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20  ntaining the..  
b4e0: 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f        /// name o
b4f0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
b500: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 76  ontaining this v
b510: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
b520: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
b530: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
b540: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
b550: 20 44 61 74 61 62 61 73 65 4e 61 6d 65 49 6e 64   DatabaseNameInd
b560: 65 78 20 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20  ex = 1;....     
b570: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b5c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
b5d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
b5e0: 20 54 68 65 20 69 6e 64 65 78 20 77 69 74 68 69   The index withi
b5f0: 6e 20 74 68 65 20 61 72 72 61 79 20 6f 66 20 73  n the array of s
b600: 74 72 69 6e 67 73 20 70 72 6f 76 69 64 65 64 20  trings provided 
b610: 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
b620: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
b630: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
b640: 75 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e 20 61  ule.Create" /> a
b650: 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  nd..        /// 
b660: 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
b670: 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e  teManagedModule.
b680: 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68  Connect" /> meth
b690: 6f 64 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ods containing t
b6a0: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
b6b0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74  name of the virt
b6c0: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
b6d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b6e0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
b6f0: 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 54 61  ate const int Ta
b700: 62 6c 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 32  bleNameIndex = 2
b710: 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
b720: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
b730: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b770: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b780: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
b790: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
b7a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
b7b0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
b7c0: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
b7d0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
b7e0: 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  is class...     
b7f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
b800: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
b810: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75  param name="argu
b820: 6d 65 6e 74 73 22 3e 0d 0a 20 20 20 20 20 20 20  ments">..       
b830: 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61   /// The origina
b840: 6c 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e  l array of strin
b850: 67 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74  gs provided to t
b860: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
b870: 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
b880: 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e  teManagedModule.
b890: 43 72 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a  Create" /> and..
b8a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
b8b0: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
b8c0: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e  nagedModule.Conn
b8d0: 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73 2e  ect" /> methods.
b8e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
b8f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
b900: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 56 69 72  public SQLiteVir
b910: 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20  tualTable(..    
b920: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
b930: 20 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20   arguments..    
b940: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
b950: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b960: 20 20 74 68 69 73 2e 61 72 67 75 6d 65 6e 74 73    this.arguments
b970: 20 3d 20 61 72 67 75 6d 65 6e 74 73 3b 0d 0a 20   = arguments;.. 
b980: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b990: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b9a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b9f0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
ba00: 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
ba10: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72  ties..        pr
ba20: 69 76 61 74 65 20 73 74 72 69 6e 67 5b 5d 20 61  ivate string[] a
ba30: 72 67 75 6d 65 6e 74 73 3b 0d 0a 20 20 20 20 20  rguments;..     
ba40: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
ba50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
ba60: 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 72 61 79  e original array
ba70: 20 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76   of strings prov
ba80: 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20  ided to the..   
ba90: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
baa0: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
bab0: 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22  edModule.Create"
bac0: 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20   /> and..       
bad0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
bae0: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
baf0: 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e  dule.Connect" />
bb00: 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20   methods...     
bb10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
bb20: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
bb30: 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67  c virtual string
bb40: 5b 5d 20 41 72 67 75 6d 65 6e 74 73 0d 0a 20 20  [] Arguments..  
bb50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bb60: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
bb70: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
bb80: 72 6e 20 61 72 67 75 6d 65 6e 74 73 3b 20 7d 0d  rn arguments; }.
bb90: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
bba0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
bbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
bbf0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
bc00: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
bc10: 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
bc20: 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
bc30: 6d 65 6e 74 69 6e 67 20 74 68 69 73 20 76 69 72  menting this vir
bc40: 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
bc50: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
bc60: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
bc70: 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69  lic virtual stri
bc80: 6e 67 20 4d 6f 64 75 6c 65 4e 61 6d 65 0d 0a 20  ng ModuleName.. 
bc90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bca0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
bcb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bcc0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
bcd0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
bce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
bcf0: 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73  ring[] arguments
bd00: 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d   = Arguments;...
bd10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bd20: 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20   if ((arguments 
bd30: 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd50: 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67   (arguments.Leng
bd60: 74 68 20 3e 20 4d 6f 64 75 6c 65 4e 61 6d 65 49  th > ModuleNameI
bd70: 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20  ndex))..        
bd80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
bda0: 65 74 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b  eturn arguments[
bdb0: 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65 78 5d  ModuleNameIndex]
bdc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
bdd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
bde0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be10: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
be20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
be30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
be40: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
be50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
be60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
bea0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
beb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
bec0: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
bed0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
bee0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 76  ontaining this v
bef0: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
bf00: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
bf10: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
bf20: 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74  ublic virtual st
bf30: 72 69 6e 67 20 44 61 74 61 62 61 73 65 4e 61 6d  ring DatabaseNam
bf40: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
bf50: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
bf60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
bf80: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
bf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bfa0: 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d    string[] argum
bfb0: 65 6e 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73  ents = Arguments
bfc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
bfd0: 20 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65       if ((argume
bfe0: 6e 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d  nts != null) &&.
bff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c000: 20 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e       (arguments.
c010: 4c 65 6e 67 74 68 20 3e 20 44 61 74 61 62 61 73  Length > Databas
c020: 65 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20  eNameIndex))..  
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
c040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c050: 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 67 75       return argu
c060: 6d 65 6e 74 73 5b 44 61 74 61 62 61 73 65 4e 61  ments[DatabaseNa
c070: 6d 65 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  meIndex];..     
c080: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
c0a0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
c0b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c0c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c0d0: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
c0e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c0f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c100: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c150: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c160: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
c170: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
c180: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 76 69  e name of the vi
c190: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
c1a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
c1b0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
c1c0: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72  blic virtual str
c1d0: 69 6e 67 20 54 61 62 6c 65 4e 61 6d 65 0d 0a 20  ing TableName.. 
c1e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c1f0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
c200: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c210: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
c220: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
c240: 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73  ring[] arguments
c250: 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d   = Arguments;...
c260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c270: 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20   if ((arguments 
c280: 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67   (arguments.Leng
c2b0: 74 68 20 3e 20 54 61 62 6c 65 4e 61 6d 65 49 6e  th > TableNameIn
c2c0: 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20  dex))..         
c2d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c2f0: 74 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 54  turn arguments[T
c300: 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d  ableNameIndex];.
c310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c320: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
c330: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
c340: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c360: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
c380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
c390: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
c3a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
c3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
c3f0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
c400: 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64   SQLiteIndex ind
c410: 65 78 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ex;..        ///
c420: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
c430: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
c440: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
c450: 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ex" /> object in
c460: 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e  stance containin
c470: 67 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20 20  g all the..     
c480: 20 20 20 2f 2f 2f 20 64 61 74 61 20 66 6f 72 20     /// data for 
c490: 74 68 65 20 69 6e 70 75 74 73 20 61 6e 64 20 6f  the inputs and o
c4a0: 75 74 70 75 74 73 20 72 65 6c 61 74 69 6e 67 20  utputs relating 
c4b0: 74 6f 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  to the most rece
c4c0: 6e 74 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20  nt index..      
c4d0: 20 20 2f 2f 2f 20 73 65 6c 65 63 74 69 6f 6e 2e    /// selection.
c4e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
c4f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
c500: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
c510: 20 53 51 4c 69 74 65 49 6e 64 65 78 20 49 6e 64   SQLiteIndex Ind
c520: 65 78 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ex..        {.. 
c530: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
c540: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
c550: 3b 20 72 65 74 75 72 6e 20 69 6e 64 65 78 3b 20  ; return index; 
c560: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
c570: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
c580: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
c590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
c5e0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65  region Public Me
c5f0: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
c600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
c610: 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
c620: 65 74 68 6f 64 20 73 68 6f 75 6c 64 20 6e 6f 72  ethod should nor
c630: 6d 61 6c 6c 79 20 62 65 20 75 73 65 64 20 62 79  mally be used by
c640: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
c650: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
c660: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
c670: 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20  e.BestIndex" /> 
c680: 6d 65 74 68 6f 64 20 69 6e 20 6f 72 64 65 72 20  method in order 
c690: 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
c6a0: 70 65 72 66 6f 72 6d 20 69 6e 64 65 78 20 73 65  perform index se
c6b0: 6c 65 63 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e  lection based on
c6c0: 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73   the constraints
c6d0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
c6e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 51  ..        /// SQ
c6f0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
c700: 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
c710: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
c720: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
c730: 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20  ame="index">..  
c740: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
c750: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
c760: 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20  ndex" /> object 
c770: 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e  instance contain
c780: 69 6e 67 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20  ing all the..   
c790: 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 20 66 6f       /// data fo
c7a0: 72 20 74 68 65 20 69 6e 70 75 74 73 20 61 6e 64  r the inputs and
c7b0: 20 6f 75 74 70 75 74 73 20 72 65 6c 61 74 69 6e   outputs relatin
c7c0: 67 20 74 6f 20 69 6e 64 65 78 20 73 65 6c 65 63  g to index selec
c7d0: 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
c7e0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
c7f0: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
c800: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
c810: 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75  Non-zero upon su
c820: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
c830: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
c840: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
c850: 69 72 74 75 61 6c 20 62 6f 6f 6c 20 42 65 73 74  irtual bool Best
c860: 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20  Index(..        
c870: 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20      SQLiteIndex 
c880: 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20  index..         
c890: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
c8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
c8b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
c8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
c8d0: 73 2e 69 6e 64 65 78 20 3d 20 69 6e 64 65 78 3b  s.index = index;
c8e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c8f0: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
c900: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c910: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c960: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
c970: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
c980: 20 41 74 74 65 6d 70 74 73 20 74 6f 20 72 65 63   Attempts to rec
c990: 6f 72 64 20 74 68 65 20 72 65 6e 61 6d 69 6e 67  ord the renaming
c9a0: 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   of the virtual 
c9b0: 74 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64  table associated
c9c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
c9d0: 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  th this object i
c9e0: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
c9f0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
ca00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
ca10: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
ca20: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
ca30: 68 65 20 6e 65 77 20 6e 61 6d 65 20 66 6f 72 20  he new name for 
ca40: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
ca50: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
ca60: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
ca70: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
ca80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
ca90: 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65  -zero upon succe
caa0: 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
cab0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
cac0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
cad0: 75 61 6c 20 62 6f 6f 6c 20 52 65 6e 61 6d 65 28  ual bool Rename(
cae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
caf0: 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20 20 20  ring name..     
cb00: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
cb10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cb20: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
cb30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cb40: 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20   if ((arguments 
cb50: 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 72               (ar
cb70: 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68 20 3e  guments.Length >
cb80: 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 29   TableNameIndex)
cb90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
cba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cbb0: 20 20 61 72 67 75 6d 65 6e 74 73 5b 54 61 62 6c    arguments[Tabl
cbc0: 65 4e 61 6d 65 49 6e 64 65 78 5d 20 3d 20 6e 61  eNameIndex] = na
cbd0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
cbe0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
cbf0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
cc00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cc10: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
cc20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
cc30: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
cc40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
cc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
cc90: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
cca0: 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  on ISQLiteNative
ccb0: 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  Handle Members..
ccc0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ccd0: 49 6e 74 50 74 72 20 6e 61 74 69 76 65 48 61 6e  IntPtr nativeHan
cce0: 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dle;..        //
ccf0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
cd00: 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73       /// Returns
cd10: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
cd20: 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 68 61  SQLite native ha
cd30: 6e 64 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  ndle associated 
cd40: 77 69 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20  with this..     
cd50: 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e     /// object in
cd60: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
cd70: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
cd80: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
cd90: 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20 4e  virtual IntPtr N
cda0: 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20  ativeHandle..   
cdb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cdc0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
cdd0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
cde0: 6e 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 20  n nativeHandle; 
cdf0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  }..            i
ce00: 6e 74 65 72 6e 61 6c 20 73 65 74 20 7b 20 6e 61  nternal set { na
ce10: 74 69 76 65 48 61 6e 64 6c 65 20 3d 20 76 61 6c  tiveHandle = val
ce20: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  ue; }..        }
ce30: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
ce40: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
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 2f 2f 2f 2f 2f 2f  ////////////////
ce90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
cea0: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
ceb0: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
cec0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
ced0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
cee0: 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20 74  // Disposes of t
cef0: 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
cf00: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
cf10: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
cf20: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
cf30: 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20  d Dispose()..   
cf40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cf50: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65      Dispose(true
cf60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
cf70: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
cf80: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
cf90: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
cfa0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cfb0: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
cfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d000: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
d010: 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74  IDisposable "Pat
d020: 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20  tern" Members.. 
d030: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
d040: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
d050: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
d060: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
d070: 2f 20 54 68 72 6f 77 73 20 61 6e 20 3c 73 65 65  / Throws an <see
d080: 20 63 72 65 66 3d 22 4f 62 6a 65 63 74 44 69 73   cref="ObjectDis
d090: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 22 20  posedException" 
d0a0: 2f 3e 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63  /> if this objec
d0b0: 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  t..        /// i
d0c0: 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e  nstance has been
d0d0: 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20   disposed...    
d0e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d0f0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
d100: 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69  ate void CheckDi
d110: 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f  sposed() /* thro
d120: 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  w */..        {.
d130: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
d140: 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
d150: 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64      if (disposed
d160: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d180: 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65    throw new Obje
d190: 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74  ctDisposedExcept
d1a0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
d1b0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
d1c0: 28 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  (SQLiteVirtualTa
d1d0: 62 6c 65 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20  ble).Name);..   
d1e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
d1f0: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  if..        }...
d200: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
d210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
d260: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
d270: 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20     /// Disposes 
d280: 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  of this object i
d290: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
d2a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
d2b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
d2c0: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f  aram name="dispo
d2d0: 73 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20  sing">..        
d2e0: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
d2f0: 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62  this method is b
d300: 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
d310: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
d320: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44 69 73  / <see cref="Dis
d330: 70 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74 68 6f  pose()" /> metho
d340: 64 2e 20 20 5a 65 72 6f 20 69 66 20 74 68 69 73  d.  Zero if this
d350: 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67   method is being
d360: 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20   called..       
d370: 20 2f 2f 2f 20 66 72 6f 6d 20 74 68 65 20 66 69   /// from the fi
d380: 6e 61 6c 69 7a 65 72 2e 0d 0a 20 20 20 20 20 20  nalizer...      
d390: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
d3a0: 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
d3b0: 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 44  d virtual void D
d3c0: 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70  ispose(bool disp
d3d0: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
d3e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
d3f0: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
d400: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
d420: 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a  if (disposing)..
d430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d440: 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  //{..           
d450: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f       //    /////
d460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d490: 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73   //    // dispos
d4a0: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
d4b0: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
d4d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
d500: 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a           //}....
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d540: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
d550: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
d560: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
d570: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
d580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
d5c0: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
d5d0: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
d5e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d5f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
d600: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
d610: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d660: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
d670: 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
d680: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
d690: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 69  ..        /// Fi
d6a0: 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a  nalizes this obj
d6b0: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
d6c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
d6d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 7e  mary>..        ~
d6e0: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
d6f0: 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  le()..        {.
d700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73  .            Dis
d710: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
d720: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d730: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
d740: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
d750: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
d760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
d7b0: 67 69 6f 6e 20 53 51 4c 69 74 65 56 69 72 74 75  gion SQLiteVirtu
d7c0: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 42 61  alTableCursor Ba
d7d0: 73 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  se Class..    //
d7e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
d7f0: 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
d800: 72 65 70 72 65 73 65 6e 74 73 20 61 20 6d 61 6e  represents a man
d810: 61 67 65 64 20 76 69 72 74 75 61 6c 20 74 61 62  aged virtual tab
d820: 6c 65 20 63 75 72 73 6f 72 20 69 6d 70 6c 65 6d  le cursor implem
d830: 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  entation...    /
d840: 2f 2f 20 49 74 20 69 73 20 6e 6f 74 20 73 65 61  // It is not sea
d850: 6c 65 64 20 61 6e 64 20 73 68 6f 75 6c 64 20 62  led and should b
d860: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62 61  e used as the ba
d870: 73 65 20 63 6c 61 73 73 20 66 6f 72 20 61 6e 79  se class for any
d880: 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 65 72 2d 64  ..    /// user-d
d890: 65 66 69 6e 65 64 20 76 69 72 74 75 61 6c 20 74  efined virtual t
d8a0: 61 62 6c 65 20 63 75 72 73 6f 72 20 63 6c 61 73  able cursor clas
d8b0: 73 65 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ses implemented 
d8c0: 69 6e 20 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e  in managed code.
d8d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
d8e0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
d8f0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 56 69 72   class SQLiteVir
d900: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
d910: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  :..            I
d920: 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64  SQLiteNativeHand
d930: 6c 65 2c 20 49 44 69 73 70 6f 73 61 62 6c 65 20  le, IDisposable 
d940: 2f 2a 20 4e 4f 54 20 53 45 41 4c 45 44 20 2a 2f  /* NOT SEALED */
d950: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
d960: 20 23 72 65 67 69 6f 6e 20 50 72 6f 74 65 63 74   #region Protect
d970: 65 64 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  ed Constants..  
d980: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
d990: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
d9a0: 20 54 68 69 73 20 76 61 6c 75 65 20 72 65 70 72   This value repr
d9b0: 65 73 65 6e 74 73 20 61 6e 20 69 6e 76 61 6c 69  esents an invali
d9c0: 64 20 69 6e 74 65 67 65 72 20 72 6f 77 20 73 65  d integer row se
d9d0: 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 2e 0d 0a  quence number...
d9e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
d9f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
da00: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
da10: 20 72 65 61 64 6f 6e 6c 79 20 69 6e 74 20 49 6e   readonly int In
da20: 76 61 6c 69 64 52 6f 77 49 6e 64 65 78 20 3d 20  validRowIndex = 
da30: 30 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  0;..        #end
da40: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
da50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
da60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
daa0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
dab0: 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20  vate Data..     
dac0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
dad0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
dae0: 65 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 74 68  e field holds th
daf0: 65 20 69 6e 74 65 67 65 72 20 72 6f 77 20 73 65  e integer row se
db00: 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
db10: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  r the current ro
db20: 77 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  w..        /// p
db30: 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 74 68 69  ointed to by thi
db40: 73 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20  s cursor object 
db50: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
db60: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
db70: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
db80: 74 65 20 69 6e 74 20 72 6f 77 49 6e 64 65 78 3b  te int rowIndex;
db90: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
dba0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
dbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbf0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
dc00: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
dc10: 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
dc20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
dc30: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
dc40: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e  // Constructs an
dc50: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
dc60: 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20  s class...      
dc70: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
dc80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
dc90: 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
dca0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
dcb0: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
dcc0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
dcd0: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
dce0: 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
dcf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
dd00: 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  th this object i
dd10: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
dd20: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
dd30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
dd40: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
dd50: 65 43 75 72 73 6f 72 28 0d 0a 20 20 20 20 20 20  eCursor(..      
dd60: 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
dd70: 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 0d 0a  ualTable table..
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
dd90: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
dda0: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s()..        {..
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
ddc0: 2e 74 61 62 6c 65 20 3d 20 74 61 62 6c 65 3b 0d  .table = table;.
ddd0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
dde0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
ddf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
de00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
de50: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
de60: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
de70: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
de80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
de90: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
dea0: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
deb0: 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
dec0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
ded0: 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
dee0: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
def0: 75 72 73 6f 72 28 29 0d 0a 20 20 20 20 20 20 20  ursor()..       
df00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
df10: 72 6f 77 49 6e 64 65 78 20 3d 20 49 6e 76 61 6c  rowIndex = Inval
df20: 69 64 52 6f 77 49 6e 64 65 78 3b 0d 0a 20 20 20  idRowIndex;..   
df30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
df40: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
df50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
df60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
dfa0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
dfb0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
dfc0: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
dfd0: 61 74 65 20 53 51 4c 69 74 65 56 69 72 74 75 61  ate SQLiteVirtua
dfe0: 6c 54 61 62 6c 65 20 74 61 62 6c 65 3b 0d 0a 20  lTable table;.. 
dff0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
e000: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
e010: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
e020: 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
e030: 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
e040: 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
e050: 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
e060: 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
e070: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
e080: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
e090: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
e0a0: 69 63 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74  ic virtual SQLit
e0b0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 54 61  eVirtualTable Ta
e0c0: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ble..        {..
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
e0e0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
e0f0: 29 3b 20 72 65 74 75 72 6e 20 74 61 62 6c 65 3b  ); return table;
e100: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
e110: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e160: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
e170: 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d  ate int indexNum
e180: 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ber;..        //
e190: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
e1a0: 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20       /// Number 
e1b0: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
e1c0: 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
e1d0: 65 64 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20  ed index.  This 
e1e0: 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20 20 20  value will..    
e1f0: 20 20 20 20 2f 2f 2f 20 62 65 20 73 65 74 20 76      /// be set v
e200: 69 61 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ia the <see cref
e210: 3d 22 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74  ="Filter" /> met
e220: 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
e230: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
e240: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
e250: 74 75 61 6c 20 69 6e 74 20 49 6e 64 65 78 4e 75  tual int IndexNu
e260: 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mber..        {.
e270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
e280: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
e290: 28 29 3b 20 72 65 74 75 72 6e 20 69 6e 64 65 78  (); return index
e2a0: 4e 75 6d 62 65 72 3b 20 7d 0d 0a 20 20 20 20 20  Number; }..     
e2b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e300: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
e310: 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
e320: 67 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a  g indexString;..
e330: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
e340: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
e350: 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20 74  // String used t
e360: 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
e370: 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
e380: 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ex.  This value 
e390: 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  will..        //
e3a0: 2f 20 62 65 20 73 65 74 20 76 69 61 20 74 68 65  / be set via the
e3b0: 20 3c 73 65 65 20 63 72 65 66 3d 22 46 69 6c 74   <see cref="Filt
e3c0: 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  er" /> method...
e3d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
e3e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
e3f0: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73  public virtual s
e400: 74 72 69 6e 67 20 49 6e 64 65 78 53 74 72 69 6e  tring IndexStrin
e410: 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  g..        {..  
e420: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
e430: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
e440: 20 72 65 74 75 72 6e 20 69 6e 64 65 78 53 74 72   return indexStr
e450: 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ing; }..        
e460: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
e470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e480: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e4c0: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 56 61  private SQLiteVa
e4d0: 6c 75 65 5b 5d 20 76 61 6c 75 65 73 3b 0d 0a 20  lue[] values;.. 
e4e0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
e4f0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
e500: 2f 20 54 68 65 20 76 61 6c 75 65 73 20 75 73 65  / The values use
e510: 64 20 74 6f 20 66 69 6c 74 65 72 20 74 68 65 20  d to filter the 
e520: 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 76 69  rows returned vi
e530: 61 20 74 68 69 73 20 63 75 72 73 6f 72 20 6f 62  a this cursor ob
e540: 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
e550: 2f 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68 69  / instance.  Thi
e560: 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  s value will be 
e570: 73 65 74 20 76 69 61 20 74 68 65 20 3c 73 65 65  set via the <see
e580: 20 63 72 65 66 3d 22 46 69 6c 74 65 72 22 20 2f   cref="Filter" /
e590: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
e5a0: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
e5b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
e5c0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
e5d0: 69 72 74 75 61 6c 20 53 51 4c 69 74 65 56 61 6c  irtual SQLiteVal
e5e0: 75 65 5b 5d 20 56 61 6c 75 65 73 0d 0a 20 20 20  ue[] Values..   
e5f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e600: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
e610: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
e620: 6e 20 76 61 6c 75 65 73 3b 20 7d 0d 0a 20 20 20  n values; }..   
e630: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e640: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
e650: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
e6a0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
e6b0: 20 50 72 6f 74 65 63 74 65 64 20 4d 65 74 68 6f   Protected Metho
e6c0: 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
e6d0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
e6e0: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
e6f0: 74 6f 20 70 65 72 73 69 73 74 20 74 68 65 20 73  to persist the s
e700: 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63 72  pecified <see cr
e710: 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22  ef="SQLiteValue"
e720: 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20   /> object..    
e730: 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
e740: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 61  s in order to ma
e750: 6b 65 20 74 68 65 6d 20 61 76 61 69 6c 61 62 6c  ke them availabl
e760: 65 20 61 66 74 65 72 20 74 68 65 0d 0a 20 20 20  e after the..   
e770: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
e780: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
e790: 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22  edModule.Filter"
e7a0: 20 2f 3e 20 6d 65 74 68 6f 64 20 72 65 74 75 72   /> method retur
e7b0: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns...        ///
e7c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
e7d0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
e7e0: 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a  name="values">..
e7f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
e800: 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72  array of <see cr
e810: 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22  ef="SQLiteValue"
e820: 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
e830: 6e 63 65 73 20 74 6f 20 62 65 0d 0a 20 20 20 20  nces to be..    
e840: 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73 74 65      /// persiste
e850: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
e860: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
e870: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
e880: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
e890: 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20   number of <see 
e8a0: 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75  cref="SQLiteValu
e8b0: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
e8c0: 74 61 6e 63 65 73 20 74 68 61 74 20 77 65 72 65  tances that were
e8d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
e8e0: 63 63 65 73 73 66 75 6c 6c 79 20 70 65 72 73 69  ccessfully persi
e8f0: 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sted...        /
e900: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
e910: 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
e920: 20 76 69 72 74 75 61 6c 20 69 6e 74 20 54 72 79   virtual int Try
e930: 50 65 72 73 69 73 74 56 61 6c 75 65 73 28 0d 0a  PersistValues(..
e940: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
e950: 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73  teValue[] values
e960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
e970: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e980: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75          int resu
e990: 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  lt = 0;....     
e9a0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
e9b0: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
e9c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e9d0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
e9e0: 63 68 20 28 53 51 4c 69 74 65 56 61 6c 75 65 20  ch (SQLiteValue 
e9f0: 76 61 6c 75 65 20 69 6e 20 76 61 6c 75 65 73 29  value in values)
ea00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ea10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ea20: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
ea30: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea50: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
ea60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ea70: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
ea80: 50 65 72 73 69 73 74 28 29 29 0d 0a 20 20 20 20  Persist())..    
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaa0: 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b 0d 0a 20      result++;.. 
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
eac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ead0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
eae0: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
eaf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
eb00: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
eb10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
eb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
eb60: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
eb70: 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
eb80: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
eb90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
eba0: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
ebb0: 64 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  d should normall
ebc0: 79 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  y be used by the
ebd0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
ebe0: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
ebf0: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69  ManagedModule.Fi
ec00: 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 20  lter" /> method 
ec10: 69 6e 20 6f 72 64 65 72 20 74 6f 0d 0a 20 20 20  in order to..   
ec20: 20 20 20 20 20 2f 2f 2f 20 70 65 72 66 6f 72 6d       /// perform
ec30: 20 66 69 6c 74 65 72 69 6e 67 20 6f 66 20 74 68   filtering of th
ec40: 65 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 6e  e result rows an
ec50: 64 2f 6f 72 20 74 6f 20 72 65 63 6f 72 64 20 74  d/or to record t
ec60: 68 65 20 66 69 6c 74 65 72 69 6e 67 0d 0a 20 20  he filtering..  
ec70: 20 20 20 20 20 20 2f 2f 2f 20 63 72 69 74 65 72        /// criter
ec80: 69 61 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  ia provided by t
ec90: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
eca0: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
ecb0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ecc0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
ecd0: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 4e  ram name="indexN
ece0: 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20 20 20 20  umber">..       
ecf0: 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65 64   /// Number used
ed00: 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
ed10: 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
ed20: 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
ed30: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
ed40: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
ed50: 6e 61 6d 65 3d 22 69 6e 64 65 78 53 74 72 69 6e  name="indexStrin
ed60: 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  g">..        ///
ed70: 20 53 74 72 69 6e 67 20 75 73 65 64 20 74 6f 20   String used to 
ed80: 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
ed90: 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
eda0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
edb0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
edc0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
edd0: 3d 22 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20  ="values">..    
ede0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75      /// The valu
edf0: 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
ee00: 20 74 6f 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   to each column 
ee10: 69 6e 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  in the selected 
ee20: 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
ee30: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
ee40: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
ee50: 74 75 61 6c 20 76 6f 69 64 20 46 69 6c 74 65 72  tual void Filter
ee60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  (..            i
ee70: 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72 2c 0d  nt indexNumber,.
ee80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
ee90: 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67 2c  ing indexString,
eea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
eeb0: 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75  LiteValue[] valu
eec0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
eed0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
eee0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
eef0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
ef00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 76            if ((v
ef10: 61 6c 75 65 73 20 21 3d 20 6e 75 6c 6c 29 20 26  alues != null) &
ef20: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
ef30: 20 20 20 28 54 72 79 50 65 72 73 69 73 74 56 61     (TryPersistVa
ef40: 6c 75 65 73 28 76 61 6c 75 65 73 29 20 21 3d 20  lues(values) != 
ef50: 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 29 29 0d  values.Length)).
ef60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef80: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
ef90: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
efa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efb0: 22 66 61 69 6c 65 64 20 74 6f 20 70 65 72 73 69  "failed to persi
efc0: 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  st one or more v
efd0: 61 6c 75 65 73 22 29 3b 0d 0a 20 20 20 20 20 20  alues");..      
efe0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
eff0: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65         this.inde
f000: 78 4e 75 6d 62 65 72 20 3d 20 69 6e 64 65 78 4e  xNumber = indexN
f010: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
f020: 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 53 74      this.indexSt
f030: 72 69 6e 67 20 3d 20 69 6e 64 65 78 53 74 72 69  ring = indexStri
f040: 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng;..           
f050: 20 74 68 69 73 2e 76 61 6c 75 65 73 20 3d 20 76   this.values = v
f060: 61 6c 75 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  alues;..        
f070: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
f0d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
f0e0: 20 20 20 20 20 20 20 2f 2f 2f 20 44 65 74 65 72         /// Deter
f0f0: 6d 69 6e 65 73 20 74 68 65 20 69 6e 74 65 67 65  mines the intege
f100: 72 20 72 6f 77 20 73 65 71 75 65 6e 63 65 20 6e  r row sequence n
f110: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 63 75  umber for the cu
f120: 72 72 65 6e 74 20 72 6f 77 2e 0d 0a 20 20 20 20  rrent row...    
f130: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
f140: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
f150: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
f160: 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67     /// The integ
f170: 65 72 20 72 6f 77 20 73 65 71 75 65 6e 63 65 20  er row sequence 
f180: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 63  number for the c
f190: 75 72 72 65 6e 74 20 72 6f 77 20 2d 4f 52 2d 20  urrent row -OR- 
f1a0: 7a 65 72 6f 20 69 66 0d 0a 20 20 20 20 20 20 20  zero if..       
f1b0: 20 2f 2f 2f 20 69 74 20 63 61 6e 6e 6f 74 20 62   /// it cannot b
f1c0: 65 20 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20  e determined... 
f1d0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
f1e0: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
f1f0: 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 69 6e  ublic virtual in
f200: 74 20 47 65 74 52 6f 77 49 6e 64 65 78 28 29 0d  t GetRowIndex().
f210: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
f220: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
f230: 6f 77 49 6e 64 65 78 3b 0d 0a 20 20 20 20 20 20  owIndex;..      
f240: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
f250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f2a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
f2b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72  .        /// Arr
f2c0: 61 6e 67 65 73 20 66 6f 72 20 74 68 65 20 69 6e  anges for the in
f2d0: 74 65 67 65 72 20 72 6f 77 20 73 65 71 75 65 6e  teger row sequen
f2e0: 63 65 20 6e 75 6d 62 65 72 20 74 6f 20 62 65 20  ce number to be 
f2f0: 61 64 6a 75 73 74 65 64 20 73 6f 20 74 68 61 74  adjusted so that
f300: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 74  ..        /// it
f310: 20 72 65 66 65 72 73 20 74 6f 20 74 68 65 20 6e   refers to the n
f320: 65 78 74 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20  ext row...      
f330: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f340: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
f350: 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 4e 65   virtual void Ne
f360: 78 74 52 6f 77 49 6e 64 65 78 28 29 0d 0a 20 20  xtRowIndex()..  
f370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f380: 20 20 20 20 20 72 6f 77 49 6e 64 65 78 2b 2b 3b       rowIndex++;
f390: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
f3a0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
f3b0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
f3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f400: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
f410: 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74  egion ISQLiteNat
f420: 69 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72  iveHandle Member
f430: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
f440: 74 65 20 49 6e 74 50 74 72 20 6e 61 74 69 76 65  te IntPtr native
f450: 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20  Handle;..       
f460: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
f470: 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75          /// Retu
f480: 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79 69  rns the underlyi
f490: 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65  ng SQLite native
f4a0: 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61 74   handle associat
f4b0: 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20 20  ed with this..  
f4c0: 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74        /// object
f4d0: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
f4e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
f4f0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
f500: 69 63 20 76 69 72 74 75 61 6c 20 49 6e 74 50 74  ic virtual IntPt
f510: 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a  r NativeHandle..
f520: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f530: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
f540: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
f550: 74 75 72 6e 20 6e 61 74 69 76 65 48 61 6e 64 6c  turn nativeHandl
f560: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
f570: 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 74 20 7b    internal set {
f580: 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 20 3d 20   nativeHandle = 
f590: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
f5a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
f5b0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
f5c0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f5d0: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
f610: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
f620: 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72  isposable Member
f630: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
f640: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
f650: 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f    /// Disposes o
f660: 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
f670: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
f680: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f690: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
f6a0: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
f6b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f6c0: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74         Dispose(t
f6d0: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
f6e0: 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
f6f0: 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
f700: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f710: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
f720: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f770: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
f780: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
f790: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
f7a0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
f7b0: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
f7c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
f7d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
f7e0: 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20 3c   /// Throws an <
f7f0: 73 65 65 20 63 72 65 66 3d 22 4f 62 6a 65 63 74  see cref="Object
f800: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
f810: 6e 22 20 2f 3e 20 69 66 20 74 68 69 73 20 6f 62  n" /> if this ob
f820: 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
f830: 2f 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62  / instance has b
f840: 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  een disposed... 
f850: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
f860: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
f870: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
f880: 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74  kDisposed() /* t
f890: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
f8a0: 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e   {..#if THROW_ON
f8b0: 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20  _DISPOSED..     
f8c0: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
f8d0: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
f8e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f8f0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f       throw new O
f900: 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
f910: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
f920: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
f930: 65 6f 66 28 53 51 4c 69 74 65 56 69 72 74 75 61  eof(SQLiteVirtua
f940: 6c 54 61 62 6c 65 43 75 72 73 6f 72 29 2e 4e 61  lTableCursor).Na
f950: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
f960: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
f970: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f980: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f9d0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
f9e0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
f9f0: 44 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73  Disposes of this
fa00: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
fa10: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
fa20: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
fa30: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
fa40: 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d  me="disposing">.
fa50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
fa60: 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65  -zero if this me
fa70: 74 68 6f 64 20 69 73 20 62 65 69 6e 67 20 63 61  thod is being ca
fa80: 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20  lled from the.. 
fa90: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
faa0: 63 72 65 66 3d 22 44 69 73 70 6f 73 65 28 29 22  cref="Dispose()"
fab0: 20 2f 3e 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72   /> method.  Zer
fac0: 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64  o if this method
fad0: 20 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64   is being called
fae0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 72  ..        /// fr
faf0: 6f 6d 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  om the finalizer
fb00: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
fb10: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
fb20: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
fb30: 61 6c 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  al void Dispose(
fb40: 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d  bool disposing).
fb50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
fb60: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
fb70: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
fb80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
fb90: 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73         //if (dis
fba0: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
fbb0: 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20           //{..  
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
fbd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
fbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fbf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
fc00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
fc10: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
fc20: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
fc30: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
fc40: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
fc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fc80: 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20    //}....       
fc90: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
fca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
fcc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fcd0: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
fce0: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
fcf0: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
fd00: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
fd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
fd30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
fd40: 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72     disposed = tr
fd50: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
fd60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
fd70: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
fd80: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
fd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdd0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
fde0: 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74  #region Destruct
fdf0: 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
fe00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
fe10: 20 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73     /// Finalizes
fe20: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
fe30: 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
fe40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
fe50: 20 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65 56          ~SQLiteV
fe60: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
fe70: 72 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r()..        {..
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
fe90: 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ose(false);..   
fea0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
feb0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
fec0: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
fed0: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
fee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
ff30: 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76  ion ISQLiteNativ
ff40: 65 48 61 6e 64 6c 65 20 49 6e 74 65 72 66 61 63  eHandle Interfac
ff50: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  e..    /// <summ
ff60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
ff70: 69 73 20 69 6e 74 65 72 66 61 63 65 20 72 65 70  is interface rep
ff80: 72 65 73 65 6e 74 73 20 61 20 6e 61 74 69 76 65  resents a native
ff90: 20 68 61 6e 64 6c 65 20 70 72 6f 76 69 64 65 64   handle provided
ffa0: 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63   by the SQLite c
ffb0: 6f 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62  ore..    /// lib
ffc0: 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rary...    /// <
ffd0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
ffe0: 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63 65 20  ublic interface 
fff0: 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e  ISQLiteNativeHan
10000 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  dle..    {..    
10010 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10020 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
10030 68 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65  he native handle
10040 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
10050 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10060 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
10070 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 7b 20 67  NativeHandle { g
10080 65 74 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20  et; }..    }..  
10090 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
100a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
100b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
100f0 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  ...    #region I
10100 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
10110 6c 65 20 49 6e 74 65 72 66 61 63 65 0d 0a 20 20  le Interface..  
10120 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10130 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 6e  .    /// This in
10140 74 65 72 66 61 63 65 20 72 65 70 72 65 73 65 6e  terface represen
10150 74 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  ts a virtual tab
10160 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
10170 6e 20 77 72 69 74 74 65 6e 20 69 6e 0d 0a 20 20  n written in..  
10180 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 63 6f 64    /// native cod
10190 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
101a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
101b0 69 63 20 69 6e 74 65 72 66 61 63 65 20 49 53 51  ic interface ISQ
101c0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
101d0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
101e0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
101f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
10200 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
10210 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
10220 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
10230 61 20 6e 65 77 20 69 6e 73 74 61 6e 63 65 20 6f  a new instance o
10240 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
10250 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
10260 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20  n response to a 
10270 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
10280 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  ABLE statement. 
10290 54 68 65 20 64 62 20 70 61 72 61 6d 65 74 65 72  The db parameter
102a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 73  ..        /// is
102b0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
102c0 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  e SQLite databas
102d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  e connection tha
102e0 74 20 69 73 20 65 78 65 63 75 74 69 6e 67 0d 0a  t is executing..
102f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
10300 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
10310 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  ABLE statement. 
10320 54 68 65 20 70 41 75 78 20 61 72 67 75 6d 65 6e  The pAux argumen
10330 74 20 69 73 20 74 68 65 20 63 6f 70 79 0d 0a 20  t is the copy.. 
10340 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68         /// of th
10350 65 20 63 6c 69 65 6e 74 20 64 61 74 61 20 70 6f  e client data po
10360 69 6e 74 65 72 20 74 68 61 74 20 77 61 73 20 74  inter that was t
10370 68 65 20 66 6f 75 72 74 68 20 61 72 67 75 6d 65  he fourth argume
10380 6e 74 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  nt to the..     
10390 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63     /// sqlite3_c
103a0 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 6f  reate_module() o
103b0 72 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  r sqlite3_create
103c0 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 20 63 61 6c  _module_v2() cal
103d0 6c 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20  l that..        
103e0 2f 2f 2f 20 72 65 67 69 73 74 65 72 65 64 20 74  /// registered t
103f0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
10400 20 6d 6f 64 75 6c 65 2e 20 54 68 65 20 61 72 67   module. The arg
10410 76 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 61  v parameter is a
10420 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  n..        /// a
10430 72 72 61 79 20 6f 66 20 61 72 67 63 20 70 6f 69  rray of argc poi
10440 6e 74 65 72 73 20 74 6f 20 6e 75 6c 6c 20 74 65  nters to null te
10450 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 73  rminated strings
10460 2e 20 54 68 65 20 66 69 72 73 74 0d 0a 20 20 20  . The first..   
10470 20 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 2c       /// string,
10480 20 61 72 67 76 5b 30 5d 2c 20 69 73 20 74 68 65   argv[0], is the
10490 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64   name of the mod
104a0 75 6c 65 20 62 65 69 6e 67 20 69 6e 76 6f 6b 65  ule being invoke
104b0 64 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  d. The..        
104c0 2f 2f 2f 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20  /// module name 
104d0 69 73 20 74 68 65 20 6e 61 6d 65 20 70 72 6f 76  is the name prov
104e0 69 64 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  ided as the seco
104f0 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 0d 0a  nd argument to..
10500 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
10510 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
10520 65 28 29 20 61 6e 64 20 61 73 20 74 68 65 20 61  e() and as the a
10530 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 55  rgument to the U
10540 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 0d 0a  SING clause of..
10550 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
10560 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
10570 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 74  ABLE statement t
10580 68 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20  hat is running. 
10590 54 68 65 20 73 65 63 6f 6e 64 2c 0d 0a 20 20 20  The second,..   
105a0 20 20 20 20 20 2f 2f 2f 20 61 72 67 76 5b 31 5d       /// argv[1]
105b0 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  , is the name of
105c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
105d0 20 77 68 69 63 68 20 74 68 65 20 6e 65 77 20 76   which the new v
105e0 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
105f0 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 62 65 69        /// is bei
10600 6e 67 20 63 72 65 61 74 65 64 2e 20 54 68 65 20  ng created. The 
10610 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
10620 20 22 6d 61 69 6e 22 20 66 6f 72 20 74 68 65 20   "main" for the 
10630 70 72 69 6d 61 72 79 0d 0a 20 20 20 20 20 20 20  primary..       
10640 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 2c 20 6f   /// database, o
10650 72 20 22 74 65 6d 70 22 20 66 6f 72 20 54 45 4d  r "temp" for TEM
10660 50 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20 74  P database, or t
10670 68 65 20 6e 61 6d 65 20 67 69 76 65 6e 20 61 74  he name given at
10680 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
10690 2f 20 65 6e 64 20 6f 66 20 74 68 65 20 41 54 54  / end of the ATT
106a0 41 43 48 20 73 74 61 74 65 6d 65 6e 74 20 66 6f  ACH statement fo
106b0 72 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  r attached datab
106c0 61 73 65 73 2e 20 54 68 65 20 74 68 69 72 64 0d  ases. The third.
106d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 6c 65  .        /// ele
106e0 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61  ment of the arra
106f0 79 2c 20 61 72 67 76 5b 32 5d 2c 20 69 73 20 74  y, argv[2], is t
10700 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e  he name of the n
10710 65 77 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20  ew virtual..    
10720 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2c 20 61      /// table, a
10730 73 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c  s specified foll
10740 6f 77 69 6e 67 20 74 68 65 20 54 41 42 4c 45 20  owing the TABLE 
10750 6b 65 79 77 6f 72 64 20 69 6e 20 74 68 65 20 43  keyword in the C
10760 52 45 41 54 45 0d 0a 20 20 20 20 20 20 20 20 2f  REATE..        /
10770 2f 2f 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  // VIRTUAL TABLE
10780 20 73 74 61 74 65 6d 65 6e 74 2e 20 49 66 20 70   statement. If p
10790 72 65 73 65 6e 74 2c 20 74 68 65 20 66 6f 75 72  resent, the four
107a0 74 68 20 61 6e 64 20 73 75 62 73 65 71 75 65 6e  th and subsequen
107b0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  t..        /// s
107c0 74 72 69 6e 67 73 20 69 6e 20 74 68 65 20 61 72  trings in the ar
107d0 67 76 5b 5d 20 61 72 72 61 79 20 72 65 70 6f 72  gv[] array repor
107e0 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  t the arguments 
107f0 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 6e 61  to the module na
10800 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  me..        /// 
10810 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 56 49  in the CREATE VI
10820 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
10830 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ement...        
10840 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
10850 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
10860 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
10870 20 6a 6f 62 20 6f 66 20 74 68 69 73 20 6d 65 74   job of this met
10880 68 6f 64 20 69 73 20 74 6f 20 63 6f 6e 73 74 72  hod is to constr
10890 75 63 74 20 74 68 65 20 6e 65 77 20 76 69 72 74  uct the new virt
108a0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
108b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 28 61  ..        /// (a
108c0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 6f  n sqlite3_vtab o
108d0 62 6a 65 63 74 29 20 61 6e 64 20 72 65 74 75 72  bject) and retur
108e0 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  n a pointer to i
108f0 74 20 69 6e 20 2a 70 70 56 54 61 62 2e 0d 0a 20  t in *ppVTab... 
10900 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
10910 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
10920 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
10930 2f 2f 2f 20 41 73 20 70 61 72 74 20 6f 66 20 74  /// As part of t
10940 68 65 20 74 61 73 6b 20 6f 66 20 63 72 65 61 74  he task of creat
10950 69 6e 67 20 61 20 6e 65 77 20 73 71 6c 69 74 65  ing a new sqlite
10960 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
10970 2c 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  , this..        
10980 2f 2f 2f 20 6d 65 74 68 6f 64 20 6d 75 73 74 20  /// method must 
10990 69 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33 5f 64  invoke sqlite3_d
109a0 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 74 6f  eclare_vtab() to
109b0 20 74 65 6c 6c 20 74 68 65 20 53 51 4c 69 74 65   tell the SQLite
109c0 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f   core..        /
109d0 2f 2f 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6c  // about the col
109e0 75 6d 6e 73 20 61 6e 64 20 64 61 74 61 74 79 70  umns and datatyp
109f0 65 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61  es in the virtua
10a00 6c 20 74 61 62 6c 65 2e 20 54 68 65 0d 0a 20 20  l table. The..  
10a10 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
10a20 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
10a30 20 41 50 49 20 68 61 73 20 74 68 65 20 66 6f 6c   API has the fol
10a40 6c 6f 77 69 6e 67 20 70 72 6f 74 6f 74 79 70 65  lowing prototype
10a50 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  :..        /// <
10a60 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
10a70 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
10a80 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
10a90 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 20          /// int 
10aa0 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
10ab0 76 74 61 62 28 73 71 6c 69 74 65 33 20 2a 64 62  vtab(sqlite3 *db
10ac0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43  , const char *zC
10ad0 72 65 61 74 65 54 61 62 6c 65 29 0d 0a 20 20 20  reateTable)..   
10ae0 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
10af0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
10b00 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
10b10 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
10b20 20 20 20 2f 2f 2f 20 54 68 65 20 66 69 72 73 74     /// The first
10b30 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
10b40 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
10b50 62 28 29 20 6d 75 73 74 20 62 65 20 74 68 65 20  b() must be the 
10b60 73 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  same..        //
10b70 2f 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  / database conne
10b80 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 61 73  ction pointer as
10b90 20 74 68 65 20 66 69 72 73 74 20 70 61 72 61 6d   the first param
10ba0 65 74 65 72 20 74 6f 20 74 68 69 73 20 6d 65 74  eter to this met
10bb0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
10bc0 2f 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67  / The second arg
10bd0 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
10be0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
10bf0 6d 75 73 74 20 61 0d 0a 20 20 20 20 20 20 20 20  must a..        
10c00 2f 2f 2f 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61  /// zero-termina
10c10 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
10c20 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
10c30 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 43 52 45   well-formed CRE
10c40 41 54 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ATE..        ///
10c50 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
10c60 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
10c70 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
10c80 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 61   virtual table a
10c90 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  nd..        /// 
10ca0 74 68 65 69 72 20 64 61 74 61 20 74 79 70 65 73  their data types
10cb0 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  . The name of th
10cc0 65 20 74 61 62 6c 65 20 69 6e 20 74 68 69 73 20  e table in this 
10cd0 43 52 45 41 54 45 20 54 41 42 4c 45 0d 0a 20 20  CREATE TABLE..  
10ce0 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 6d        /// statem
10cf0 65 6e 74 20 69 73 20 69 67 6e 6f 72 65 64 2c 20  ent is ignored, 
10d00 61 73 20 61 72 65 20 61 6c 6c 20 63 6f 6e 73 74  as are all const
10d10 72 61 69 6e 74 73 2e 20 4f 6e 6c 79 20 74 68 65  raints. Only the
10d20 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 0d 0a 20   column names.. 
10d30 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20 64         /// and d
10d40 61 74 61 74 79 70 65 73 20 6d 61 74 74 65 72 2e  atatypes matter.
10d50 20 54 68 65 20 43 52 45 41 54 45 20 54 41 42 4c   The CREATE TABL
10d60 45 20 73 74 61 74 65 6d 65 6e 74 20 73 74 72 69  E statement stri
10d70 6e 67 20 6e 65 65 64 20 6e 6f 74 20 74 6f 0d 0a  ng need not to..
10d80 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 68          /// be h
10d90 65 6c 64 20 69 6e 20 70 65 72 73 69 73 74 65 6e  eld in persisten
10da0 74 20 6d 65 6d 6f 72 79 2e 20 54 68 65 20 73 74  t memory. The st
10db0 72 69 6e 67 20 63 61 6e 20 62 65 20 64 65 61 6c  ring can be deal
10dc0 6c 6f 63 61 74 65 64 20 61 6e 64 2f 6f 72 0d 0a  located and/or..
10dd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 75 73          /// reus
10de0 65 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68  ed as soon as th
10df0 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
10e00 65 5f 76 74 61 62 28 29 20 72 6f 75 74 69 6e 65  e_vtab() routine
10e10 20 72 65 74 75 72 6e 73 2e 0d 0a 20 20 20 20 20   returns...     
10e20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
10e30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
10e40 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
10e50 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
10e60 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  "pDb">..        
10e70 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 64  /// The native d
10e80 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
10e90 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  on handle...    
10ea0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
10eb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
10ec0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22  aram name="pAux"
10ed0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
10ee0 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e 61 74 69  he original nati
10ef0 76 65 20 70 6f 69 6e 74 65 72 20 76 61 6c 75 65  ve pointer value
10f00 20 74 68 61 74 20 77 61 73 20 70 72 6f 76 69 64   that was provid
10f10 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ed to the..     
10f20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63     /// sqlite3_c
10f30 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 2c 20  reate_module(), 
10f40 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
10f50 6f 64 75 6c 65 5f 76 32 28 29 20 6f 72 0d 0a 20  odule_v2() or.. 
10f60 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
10f70 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73  e3_create_dispos
10f80 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 29 20 66 75  able_module() fu
10f90 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20  nctions...      
10fa0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
10fb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
10fc0 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d  am name="argc">.
10fd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
10fe0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
10ff0 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52  ents from the CR
11000 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
11010 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  LE statement... 
11020 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
11030 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
11040 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
11050 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gv">..        //
11060 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 73  / The array of s
11070 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  tring arguments 
11080 66 72 6f 6d 20 74 68 65 20 43 52 45 41 54 45 20  from the CREATE 
11090 56 49 52 54 55 41 4c 20 54 41 42 4c 45 0d 0a 20  VIRTUAL TABLE.. 
110a0 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65         /// state
110b0 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ment...        /
110c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
110d0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
110e0 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
110f0 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
11100 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
11110 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
11120 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e  modified to poin
11130 74 20 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a  t to the newly..
11140 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61          /// crea
11150 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74  ted native sqlit
11160 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
11170 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
11180 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
11190 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
111a0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45 72 72 6f  aram name="pErro
111b0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
111c0 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20 74   Upon failure, t
111d0 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
111e0 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
111f0 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 65  o point to the e
11200 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rror..        //
11210 2f 20 6d 65 73 73 61 67 65 2c 20 77 69 74 68 20  / message, with 
11220 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  the underlying m
11230 65 6d 6f 72 79 20 68 61 76 69 6e 67 20 62 65 65  emory having bee
11240 6e 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  n obtained from 
11250 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
11260 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
11270 29 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20  ) function...   
11280 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
11290 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
112a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
112b0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
112c0 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
112d0 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
112e0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
112f0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
11300 72 43 6f 64 65 20 78 43 72 65 61 74 65 28 0d 0a  rCode xCreate(..
11310 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
11320 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20  tr pDb,..       
11330 20 20 20 20 20 49 6e 74 50 74 72 20 70 41 75 78       IntPtr pAux
11340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
11350 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
11360 20 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67        IntPtr arg
11370 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  v,..            
11380 72 65 66 20 49 6e 74 50 74 72 20 70 56 74 61 62  ref IntPtr pVtab
11390 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
113a0 65 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72  ef IntPtr pError
113b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
113c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
113d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11410 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
11420 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
11430 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
11440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
11450 65 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f  e xConnect metho
11460 64 20 69 73 20 76 65 72 79 20 73 69 6d 69 6c 61  d is very simila
11470 72 20 74 6f 20 78 43 72 65 61 74 65 2e 20 49 74  r to xCreate. It
11480 20 68 61 73 20 74 68 65 20 73 61 6d 65 0d 0a 20   has the same.. 
11490 20 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d         /// param
114a0 65 74 65 72 73 20 61 6e 64 20 63 6f 6e 73 74 72  eters and constr
114b0 75 63 74 73 20 61 20 6e 65 77 20 73 71 6c 69 74  ucts a new sqlit
114c0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
114d0 65 20 6a 75 73 74 20 6c 69 6b 65 0d 0a 20 20 20  e just like..   
114e0 20 20 20 20 20 2f 2f 2f 20 78 43 72 65 61 74 65       /// xCreate
114f0 2e 20 41 6e 64 20 69 74 20 6d 75 73 74 20 61 6c  . And it must al
11500 73 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  so call sqlite3_
11510 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 6c  declare_vtab() l
11520 69 6b 65 20 78 43 72 65 61 74 65 2e 0d 0a 20 20  ike xCreate...  
11530 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
11540 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
11550 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
11560 2f 2f 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  // The differenc
11570 65 20 69 73 20 74 68 61 74 20 78 43 6f 6e 6e 65  e is that xConne
11580 63 74 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  ct is called to 
11590 65 73 74 61 62 6c 69 73 68 20 61 20 6e 65 77 0d  establish a new.
115a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e  .        /// con
115b0 6e 65 63 74 69 6f 6e 20 74 6f 20 61 6e 20 65 78  nection to an ex
115c0 69 73 74 69 6e 67 20 76 69 72 74 75 61 6c 20 74  isting virtual t
115d0 61 62 6c 65 20 77 68 65 72 65 61 73 20 78 43 72  able whereas xCr
115e0 65 61 74 65 20 69 73 20 63 61 6c 6c 65 64 0d 0a  eate is called..
115f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 63          /// to c
11600 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74  reate a new virt
11610 75 61 6c 20 74 61 62 6c 65 20 66 72 6f 6d 20 73  ual table from s
11620 63 72 61 74 63 68 2e 0d 0a 20 20 20 20 20 20 20  cratch...       
11630 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
11640 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
11650 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
11660 65 20 78 43 72 65 61 74 65 20 61 6e 64 20 78 43  e xCreate and xC
11670 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 73 20 61  onnect methods a
11680 72 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e  re only differen
11690 74 20 77 68 65 6e 20 74 68 65 0d 0a 20 20 20 20  t when the..    
116a0 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
116b0 74 61 62 6c 65 20 68 61 73 20 73 6f 6d 65 20 6b  table has some k
116c0 69 6e 64 20 6f 66 20 62 61 63 6b 69 6e 67 20 73  ind of backing s
116d0 74 6f 72 65 20 74 68 61 74 20 6d 75 73 74 20 62  tore that must b
116e0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
116f0 6e 69 74 69 61 6c 69 7a 65 64 20 74 68 65 20 66  nitialized the f
11700 69 72 73 74 20 74 69 6d 65 20 74 68 65 20 76 69  irst time the vi
11710 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 63  rtual table is c
11720 72 65 61 74 65 64 2e 20 54 68 65 0d 0a 20 20 20  reated. The..   
11730 20 20 20 20 20 2f 2f 2f 20 78 43 72 65 61 74 65       /// xCreate
11740 20 6d 65 74 68 6f 64 20 63 72 65 61 74 65 73 20   method creates 
11750 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  and initializes 
11760 74 68 65 20 62 61 63 6b 69 6e 67 20 73 74 6f 72  the backing stor
11770 65 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  e. The..        
11780 2f 2f 2f 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74  /// xConnect met
11790 68 6f 64 20 6a 75 73 74 20 63 6f 6e 6e 65 63 74  hod just connect
117a0 73 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67  s to an existing
117b0 20 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 2e 0d   backing store..
117c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
117d0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
117e0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
117f0 20 20 2f 2f 2f 20 41 73 20 61 6e 20 65 78 61 6d    /// As an exam
11800 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20 61 20  ple, consider a 
11810 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
11820 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 61  plementation tha
11830 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  t..        /// p
11840 72 6f 76 69 64 65 73 20 72 65 61 64 2d 6f 6e 6c  rovides read-onl
11850 79 20 61 63 63 65 73 73 20 74 6f 20 65 78 69 73  y access to exis
11860 74 69 6e 67 20 63 6f 6d 6d 61 2d 73 65 70 61 72  ting comma-separ
11870 61 74 65 64 2d 76 61 6c 75 65 20 28 43 53 56 29  ated-value (CSV)
11880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 69  ..        /// fi
11890 6c 65 73 20 6f 6e 20 64 69 73 6b 2e 20 54 68 65  les on disk. The
118a0 72 65 20 69 73 20 6e 6f 20 62 61 63 6b 69 6e 67  re is no backing
118b0 20 73 74 6f 72 65 20 74 68 61 74 20 6e 65 65 64   store that need
118c0 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 0d  s to be created.
118d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72 20  .        /// or 
118e0 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
118f0 73 75 63 68 20 61 20 76 69 72 74 75 61 6c 20 74  such a virtual t
11900 61 62 6c 65 20 28 73 69 6e 63 65 20 74 68 65 20  able (since the 
11910 43 53 56 20 66 69 6c 65 73 0d 0a 20 20 20 20 20  CSV files..     
11920 20 20 20 2f 2f 2f 20 61 6c 72 65 61 64 79 20 65     /// already e
11930 78 69 73 74 20 6f 6e 20 64 69 73 6b 29 20 73 6f  xist on disk) so
11940 20 74 68 65 20 78 43 72 65 61 74 65 20 61 6e 64   the xCreate and
11950 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64   xConnect method
11960 73 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  s will be..     
11970 20 20 20 2f 2f 2f 20 69 64 65 6e 74 69 63 61 6c     /// identical
11980 20 66 6f 72 20 74 68 61 74 20 6d 6f 64 75 6c 65   for that module
11990 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
119a0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
119b0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
119c0 20 20 20 20 2f 2f 2f 20 41 6e 6f 74 68 65 72 20      /// Another 
119d0 65 78 61 6d 70 6c 65 20 69 73 20 61 20 76 69 72  example is a vir
119e0 74 75 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20  tual table that 
119f0 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 66 75 6c  implements a ful
11a00 6c 2d 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20  l-text..        
11a10 2f 2f 2f 20 69 6e 64 65 78 2e 20 54 68 65 20 78  /// index. The x
11a20 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 6d 75  Create method mu
11a30 73 74 20 63 72 65 61 74 65 20 61 6e 64 20 69 6e  st create and in
11a40 69 74 69 61 6c 69 7a 65 20 64 61 74 61 0d 0a 20  itialize data.. 
11a50 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63         /// struc
11a60 74 75 72 65 73 20 74 6f 20 68 6f 6c 64 20 74 68  tures to hold th
11a70 65 20 64 69 63 74 69 6f 6e 61 72 79 20 61 6e 64  e dictionary and
11a80 20 70 6f 73 74 69 6e 67 20 6c 69 73 74 73 20 66   posting lists f
11a90 6f 72 20 74 68 61 74 20 69 6e 64 65 78 2e 0d 0a  or that index...
11aa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
11ab0 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2c  xConnect method,
11ac0 20 6f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   on the other ha
11ad0 6e 64 2c 20 6f 6e 6c 79 20 68 61 73 20 74 6f 20  nd, only has to 
11ae0 6c 6f 63 61 74 65 20 61 6e 64 20 75 73 65 0d 0a  locate and use..
11af0 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 20 65          /// an e
11b00 78 69 73 74 69 6e 67 20 64 69 63 74 69 6f 6e 61  xisting dictiona
11b10 72 79 20 61 6e 64 20 70 6f 73 74 69 6e 67 20 6c  ry and posting l
11b20 69 73 74 73 20 74 68 61 74 20 77 65 72 65 20 63  ists that were c
11b30 72 65 61 74 65 64 20 62 79 20 61 0d 0a 20 20 20  reated by a..   
11b40 20 20 20 20 20 2f 2f 2f 20 70 72 69 6f 72 20 78       /// prior x
11b50 43 72 65 61 74 65 20 63 61 6c 6c 2e 0d 0a 20 20  Create call...  
11b60 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
11b70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
11b80 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
11b90 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74 20  // The xConnect 
11ba0 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75  method must retu
11bb0 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20  rn SQLITE_OK if 
11bc0 69 74 20 69 73 20 73 75 63 63 65 73 73 66 75 6c  it is successful
11bd0 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   in..        ///
11be0 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e 65   creating the ne
11bf0 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c  w virtual table,
11c00 20 6f 72 20 53 51 4c 49 54 45 5f 45 52 52 4f 52   or SQLITE_ERROR
11c10 20 69 66 20 69 74 20 69 73 20 6e 6f 74 0d 0a 20   if it is not.. 
11c20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 63 63 65         /// succe
11c30 73 73 66 75 6c 2e 20 49 66 20 6e 6f 74 20 73 75  ssful. If not su
11c40 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 73 71  ccessful, the sq
11c50 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
11c60 74 75 72 65 20 6d 75 73 74 20 6e 6f 74 0d 0a 20  ture must not.. 
11c70 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 61 6c         /// be al
11c80 6c 6f 63 61 74 65 64 2e 20 41 6e 20 65 72 72 6f  located. An erro
11c90 72 20 6d 65 73 73 61 67 65 20 6d 61 79 20 6f 70  r message may op
11ca0 74 69 6f 6e 61 6c 6c 79 20 62 65 20 72 65 74 75  tionally be retu
11cb0 72 6e 65 64 20 69 6e 20 2a 70 7a 45 72 72 0d 0a  rned in *pzErr..
11cc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 66 20 75          /// if u
11cd0 6e 73 75 63 63 65 73 73 66 75 6c 2e 20 53 70 61  nsuccessful. Spa
11ce0 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65  ce to hold the e
11cf0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72  rror message str
11d00 69 6e 67 20 6d 75 73 74 20 62 65 0d 0a 20 20 20  ing must be..   
11d10 20 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74       /// allocat
11d20 65 64 20 75 73 69 6e 67 20 61 6e 20 53 51 4c 69  ed using an SQLi
11d30 74 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  te memory alloca
11d40 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 6c 69  tion function li
11d50 6b 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ke..        /// 
11d60 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
11d70 20 6f 72 20 73 71 6c 69 74 65 33 5f 6d 70 72 69   or sqlite3_mpri
11d80 6e 74 66 28 29 20 61 73 20 74 68 65 20 53 51 4c  ntf() as the SQL
11d90 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 0d 0a 20  ite core will.. 
11da0 20 20 20 20 20 20 20 2f 2f 2f 20 61 74 74 65 6d         /// attem
11db0 70 74 20 74 6f 20 66 72 65 65 20 74 68 65 20 73  pt to free the s
11dc0 70 61 63 65 20 75 73 69 6e 67 20 73 71 6c 69 74  pace using sqlit
11dd0 65 33 5f 66 72 65 65 28 29 20 61 66 74 65 72 20  e3_free() after 
11de0 74 68 65 20 65 72 72 6f 72 20 68 61 73 0d 0a 20  the error has.. 
11df0 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 65 6e 20         /// been 
11e00 72 65 70 6f 72 74 65 64 20 75 70 20 74 6f 20 74  reported up to t
11e10 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d  he application..
11e20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
11e30 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
11e40 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
11e50 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65    /// The xConne
11e60 63 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71  ct method is req
11e70 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20  uired for every 
11e80 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
11e90 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
11ea0 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75 67  mentation, thoug
11eb0 68 20 74 68 65 20 78 43 72 65 61 74 65 20 61 6e  h the xCreate an
11ec0 64 20 78 43 6f 6e 6e 65 63 74 20 70 6f 69 6e 74  d xConnect point
11ed0 65 72 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ers of the..    
11ee0 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
11ef0 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 6d 61  module object ma
11f00 79 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 73  y point to the s
11f10 61 6d 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 65  ame function the
11f20 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20   virtual..      
11f30 20 20 2f 2f 2f 20 74 61 62 6c 65 20 64 6f 65 73    /// table does
11f40 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 69 6e 69   not need to ini
11f50 74 69 61 6c 69 7a 65 20 62 61 63 6b 69 6e 67 20  tialize backing 
11f60 73 74 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  store...        
11f70 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
11f80 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
11f90 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
11fa0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44   <param name="pD
11fb0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
11fc0 20 54 68 65 20 6e 61 74 69 76 65 20 64 61 74 61   The native data
11fd0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
11fe0 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20  handle...       
11ff0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
12000 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
12010 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a  m name="pAux">..
12020 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
12030 6f 72 69 67 69 6e 61 6c 20 6e 61 74 69 76 65 20  original native 
12040 70 6f 69 6e 74 65 72 20 76 61 6c 75 65 20 74 68  pointer value th
12050 61 74 20 77 61 73 20 70 72 6f 76 69 64 65 64 20  at was provided 
12060 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
12070 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61  /// sqlite3_crea
12080 74 65 5f 6d 6f 64 75 6c 65 28 29 2c 20 73 71 6c  te_module(), sql
12090 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
120a0 6c 65 5f 76 32 28 29 20 6f 72 0d 0a 20 20 20 20  le_v2() or..    
120b0 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
120c0 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c  create_disposabl
120d0 65 5f 6d 6f 64 75 6c 65 28 29 20 66 75 6e 63 74  e_module() funct
120e0 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ions...        /
120f0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
12100 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
12110 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20  name="argc">..  
12120 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75        /// The nu
12130 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
12140 73 20 66 72 6f 6d 20 74 68 65 20 43 52 45 41 54  s from the CREAT
12150 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
12160 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
12170 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
12180 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
12190 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22  aram name="argv"
121a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
121b0 68 65 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  he array of stri
121c0 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ng arguments fro
121d0 6d 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  m the CREATE VIR
121e0 54 55 41 4c 20 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL TABLE..    
121f0 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 6d 65 6e      /// statemen
12200 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
12210 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
12220 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
12230 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
12240 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
12250 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d  cess, this param
12260 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
12270 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74  ified to point t
12280 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a 20 20 20  o the newly..   
12290 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 65 64       /// created
122a0 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
122b0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
122c0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
122d0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
122e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
122f0 6d 20 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e  m name="pError">
12300 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
12310 6f 6e 20 66 61 69 6c 75 72 65 2c 20 74 68 69 73  on failure, this
12320 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
12330 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 70  be modified to p
12340 6f 69 6e 74 20 74 6f 20 74 68 65 20 65 72 72 6f  oint to the erro
12350 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  r..        /// m
12360 65 73 73 61 67 65 2c 20 77 69 74 68 20 74 68 65  essage, with the
12370 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 65 6d 6f   underlying memo
12380 72 79 20 68 61 76 69 6e 67 20 62 65 65 6e 20 6f  ry having been o
12390 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
123a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
123b0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 66  lite3_malloc() f
123c0 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  unction...      
123d0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
123e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
123f0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
12400 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
12410 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
12420 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
12430 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
12440 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
12450 64 65 20 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20  de xConnect(..  
12460 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
12470 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20 20   pDb,..         
12480 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c 0d     IntPtr pAux,.
12490 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
124a0 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
124b0 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 2c      IntPtr argv,
124c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
124d0 66 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d  f IntPtr pVtab,.
124e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
124f0 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a   IntPtr pError..
12500 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
12510 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
12520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12560 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
12570 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
12580 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
12590 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 51 4c 69          /// SQLi
125a0 74 65 20 75 73 65 73 20 74 68 65 20 78 42 65 73  te uses the xBes
125b0 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 6f 66  tIndex method of
125c0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
125d0 20 6d 6f 64 75 6c 65 20 74 6f 0d 0a 20 20 20 20   module to..    
125e0 20 20 20 20 2f 2f 2f 20 64 65 74 65 72 6d 69 6e      /// determin
125f0 65 20 74 68 65 20 62 65 73 74 20 77 61 79 20 74  e the best way t
12600 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
12610 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 65 20  tual table. The 
12620 78 42 65 73 74 49 6e 64 65 78 0d 0a 20 20 20 20  xBestIndex..    
12630 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 68      /// method h
12640 61 73 20 61 20 70 72 6f 74 6f 74 79 70 65 20 6c  as a prototype l
12650 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20 20 20 20  ike this:..     
12660 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
12670 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64          /// <cod
12680 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
12690 69 6e 74 20 28 2a 78 42 65 73 74 49 6e 64 65 78  int (*xBestIndex
126a0 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
126b0 70 56 54 61 62 2c 20 73 71 6c 69 74 65 33 5f 69  pVTab, sqlite3_i
126c0 6e 64 65 78 5f 69 6e 66 6f 2a 29 3b 0d 0a 20 20  ndex_info*);..  
126d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65        /// </code
126e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
126f0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
12700 2f 2f 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f  // The SQLite co
12710 72 65 20 63 6f 6d 6d 75 6e 69 63 61 74 65 73 20  re communicates 
12720 77 69 74 68 20 74 68 65 20 78 42 65 73 74 49 6e  with the xBestIn
12730 64 65 78 20 6d 65 74 68 6f 64 20 62 79 20 66 69  dex method by fi
12740 6c 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f  lling..        /
12750 2f 2f 20 69 6e 20 63 65 72 74 61 69 6e 20 66 69  // in certain fi
12760 65 6c 64 73 20 6f 66 20 74 68 65 20 73 71 6c 69  elds of the sqli
12770 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73  te3_index_info s
12780 74 72 75 63 74 75 72 65 20 61 6e 64 20 70 61 73  tructure and pas
12790 73 69 6e 67 20 61 0d 0a 20 20 20 20 20 20 20 20  sing a..        
127a0 2f 2f 2f 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  /// pointer to t
127b0 68 61 74 20 73 74 72 75 63 74 75 72 65 20 69 6e  hat structure in
127c0 74 6f 20 78 42 65 73 74 49 6e 64 65 78 20 61 73  to xBestIndex as
127d0 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
127e0 6d 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  meter...        
127f0 2f 2f 2f 20 54 68 65 20 78 42 65 73 74 49 6e 64  /// The xBestInd
12800 65 78 20 6d 65 74 68 6f 64 20 66 69 6c 6c 73 20  ex method fills 
12810 6f 75 74 20 6f 74 68 65 72 20 66 69 65 6c 64 73  out other fields
12820 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
12830 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  re..        /// 
12840 77 68 69 63 68 20 66 6f 72 6d 73 20 74 68 65 20  which forms the 
12850 72 65 70 6c 79 2e 20 54 68 65 20 73 71 6c 69 74  reply. The sqlit
12860 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74  e3_index_info st
12870 72 75 63 74 75 72 65 20 6c 6f 6f 6b 73 20 6c 69  ructure looks li
12880 6b 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ke..        /// 
12890 74 68 69 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f  this:..        /
128a0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
128b0 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
128c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 73 74 72          ///  str
128d0 75 63 74 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  uct sqlite3_inde
128e0 78 5f 69 6e 66 6f 20 7b 0d 0a 20 20 20 20 20 20  x_info {..      
128f0 20 20 2f 2f 2f 20 20 20 20 2f 2a 20 49 6e 70 75    ///    /* Inpu
12900 74 73 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  ts */..        /
12910 2f 2f 20 20 20 20 63 6f 6e 73 74 20 69 6e 74 20  //    const int 
12920 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 2f  nConstraint;   /
12930 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
12940 69 65 73 20 69 6e 20 61 43 6f 6e 73 74 72 61 69  ies in aConstrai
12950 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  nt */..        /
12960 2f 2f 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75  //    const stru
12970 63 74 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ct sqlite3_index
12980 5f 63 6f 6e 73 74 72 61 69 6e 74 20 7b 0d 0a 20  _constraint {.. 
12990 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
129a0 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
129b0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
129c0 20 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73 69   on left-hand si
129d0 64 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f  de of..        /
129e0 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  //              
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0d  * constraint */.
12a10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
12a20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72     unsigned char
12a30 20 6f 70 3b 20 20 20 20 20 2f 2a 20 43 6f 6e 73   op;     /* Cons
12a40 74 72 61 69 6e 74 20 6f 70 65 72 61 74 6f 72 20  traint operator 
12a50 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
12a60 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63        unsigned c
12a70 68 61 72 20 75 73 61 62 6c 65 3b 20 2f 2a 20 54  har usable; /* T
12a80 72 75 65 20 69 66 20 74 68 69 73 20 63 6f 6e 73  rue if this cons
12a90 74 72 61 69 6e 74 20 69 73 20 75 73 61 62 6c 65  traint is usable
12aa0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
12ab0 20 20 20 20 20 20 20 69 6e 74 20 69 54 65 72 6d         int iTerm
12ac0 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
12ad0 55 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  Used internally 
12ae0 2d 20 78 42 65 73 74 49 6e 64 65 78 20 73 68 6f  - xBestIndex sho
12af0 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  uld..        ///
12b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20                * 
12b20 69 67 6e 6f 72 65 20 2a 2f 0d 0a 20 20 20 20 20  ignore */..     
12b30 20 20 20 2f 2f 2f 20 20 20 20 7d 20 2a 63 6f 6e     ///    } *con
12b40 73 74 20 61 43 6f 6e 73 74 72 61 69 6e 74 3b 20  st aConstraint; 
12b50 20 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 57     /* Table of W
12b60 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f 6e 73  HERE clause cons
12b70 74 72 61 69 6e 74 73 20 2a 2f 0d 0a 20 20 20 20  traints */..    
12b80 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73 74      ///    const
12b90 20 69 6e 74 20 6e 4f 72 64 65 72 42 79 3b 20 20   int nOrderBy;  
12ba0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12bb0 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 4f 52   terms in the OR
12bc0 44 45 52 20 42 59 0d 0a 20 20 20 20 20 20 20 20  DER BY..        
12bd0 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20  ///             
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bf0 20 2a 20 63 6c 61 75 73 65 20 2a 2f 0d 0a 20 20   * clause */..  
12c00 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e        ///    con
12c10 73 74 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  st struct sqlite
12c20 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20  3_index_orderby 
12c30 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  {..        ///  
12c40 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e       int iColumn
12c50 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
12c60 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0d 0a  lumn number */..
12c70 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
12c80 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20    unsigned char 
12c90 64 65 73 63 3b 20 20 20 2f 2a 20 54 72 75 65 20  desc;   /* True 
12ca0 66 6f 72 20 44 45 53 43 2e 20 20 46 61 6c 73 65  for DESC.  False
12cb0 20 66 6f 72 20 41 53 43 2e 20 2a 2f 0d 0a 20 20   for ASC. */..  
12cc0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 7d 20 2a        ///    } *
12cd0 63 6f 6e 73 74 20 61 4f 72 64 65 72 42 79 3b 20  const aOrderBy; 
12ce0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44        /* The ORD
12cf0 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0d  ER BY clause */.
12d00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
12d10 2f 2a 20 4f 75 74 70 75 74 73 20 2a 2f 0d 0a 20  /* Outputs */.. 
12d20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 73 74         ///    st
12d30 72 75 63 74 20 73 71 6c 69 74 65 33 5f 69 6e 64  ruct sqlite3_ind
12d40 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73  ex_constraint_us
12d50 61 67 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f  age {..        /
12d60 2f 2f 20 20 20 20 20 20 69 6e 74 20 61 72 67 76  //      int argv
12d70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f  Index;         /
12d80 2a 20 69 66 20 67 72 65 61 74 65 72 20 74 68 61  * if greater tha
12d90 6e 20 7a 65 72 6f 2c 20 63 6f 6e 73 74 72 61 69  n zero, constrai
12da0 6e 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f  nt is..        /
12db0 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  //              
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 2a 20 70 61 72 74 20 6f 66 20 61 72 67 76 20 74  * part of argv t
12de0 6f 20 78 46 69 6c 74 65 72 20 2a 2f 0d 0a 20 20  o xFilter */..  
12df0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 75        ///      u
12e00 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 6d 69  nsigned char omi
12e10 74 3b 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  t;    /* Do not 
12e20 63 6f 64 65 20 61 20 74 65 73 74 20 66 6f 72 20  code a test for 
12e30 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  this..        //
12e40 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /               
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
12e60 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0d 0a   constraint */..
12e70 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 7d          ///    }
12e80 20 2a 63 6f 6e 73 74 20 61 43 6f 6e 73 74 72 61   *const aConstra
12e90 69 6e 74 55 73 61 67 65 3b 0d 0a 20 20 20 20 20  intUsage;..     
12ea0 20 20 20 2f 2f 2f 20 20 20 20 69 6e 74 20 69 64     ///    int id
12eb0 78 4e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  xNum;           
12ec0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 75 73 65     /* Number use
12ed0 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 74 68  d to identify th
12ee0 65 20 69 6e 64 65 78 20 2a 2f 0d 0a 20 20 20 20  e index */..    
12ef0 20 20 20 20 2f 2f 2f 20 20 20 20 63 68 61 72 20      ///    char 
12f00 2a 69 64 78 53 74 72 3b 20 20 20 20 20 20 20 20  *idxStr;        
12f10 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 2c 20 70      /* String, p
12f20 6f 73 73 69 62 6c 79 20 6f 62 74 61 69 6e 65 64  ossibly obtained
12f30 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 2f   from..        /
12f40 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  //              
12f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f60 2a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  * sqlite3_malloc
12f70 28 29 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  () */..        /
12f80 2f 2f 20 20 20 20 69 6e 74 20 6e 65 65 64 54 6f  //    int needTo
12f90 46 72 65 65 49 64 78 53 74 72 3b 20 20 20 20 2f  FreeIdxStr;    /
12fa0 2a 20 46 72 65 65 20 69 64 78 53 74 72 20 75 73  * Free idxStr us
12fb0 69 6e 67 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ing sqlite3_free
12fc0 28 29 20 69 66 0d 0a 20 20 20 20 20 20 20 20 2f  () if..        /
12fd0 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  //              
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 2a 20 74 72 75 65 20 2a 2f 0d 0a 20 20 20 20 20  * true */..     
13000 20 20 20 2f 2f 2f 20 20 20 20 69 6e 74 20 6f 72     ///    int or
13010 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 3b 20 20  derByConsumed;  
13020 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 75     /* True if ou
13030 74 70 75 74 20 69 73 20 61 6c 72 65 61 64 79 20  tput is already 
13040 6f 72 64 65 72 65 64 20 2a 2f 0d 0a 20 20 20 20  ordered */..    
13050 20 20 20 20 2f 2f 2f 20 20 20 20 64 6f 75 62 6c      ///    doubl
13060 65 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74 3b  e estimatedCost;
13070 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
13080 20 63 6f 73 74 20 6f 66 20 75 73 69 6e 67 20 74   cost of using t
13090 68 69 73 20 69 6e 64 65 78 20 2a 2f 0d 0a 20 20  his index */..  
130a0 20 20 20 20 20 20 2f 2f 2f 20 20 7d 3b 0d 0a 20        ///  };.. 
130b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
130c0 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
130d0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
130e0 2f 2f 2f 20 49 6e 20 61 64 64 69 74 69 6f 6e 2c  /// In addition,
130f0 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
13100 64 65 66 69 6e 65 64 20 63 6f 6e 73 74 61 6e 74  defined constant
13110 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s:..        /// 
13120 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
13130 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20   /// <code>..   
13140 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e       ///  #defin
13150 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43  e SQLITE_INDEX_C
13160 4f 4e 53 54 52 41 49 4e 54 5f 45 51 20 20 20 20  ONSTRAINT_EQ    
13170 32 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  2..        ///  
13180 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
13190 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
131a0 47 54 20 20 20 20 34 0d 0a 20 20 20 20 20 20 20  GT    4..       
131b0 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51   ///  #define SQ
131c0 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54  LITE_INDEX_CONST
131d0 52 41 49 4e 54 5f 4c 45 20 20 20 20 38 0d 0a 20  RAINT_LE    8.. 
131e0 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66         ///  #def
131f0 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58  ine SQLITE_INDEX
13200 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 4c 54 20 20  _CONSTRAINT_LT  
13210 20 20 31 36 0d 0a 20 20 20 20 20 20 20 20 2f 2f    16..        //
13220 2f 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  /  #define SQLIT
13230 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49  E_INDEX_CONSTRAI
13240 4e 54 5f 47 45 20 20 20 20 33 32 0d 0a 20 20 20  NT_GE    32..   
13250 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e       ///  #defin
13260 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43  e SQLITE_INDEX_C
13270 4f 4e 53 54 52 41 49 4e 54 5f 4d 41 54 43 48 20  ONSTRAINT_MATCH 
13280 36 34 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  64..        /// 
13290 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20  </code>..       
132a0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
132b0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c       /// The SQL
132c0 69 74 65 20 63 6f 72 65 20 63 61 6c 6c 73 20 74  ite core calls t
132d0 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
132e0 74 68 6f 64 20 77 68 65 6e 20 69 74 20 69 73 20  thod when it is 
132f0 63 6f 6d 70 69 6c 69 6e 67 20 61 0d 0a 20 20 20  compiling a..   
13300 20 20 20 20 20 2f 2f 2f 20 71 75 65 72 79 20 74       /// query t
13310 68 61 74 20 69 6e 76 6f 6c 76 65 73 20 61 20 76  hat involves a v
13320 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 49 6e  irtual table. In
13330 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 51   other words, SQ
13340 4c 69 74 65 20 63 61 6c 6c 73 0d 0a 20 20 20 20  Lite calls..    
13350 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74      /// this met
13360 68 6f 64 20 77 68 65 6e 20 69 74 20 69 73 20 72  hod when it is r
13370 75 6e 6e 69 6e 67 20 73 71 6c 69 74 65 33 5f 70  unning sqlite3_p
13380 72 65 70 61 72 65 28 29 20 6f 72 20 74 68 65 20  repare() or the 
13390 65 71 75 69 76 61 6c 65 6e 74 2e 0d 0a 20 20 20  equivalent...   
133a0 20 20 20 20 20 2f 2f 2f 20 42 79 20 63 61 6c 6c       /// By call
133b0 69 6e 67 20 74 68 69 73 20 6d 65 74 68 6f 64 2c  ing this method,
133c0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
133d0 20 69 73 20 73 61 79 69 6e 67 20 74 6f 20 74 68   is saying to th
133e0 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20  e virtual..     
133f0 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 74 68 61     /// table tha
13400 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 61 63  t it needs to ac
13410 63 65 73 73 20 73 6f 6d 65 20 73 75 62 73 65 74  cess some subset
13420 20 6f 66 20 74 68 65 20 72 6f 77 73 20 69 6e 20   of the rows in 
13430 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
13440 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 61   virtual table a
13450 6e 64 20 69 74 20 77 61 6e 74 73 20 74 6f 20 6b  nd it wants to k
13460 6e 6f 77 20 74 68 65 20 6d 6f 73 74 20 65 66 66  now the most eff
13470 69 63 69 65 6e 74 20 77 61 79 20 74 6f 20 64 6f  icient way to do
13480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
13490 61 74 20 61 63 63 65 73 73 2e 20 54 68 65 20 78  at access. The x
134a0 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
134b0 20 72 65 70 6c 69 65 73 20 77 69 74 68 20 69 6e   replies with in
134c0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0d 0a  formation that..
134d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
134e0 53 51 4c 69 74 65 20 63 6f 72 65 20 63 61 6e 20  SQLite core can 
134f0 74 68 65 6e 20 75 73 65 20 74 6f 20 63 6f 6e 64  then use to cond
13500 75 63 74 20 61 6e 20 65 66 66 69 63 69 65 6e 74  uct an efficient
13510 20 73 65 61 72 63 68 20 6f 66 20 74 68 65 0d 0a   search of the..
13520 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74          /// virt
13530 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
13540 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
13550 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
13560 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
13570 20 57 68 69 6c 65 20 63 6f 6d 70 69 6c 69 6e 67   While compiling
13580 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 71 75   a single SQL qu
13590 65 72 79 2c 20 74 68 65 20 53 51 4c 69 74 65 20  ery, the SQLite 
135a0 63 6f 72 65 20 6d 69 67 68 74 20 63 61 6c 6c 0d  core might call.
135b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 42 65  .        /// xBe
135c0 73 74 49 6e 64 65 78 20 6d 75 6c 74 69 70 6c 65  stIndex multiple
135d0 20 74 69 6d 65 73 20 77 69 74 68 20 64 69 66 66   times with diff
135e0 65 72 65 6e 74 20 73 65 74 74 69 6e 67 73 20 69  erent settings i
135f0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  n..        /// s
13600 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
13610 6f 2e 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f  o. The SQLite co
13620 72 65 20 77 69 6c 6c 20 74 68 65 6e 20 73 65 6c  re will then sel
13630 65 63 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ect the..       
13640 20 2f 2f 2f 20 63 6f 6d 62 69 6e 61 74 69 6f 6e   /// combination
13650 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f   that appears to
13660 20 67 69 76 65 20 74 68 65 20 62 65 73 74 20 70   give the best p
13670 65 72 66 6f 72 6d 61 6e 63 65 2e 0d 0a 20 20 20  erformance...   
13680 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
13690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
136a0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
136b0 2f 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67  / Before calling
136c0 20 74 68 69 73 20 6d 65 74 68 6f 64 2c 20 74 68   this method, th
136d0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69 6e  e SQLite core in
136e0 69 74 69 61 6c 69 7a 65 73 20 61 6e 20 69 6e 73  itializes an ins
136f0 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  tance..        /
13700 2f 2f 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  // of the sqlite
13710 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72  3_index_info str
13720 75 63 74 75 72 65 20 77 69 74 68 20 69 6e 66 6f  ucture with info
13730 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
13740 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 71  e..        /// q
13750 75 65 72 79 20 74 68 61 74 20 69 74 20 69 73 20  uery that it is 
13760 63 75 72 72 65 6e 74 6c 79 20 74 72 79 69 6e 67  currently trying
13770 20 74 6f 20 70 72 6f 63 65 73 73 2e 20 54 68 69   to process. Thi
13780 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20  s information.. 
13790 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 72 69 76         /// deriv
137a0 65 73 20 6d 61 69 6e 6c 79 20 66 72 6f 6d 20 74  es mainly from t
137b0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
137c0 61 6e 64 20 4f 52 44 45 52 20 42 59 20 6f 72 20  and ORDER BY or 
137d0 47 52 4f 55 50 20 42 59 0d 0a 20 20 20 20 20 20  GROUP BY..      
137e0 20 20 2f 2f 2f 20 63 6c 61 75 73 65 73 20 6f 66    /// clauses of
137f0 20 74 68 65 20 71 75 65 72 79 2c 20 62 75 74 20   the query, but 
13800 61 6c 73 6f 20 66 72 6f 6d 20 61 6e 79 20 4f 4e  also from any ON
13810 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
13820 73 20 69 66 20 74 68 65 0d 0a 20 20 20 20 20 20  s if the..      
13830 20 20 2f 2f 2f 20 71 75 65 72 79 20 69 73 20 61    /// query is a
13840 20 6a 6f 69 6e 2e 20 54 68 65 20 69 6e 66 6f 72   join. The infor
13850 6d 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20  mation that the 
13860 53 51 4c 69 74 65 20 63 6f 72 65 20 70 72 6f 76  SQLite core prov
13870 69 64 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20  ides to..       
13880 20 2f 2f 2f 20 74 68 65 20 78 42 65 73 74 49 6e   /// the xBestIn
13890 64 65 78 20 6d 65 74 68 6f 64 20 69 73 20 68 65  dex method is he
138a0 6c 64 20 69 6e 20 74 68 65 20 70 61 72 74 20 6f  ld in the part o
138b0 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 20  f the structure 
138c0 74 68 61 74 20 69 73 0d 0a 20 20 20 20 20 20 20  that is..       
138d0 20 2f 2f 2f 20 6d 61 72 6b 65 64 20 61 73 20 22   /// marked as "
138e0 49 6e 70 75 74 73 22 2e 20 54 68 65 20 22 4f 75  Inputs". The "Ou
138f0 74 70 75 74 73 22 20 73 65 63 74 69 6f 6e 20 69  tputs" section i
13900 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  s initialized to
13910 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20   zero...        
13920 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
13930 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
13940 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
13950 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
13960 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  the sqlite3_inde
13970 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  x_info structure
13980 20 69 73 20 65 70 68 65 6d 65 72 61 6c 0d 0a 20   is ephemeral.. 
13990 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20 6d         /// and m
139a0 61 79 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ay be overwritte
139b0 6e 20 6f 72 20 64 65 61 6c 6c 6f 63 61 74 65 64  n or deallocated
139c0 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20   as soon as the 
139d0 78 42 65 73 74 49 6e 64 65 78 0d 0a 20 20 20 20  xBestIndex..    
139e0 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 72      /// method r
139f0 65 74 75 72 6e 73 2e 20 49 66 20 74 68 65 20 78  eturns. If the x
13a00 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
13a10 20 6e 65 65 64 73 20 74 6f 20 72 65 6d 65 6d 62   needs to rememb
13a20 65 72 20 61 6e 79 20 70 61 72 74 0d 0a 20 20 20  er any part..   
13a30 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20       /// of the 
13a40 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
13a50 66 6f 20 73 74 72 75 63 74 75 72 65 2c 20 69 74  fo structure, it
13a60 20 73 68 6f 75 6c 64 20 6d 61 6b 65 20 61 20 63   should make a c
13a70 6f 70 79 2e 20 43 61 72 65 0d 0a 20 20 20 20 20  opy. Care..     
13a80 20 20 20 2f 2f 2f 20 6d 75 73 74 20 62 65 20 74     /// must be t
13a90 61 6b 65 20 74 6f 20 73 74 6f 72 65 20 74 68 65  ake to store the
13aa0 20 63 6f 70 79 20 69 6e 20 61 20 70 6c 61 63 65   copy in a place
13ab0 20 77 68 65 72 65 20 69 74 20 77 69 6c 6c 20 62   where it will b
13ac0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  e..        /// d
13ad0 65 61 6c 6c 6f 63 61 74 65 64 2c 20 73 75 63 68  eallocated, such
13ae0 20 61 73 20 69 6e 20 74 68 65 20 69 64 78 53 74   as in the idxSt
13af0 72 20 66 69 65 6c 64 20 77 69 74 68 20 6e 65 65  r field with nee
13b00 64 54 6f 46 72 65 65 49 64 78 53 74 72 20 73 65  dToFreeIdxStr se
13b10 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  t..        /// t
13b20 6f 20 31 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o 1...        //
13b30 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
13b40 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
13b50 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 74 65 20         /// Note 
13b60 74 68 61 74 20 78 42 65 73 74 49 6e 64 65 78 20  that xBestIndex 
13b70 77 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 63  will always be c
13b80 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 78 46 69  alled before xFi
13b90 6c 74 65 72 2c 20 73 69 6e 63 65 0d 0a 20 20 20  lter, since..   
13ba0 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 69 64 78       /// the idx
13bb0 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72 20 6f  Num and idxStr o
13bc0 75 74 70 75 74 73 20 66 72 6f 6d 20 78 42 65 73  utputs from xBes
13bd0 74 49 6e 64 65 78 20 61 72 65 20 72 65 71 75 69  tIndex are requi
13be0 72 65 64 20 69 6e 70 75 74 73 0d 0a 20 20 20 20  red inputs..    
13bf0 20 20 20 20 2f 2f 2f 20 74 6f 20 78 46 69 6c 74      /// to xFilt
13c00 65 72 2e 20 48 6f 77 65 76 65 72 2c 20 74 68 65  er. However, the
13c10 72 65 20 69 73 20 6e 6f 20 67 75 61 72 61 6e 74  re is no guarant
13c20 65 65 20 74 68 61 74 20 78 46 69 6c 74 65 72 20  ee that xFilter 
13c30 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20  will be..       
13c40 20 2f 2f 2f 20 63 61 6c 6c 65 64 20 66 6f 6c 6c   /// called foll
13c50 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
13c60 75 6c 20 78 42 65 73 74 49 6e 64 65 78 2e 0d 0a  ul xBestIndex...
13c70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
13c80 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
13c90 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
13ca0 20 2f 2f 2f 20 54 68 65 20 78 42 65 73 74 49 6e   /// The xBestIn
13cb0 64 65 78 20 6d 65 74 68 6f 64 20 69 73 20 72 65  dex method is re
13cc0 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
13cd0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
13ce0 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
13cf0 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
13d00 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
13d10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
13d20 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13d30 2f 20 32 2e 33 2e 31 20 49 6e 70 75 74 73 0d 0a  / 2.3.1 Inputs..
13d40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
13d50 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
13d60 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
13d70 20 2f 2f 2f 20 54 68 65 20 6d 61 69 6e 20 74 68   /// The main th
13d80 69 6e 67 20 74 68 61 74 20 74 68 65 20 53 51 4c  ing that the SQL
13d90 69 74 65 20 63 6f 72 65 20 69 73 20 74 72 79 69  ite core is tryi
13da0 6e 67 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ng to communicat
13db0 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
13dc0 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61    /// virtual ta
13dd0 62 6c 65 20 69 73 20 74 68 65 20 63 6f 6e 73 74  ble is the const
13de0 72 61 69 6e 74 73 20 74 68 61 74 20 61 72 65 20  raints that are 
13df0 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 6c 69 6d  available to lim
13e00 69 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  it the..        
13e10 2f 2f 2f 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  /// number of ro
13e20 77 73 20 74 68 61 74 20 6e 65 65 64 20 74 6f 20  ws that need to 
13e30 62 65 20 73 65 61 72 63 68 65 64 2e 20 54 68 65  be searched. The
13e40 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 61   aConstraint[] a
13e50 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rray..        //
13e60 2f 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 65  / contains one e
13e70 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f  ntry for each co
13e80 6e 73 74 72 61 69 6e 74 2e 20 54 68 65 72 65 20  nstraint. There 
13e90 77 69 6c 6c 20 62 65 20 65 78 61 63 74 6c 79 0d  will be exactly.
13ea0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 43 6f  .        /// nCo
13eb0 6e 73 74 72 61 69 6e 74 20 65 6e 74 72 69 65 73  nstraint entries
13ec0 20 69 6e 20 74 68 61 74 20 61 72 72 61 79 2e 0d   in that array..
13ed0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
13ee0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13ef0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
13f00 20 20 2f 2f 2f 20 45 61 63 68 20 63 6f 6e 73 74    /// Each const
13f10 72 61 69 6e 74 20 77 69 6c 6c 20 63 6f 72 72 65  raint will corre
13f20 73 70 6f 6e 64 20 74 6f 20 61 20 74 65 72 6d 20  spond to a term 
13f30 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  in the WHERE cla
13f40 75 73 65 20 6f 72 20 69 6e 0d 0a 20 20 20 20 20  use or in..     
13f50 20 20 20 2f 2f 2f 20 61 20 55 53 49 4e 47 20 6f     /// a USING o
13f60 72 20 4f 4e 20 63 6c 61 75 73 65 20 74 68 61 74  r ON clause that
13f70 20 69 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 0d   is of the form.
13f80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
13f90 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13fa0 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
13fb0 20 20 2f 2f 2f 20 20 20 20 20 63 6f 6c 75 6d 6e    ///     column
13fc0 20 4f 50 20 45 58 50 52 0d 0a 20 20 20 20 20 20   OP EXPR..      
13fd0 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20    /// </code>.. 
13fe0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
13ff0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 57  >..        /// W
14000 68 65 72 65 20 22 63 6f 6c 75 6d 6e 22 20 69 73  here "column" is
14010 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65   a column in the
14020 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20   virtual table, 
14030 4f 50 20 69 73 20 61 6e 20 6f 70 65 72 61 74 6f  OP is an operato
14040 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  r..        /// l
14050 69 6b 65 20 22 3d 22 20 6f 72 20 22 26 6c 74 3b  ike "=" or "&lt;
14060 22 2c 20 61 6e 64 20 45 58 50 52 20 69 73 20 61  ", and EXPR is a
14070 6e 20 61 72 62 69 74 72 61 72 79 20 65 78 70 72  n arbitrary expr
14080 65 73 73 69 6f 6e 2e 20 53 6f 2c 20 66 6f 72 0d  ession. So, for.
14090 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 78 61  .        /// exa
140a0 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 57 48 45  mple, if the WHE
140b0 52 45 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69  RE clause contai
140c0 6e 65 64 20 61 20 74 65 72 6d 20 6c 69 6b 65 20  ned a term like 
140d0 74 68 69 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f  this:..        /
140e0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
140f0 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
14100 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
14110 20 20 20 20 20 61 20 3d 20 35 0d 0a 20 20 20 20       a = 5..    
14120 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d      /// </code>.
14130 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
14140 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
14150 20 54 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65   Then one of the
14160 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 6f 75   constraints wou
14170 6c 64 20 62 65 20 6f 6e 20 74 68 65 20 22 61 22  ld be on the "a"
14180 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0d 0a 20 20   column with..  
14190 20 20 20 20 20 20 2f 2f 2f 20 6f 70 65 72 61 74        /// operat
141a0 6f 72 20 22 3d 22 20 61 6e 64 20 61 6e 20 65 78  or "=" and an ex
141b0 70 72 65 73 73 69 6f 6e 20 6f 66 20 22 35 22 2e  pression of "5".
141c0 20 43 6f 6e 73 74 72 61 69 6e 74 73 20 6e 65 65   Constraints nee
141d0 64 20 6e 6f 74 20 68 61 76 65 20 61 0d 0a 20 20  d not have a..  
141e0 20 20 20 20 20 20 2f 2f 2f 20 6c 69 74 65 72 61        /// litera
141f0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
14200 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 63 6c   of the WHERE cl
14210 61 75 73 65 2e 20 54 68 65 20 71 75 65 72 79 20  ause. The query 
14220 6f 70 74 69 6d 69 7a 65 72 0d 0a 20 20 20 20 20  optimizer..     
14230 20 20 20 2f 2f 2f 20 6d 69 67 68 74 20 6d 61 6b     /// might mak
14240 65 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  e transformation
14250 73 20 74 6f 20 74 68 65 20 57 48 45 52 45 20 63  s to the WHERE c
14260 6c 61 75 73 65 20 69 6e 20 6f 72 64 65 72 20 74  lause in order t
14270 6f 20 65 78 74 72 61 63 74 0d 0a 20 20 20 20 20  o extract..     
14280 20 20 20 2f 2f 2f 20 61 73 20 6d 61 6e 79 20 63     /// as many c
14290 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20 69 74  onstraints as it
142a0 20 63 61 6e 2e 20 53 6f 2c 20 66 6f 72 20 65 78   can. So, for ex
142b0 61 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 57 48  ample, if the WH
142c0 45 52 45 20 63 6c 61 75 73 65 0d 0a 20 20 20 20  ERE clause..    
142d0 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 65      /// containe
142e0 64 20 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65  d something like
142f0 20 74 68 69 73 3a 0d 0a 20 20 20 20 20 20 20 20   this:..        
14300 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
14310 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d       /// <code>.
14320 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
14330 20 20 20 20 20 20 78 20 42 45 54 57 45 45 4e 20        x BETWEEN 
14340 31 30 20 41 4e 44 20 31 30 30 20 41 4e 44 20 39  10 AND 100 AND 9
14350 39 39 26 67 74 3b 79 0d 0a 20 20 20 20 20 20 20  99&gt;y..       
14360 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
14370 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
14380 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
14390 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
143a0 72 20 6d 69 67 68 74 20 74 72 61 6e 73 6c 61 74  r might translat
143b0 65 20 74 68 69 73 20 69 6e 74 6f 20 74 68 72 65  e this into thre
143c0 65 20 73 65 70 61 72 61 74 65 0d 0a 20 20 20 20  e separate..    
143d0 20 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 61 69      /// constrai
143e0 6e 74 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nts:..        //
143f0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
14400 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20     /// <code>.. 
14410 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
14420 20 20 20 20 78 20 26 67 74 3b 3d 20 31 30 0d 0a      x &gt;= 10..
14430 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
14440 20 20 20 20 20 78 20 26 6c 74 3b 3d 20 31 30 30       x &lt;= 100
14450 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
14460 20 20 20 20 20 20 20 79 20 26 6c 74 3b 20 39 39         y &lt; 99
14470 39 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  9..        /// <
14480 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
14490 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
144a0 20 20 20 20 2f 2f 2f 20 46 6f 72 20 65 61 63 68      /// For each
144b0 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65   constraint, the
144c0 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 2e 69   aConstraint[].i
144d0 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 6e 64  Column field ind
144e0 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20  icates..        
144f0 2f 2f 2f 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e  /// which column
14500 20 61 70 70 65 61 72 73 20 6f 6e 20 74 68 65 20   appears on the 
14510 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  left-hand side o
14520 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  f the constraint
14530 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  . The..        /
14540 2f 2f 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  // first column 
14550 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  of the virtual t
14560 61 62 6c 65 20 69 73 20 63 6f 6c 75 6d 6e 20 30  able is column 0
14570 2e 20 54 68 65 20 72 6f 77 69 64 20 6f 66 20 74  . The rowid of t
14580 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
14590 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
145a0 20 63 6f 6c 75 6d 6e 20 2d 31 2e 20 54 68 65 20   column -1. The 
145b0 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 2e 6f 70  aConstraint[].op
145c0 20 66 69 65 6c 64 20 69 6e 64 69 63 61 74 65 73   field indicates
145d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68  ..        /// wh
145e0 69 63 68 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ich operator is 
145f0 75 73 65 64 2e 20 54 68 65 20 53 51 4c 49 54 45  used. The SQLITE
14600 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e  _INDEX_CONSTRAIN
14610 54 5f 2a 20 63 6f 6e 73 74 61 6e 74 73 20 6d 61  T_* constants ma
14620 70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  p..        /// i
14630 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e 74 73  nteger constants
14640 20 69 6e 74 6f 20 6f 70 65 72 61 74 6f 72 20 76   into operator v
14650 61 6c 75 65 73 2e 20 43 6f 6c 75 6d 6e 73 20 6f  alues. Columns o
14660 63 63 75 72 20 69 6e 20 74 68 65 20 6f 72 64 65  ccur in the orde
14670 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  r..        /// t
14680 68 65 79 20 77 65 72 65 20 64 65 66 69 6e 65 64  hey were defined
14690 20 62 79 20 74 68 65 20 63 61 6c 6c 20 74 6f 20   by the call to 
146a0 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
146b0 76 74 61 62 28 29 20 69 6e 20 74 68 65 0d 0a 20  vtab() in the.. 
146c0 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 72 65 61         /// xCrea
146d0 74 65 20 6f 72 20 78 43 6f 6e 6e 65 63 74 20 6d  te or xConnect m
146e0 65 74 68 6f 64 2e 20 48 69 64 64 65 6e 20 63 6f  ethod. Hidden co
146f0 6c 75 6d 6e 73 20 61 72 65 20 63 6f 75 6e 74 65  lumns are counte
14700 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20  d when..        
14710 2f 2f 2f 20 64 65 74 65 72 6d 69 6e 69 6e 67 20  /// determining 
14720 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  the column index
14730 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
14740 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
14750 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
14760 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 43 6f 6e      /// The aCon
14770 73 74 72 61 69 6e 74 5b 5d 20 61 72 72 61 79 20  straint[] array 
14780 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
14790 74 69 6f 6e 20 61 62 6f 75 74 20 61 6c 6c 20 63  tion about all c
147a0 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 20  onstraints..    
147b0 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 61 70 70      /// that app
147c0 6c 79 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  ly to the virtua
147d0 6c 20 74 61 62 6c 65 2e 20 42 75 74 20 73 6f 6d  l table. But som
147e0 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
147f0 69 6e 74 73 20 6d 69 67 68 74 0d 0a 20 20 20 20  ints might..    
14800 20 20 20 20 2f 2f 2f 20 6e 6f 74 20 62 65 20 75      /// not be u
14810 73 61 62 6c 65 20 62 65 63 61 75 73 65 20 6f 66  sable because of
14820 20 74 68 65 20 77 61 79 20 74 61 62 6c 65 73 20   the way tables 
14830 61 72 65 20 6f 72 64 65 72 65 64 20 69 6e 20 61  are ordered in a
14840 20 6a 6f 69 6e 2e 20 54 68 65 0d 0a 20 20 20 20   join. The..    
14850 20 20 20 20 2f 2f 2f 20 78 42 65 73 74 49 6e 64      /// xBestInd
14860 65 78 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 74  ex method must t
14870 68 65 72 65 66 6f 72 65 20 6f 6e 6c 79 20 63 6f  herefore only co
14880 6e 73 69 64 65 72 20 63 6f 6e 73 74 72 61 69 6e  nsider constrain
14890 74 73 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20  ts that..       
148a0 20 2f 2f 2f 20 68 61 76 65 20 61 6e 20 61 43 6f   /// have an aCo
148b0 6e 73 74 72 61 69 6e 74 5b 5d 2e 75 73 61 62 6c  nstraint[].usabl
148c0 65 20 66 6c 61 67 20 77 68 69 63 68 20 69 73 20  e flag which is 
148d0 74 72 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  true...        /
148e0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
148f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
14900 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 6e 20 61          /// In a
14910 64 64 69 74 69 6f 6e 20 74 6f 20 57 48 45 52 45  ddition to WHERE
14920 20 63 6c 61 75 73 65 20 63 6f 6e 73 74 72 61 69   clause constrai
14930 6e 74 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20  nts, the SQLite 
14940 63 6f 72 65 20 61 6c 73 6f 20 74 65 6c 6c 73 0d  core also tells.
14950 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
14960 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68   xBestIndex meth
14970 6f 64 20 61 62 6f 75 74 20 74 68 65 20 4f 52 44  od about the ORD
14980 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 28 49  ER BY clause. (I
14990 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 0d 0a  n an aggregate..
149a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 71 75 65 72          /// quer
149b0 79 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  y, the SQLite co
149c0 72 65 20 6d 69 67 68 74 20 70 75 74 20 69 6e 20  re might put in 
149d0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
149e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 0d 0a  information in..
149f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 6c 61 63          /// plac
14a00 65 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42  e of the ORDER B
14a10 59 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61  Y clause informa
14a20 74 69 6f 6e 2c 20 62 75 74 20 74 68 69 73 20 66  tion, but this f
14a30 61 63 74 20 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a  act should not..
14a40 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 61 6b 65          /// make
14a50 20 61 6e 79 20 64 69 66 66 65 72 65 6e 63 65 20   any difference 
14a60 74 6f 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  to the xBestInde
14a70 78 20 6d 65 74 68 6f 64 2e 29 20 49 66 20 61 6c  x method.) If al
14a80 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0d 0a  l terms of the..
14a90 20 20 20 20 20 20 20 20 2f 2f 2f 20 4f 52 44 45          /// ORDE
14aa0 52 20 42 59 20 63 6c 61 75 73 65 20 61 72 65 20  R BY clause are 
14ab0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 76  columns in the v
14ac0 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20 74 68  irtual table, th
14ad0 65 6e 20 6e 4f 72 64 65 72 42 79 0d 0a 20 20 20  en nOrderBy..   
14ae0 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 62 65       /// will be
14af0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74   the number of t
14b00 65 72 6d 73 20 69 6e 20 74 68 65 20 4f 52 44 45  erms in the ORDE
14b10 52 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20  R BY clause and 
14b20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
14b30 20 61 4f 72 64 65 72 42 79 5b 5d 20 61 72 72 61   aOrderBy[] arra
14b40 79 20 77 69 6c 6c 20 69 64 65 6e 74 69 66 79 20  y will identify 
14b50 74 68 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 65  the column for e
14b60 61 63 68 20 74 65 72 6d 20 69 6e 20 74 68 65 0d  ach term in the.
14b70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72 64  .        /// ord
14b80 65 72 20 62 79 20 63 6c 61 75 73 65 20 61 6e 64  er by clause and
14b90 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
14ba0 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 41  that column is A
14bb0 53 43 20 6f 72 20 44 45 53 43 2e 0d 0a 20 20 20  SC or DESC...   
14bc0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
14bd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
14be0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
14bf0 2f 20 32 2e 33 2e 32 20 4f 75 74 70 75 74 73 0d  / 2.3.2 Outputs.
14c00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
14c10 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
14c20 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
14c30 20 20 2f 2f 2f 20 47 69 76 65 6e 20 61 6c 6c 20    /// Given all 
14c40 6f 66 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  of the informati
14c50 6f 6e 20 61 62 6f 76 65 2c 20 74 68 65 20 6a 6f  on above, the jo
14c60 62 20 6f 66 20 74 68 65 20 78 42 65 73 74 49 6e  b of the xBestIn
14c70 64 65 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  dex..        ///
14c80 20 6d 65 74 68 6f 64 20 69 74 20 74 6f 20 66 69   method it to fi
14c90 67 75 72 65 20 6f 75 74 20 74 68 65 20 62 65 73  gure out the bes
14ca0 74 20 77 61 79 20 74 6f 20 73 65 61 72 63 68 20  t way to search 
14cb0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
14cc0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
14cd0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
14ce0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
14cf0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65       /// The xBe
14d00 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 66  stIndex method f
14d10 69 6c 6c 73 20 74 68 65 20 69 64 78 4e 75 6d 20  ills the idxNum 
14d20 61 6e 64 20 69 64 78 53 74 72 20 66 69 65 6c 64  and idxStr field
14d30 73 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  s with..        
14d40 2f 2f 2f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  /// information 
14d50 74 68 61 74 20 63 6f 6d 6d 75 6e 69 63 61 74 65  that communicate
14d60 73 20 61 6e 20 69 6e 64 65 78 69 6e 67 20 73 74  s an indexing st
14d70 72 61 74 65 67 79 20 74 6f 20 74 68 65 20 78 46  rategy to the xF
14d80 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20 20 2f  ilter..        /
14d90 2f 2f 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 69  // method. The i
14da0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 69 64  nformation in id
14db0 78 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72 20  xNum and idxStr 
14dc0 69 73 20 61 72 62 69 74 72 61 72 79 20 61 73 20  is arbitrary as 
14dd0 66 61 72 20 61 73 0d 0a 20 20 20 20 20 20 20 20  far as..        
14de0 2f 2f 2f 20 74 68 65 20 53 51 4c 69 74 65 20 63  /// the SQLite c
14df0 6f 72 65 20 69 73 20 63 6f 6e 63 65 72 6e 65 64  ore is concerned
14e00 2e 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72  . The SQLite cor
14e10 65 20 6a 75 73 74 20 63 6f 70 69 65 73 20 74 68  e just copies th
14e20 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
14e30 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 72 6f 75  nformation throu
14e40 67 68 20 74 6f 20 74 68 65 20 78 46 69 6c 74 65  gh to the xFilte
14e50 72 20 6d 65 74 68 6f 64 2e 20 41 6e 79 20 64 65  r method. Any de
14e60 73 69 72 65 64 20 6d 65 61 6e 69 6e 67 20 63 61  sired meaning ca
14e70 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62  n..        /// b
14e80 65 20 61 73 73 69 67 6e 65 64 20 74 6f 20 69 64  e assigned to id
14e90 78 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72 20  xNum and idxStr 
14ea0 61 73 20 6c 6f 6e 67 20 61 73 20 78 42 65 73 74  as long as xBest
14eb0 49 6e 64 65 78 20 61 6e 64 20 78 46 69 6c 74 65  Index and xFilte
14ec0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  r..        /// a
14ed0 67 72 65 65 20 6f 6e 20 77 68 61 74 20 74 68 61  gree on what tha
14ee0 74 20 6d 65 61 6e 69 6e 67 20 69 73 2e 0d 0a 20  t meaning is... 
14ef0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
14f00 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14f10 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
14f20 2f 2f 2f 20 54 68 65 20 69 64 78 53 74 72 20 76  /// The idxStr v
14f30 61 6c 75 65 20 6d 61 79 20 62 65 20 61 20 73 74  alue may be a st
14f40 72 69 6e 67 20 6f 62 74 61 69 6e 65 64 20 66 72  ring obtained fr
14f50 6f 6d 20 61 6e 20 53 51 4c 69 74 65 20 6d 65 6d  om an SQLite mem
14f60 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ory..        ///
14f70 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 75 6e 63   allocation func
14f80 74 69 6f 6e 20 73 75 63 68 20 61 73 20 73 71 6c  tion such as sql
14f90 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 2e 20  ite3_mprintf(). 
14fa0 49 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  If this is the c
14fb0 61 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ase,..        //
14fc0 2f 20 74 68 65 6e 20 74 68 65 20 6e 65 65 64 54  / then the needT
14fd0 6f 46 72 65 65 49 64 78 53 74 72 20 66 6c 61 67  oFreeIdxStr flag
14fe0 20 6d 75 73 74 20 62 65 20 73 65 74 20 74 6f 20   must be set to 
14ff0 74 72 75 65 20 73 6f 20 74 68 61 74 20 74 68 65  true so that the
15000 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 51  ..        /// SQ
15010 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 6b  Lite core will k
15020 6e 6f 77 20 74 6f 20 63 61 6c 6c 20 73 71 6c 69  now to call sqli
15030 74 65 33 5f 66 72 65 65 28 29 20 6f 6e 20 74 68  te3_free() on th
15040 61 74 20 73 74 72 69 6e 67 20 77 68 65 6e 20 69  at string when i
15050 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68  t..        /// h
15060 61 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  as finished with
15070 20 69 74 2c 20 61 6e 64 20 74 68 75 73 20 61 76   it, and thus av
15080 6f 69 64 20 61 20 6d 65 6d 6f 72 79 20 6c 65 61  oid a memory lea
15090 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  k...        /// 
150a0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
150b0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
150c0 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20       /// If the 
150d0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 69  virtual table wi
150e0 6c 6c 20 6f 75 74 70 75 74 20 72 6f 77 73 20 69  ll output rows i
150f0 6e 20 74 68 65 20 6f 72 64 65 72 20 73 70 65 63  n the order spec
15100 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20  ified by the..  
15110 20 20 20 20 20 20 2f 2f 2f 20 4f 52 44 45 52 20        /// ORDER 
15120 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
15130 74 68 65 20 6f 72 64 65 72 42 79 43 6f 6e 73 75  the orderByConsu
15140 6d 65 64 20 66 6c 61 67 20 6d 61 79 20 62 65 20  med flag may be 
15150 73 65 74 20 74 6f 20 74 72 75 65 2e 0d 0a 20 20  set to true...  
15160 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65        /// If the
15170 20 6f 75 74 70 75 74 20 69 73 20 6e 6f 74 20 61   output is not a
15180 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e 20  utomatically in 
15190 74 68 65 20 63 6f 72 72 65 63 74 20 6f 72 64 65  the correct orde
151a0 72 20 74 68 65 6e 0d 0a 20 20 20 20 20 20 20 20  r then..        
151b0 2f 2f 2f 20 6f 72 64 65 72 42 79 43 6f 6e 73 75  /// orderByConsu
151c0 6d 65 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74  med must be left
151d0 20 69 6e 20 69 74 73 20 64 65 66 61 75 6c 74 20   in its default 
151e0 66 61 6c 73 65 20 73 65 74 74 69 6e 67 2e 20 54  false setting. T
151f0 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
15200 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 74   will indicate t
15210 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  o the SQLite cor
15220 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 6e  e that it will n
15230 65 65 64 20 74 6f 20 64 6f 20 61 20 73 65 70 61  eed to do a sepa
15240 72 61 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rate..        //
15250 2f 20 73 6f 72 74 69 6e 67 20 70 61 73 73 20 6f  / sorting pass o
15260 76 65 72 20 74 68 65 20 64 61 74 61 20 61 66 74  ver the data aft
15270 65 72 20 69 74 20 63 6f 6d 65 73 20 6f 75 74 20  er it comes out 
15280 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  of the virtual t
15290 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
152a0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
152b0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
152c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
152d0 65 73 74 69 6d 61 74 65 64 43 6f 73 74 20 66 69  estimatedCost fi
152e0 65 6c 64 20 73 68 6f 75 6c 64 20 62 65 20 73 65  eld should be se
152f0 74 20 74 6f 20 74 68 65 20 65 73 74 69 6d 61 74  t to the estimat
15300 65 64 20 6e 75 6d 62 65 72 20 6f 66 0d 0a 20 20  ed number of..  
15310 20 20 20 20 20 20 2f 2f 2f 20 64 69 73 6b 20 61        /// disk a
15320 63 63 65 73 73 20 6f 70 65 72 61 74 69 6f 6e 73  ccess operations
15330 20 72 65 71 75 69 72 65 64 20 74 6f 20 65 78 65   required to exe
15340 63 75 74 65 20 74 68 69 73 20 71 75 65 72 79 20  cute this query 
15350 61 67 61 69 6e 73 74 20 74 68 65 0d 0a 20 20 20  against the..   
15360 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c       /// virtual
15370 20 74 61 62 6c 65 2e 20 54 68 65 20 53 51 4c 69   table. The SQLi
15380 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 6f 66 74  te core will oft
15390 65 6e 20 63 61 6c 6c 20 78 42 65 73 74 49 6e 64  en call xBestInd
153a0 65 78 20 6d 75 6c 74 69 70 6c 65 0d 0a 20 20 20  ex multiple..   
153b0 20 20 20 20 20 2f 2f 2f 20 74 69 6d 65 73 20 77       /// times w
153c0 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 63 6f  ith different co
153d0 6e 73 74 72 61 69 6e 74 73 2c 20 6f 62 74 61 69  nstraints, obtai
153e0 6e 20 6d 75 6c 74 69 70 6c 65 20 63 6f 73 74 20  n multiple cost 
153f0 65 73 74 69 6d 61 74 65 73 2c 0d 0a 20 20 20 20  estimates,..    
15400 20 20 20 20 2f 2f 2f 20 74 68 65 6e 20 63 68 6f      /// then cho
15410 6f 73 65 20 74 68 65 20 71 75 65 72 79 20 70 6c  ose the query pl
15420 61 6e 20 74 68 61 74 20 67 69 76 65 73 20 74 68  an that gives th
15430 65 20 6c 6f 77 65 73 74 20 65 73 74 69 6d 61 74  e lowest estimat
15440 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
15450 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
15460 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
15470 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 43 6f       /// The aCo
15480 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 20  nstraintUsage[] 
15490 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 73 20 6f  array contains o
154a0 6e 65 20 65 6c 65 6d 65 6e 74 20 66 6f 72 20 65  ne element for e
154b0 61 63 68 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ach of the..    
154c0 20 20 20 20 2f 2f 2f 20 6e 43 6f 6e 73 74 72 61      /// nConstra
154d0 69 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  int constraints 
154e0 69 6e 20 74 68 65 20 69 6e 70 75 74 73 20 73 65  in the inputs se
154f0 63 74 69 6f 6e 20 6f 66 20 74 68 65 0d 0a 20 20  ction of the..  
15500 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
15510 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72  3_index_info str
15520 75 63 74 75 72 65 2e 20 54 68 65 20 61 43 6f 6e  ucture. The aCon
15530 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 20 61  straintUsage[] a
15540 72 72 61 79 20 69 73 20 75 73 65 64 0d 0a 20 20  rray is used..  
15550 20 20 20 20 20 20 2f 2f 2f 20 62 79 20 78 42 65        /// by xBe
15560 73 74 49 6e 64 65 78 20 74 6f 20 74 65 6c 6c 20  stIndex to tell 
15570 74 68 65 20 63 6f 72 65 20 68 6f 77 20 69 74 20  the core how it 
15580 69 73 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  is using the con
15590 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20  straints...     
155a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
155b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
155c0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
155d0 54 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d  The xBestIndex m
155e0 65 74 68 6f 64 20 6d 61 79 20 73 65 74 20 61 43  ethod may set aC
155f0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d  onstraintUsage[]
15600 2e 61 72 67 76 49 6e 64 65 78 20 65 6e 74 72 69  .argvIndex entri
15610 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  es..        /// 
15620 74 6f 20 76 61 6c 75 65 73 20 67 72 65 61 74 65  to values greate
15630 72 20 74 68 61 6e 20 6f 6e 65 2e 20 45 78 61 63  r than one. Exac
15640 74 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20 73 68  tly one entry sh
15650 6f 75 6c 64 20 62 65 20 73 65 74 20 74 6f 20 31  ould be set to 1
15660 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  ,..        /// a
15670 6e 6f 74 68 65 72 20 74 6f 20 32 2c 20 61 6e 6f  nother to 2, ano
15680 74 68 65 72 20 74 6f 20 33 2c 20 61 6e 64 20 73  ther to 3, and s
15690 6f 20 66 6f 72 74 68 20 75 70 20 74 6f 20 61 73  o forth up to as
156a0 20 6d 61 6e 79 20 6f 72 20 61 73 20 66 65 77 20   many or as few 
156b0 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  as..        /// 
156c0 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d  the xBestIndex m
156d0 65 74 68 6f 64 20 77 61 6e 74 73 2e 20 54 68 65  ethod wants. The
156e0 20 45 58 50 52 20 6f 66 20 74 68 65 20 63 6f 72   EXPR of the cor
156f0 72 65 73 70 6f 6e 64 69 6e 67 0d 0a 20 20 20 20  responding..    
15700 20 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 61 69      /// constrai
15710 6e 74 73 20 77 69 6c 6c 20 74 68 65 6e 20 62 65  nts will then be
15720 20 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68   passed in as th
15730 65 20 61 72 67 76 5b 5d 20 70 61 72 61 6d 65 74  e argv[] paramet
15740 65 72 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ers to..        
15750 2f 2f 2f 20 78 46 69 6c 74 65 72 2e 0d 0a 20 20  /// xFilter...  
15760 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
15770 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15780 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15790 2f 2f 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  // For example, 
157a0 69 66 20 74 68 65 20 61 43 6f 6e 73 74 72 61 69  if the aConstrai
157b0 6e 74 5b 33 5d 2e 61 72 67 76 49 6e 64 65 78 20  nt[3].argvIndex 
157c0 69 73 20 73 65 74 20 74 6f 20 31 2c 20 74 68 65  is set to 1, the
157d0 6e 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20  n when..        
157e0 2f 2f 2f 20 78 46 69 6c 74 65 72 20 69 73 20 63  /// xFilter is c
157f0 61 6c 6c 65 64 2c 20 74 68 65 20 61 72 67 76 5b  alled, the argv[
15800 30 5d 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  0] passed to xFi
15810 6c 74 65 72 20 77 69 6c 6c 20 68 61 76 65 20 74  lter will have t
15820 68 65 20 45 58 50 52 0d 0a 20 20 20 20 20 20 20  he EXPR..       
15830 20 2f 2f 2f 20 76 61 6c 75 65 20 6f 66 20 74 68   /// value of th
15840 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 33 5d  e aConstraint[3]
15850 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20   constraint...  
15860 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
15870 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15880 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15890 2f 2f 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74  // By default, t
158a0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 64  he SQLite core d
158b0 6f 75 62 6c 65 20 63 68 65 63 6b 73 20 61 6c 6c  ouble checks all
158c0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20   constraints on 
158d0 65 61 63 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  each..        //
158e0 2f 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  / row of the vir
158f0 74 75 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20  tual table that 
15900 69 74 20 72 65 63 65 69 76 65 73 2e 20 49 66 20  it receives. If 
15910 73 75 63 68 20 61 20 63 68 65 63 6b 20 69 73 0d  such a check is.
15920 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 64  .        /// red
15930 75 6e 64 61 6e 74 2c 20 74 68 65 20 78 42 65 73  undant, the xBes
15940 74 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 63  tFilter method c
15950 61 6e 20 73 75 70 70 72 65 73 73 20 74 68 61 74  an suppress that
15960 20 64 6f 75 62 6c 65 2d 63 68 65 63 6b 20 62 79   double-check by
15970 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 65  ..        /// se
15980 74 74 69 6e 67 20 61 43 6f 6e 73 74 72 61 69 6e  tting aConstrain
15990 74 55 73 61 67 65 5b 5d 2e 6f 6d 69 74 2e 0d 0a  tUsage[].omit...
159a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
159b0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
159c0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
159d0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
159e0 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
159f0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
15a00 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
15a10 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
15a20 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
15a30 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
15a40 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
15a50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
15a60 61 6d 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20  ame="pIndex">.. 
15a70 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
15a80 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
15a90 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64   the sqlite3_ind
15aa0 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72  ex_info structur
15ab0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
15ac0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
15ad0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
15ae0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
15af0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
15b00 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
15b10 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
15b20 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
15b30 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42 65  iteErrorCode xBe
15b40 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20  stIndex(..      
15b50 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
15b60 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
15b70 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a   IntPtr pIndex..
15b80 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
15b90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
15ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15be0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
15bf0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
15c00 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
15c10 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
15c20 20 6d 65 74 68 6f 64 20 72 65 6c 65 61 73 65 73   method releases
15c30 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f   a connection to
15c40 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
15c50 2e 20 4f 6e 6c 79 20 74 68 65 0d 0a 20 20 20 20  . Only the..    
15c60 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
15c70 76 74 61 62 20 6f 62 6a 65 63 74 20 69 73 20 64  vtab object is d
15c80 65 73 74 72 6f 79 65 64 2e 20 54 68 65 20 76 69  estroyed. The vi
15c90 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 6e  rtual table is n
15ca0 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ot..        /// 
15cb0 64 65 73 74 72 6f 79 65 64 20 61 6e 64 20 61 6e  destroyed and an
15cc0 79 20 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 20  y backing store 
15cd0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
15ce0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
15cf0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  e..        /// p
15d00 65 72 73 69 73 74 73 2e 20 54 68 69 73 20 6d 65  ersists. This me
15d10 74 68 6f 64 20 75 6e 64 6f 65 73 20 74 68 65 20  thod undoes the 
15d20 77 6f 72 6b 20 6f 66 20 78 43 6f 6e 6e 65 63 74  work of xConnect
15d30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15d40 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
15d50 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
15d60 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
15d70 68 6f 64 20 69 73 20 61 20 64 65 73 74 72 75 63  hod is a destruc
15d80 74 6f 72 20 66 6f 72 20 61 20 63 6f 6e 6e 65 63  tor for a connec
15d90 74 69 6f 6e 20 74 6f 20 74 68 65 20 76 69 72 74  tion to the virt
15da0 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
15db0 20 20 20 20 2f 2f 2f 20 43 6f 6e 74 72 61 73 74      /// Contrast
15dc0 20 74 68 69 73 20 6d 65 74 68 6f 64 20 77 69 74   this method wit
15dd0 68 20 78 44 65 73 74 72 6f 79 2e 20 54 68 65 20  h xDestroy. The 
15de0 78 44 65 73 74 72 6f 79 20 69 73 20 61 20 64 65  xDestroy is a de
15df0 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
15e00 20 20 2f 2f 2f 20 66 6f 72 20 74 68 65 20 65 6e    /// for the en
15e10 74 69 72 65 20 76 69 72 74 75 61 6c 20 74 61 62  tire virtual tab
15e20 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
15e30 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
15e40 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
15e50 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 44        /// The xD
15e60 69 73 63 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64  isconnect method
15e70 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
15e80 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
15e90 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
15ea0 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
15eb0 2c 20 74 68 6f 75 67 68 20 69 74 20 69 73 20 61  , though it is a
15ec0 63 63 65 70 74 61 62 6c 65 20 66 6f 72 20 74 68  cceptable for th
15ed0 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 20 61 6e  e xDisconnect an
15ee0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  d..        /// x
15ef0 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 73 20  Destroy methods 
15f00 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 66  to be the same f
15f10 75 6e 63 74 69 6f 6e 20 69 66 20 74 68 61 74 20  unction if that 
15f20 6d 61 6b 65 73 20 73 65 6e 73 65 20 66 6f 72 0d  makes sense for.
15f30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
15f40 20 70 61 72 74 69 63 75 6c 61 72 20 76 69 72 74   particular virt
15f50 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
15f60 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
15f70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
15f80 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
15f90 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15fa0 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
15fb0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
15fc0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
15fd0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
15fe0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
15ff0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
16000 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
16010 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
16020 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
16030 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
16040 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
16050 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
16060 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
16070 65 45 72 72 6f 72 43 6f 64 65 20 78 44 69 73 63  eErrorCode xDisc
16080 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
16090 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
160a0 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
160b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
160c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16100 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
16110 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
16120 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
16130 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
16140 68 69 73 20 6d 65 74 68 6f 64 20 72 65 6c 65 61  his method relea
16150 73 65 73 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e  ses a connection
16160 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
16170 62 6c 65 2c 20 6a 75 73 74 20 6c 69 6b 65 20 74  ble, just like t
16180 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
16190 78 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 74 68  xDisconnect meth
161a0 6f 64 2c 20 61 6e 64 20 69 74 20 61 6c 73 6f 20  od, and it also 
161b0 64 65 73 74 72 6f 79 73 20 74 68 65 20 75 6e 64  destroys the und
161c0 65 72 6c 79 69 6e 67 20 74 61 62 6c 65 0d 0a 20  erlying table.. 
161d0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
161e0 6d 65 6e 74 61 74 69 6f 6e 2e 20 54 68 69 73 20  mentation. This 
161f0 6d 65 74 68 6f 64 20 75 6e 64 6f 65 73 20 74 68  method undoes th
16200 65 20 77 6f 72 6b 20 6f 66 20 78 43 72 65 61 74  e work of xCreat
16210 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
16220 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
16230 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
16240 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 44 69       /// The xDi
16250 73 63 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20  sconnect method 
16260 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e 65 76  is called whenev
16270 65 72 20 61 20 64 61 74 61 62 61 73 65 20 63 6f  er a database co
16280 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  nnection..      
16290 20 20 2f 2f 2f 20 74 68 61 74 20 75 73 65 73 20    /// that uses 
162a0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
162b0 69 73 20 63 6c 6f 73 65 64 2e 20 54 68 65 20 78  is closed. The x
162c0 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 20 69  Destroy method i
162d0 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  s only..        
162e0 2f 2f 2f 20 63 61 6c 6c 65 64 20 77 68 65 6e 20  /// called when 
162f0 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61  a DROP TABLE sta
16300 74 65 6d 65 6e 74 20 69 73 20 65 78 65 63 75 74  tement is execut
16310 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 76  ed against the v
16320 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20  irtual..        
16330 2f 2f 2f 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  /// table...    
16340 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
16350 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
16360 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
16370 20 54 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65   The xDestroy me
16380 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
16390 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
163a0 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
163b0 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
163c0 74 69 6f 6e 2c 20 74 68 6f 75 67 68 20 69 74 20  tion, though it 
163d0 69 73 20 61 63 63 65 70 74 61 62 6c 65 20 66 6f  is acceptable fo
163e0 72 20 74 68 65 20 78 44 69 73 63 6f 6e 6e 65 63  r the xDisconnec
163f0 74 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f  t and..        /
16400 2f 2f 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  // xDestroy meth
16410 6f 64 73 20 74 6f 20 62 65 20 74 68 65 20 73 61  ods to be the sa
16420 6d 65 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 74  me function if t
16430 68 61 74 20 6d 61 6b 65 73 20 73 65 6e 73 65 20  hat makes sense 
16440 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  for..        ///
16450 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
16460 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
16470 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
16480 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
16490 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
164a0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
164b0 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
164c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
164d0 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
164e0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
164f0 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
16500 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
16510 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16520 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
16530 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
16540 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
16550 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
16560 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
16570 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
16580 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
16590 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20  Destroy(..      
165a0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
165b0 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
165c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
165d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16610 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16620 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
16630 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
16640 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16650 54 68 65 20 78 4f 70 65 6e 20 6d 65 74 68 6f 64  The xOpen method
16660 20 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 63   creates a new c
16670 75 72 73 6f 72 20 75 73 65 64 20 66 6f 72 20 61  ursor used for a
16680 63 63 65 73 73 69 6e 67 20 28 72 65 61 64 0d 0a  ccessing (read..
16690 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 2f          /// and/
166a0 6f 72 20 77 72 69 74 69 6e 67 29 20 61 20 76 69  or writing) a vi
166b0 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 41 20 73  rtual table. A s
166c0 75 63 63 65 73 73 66 75 6c 20 69 6e 76 6f 63 61  uccessful invoca
166d0 74 69 6f 6e 20 6f 66 20 74 68 69 73 0d 0a 20 20  tion of this..  
166e0 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
166f0 20 77 69 6c 6c 20 61 6c 6c 6f 63 61 74 65 20 74   will allocate t
16700 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 74 68  he memory for th
16710 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
16720 75 72 73 6f 72 20 28 6f 72 20 61 0d 0a 20 20 20  ursor (or a..   
16730 20 20 20 20 20 2f 2f 2f 20 73 75 62 63 6c 61 73       /// subclas
16740 73 29 2c 20 69 6e 69 74 69 61 6c 69 7a 65 20 74  s), initialize t
16750 68 65 20 6e 65 77 20 6f 62 6a 65 63 74 2c 20 61  he new object, a
16760 6e 64 20 6d 61 6b 65 20 2a 70 70 43 75 72 73 6f  nd make *ppCurso
16770 72 20 70 6f 69 6e 74 20 74 6f 0d 0a 20 20 20 20  r point to..    
16780 20 20 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77 20      /// the new 
16790 6f 62 6a 65 63 74 2e 20 54 68 65 20 73 75 63 63  object. The succ
167a0 65 73 73 66 75 6c 20 63 61 6c 6c 20 74 68 65 6e  essful call then
167b0 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
167c0 4f 4b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  OK...        ///
167d0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
167e0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
167f0 20 20 20 20 20 20 2f 2f 2f 20 46 6f 72 20 65 76        /// For ev
16800 65 72 79 20 73 75 63 63 65 73 73 66 75 6c 20 63  ery successful c
16810 61 6c 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68  all to this meth
16820 6f 64 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63  od, the SQLite c
16830 6f 72 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20  ore will..      
16840 20 20 2f 2f 2f 20 6c 61 74 65 72 20 69 6e 76 6f    /// later invo
16850 6b 65 20 74 68 65 20 78 43 6c 6f 73 65 20 6d 65  ke the xClose me
16860 74 68 6f 64 20 74 6f 20 64 65 73 74 72 6f 79 20  thod to destroy 
16870 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 20 63 75  the allocated cu
16880 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rsor...        /
16890 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
168a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
168b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
168c0 78 4f 70 65 6e 20 6d 65 74 68 6f 64 20 6e 65 65  xOpen method nee
168d0 64 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65  d not initialize
168e0 20 74 68 65 20 70 56 74 61 62 20 66 69 65 6c 64   the pVtab field
168f0 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
16900 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61   /// sqlite3_vta
16910 62 5f 63 75 72 73 6f 72 20 73 74 72 75 63 74 75  b_cursor structu
16920 72 65 2e 20 54 68 65 20 53 51 4c 69 74 65 20 63  re. The SQLite c
16930 6f 72 65 20 77 69 6c 6c 20 74 61 6b 65 20 63 61  ore will take ca
16940 72 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f  re of..        /
16950 2f 2f 20 74 68 61 74 20 63 68 6f 72 65 20 61 75  // that chore au
16960 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0d 0a 20 20  tomatically...  
16970 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
16980 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16990 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
169a0 2f 2f 20 41 20 76 69 72 74 75 61 6c 20 74 61 62  // A virtual tab
169b0 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
169c0 6e 20 6d 75 73 74 20 62 65 20 61 62 6c 65 20 74  n must be able t
169d0 6f 20 73 75 70 70 6f 72 74 20 61 6e 20 61 72 62  o support an arb
169e0 69 74 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20  itrary..        
169f0 2f 2f 2f 20 6e 75 6d 62 65 72 20 6f 66 20 73 69  /// number of si
16a00 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 20 6f 70 65  multaneously ope
16a10 6e 20 63 75 72 73 6f 72 73 2e 0d 0a 20 20 20 20  n cursors...    
16a20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
16a30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
16a40 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
16a50 20 57 68 65 6e 20 69 6e 69 74 69 61 6c 6c 79 20   When initially 
16a60 6f 70 65 6e 65 64 2c 20 74 68 65 20 63 75 72 73  opened, the curs
16a70 6f 72 20 69 73 20 69 6e 20 61 6e 20 75 6e 64 65  or is in an unde
16a80 66 69 6e 65 64 20 73 74 61 74 65 2e 20 54 68 65  fined state. The
16a90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 51  ..        /// SQ
16aa0 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 69  Lite core will i
16ab0 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65  nvoke the xFilte
16ac0 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20  r method on the 
16ad0 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 0d  cursor prior to.
16ae0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 79  .        /// any
16af0 20 61 74 74 65 6d 70 74 20 74 6f 20 70 6f 73 69   attempt to posi
16b00 74 69 6f 6e 20 6f 72 20 72 65 61 64 20 66 72 6f  tion or read fro
16b10 6d 20 74 68 65 20 63 75 72 73 6f 72 2e 0d 0a 20  m the cursor... 
16b20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
16b30 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16b40 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
16b50 2f 2f 2f 20 54 68 65 20 78 4f 70 65 6e 20 6d 65  /// The xOpen me
16b60 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
16b70 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
16b80 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
16b90 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
16ba0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
16bb0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
16bc0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
16bd0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
16be0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
16bf0 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
16c00 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
16c10 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
16c20 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
16c30 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
16c40 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
16c50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16c60 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
16c70 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
16c80 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
16c90 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
16ca0 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
16cb0 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
16cc0 20 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20   newly..        
16cd0 2f 2f 2f 20 63 72 65 61 74 65 64 20 6e 61 74 69  /// created nati
16ce0 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ve sqlite3_vtab_
16cf0 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73  cursor derived s
16d00 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
16d10 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
16d20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
16d30 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
16d40 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
16d50 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
16d60 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
16d70 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
16d80 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
16d90 6f 64 65 20 78 4f 70 65 6e 28 0d 0a 20 20 20 20  ode xOpen(..    
16da0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
16db0 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
16dc0 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43     ref IntPtr pC
16dd0 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
16de0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
16df0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16e40 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
16e50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16e60 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
16e70 2f 2f 20 54 68 65 20 78 43 6c 6f 73 65 20 6d 65  // The xClose me
16e80 74 68 6f 64 20 63 6c 6f 73 65 73 20 61 20 63 75  thod closes a cu
16e90 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
16ea0 6f 70 65 6e 65 64 20 62 79 20 78 4f 70 65 6e 2e  opened by xOpen.
16eb0 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   The..        //
16ec0 2f 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69  / SQLite core wi
16ed0 6c 6c 20 61 6c 77 61 79 73 20 63 61 6c 6c 20 78  ll always call x
16ee0 43 6c 6f 73 65 20 6f 6e 63 65 20 66 6f 72 20 65  Close once for e
16ef0 61 63 68 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  ach cursor opene
16f00 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75  d..        /// u
16f10 73 69 6e 67 20 78 4f 70 65 6e 2e 0d 0a 20 20 20  sing xOpen...   
16f20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
16f30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
16f40 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
16f50 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 6d 75  / This method mu
16f60 73 74 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 72  st release all r
16f70 65 73 6f 75 72 63 65 73 20 61 6c 6c 6f 63 61 74  esources allocat
16f80 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
16f90 20 20 20 2f 2f 2f 20 63 6f 72 72 65 73 70 6f 6e     /// correspon
16fa0 64 69 6e 67 20 78 4f 70 65 6e 20 63 61 6c 6c 2e  ding xOpen call.
16fb0 20 54 68 65 20 72 6f 75 74 69 6e 65 20 77 69 6c   The routine wil
16fc0 6c 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  l not be called 
16fd0 61 67 61 69 6e 20 65 76 65 6e 0d 0a 20 20 20 20  again even..    
16fe0 20 20 20 20 2f 2f 2f 20 69 66 20 69 74 20 72 65      /// if it re
16ff0 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 2e 20  turns an error. 
17000 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  The SQLite core 
17010 77 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74 68 65  will not use the
17020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
17030 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
17040 72 20 61 67 61 69 6e 20 61 66 74 65 72 20 69 74  r again after it
17050 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73 65 64   has been closed
17060 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17070 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
17080 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
17090 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6c 6f      /// The xClo
170a0 73 65 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71  se method is req
170b0 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20  uired for every 
170c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
170d0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
170e0 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
170f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
17100 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
17110 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
17120 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
17130 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
17140 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
17150 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
17160 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  he sqlite3_vtab_
17170 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73  cursor derived s
17180 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
17190 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
171a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
171b0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
171c0 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
171d0 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
171e0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
171f0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
17200 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
17210 6f 64 65 20 78 43 6c 6f 73 65 28 0d 0a 20 20 20  ode xClose(..   
17220 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
17230 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
17240 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
17250 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
172a0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
172b0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
172c0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
172d0 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
172e0 20 62 65 67 69 6e 73 20 61 20 73 65 61 72 63 68   begins a search
172f0 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
17300 62 6c 65 2e 20 54 68 65 20 66 69 72 73 74 20 61  ble. The first a
17310 72 67 75 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  rgument..       
17320 20 2f 2f 2f 20 69 73 20 61 20 63 75 72 73 6f 72   /// is a cursor
17330 20 6f 70 65 6e 65 64 20 62 79 20 78 4f 70 65 6e   opened by xOpen
17340 2e 20 54 68 65 20 6e 65 78 74 20 74 77 6f 20 61  . The next two a
17350 72 67 75 6d 65 6e 74 20 64 65 66 69 6e 65 20 61  rgument define a
17360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 61  ..        /// pa
17370 72 74 69 63 75 6c 61 72 20 73 65 61 72 63 68 20  rticular search 
17380 69 6e 64 65 78 20 70 72 65 76 69 6f 75 73 6c 79  index previously
17390 20 63 68 6f 73 65 6e 20 62 79 20 78 42 65 73 74   chosen by xBest
173a0 49 6e 64 65 78 2e 20 54 68 65 0d 0a 20 20 20 20  Index. The..    
173b0 20 20 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 63      /// specific
173c0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 69 64 78   meanings of idx
173d0 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72 20 61  Num and idxStr a
173e0 72 65 20 75 6e 69 6d 70 6f 72 74 61 6e 74 20 61  re unimportant a
173f0 73 20 6c 6f 6e 67 20 61 73 0d 0a 20 20 20 20 20  s long as..     
17400 20 20 20 2f 2f 2f 20 78 46 69 6c 74 65 72 20 61     /// xFilter a
17410 6e 64 20 78 42 65 73 74 49 6e 64 65 78 20 61 67  nd xBestIndex ag
17420 72 65 65 20 6f 6e 20 77 68 61 74 20 74 68 61 74  ree on what that
17430 20 6d 65 61 6e 69 6e 67 20 69 73 2e 0d 0a 20 20   meaning is...  
17440 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
17450 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17460 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
17470 2f 2f 20 54 68 65 20 78 42 65 73 74 49 6e 64 65  // The xBestInde
17480 78 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68  x function may h
17490 61 76 65 20 72 65 71 75 65 73 74 65 64 20 74 68  ave requested th
174a0 65 20 76 61 6c 75 65 73 20 6f 66 20 63 65 72 74  e values of cert
174b0 61 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ain..        ///
174c0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 75 73 69   expressions usi
174d0 6e 67 20 74 68 65 20 61 43 6f 6e 73 74 72 61 69  ng the aConstrai
174e0 6e 74 55 73 61 67 65 5b 5d 2e 61 72 67 76 49 6e  ntUsage[].argvIn
174f0 64 65 78 20 76 61 6c 75 65 73 20 6f 66 20 74 68  dex values of th
17500 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
17510 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
17520 6f 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 6f  o structure. Tho
17530 73 65 20 76 61 6c 75 65 73 20 61 72 65 20 70 61  se values are pa
17540 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 0d  ssed to xFilter.
17550 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 69  .        /// usi
17560 6e 67 20 74 68 65 20 61 72 67 63 20 61 6e 64 20  ng the argc and 
17570 61 72 67 76 20 70 61 72 61 6d 65 74 65 72 73 2e  argv parameters.
17580 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17590 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
175a0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
175b0 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20 76 69     /// If the vi
175c0 72 74 75 61 6c 20 74 61 62 6c 65 20 63 6f 6e 74  rtual table cont
175d0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
175e0 20 72 6f 77 73 20 74 68 61 74 20 6d 61 74 63 68   rows that match
175f0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
17600 2f 20 73 65 61 72 63 68 20 63 72 69 74 65 72 69  / search criteri
17610 61 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73  a, then the curs
17620 6f 72 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20  or must be left 
17630 70 6f 69 6e 74 20 61 74 20 74 68 65 20 66 69 72  point at the fir
17640 73 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  st..        /// 
17650 72 6f 77 2e 20 53 75 62 73 65 71 75 65 6e 74 20  row. Subsequent 
17660 63 61 6c 6c 73 20 74 6f 20 78 45 6f 66 20 6d 75  calls to xEof mu
17670 73 74 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20  st return false 
17680 28 7a 65 72 6f 29 2e 20 49 66 20 74 68 65 72 65  (zero). If there
17690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72  ..        /// ar
176a0 65 20 6e 6f 20 72 6f 77 73 20 6d 61 74 63 68 2c  e no rows match,
176b0 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
176c0 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 69 6e   must be left in
176d0 20 61 20 73 74 61 74 65 20 74 68 61 74 0d 0a 20   a state that.. 
176e0 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20         /// will 
176f0 63 61 75 73 65 20 74 68 65 20 78 45 6f 66 20 74  cause the xEof t
17700 6f 20 72 65 74 75 72 6e 20 74 72 75 65 20 28 6e  o return true (n
17710 6f 6e 2d 7a 65 72 6f 29 2e 20 54 68 65 20 53 51  on-zero). The SQ
17720 4c 69 74 65 20 65 6e 67 69 6e 65 0d 0a 20 20 20  Lite engine..   
17730 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 75 73       /// will us
17740 65 20 74 68 65 20 78 43 6f 6c 75 6d 6e 20 61 6e  e the xColumn an
17750 64 20 78 52 6f 77 69 64 20 6d 65 74 68 6f 64 73  d xRowid methods
17760 20 74 6f 20 61 63 63 65 73 73 20 74 68 61 74 20   to access that 
17770 72 6f 77 20 63 6f 6e 74 65 6e 74 2e 0d 0a 20 20  row content...  
17780 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4e        /// The xN
17790 65 78 74 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  ext method will 
177a0 62 65 20 75 73 65 64 20 74 6f 20 61 64 76 61 6e  be used to advan
177b0 63 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72  ce to the next r
177c0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ow...        ///
177d0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
177e0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
177f0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
17800 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72  ethod must retur
17810 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 73  n SQLITE_OK if s
17820 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 61 6e  uccessful, or an
17830 20 73 71 6c 69 74 65 20 65 72 72 6f 72 0d 0a 20   sqlite error.. 
17840 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 64 65 20         /// code 
17850 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
17860 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rs...        ///
17870 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
17880 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
17890 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 46        /// The xF
178a0 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 69 73 20  ilter method is 
178b0 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76 65  required for eve
178c0 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ry virtual table
178d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d  ..        /// im
178e0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20  plementation... 
178f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17900 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17910 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
17920 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
17930 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a  ame="pCursor">..
17940 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
17950 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
17960 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
17970 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65  ab_cursor derive
17980 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
17990 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
179a0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
179b0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78  <param name="idx
179c0 4e 75 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  Num">..        /
179d0 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74  // Number used t
179e0 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
179f0 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
17a00 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ex...        ///
17a10 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
17a20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
17a30 6d 65 3d 22 69 64 78 53 74 72 22 3e 0d 0a 20 20  me="idxStr">..  
17a40 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
17a50 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
17a60 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  the UTF-8 encode
17a70 64 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  d string contain
17a80 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
17a90 20 2f 2f 2f 20 73 74 72 69 6e 67 20 75 73 65 64   /// string used
17aa0 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
17ab0 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
17ac0 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
17ad0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
17ae0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
17af0 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20  name="argc">..  
17b00 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75        /// The nu
17b10 6d 62 65 72 20 6f 66 20 6e 61 74 69 76 65 20 70  mber of native p
17b20 6f 69 6e 74 65 72 73 20 74 6f 20 73 71 6c 69 74  ointers to sqlit
17b30 65 33 5f 76 61 6c 75 65 20 73 74 72 75 63 74 75  e3_value structu
17b40 72 65 73 20 73 70 65 63 69 66 69 65 64 0d 0a 20  res specified.. 
17b50 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 20 3c 70         /// in <p
17b60 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 61 72  aramref name="ar
17b70 67 76 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20  gv" />...       
17b80 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17b90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
17ba0 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a  m name="argv">..
17bb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20 61          /// An a
17bc0 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20 70  rray of native p
17bd0 6f 69 6e 74 65 72 73 20 74 6f 20 73 71 6c 69 74  ointers to sqlit
17be0 65 33 5f 76 61 6c 75 65 20 73 74 72 75 63 74 75  e3_value structu
17bf0 72 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a  res containing..
17c00 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 6c 74          /// filt
17c10 65 72 69 6e 67 20 63 72 69 74 65 72 69 61 20 66  ering criteria f
17c20 6f 72 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  or the selected 
17c30 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
17c40 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
17c50 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
17c60 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
17c70 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
17c80 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
17c90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
17ca0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
17cb0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17cc0 20 78 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20   xFilter(..     
17cd0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
17ce0 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20  ursor,..        
17cf0 20 20 20 20 69 6e 74 20 69 64 78 4e 75 6d 2c 0d      int idxNum,.
17d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
17d10 50 74 72 20 69 64 78 53 74 72 2c 0d 0a 20 20 20  Ptr idxStr,..   
17d20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
17d30 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
17d40 49 6e 74 50 74 72 20 61 72 67 76 0d 0a 20 20 20  IntPtr argv..   
17d50 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
17d60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17db0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
17dc0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
17dd0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
17de0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4e 65       /// The xNe
17df0 78 74 20 6d 65 74 68 6f 64 20 61 64 76 61 6e 63  xt method advanc
17e00 65 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  es a virtual tab
17e10 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  le cursor to the
17e20 20 6e 65 78 74 20 72 6f 77 20 6f 66 0d 0a 20 20   next row of..  
17e30 20 20 20 20 20 20 2f 2f 2f 20 61 20 72 65 73 75        /// a resu
17e40 6c 74 20 73 65 74 20 69 6e 69 74 69 61 74 65 64  lt set initiated
17e50 20 62 79 20 78 46 69 6c 74 65 72 2e 20 49 66 20   by xFilter. If 
17e60 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  the cursor is al
17e70 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 2f  ready..        /
17e80 2f 2f 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  // pointing at t
17e90 68 65 20 6c 61 73 74 20 72 6f 77 20 77 68 65 6e  he last row when
17ea0 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
17eb0 20 63 61 6c 6c 65 64 2c 20 74 68 65 6e 20 74 68   called, then th
17ec0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
17ed0 75 72 73 6f 72 20 6e 6f 20 6c 6f 6e 67 65 72 20  ursor no longer 
17ee0 70 6f 69 6e 74 73 20 74 6f 20 76 61 6c 69 64 20  points to valid 
17ef0 64 61 74 61 20 61 6e 64 20 61 20 73 75 62 73 65  data and a subse
17f00 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f 20 74 68  quent call to th
17f10 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
17f20 45 6f 66 20 6d 65 74 68 6f 64 20 6d 75 73 74 20  Eof method must 
17f30 72 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  return true (non
17f40 2d 7a 65 72 6f 29 2e 20 49 66 20 74 68 65 20 63  -zero). If the c
17f50 75 72 73 6f 72 20 69 73 0d 0a 20 20 20 20 20 20  ursor is..      
17f60 20 20 2f 2f 2f 20 73 75 63 63 65 73 73 66 75 6c    /// successful
17f70 6c 79 20 61 64 76 61 6e 63 65 64 20 74 6f 20 61  ly advanced to a
17f80 6e 6f 74 68 65 72 20 72 6f 77 20 6f 66 20 63 6f  nother row of co
17f90 6e 74 65 6e 74 2c 20 74 68 65 6e 20 73 75 62 73  ntent, then subs
17fa0 65 71 75 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  equent..        
17fb0 2f 2f 2f 20 63 61 6c 6c 73 20 74 6f 20 78 45 6f  /// calls to xEo
17fc0 66 20 6d 75 73 74 20 72 65 74 75 72 6e 20 66 61  f must return fa
17fd0 6c 73 65 20 28 7a 65 72 6f 29 2e 0d 0a 20 20 20  lse (zero)...   
17fe0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
17ff0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18000 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
18010 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 6d 75  / This method mu
18020 73 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  st return SQLITE
18030 5f 4f 4b 20 69 66 20 73 75 63 63 65 73 73 66 75  _OK if successfu
18040 6c 2c 20 6f 72 20 61 6e 20 73 71 6c 69 74 65 20  l, or an sqlite 
18050 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  error..        /
18060 2f 2f 20 63 6f 64 65 20 69 66 20 61 6e 20 65 72  // code if an er
18070 72 6f 72 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20  ror occurs...   
18080 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
18090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
180a0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
180b0 2f 20 54 68 65 20 78 4e 65 78 74 20 6d 65 74 68  / The xNext meth
180c0 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66  od is required f
180d0 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c  or every virtual
180e0 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
180f0 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  /// implementati
18100 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
18110 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
18120 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
18130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18140 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
18150 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
18160 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
18170 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
18180 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
18190 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
181a0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
181b0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
181c0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
181d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
181e0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
181f0 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
18200 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
18210 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
18220 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4e 65  iteErrorCode xNe
18230 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt(..           
18240 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
18250 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
18260 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
18270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
182c0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
182d0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
182e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
182f0 20 78 45 6f 66 20 6d 65 74 68 6f 64 20 6d 75 73   xEof method mus
18300 74 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 28  t return false (
18310 7a 65 72 6f 29 20 69 66 20 74 68 65 20 73 70 65  zero) if the spe
18320 63 69 66 69 65 64 20 63 75 72 73 6f 72 0d 0a 20  cified cursor.. 
18330 20 20 20 20 20 20 20 2f 2f 2f 20 63 75 72 72 65         /// curre
18340 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 20 61  ntly points to a
18350 20 76 61 6c 69 64 20 72 6f 77 20 6f 66 20 64 61   valid row of da
18360 74 61 2c 20 6f 72 20 74 72 75 65 20 28 6e 6f 6e  ta, or true (non
18370 2d 7a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  -zero)..        
18380 2f 2f 2f 20 6f 74 68 65 72 77 69 73 65 2e 20 54  /// otherwise. T
18390 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
183a0 6c 6c 65 64 20 62 79 20 74 68 65 20 53 51 4c 20  lled by the SQL 
183b0 65 6e 67 69 6e 65 20 69 6d 6d 65 64 69 61 74 65  engine immediate
183c0 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ly..        /// 
183d0 61 66 74 65 72 20 65 61 63 68 20 78 46 69 6c 74  after each xFilt
183e0 65 72 20 61 6e 64 20 78 4e 65 78 74 20 69 6e 76  er and xNext inv
183f0 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ocation...      
18400 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
18410 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
18420 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
18430 68 65 20 78 45 6f 66 20 6d 65 74 68 6f 64 20 69  he xEof method i
18440 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
18450 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62  very virtual tab
18460 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
18470 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
18480 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
18490 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
184a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
184b0 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
184c0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
184d0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
184e0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
184f0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
18500 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
18510 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18520 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
18530 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
18540 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
18550 7a 65 72 6f 20 69 66 20 6e 6f 20 6d 6f 72 65 20  zero if no more 
18560 72 6f 77 73 20 61 72 65 20 61 76 61 69 6c 61 62  rows are availab
18570 6c 65 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77 69  le; zero otherwi
18580 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
18590 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
185a0 20 20 20 20 20 69 6e 74 20 78 45 6f 66 28 0d 0a       int xEof(..
185b0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
185c0 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
185d0 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
185e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
185f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
18630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
18640 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
18650 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
18660 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c 69      /// The SQLi
18670 74 65 20 63 6f 72 65 20 69 6e 76 6f 6b 65 73 20  te core invokes 
18680 74 68 69 73 20 6d 65 74 68 6f 64 20 69 6e 20 6f  this method in o
18690 72 64 65 72 20 74 6f 20 66 69 6e 64 20 74 68 65  rder to find the
186a0 20 76 61 6c 75 65 20 66 6f 72 0d 0a 20 20 20 20   value for..    
186b0 20 20 20 20 2f 2f 2f 20 74 68 65 20 4e 2d 74 68      /// the N-th
186c0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 63   column of the c
186d0 75 72 72 65 6e 74 20 72 6f 77 2e 20 4e 20 69 73  urrent row. N is
186e0 20 7a 65 72 6f 2d 62 61 73 65 64 20 73 6f 20 74   zero-based so t
186f0 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20  he first..      
18700 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 69 73 20    /// column is 
18710 6e 75 6d 62 65 72 65 64 20 30 2e 20 54 68 65 20  numbered 0. The 
18720 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 6d  xColumn method m
18730 61 79 20 72 65 74 75 72 6e 20 69 74 73 20 72 65  ay return its re
18740 73 75 6c 74 20 62 61 63 6b 0d 0a 20 20 20 20 20  sult back..     
18750 20 20 20 2f 2f 2f 20 74 6f 20 53 51 4c 69 74 65     /// to SQLite
18760 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68   using one of th
18770 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 74 65  e following inte
18780 72 66 61 63 65 3a 0d 0a 20 20 20 20 20 20 20 20  rface:..        
18790 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
187a0 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d       /// <code>.
187b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
187c0 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
187d0 62 6c 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20  blob()..        
187e0 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ///     sqlite3_
187f0 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 29 0d  result_double().
18800 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
18810 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
18820 69 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  int()..        /
18830 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
18840 65 73 75 6c 74 5f 69 6e 74 36 34 28 29 0d 0a 20  esult_int64().. 
18850 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73         ///     s
18860 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75  qlite3_result_nu
18870 6c 6c 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ll()..        //
18880 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  /     sqlite3_re
18890 73 75 6c 74 5f 74 65 78 74 28 29 0d 0a 20 20 20  sult_text()..   
188a0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c       ///     sql
188b0 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
188c0 31 36 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  16()..        //
188d0 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  /     sqlite3_re
188e0 73 75 6c 74 5f 74 65 78 74 31 36 6c 65 28 29 0d  sult_text16le().
188f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
18900 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
18910 74 65 78 74 31 36 62 65 28 29 0d 0a 20 20 20 20  text16be()..    
18920 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69      ///     sqli
18930 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62  te3_result_zerob
18940 6c 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  lob()..        /
18950 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20  // </code>..    
18960 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
18970 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74          /// If t
18980 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f  he xColumn metho
18990 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  d implementation
189a0 20 63 61 6c 6c 73 20 6e 6f 6e 65 20 6f 66 20 74   calls none of t
189b0 68 65 20 66 75 6e 63 74 69 6f 6e 73 0d 0a 20 20  he functions..  
189c0 20 20 20 20 20 20 2f 2f 2f 20 61 62 6f 76 65 2c        /// above,
189d0 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
189e0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65  of the column de
189f0 66 61 75 6c 74 73 20 74 6f 20 61 6e 20 53 51 4c  faults to an SQL
18a00 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20   NULL...        
18a10 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
18a20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
18a30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 6f 20  .        /// To 
18a40 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72 2c 20  raise an error, 
18a50 74 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68  the xColumn meth
18a60 6f 64 20 73 68 6f 75 6c 64 20 75 73 65 20 6f 6e  od should use on
18a70 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..      
18a80 20 20 2f 2f 2f 20 72 65 73 75 6c 74 5f 74 65 78    /// result_tex
18a90 74 28 29 20 6d 65 74 68 6f 64 73 20 74 6f 20 73  t() methods to s
18aa0 65 74 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  et the error mes
18ab0 73 61 67 65 20 74 65 78 74 2c 20 74 68 65 6e 20  sage text, then 
18ac0 72 65 74 75 72 6e 20 61 6e 0d 0a 20 20 20 20 20  return an..     
18ad0 20 20 20 2f 2f 2f 20 61 70 70 72 6f 70 72 69 61     /// appropria
18ae0 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 54  te error code. T
18af0 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f  he xColumn metho
18b00 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20 53 51  d must return SQ
18b10 4c 49 54 45 5f 4f 4b 20 6f 6e 0d 0a 20 20 20 20  LITE_OK on..    
18b20 20 20 20 20 2f 2f 2f 20 73 75 63 63 65 73 73 2e      /// success.
18b30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18b40 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18b50 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
18b60 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6c 75     /// The xColu
18b70 6d 6e 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71  mn method is req
18b80 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20  uired for every 
18b90 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
18ba0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
18bb0 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
18bc0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
18bd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
18be0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
18bf0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
18c00 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
18c10 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
18c20 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
18c30 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  he sqlite3_vtab_
18c40 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73  cursor derived s
18c50 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
18c60 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
18c70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
18c80 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6f 6e 74 65  ram name="pConte
18c90 78 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  xt">..        //
18ca0 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
18cb0 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
18cc0 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 74 72 75  te3_context stru
18cd0 63 74 75 72 65 20 74 6f 20 62 65 20 75 73 65 64  cture to be used
18ce0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f  ..        /// fo
18cf0 72 20 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20  r returning the 
18d00 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
18d10 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20 53 51   value to the SQ
18d20 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20  Lite core..     
18d30 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 2e 0d     /// library..
18d40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
18d50 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
18d60 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
18d70 69 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20  index">..       
18d80 20 2f 2f 2f 20 54 68 65 20 7a 65 72 6f 2d 62 61   /// The zero-ba
18d90 73 65 64 20 69 6e 64 65 78 20 63 6f 72 72 65 73  sed index corres
18da0 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 63  ponding to the c
18db0 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 69 6e 67  olumn containing
18dc0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
18dd0 2f 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65  / value to be re
18de0 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20  turned...       
18df0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
18e00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
18e10 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
18e20 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
18e30 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
18e40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18e50 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
18e60 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
18e70 65 20 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20  e xColumn(..    
18e80 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
18e90 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20  Cursor,..       
18ea0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e       IntPtr pCon
18eb0 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  text,..         
18ec0 20 20 20 69 6e 74 20 69 6e 64 65 78 0d 0a 20 20     int index..  
18ed0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
18ee0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
18ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
18f30 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18f40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
18f50 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
18f60 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 75 63 63        /// A succ
18f70 65 73 73 66 75 6c 20 69 6e 76 6f 63 61 74 69 6f  essful invocatio
18f80 6e 20 6f 66 20 74 68 69 73 20 6d 65 74 68 6f 64  n of this method
18f90 20 77 69 6c 6c 20 63 61 75 73 65 20 2a 70 52 6f   will cause *pRo
18fa0 77 69 64 20 74 6f 20 62 65 0d 0a 20 20 20 20 20  wid to be..     
18fb0 20 20 20 2f 2f 2f 20 66 69 6c 6c 65 64 20 77 69     /// filled wi
18fc0 74 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  th the rowid of 
18fd0 72 6f 77 20 74 68 61 74 20 74 68 65 20 76 69 72  row that the vir
18fe0 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
18ff0 72 20 70 43 75 72 20 69 73 0d 0a 20 20 20 20 20  r pCur is..     
19000 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 6c 79     /// currently
19010 20 70 6f 69 6e 74 69 6e 67 20 61 74 2e 20 54 68   pointing at. Th
19020 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e  is method return
19030 73 20 53 51 4c 49 54 45 5f 4f 4b 20 6f 6e 20 73  s SQLITE_OK on s
19040 75 63 63 65 73 73 2e 20 49 74 0d 0a 20 20 20 20  uccess. It..    
19050 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e 73 20      /// returns 
19060 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65  an appropriate e
19070 72 72 6f 72 20 63 6f 64 65 20 6f 6e 20 66 61 69  rror code on fai
19080 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lure...        /
19090 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
190a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
190b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
190c0 78 52 6f 77 69 64 20 6d 65 74 68 6f 64 20 69 73  xRowid method is
190d0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76   required for ev
190e0 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ery virtual tabl
190f0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
19100 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a  mplementation...
19110 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
19120 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
19130 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
19140 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
19150 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
19160 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
19170 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
19180 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
19190 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76  tab_cursor deriv
191a0 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
191b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
191c0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
191d0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f   <param name="ro
191e0 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  wId">..        /
191f0 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
19200 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
19210 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
19220 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20   to contain the 
19230 75 6e 69 71 75 65 0d 0a 20 20 20 20 20 20 20 20  unique..        
19240 2f 2f 2f 20 69 6e 74 65 67 65 72 20 72 6f 77 20  /// integer row 
19250 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74  identifier for t
19260 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 66  he current row f
19270 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64  or the specified
19280 20 63 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20   cursor...      
19290 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
192a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
192b0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
192c0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
192d0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
192e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
192f0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
19300 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
19310 64 65 20 78 52 6f 77 49 64 28 0d 0a 20 20 20 20  de xRowId(..    
19320 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
19330 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20  Cursor,..       
19340 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f       ref long ro
19350 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  wId..           
19360 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
19370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
193c0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
193d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
193e0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
193f0 20 41 6c 6c 20 63 68 61 6e 67 65 73 20 74 6f 20   All changes to 
19400 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
19410 61 72 65 20 6d 61 64 65 20 75 73 69 6e 67 20 74  are made using t
19420 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
19430 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
19440 54 68 69 73 20 6f 6e 65 20 6d 65 74 68 6f 64 20  This one method 
19450 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 69  can be used to i
19460 6e 73 65 72 74 2c 20 64 65 6c 65 74 65 2c 20 6f  nsert, delete, o
19470 72 20 75 70 64 61 74 65 2e 0d 0a 20 20 20 20 20  r update...     
19480 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
19490 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
194a0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
194b0 54 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74  The argc paramet
194c0 65 72 20 73 70 65 63 69 66 69 65 73 20 74 68 65  er specifies the
194d0 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
194e0 65 73 20 69 6e 20 74 68 65 20 61 72 67 76 0d 0a  es in the argv..
194f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 72 61          /// arra
19500 79 2e 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  y. The value of 
19510 61 72 67 63 20 77 69 6c 6c 20 62 65 20 31 20 66  argc will be 1 f
19520 6f 72 20 61 20 70 75 72 65 20 64 65 6c 65 74 65  or a pure delete
19530 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72 0d 0a 20   operation or.. 
19540 20 20 20 20 20 20 20 2f 2f 2f 20 4e 2b 32 20 66         /// N+2 f
19550 6f 72 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20  or an insert or 
19560 72 65 70 6c 61 63 65 20 6f 72 20 75 70 64 61 74  replace or updat
19570 65 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65  e where N is the
19580 20 6e 75 6d 62 65 72 20 6f 66 0d 0a 20 20 20 20   number of..    
19590 20 20 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 73 20      /// columns 
195a0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 6e  in the table. In
195b0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 65   the previous se
195c0 6e 74 65 6e 63 65 2c 20 4e 20 69 6e 63 6c 75 64  ntence, N includ
195d0 65 73 20 61 6e 79 0d 0a 20 20 20 20 20 20 20 20  es any..        
195e0 2f 2f 2f 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  /// hidden colum
195f0 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns...        ///
19600 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
19610 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
19620 20 20 20 20 20 20 2f 2f 2f 20 45 76 65 72 79 20        /// Every 
19630 61 72 67 76 20 65 6e 74 72 79 20 77 69 6c 6c 20  argv entry will 
19640 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20  have a non-NULL 
19650 76 61 6c 75 65 20 69 6e 20 43 20 62 75 74 20 6d  value in C but m
19660 61 79 20 63 6f 6e 74 61 69 6e 0d 0a 20 20 20 20  ay contain..    
19670 20 20 20 20 2f 2f 2f 20 74 68 65 20 53 51 4c 20      /// the SQL 
19680 76 61 6c 75 65 20 4e 55 4c 4c 2e 20 49 6e 20 6f  value NULL. In o
19690 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 20 69  ther words, it i
196a0 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 74 68  s always true th
196b0 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  at..        /// 
196c0 61 72 67 76 5b 69 5d 21 3d 30 20 66 6f 72 20 69  argv[i]!=0 for i
196d0 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 61   between 0 and a
196e0 72 67 63 2d 31 2e 20 48 6f 77 65 76 65 72 2c 20  rgc-1. However, 
196f0 69 74 20 6d 69 67 68 74 20 62 65 20 74 68 65 0d  it might be the.
19700 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 73  .        /// cas
19710 65 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f 76  e that sqlite3_v
19720 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76 5b 69  alue_type(argv[i
19730 5d 29 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 2e  ])==SQLITE_NULL.
19740 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
19750 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
19760 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
19770 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 76 5b     /// The argv[
19780 30 5d 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  0] parameter is 
19790 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
197a0 6f 77 20 69 6e 20 74 68 65 20 76 69 72 74 75 61  ow in the virtua
197b0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
197c0 20 2f 2f 2f 20 74 6f 20 62 65 20 64 65 6c 65 74   /// to be delet
197d0 65 64 2e 20 49 66 20 61 72 67 76 5b 30 5d 20 69  ed. If argv[0] i
197e0 73 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2c 20 74  s an SQL NULL, t
197f0 68 65 6e 20 6e 6f 20 64 65 6c 65 74 69 6f 6e 20  hen no deletion 
19800 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20  occurs...       
19810 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
19820 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
19830 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
19840 65 20 61 72 67 76 5b 31 5d 20 70 61 72 61 6d 65  e argv[1] parame
19850 74 65 72 20 69 73 20 74 68 65 20 72 6f 77 69 64  ter is the rowid
19860 20 6f 66 20 61 20 6e 65 77 20 72 6f 77 20 74 6f   of a new row to
19870 20 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74   be inserted int
19880 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  o..        /// t
19890 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
198a0 2e 20 49 66 20 61 72 67 76 5b 31 5d 20 69 73 20  . If argv[1] is 
198b0 61 6e 20 53 51 4c 20 4e 55 4c 4c 2c 20 74 68 65  an SQL NULL, the
198c0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
198d0 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
198e0 6e 20 6d 75 73 74 20 63 68 6f 6f 73 65 20 61 20  n must choose a 
198f0 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 6e 65  rowid for the ne
19900 77 6c 79 20 69 6e 73 65 72 74 65 64 20 72 6f 77  wly inserted row
19910 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53  ...        /// S
19920 75 62 73 65 71 75 65 6e 74 20 61 72 67 76 5b 5d  ubsequent argv[]
19930 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e   entries contain
19940 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 63   values of the c
19950 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0d 0a 20  olumns of the.. 
19960 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75         /// virtu
19970 61 6c 20 74 61 62 6c 65 2c 20 69 6e 20 74 68 65  al table, in the
19980 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 20   order that the 
19990 63 6f 6c 75 6d 6e 73 20 77 65 72 65 20 64 65 63  columns were dec
199a0 6c 61 72 65 64 2e 20 54 68 65 0d 0a 20 20 20 20  lared. The..    
199b0 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72 20 6f      /// number o
199c0 66 20 63 6f 6c 75 6d 6e 73 20 77 69 6c 6c 20 6d  f columns will m
199d0 61 74 63 68 20 74 68 65 20 74 61 62 6c 65 20 64  atch the table d
199e0 65 63 6c 61 72 61 74 69 6f 6e 20 74 68 61 74 20  eclaration that 
199f0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
19a00 20 78 43 6f 6e 6e 65 63 74 20 6f 72 20 78 43 72   xConnect or xCr
19a10 65 61 74 65 20 6d 65 74 68 6f 64 20 6d 61 64 65  eate method made
19a20 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
19a30 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
19a40 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  )..        /// c
19a50 61 6c 6c 2e 20 41 6c 6c 20 68 69 64 64 65 6e 20  all. All hidden 
19a60 63 6f 6c 75 6d 6e 73 20 61 72 65 20 69 6e 63 6c  columns are incl
19a70 75 64 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  uded...        /
19a80 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
19a90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
19aa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e          /// When
19ab0 20 64 6f 69 6e 67 20 61 6e 20 69 6e 73 65 72 74   doing an insert
19ac0 20 77 69 74 68 6f 75 74 20 61 20 72 6f 77 69 64   without a rowid
19ad0 20 28 61 72 67 63 3e 31 2c 20 61 72 67 76 5b 31   (argc>1, argv[1
19ae0 5d 20 69 73 20 61 6e 20 53 51 4c 0d 0a 20 20 20  ] is an SQL..   
19af0 20 20 20 20 20 2f 2f 2f 20 4e 55 4c 4c 29 2c 20       /// NULL), 
19b00 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
19b10 6f 6e 20 6d 75 73 74 20 73 65 74 20 2a 70 52 6f  on must set *pRo
19b20 77 69 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64  wid to the rowid
19b30 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
19b40 20 2f 2f 2f 20 6e 65 77 6c 79 20 69 6e 73 65 72   /// newly inser
19b50 74 65 64 20 72 6f 77 3b 20 74 68 69 73 20 77 69  ted row; this wi
19b60 6c 6c 20 62 65 63 6f 6d 65 20 74 68 65 20 76 61  ll become the va
19b70 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
19b80 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
19b90 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
19ba0 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
19bb0 63 74 69 6f 6e 2e 20 53 65 74 74 69 6e 67 20 74  ction. Setting t
19bc0 68 69 73 20 76 61 6c 75 65 20 69 6e 20 61 6c 6c  his value in all
19bd0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
19be0 2f 20 6f 74 68 65 72 20 63 61 73 65 73 20 69 73  / other cases is
19bf0 20 61 20 68 61 72 6d 6c 65 73 73 20 6e 6f 2d 6f   a harmless no-o
19c00 70 3b 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  p; the SQLite en
19c10 67 69 6e 65 20 69 67 6e 6f 72 65 73 20 74 68 65  gine ignores the
19c20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 2a 70  ..        /// *p
19c30 52 6f 77 69 64 20 72 65 74 75 72 6e 20 76 61 6c  Rowid return val
19c40 75 65 20 69 66 20 61 72 67 63 3d 3d 31 20 6f 72  ue if argc==1 or
19c50 20 61 72 67 76 5b 31 5d 20 69 73 20 6e 6f 74 20   argv[1] is not 
19c60 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e 0d 0a 20 20  an SQL NULL...  
19c70 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
19c80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
19c90 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
19ca0 2f 2f 20 45 61 63 68 20 63 61 6c 6c 20 74 6f 20  // Each call to 
19cb0 78 55 70 64 61 74 65 20 77 69 6c 6c 20 66 61 6c  xUpdate will fal
19cc0 6c 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 63 61  l into one of ca
19cd0 73 65 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 2e  ses shown below.
19ce0 20 4e 6f 74 65 0d 0a 20 20 20 20 20 20 20 20 2f   Note..        /
19cf0 2f 2f 20 74 68 61 74 20 72 65 66 65 72 65 6e 63  // that referenc
19d00 65 73 20 74 6f 20 61 72 67 76 5b 69 5d 20 6d 65  es to argv[i] me
19d10 61 6e 20 74 68 65 20 53 51 4c 20 76 61 6c 75 65  an the SQL value
19d20 20 68 65 6c 64 20 77 69 74 68 69 6e 20 74 68 65   held within the
19d30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72  ..        /// ar
19d40 67 76 5b 69 5d 20 6f 62 6a 65 63 74 2c 20 6e 6f  gv[i] object, no
19d50 74 20 74 68 65 20 61 72 67 76 5b 69 5d 20 6f 62  t the argv[i] ob
19d60 6a 65 63 74 20 69 74 73 65 6c 66 2e 0d 0a 20 20  ject itself...  
19d70 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
19d80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
19d90 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
19da0 2f 2f 20 20 20 20 20 61 72 67 63 20 3d 20 31 0d  //     argc = 1.
19db0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63  .        /// </c
19dc0 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
19dd0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
19de0 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 54 68    ///         Th
19df0 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74  e single row wit
19e00 68 20 72 6f 77 69 64 20 65 71 75 61 6c 20 74 6f  h rowid equal to
19e10 20 61 72 67 76 5b 30 5d 20 69 73 20 64 65 6c 65   argv[0] is dele
19e20 74 65 64 2e 20 4e 6f 0d 0a 20 20 20 20 20 20 20  ted. No..       
19e30 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 73   ///         ins
19e40 65 72 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20  ert occurs...   
19e50 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
19e60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
19e70 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
19e80 2f 20 20 20 20 20 61 72 67 63 20 3e 20 31 0d 0a  /     argc > 1..
19e90 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
19ea0 61 72 67 76 5b 30 5d 20 3d 20 4e 55 4c 4c 0d 0a  argv[0] = NULL..
19eb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f          /// </co
19ec0 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
19ed0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
19ee0 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 41 20 6e   ///         A n
19ef0 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74  ew row is insert
19f00 65 64 20 77 69 74 68 20 61 20 72 6f 77 69 64 20  ed with a rowid 
19f10 61 72 67 76 5b 31 5d 20 61 6e 64 20 63 6f 6c 75  argv[1] and colu
19f20 6d 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  mn..        /// 
19f30 20 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69          values i
19f40 6e 20 61 72 67 76 5b 32 5d 20 61 6e 64 20 66 6f  n argv[2] and fo
19f50 6c 6c 6f 77 69 6e 67 2e 20 49 66 20 61 72 67 76  llowing. If argv
19f60 5b 31 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e 55  [1] is an SQL NU
19f70 4c 4c 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  LL,..        ///
19f80 20 20 20 20 20 20 20 20 20 74 68 65 20 61 20 6e           the a n
19f90 65 77 20 75 6e 69 71 75 65 20 72 6f 77 69 64 20  ew unique rowid 
19fa0 69 73 20 67 65 6e 65 72 61 74 65 64 20 61 75 74  is generated aut
19fb0 6f 6d 61 74 69 63 61 6c 6c 79 2e 0d 0a 20 20 20  omatically...   
19fc0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
19fd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
19fe0 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
19ff0 2f 20 20 20 20 20 61 72 67 63 20 3e 20 31 0d 0a  /     argc > 1..
1a000 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
1a010 61 72 67 76 5b 30 5d 20 3f 20 4e 55 4c 4c 0d 0a  argv[0] ? NULL..
1a020 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
1a030 61 72 67 76 5b 30 5d 20 3d 20 61 72 67 76 5b 31  argv[0] = argv[1
1a040 5d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ]..        /// <
1a050 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
1a060 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
1a070 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
1a080 54 68 65 20 72 6f 77 20 77 69 74 68 20 72 6f 77  The row with row
1a090 69 64 20 61 72 67 76 5b 30 5d 20 69 73 20 75 70  id argv[0] is up
1a0a0 64 61 74 65 64 20 77 69 74 68 20 6e 65 77 20 76  dated with new v
1a0b0 61 6c 75 65 73 20 69 6e 0d 0a 20 20 20 20 20 20  alues in..      
1a0c0 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 61 72    ///         ar
1a0d0 67 76 5b 32 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77  gv[2] and follow
1a0e0 69 6e 67 20 70 61 72 61 6d 65 74 65 72 73 2e 0d  ing parameters..
1a0f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1a100 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1a110 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
1a120 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63 20 3e    ///     argc >
1a130 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   1..        /// 
1a140 20 20 20 20 61 72 67 76 5b 30 5d 20 3f 20 4e 55      argv[0] ? NU
1a150 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  LL..        /// 
1a160 20 20 20 20 61 72 67 76 5b 30 5d 20 3f 20 61 72      argv[0] ? ar
1a170 67 76 5b 31 5d 0d 0a 20 20 20 20 20 20 20 20 2f  gv[1]..        /
1a180 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20  // </code>..    
1a190 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1a1a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
1a1b0 20 20 20 20 54 68 65 20 72 6f 77 20 77 69 74 68      The row with
1a1c0 20 72 6f 77 69 64 20 61 72 67 76 5b 30 5d 20 69   rowid argv[0] i
1a1d0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 72  s updated with r
1a1e0 6f 77 69 64 20 61 72 67 76 5b 31 5d 0d 0a 20 20  owid argv[1]..  
1a1f0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
1a200 20 20 61 6e 64 20 6e 65 77 20 76 61 6c 75 65 73    and new values
1a210 20 69 6e 20 61 72 67 76 5b 32 5d 20 61 6e 64 20   in argv[2] and 
1a220 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 72 61 6d 65  following parame
1a230 74 65 72 73 2e 20 54 68 69 73 0d 0a 20 20 20 20  ters. This..    
1a240 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
1a250 77 69 6c 6c 20 6f 63 63 75 72 20 77 68 65 6e 20  will occur when 
1a260 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  an SQL statement
1a270 20 75 70 64 61 74 65 73 20 61 20 72 6f 77 69 64   updates a rowid
1a280 2c 20 61 73 20 69 6e 0d 0a 20 20 20 20 20 20 20  , as in..       
1a290 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 74 68 65   ///         the
1a2a0 20 73 74 61 74 65 6d 65 6e 74 3a 0d 0a 20 20 20   statement:..   
1a2b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1a2c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
1a2d0 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
1a2e0 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 55 50  /             UP
1a2f0 44 41 54 45 20 74 61 62 6c 65 20 53 45 54 20 72  DATE table SET r
1a300 6f 77 69 64 3d 72 6f 77 69 64 2b 31 20 57 48 45  owid=rowid+1 WHE
1a310 52 45 20 2e 2e 2e 3b 0d 0a 20 20 20 20 20 20 20  RE ...;..       
1a320 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
1a330 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
1a340 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1a350 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  e xUpdate method
1a360 20 6d 75 73 74 20 72 65 74 75 72 6e 20 53 51 4c   must return SQL
1a370 49 54 45 5f 4f 4b 20 69 66 20 61 6e 64 20 6f 6e  ITE_OK if and on
1a380 6c 79 20 69 66 20 69 74 20 69 73 0d 0a 20 20 20  ly if it is..   
1a390 20 20 20 20 20 2f 2f 2f 20 73 75 63 63 65 73 73       /// success
1a3a0 66 75 6c 2e 20 49 66 20 61 20 66 61 69 6c 75 72  ful. If a failur
1a3b0 65 20 6f 63 63 75 72 73 2c 20 74 68 65 20 78 55  e occurs, the xU
1a3c0 70 64 61 74 65 20 6d 75 73 74 20 72 65 74 75 72  pdate must retur
1a3d0 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n an..        //
1a3e0 2f 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72  / appropriate er
1a3f0 72 6f 72 20 63 6f 64 65 2e 20 4f 6e 20 61 20 66  ror code. On a f
1a400 61 69 6c 75 72 65 2c 20 74 68 65 20 70 56 54 61  ailure, the pVTa
1a410 62 2d 3e 7a 45 72 72 4d 73 67 20 65 6c 65 6d 65  b->zErrMsg eleme
1a420 6e 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  nt..        /// 
1a430 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  may optionally b
1a440 65 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20  e replaced with 
1a450 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65  error message te
1a460 78 74 20 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d  xt stored in mem
1a470 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ory..        ///
1a480 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 20   allocated from 
1a490 53 51 4c 69 74 65 20 75 73 69 6e 67 20 66 75 6e  SQLite using fun
1a4a0 63 74 69 6f 6e 73 20 73 75 63 68 20 61 73 20 73  ctions such as s
1a4b0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29  qlite3_mprintf()
1a4c0 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
1a4d0 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
1a4e0 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  )...        /// 
1a4f0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1a500 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1a510 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20       /// If the 
1a520 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 76  xUpdate method v
1a530 69 6f 6c 61 74 65 73 20 73 6f 6d 65 20 63 6f 6e  iolates some con
1a540 73 74 72 61 69 6e 74 20 6f 66 20 74 68 65 20 76  straint of the v
1a550 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
1a560 20 20 20 20 20 20 2f 2f 2f 20 28 69 6e 63 6c 75        /// (inclu
1a570 64 69 6e 67 2c 20 62 75 74 20 6e 6f 74 20 6c 69  ding, but not li
1a580 6d 69 74 65 64 20 74 6f 2c 20 61 74 74 65 6d 70  mited to, attemp
1a590 74 69 6e 67 20 74 6f 20 73 74 6f 72 65 20 61 20  ting to store a 
1a5a0 76 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 20  value of the..  
1a5b0 20 20 20 20 20 20 2f 2f 2f 20 77 72 6f 6e 67 20        /// wrong 
1a5c0 64 61 74 61 74 79 70 65 2c 20 61 74 74 65 6d 70  datatype, attemp
1a5d0 74 69 6e 67 20 74 6f 20 73 74 6f 72 65 20 61 20  ting to store a 
1a5e0 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 74 6f  value that is to
1a5f0 6f 20 6c 61 72 67 65 20 6f 72 0d 0a 20 20 20 20  o large or..    
1a600 20 20 20 20 2f 2f 2f 20 74 6f 6f 20 73 6d 61 6c      /// too smal
1a610 6c 2c 20 6f 72 20 61 74 74 65 6d 70 74 69 6e 67  l, or attempting
1a620 20 74 6f 20 63 68 61 6e 67 65 20 61 20 72 65 61   to change a rea
1a630 64 2d 6f 6e 6c 79 20 76 61 6c 75 65 29 20 74 68  d-only value) th
1a640 65 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  en the..        
1a650 2f 2f 2f 20 78 55 70 64 61 74 65 20 6d 75 73 74  /// xUpdate must
1a660 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 61 70   fail with an ap
1a670 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20  propriate error 
1a680 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1a690 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1a6a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1a6b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 72          /// Ther
1a6c0 65 20 6d 69 67 68 74 20 62 65 20 6f 6e 65 20 6f  e might be one o
1a6d0 72 20 6d 6f 72 65 20 73 71 6c 69 74 65 33 5f 76  r more sqlite3_v
1a6e0 74 61 62 5f 63 75 72 73 6f 72 20 6f 62 6a 65 63  tab_cursor objec
1a6f0 74 73 20 6f 70 65 6e 20 61 6e 64 20 69 6e 0d 0a  ts open and in..
1a700 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 20          /// use 
1a710 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
1a720 61 62 6c 65 20 69 6e 73 74 61 6e 63 65 20 61 6e  able instance an
1a730 64 20 70 65 72 68 61 70 73 20 65 76 65 6e 20 6f  d perhaps even o
1a740 6e 20 74 68 65 20 72 6f 77 20 6f 66 0d 0a 20 20  n the row of..  
1a750 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69        /// the vi
1a760 72 74 75 61 6c 20 74 61 62 6c 65 20 77 68 65 6e  rtual table when
1a770 20 74 68 65 20 78 55 70 64 61 74 65 20 6d 65 74   the xUpdate met
1a780 68 6f 64 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20  hod is invoked. 
1a790 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  The..        ///
1a7a0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1a7b0 6f 66 20 78 55 70 64 61 74 65 20 6d 75 73 74 20  of xUpdate must 
1a7c0 62 65 20 70 72 65 70 61 72 65 64 20 66 6f 72 20  be prepared for 
1a7d0 61 74 74 65 6d 70 74 73 20 74 6f 20 64 65 6c 65  attempts to dele
1a7e0 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  te..        /// 
1a7f0 6f 72 20 6d 6f 64 69 66 79 20 72 6f 77 73 20 6f  or modify rows o
1a800 66 20 74 68 65 20 74 61 62 6c 65 20 6f 75 74 20  f the table out 
1a810 66 72 6f 6d 20 6f 74 68 65 72 20 65 78 69 73 74  from other exist
1a820 69 6e 67 20 63 75 72 73 6f 72 73 2e 20 49 66 20  ing cursors. If 
1a830 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1a840 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
1a850 61 6e 6e 6f 74 20 61 63 63 6f 6d 6d 6f 64 61 74  annot accommodat
1a860 65 20 73 75 63 68 20 63 68 61 6e 67 65 73 2c 20  e such changes, 
1a870 74 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  the xUpdate meth
1a880 6f 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  od..        /// 
1a890 6d 75 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65  must return an e
1a8a0 72 72 6f 72 20 63 6f 64 65 2e 0d 0a 20 20 20 20  rror code...    
1a8b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1a8c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1a8d0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1a8e0 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74   The xUpdate met
1a8f0 68 6f 64 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e  hod is optional.
1a900 20 49 66 20 74 68 65 20 78 55 70 64 61 74 65 20   If the xUpdate 
1a910 70 6f 69 6e 74 65 72 20 69 6e 20 74 68 65 0d 0a  pointer in the..
1a920 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
1a930 74 65 33 5f 6d 6f 64 75 6c 65 20 66 6f 72 20 61  te3_module for a
1a940 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
1a950 73 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  s a NULL pointer
1a960 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20 20  , then the..    
1a970 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
1a980 74 61 62 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e  table is read-on
1a990 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ly...        ///
1a9a0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1a9b0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1a9c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1a9d0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
1a9e0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1a9f0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
1aa00 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
1aa10 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
1aa20 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
1aa30 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1aa40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1aa50 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
1aa60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1aa70 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 65 77 20  e number of new 
1aa80 6f 72 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c 75  or modified colu
1aa90 6d 6e 20 76 61 6c 75 65 73 20 63 6f 6e 74 61 69  mn values contai
1aaa0 6e 65 64 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  ned in..        
1aab0 2f 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e 61  /// <paramref na
1aac0 6d 65 3d 22 61 72 67 76 22 20 2f 3e 2e 0d 0a 20  me="argv" />... 
1aad0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1aae0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1aaf0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
1ab00 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gv">..        //
1ab10 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 6e  / The array of n
1ab20 61 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74  ative pointers t
1ab30 6f 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  o sqlite3_value 
1ab40 73 74 72 75 63 74 75 72 65 73 20 63 6f 6e 74 61  structures conta
1ab50 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f  ining..        /
1ab60 2f 2f 20 74 68 65 20 6e 65 77 20 6f 72 20 6d 6f  // the new or mo
1ab70 64 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61  dified column va
1ab80 6c 75 65 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20  lues, if any... 
1ab90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1aba0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1abb0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f   <param name="ro
1abc0 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  wId">..        /
1abd0 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
1abe0 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
1abf0 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
1ac00 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20   to contain the 
1ac10 75 6e 69 71 75 65 0d 0a 20 20 20 20 20 20 20 20  unique..        
1ac20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 72 6f 77 20  /// integer row 
1ac30 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74  identifier for t
1ac40 68 65 20 72 6f 77 20 74 68 61 74 20 77 61 73 20  he row that was 
1ac50 69 6e 73 65 72 74 65 64 2c 20 69 66 20 61 6e 79  inserted, if any
1ac60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ac70 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1ac80 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1ac90 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
1aca0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
1acb0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
1acc0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1acd0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
1ace0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 55 70 64  teErrorCode xUpd
1acf0 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
1ad00 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
1ad10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
1ad20 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
1ad30 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 2c      IntPtr argv,
1ad40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1ad50 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20  f long rowId..  
1ad60 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
1ad70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1ad80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ada0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1adb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1adc0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1add0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1ade0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1adf0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1ae00 65 74 68 6f 64 20 62 65 67 69 6e 73 20 61 20 74  ethod begins a t
1ae10 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 61 20  ransaction on a 
1ae20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54  virtual table. T
1ae30 68 69 73 20 69 73 20 6d 65 74 68 6f 64 0d 0a 20  his is method.. 
1ae40 20 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 6f 70         /// is op
1ae50 74 69 6f 6e 61 6c 2e 20 54 68 65 20 78 42 65 67  tional. The xBeg
1ae60 69 6e 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71  in pointer of sq
1ae70 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79  lite3_module may
1ae80 20 62 65 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20   be NULL...     
1ae90 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1aea0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1aeb0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1aec0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 61  This method is a
1aed0 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 65 64 20 62  lways followed b
1aee0 79 20 6f 6e 65 20 63 61 6c 6c 20 74 6f 20 65 69  y one call to ei
1aef0 74 68 65 72 20 74 68 65 20 78 43 6f 6d 6d 69 74  ther the xCommit
1af00 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
1af10 20 78 52 6f 6c 6c 62 61 63 6b 20 6d 65 74 68 6f   xRollback metho
1af20 64 2e 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65  d. Virtual table
1af30 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 64 6f   transactions do
1af40 20 6e 6f 74 20 6e 65 73 74 2c 20 73 6f 20 74 68   not nest, so th
1af50 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
1af60 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 77 69 6c  Begin method wil
1af70 6c 20 6e 6f 74 20 62 65 20 69 6e 76 6f 6b 65 64  l not be invoked
1af80 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20   more than once 
1af90 6f 6e 20 61 20 73 69 6e 67 6c 65 0d 0a 20 20 20  on a single..   
1afa0 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c       /// virtual
1afb0 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61   table without a
1afc0 6e 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 63 61  n intervening ca
1afd0 6c 6c 20 74 6f 20 65 69 74 68 65 72 20 78 43 6f  ll to either xCo
1afe0 6d 6d 69 74 20 6f 72 0d 0a 20 20 20 20 20 20 20  mmit or..       
1aff0 20 2f 2f 2f 20 78 52 6f 6c 6c 62 61 63 6b 2e 20   /// xRollback. 
1b000 4d 75 6c 74 69 70 6c 65 20 63 61 6c 6c 73 20 74  Multiple calls t
1b010 6f 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 73 20  o other methods 
1b020 63 61 6e 20 61 6e 64 20 6c 69 6b 65 6c 79 20 77  can and likely w
1b030 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ill..        ///
1b040 20 6f 63 63 75 72 20 69 6e 20 62 65 74 77 65 65   occur in betwee
1b050 6e 20 74 68 65 20 78 42 65 67 69 6e 20 61 6e 64  n the xBegin and
1b060 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
1b070 6e 67 20 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20  ng xCommit or.. 
1b080 20 20 20 20 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c         /// xRoll
1b090 62 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f  back...        /
1b0a0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1b0b0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1b0c0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1b0d0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
1b0e0 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
1b0f0 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
1b100 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
1b110 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
1b120 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
1b130 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1b140 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1b150 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1b160 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
1b170 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
1b180 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
1b190 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
1b1a0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1b1b0 72 43 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a 20  rCode xBegin(.. 
1b1c0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1b1d0 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
1b1e0 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
1b1f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1b200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1b240 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1b250 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1b260 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1b270 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
1b280 20 73 69 67 6e 61 6c 73 20 74 68 65 20 73 74 61   signals the sta
1b290 72 74 20 6f 66 20 61 20 74 77 6f 2d 70 68 61 73  rt of a two-phas
1b2a0 65 20 63 6f 6d 6d 69 74 20 6f 6e 20 61 20 76 69  e commit on a vi
1b2b0 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f  rtual..        /
1b2c0 2f 2f 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69  // table. This i
1b2d0 73 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69  s method is opti
1b2e0 6f 6e 61 6c 2e 20 54 68 65 20 78 53 79 6e 63 20  onal. The xSync 
1b2f0 70 6f 69 6e 74 65 72 20 6f 66 0d 0a 20 20 20 20  pointer of..    
1b300 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
1b310 6d 6f 64 75 6c 65 20 6d 61 79 20 62 65 20 4e 55  module may be NU
1b320 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  LL...        ///
1b330 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1b340 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1b350 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1b360 65 74 68 6f 64 20 69 73 20 6f 6e 6c 79 20 69 6e  ethod is only in
1b370 76 6f 6b 65 64 20 61 66 74 65 72 20 63 61 6c 6c  voked after call
1b380 20 74 6f 20 74 68 65 20 78 42 65 67 69 6e 20 6d   to the xBegin m
1b390 65 74 68 6f 64 20 61 6e 64 0d 0a 20 20 20 20 20  ethod and..     
1b3a0 20 20 20 2f 2f 2f 20 70 72 69 6f 72 20 74 6f 20     /// prior to 
1b3b0 61 6e 20 78 43 6f 6d 6d 69 74 20 6f 72 20 78 52  an xCommit or xR
1b3c0 6f 6c 6c 62 61 63 6b 2e 20 49 6e 20 6f 72 64 65  ollback. In orde
1b3d0 72 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  r to implement t
1b3e0 77 6f 2d 70 68 61 73 65 0d 0a 20 20 20 20 20 20  wo-phase..      
1b3f0 20 20 2f 2f 2f 20 63 6f 6d 6d 69 74 2c 20 74 68    /// commit, th
1b400 65 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 6f  e xSync method o
1b410 6e 20 61 6c 6c 20 76 69 72 74 75 61 6c 20 74 61  n all virtual ta
1b420 62 6c 65 73 20 69 73 20 69 6e 76 6f 6b 65 64 20  bles is invoked 
1b430 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20  prior to..      
1b440 20 20 2f 2f 2f 20 69 6e 76 6f 6b 69 6e 67 20 74    /// invoking t
1b450 68 65 20 78 43 6f 6d 6d 69 74 20 6d 65 74 68 6f  he xCommit metho
1b460 64 20 6f 6e 20 61 6e 79 20 76 69 72 74 75 61 6c  d on any virtual
1b470 20 74 61 62 6c 65 2e 20 49 66 20 61 6e 79 20 6f   table. If any o
1b480 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
1b490 2f 2f 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 73  // xSync methods
1b4a0 20 66 61 69 6c 2c 20 74 68 65 20 65 6e 74 69 72   fail, the entir
1b4b0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
1b4c0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 0d 0a 20   rolled back... 
1b4d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1b4e0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1b4f0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1b500 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1b510 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
1b520 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
1b530 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
1b540 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
1b550 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
1b560 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
1b570 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1b580 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1b590 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
1b5a0 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
1b5b0 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
1b5c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
1b5d0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
1b5e0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53  LiteErrorCode xS
1b5f0 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ync(..          
1b600 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
1b610 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1b620 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1b630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b670 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1b680 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1b690 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1b6a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1b6b0 20 6d 65 74 68 6f 64 20 63 61 75 73 65 73 20 61   method causes a
1b6c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74   virtual table t
1b6d0 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 63 6f  ransaction to co
1b6e0 6d 6d 69 74 2e 20 54 68 69 73 20 69 73 0d 0a 20  mmit. This is.. 
1b6f0 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
1b700 64 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54  d is optional. T
1b710 68 65 20 78 43 6f 6d 6d 69 74 20 70 6f 69 6e 74  he xCommit point
1b720 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d 6f  er of sqlite3_mo
1b730 64 75 6c 65 20 6d 61 79 20 62 65 0d 0a 20 20 20  dule may be..   
1b740 20 20 20 20 20 2f 2f 2f 20 4e 55 4c 4c 2e 0d 0a       /// NULL...
1b750 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1b760 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1b770 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1b780 20 2f 2f 2f 20 41 20 63 61 6c 6c 20 74 6f 20 74   /// A call to t
1b790 68 69 73 20 6d 65 74 68 6f 64 20 61 6c 77 61 79  his method alway
1b7a0 73 20 66 6f 6c 6c 6f 77 73 20 61 20 70 72 69 6f  s follows a prio
1b7b0 72 20 63 61 6c 6c 20 74 6f 20 78 42 65 67 69 6e  r call to xBegin
1b7c0 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f   and..        //
1b7d0 2f 20 78 53 79 6e 63 2e 0d 0a 20 20 20 20 20 20  / xSync...      
1b7e0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1b7f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1b800 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1b810 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1b820 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
1b830 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
1b840 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
1b850 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
1b860 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
1b870 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1b880 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1b890 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1b8a0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1b8b0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1b8c0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1b8d0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1b8e0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1b8f0 72 72 6f 72 43 6f 64 65 20 78 43 6f 6d 6d 69 74  rrorCode xCommit
1b900 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
1b910 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
1b920 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1b930 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1b980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1b990 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1b9a0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1b9b0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1b9c0 74 68 6f 64 20 63 61 75 73 65 73 20 61 20 76 69  thod causes a vi
1b9d0 72 74 75 61 6c 20 74 61 62 6c 65 20 74 72 61 6e  rtual table tran
1b9e0 73 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62  saction to rollb
1b9f0 61 63 6b 2e 20 54 68 69 73 20 69 73 0d 0a 20 20  ack. This is..  
1ba00 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
1ba10 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68   is optional. Th
1ba20 65 20 78 52 6f 6c 6c 62 61 63 6b 20 70 6f 69 6e  e xRollback poin
1ba30 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d  ter of sqlite3_m
1ba40 6f 64 75 6c 65 20 6d 61 79 20 62 65 0d 0a 20 20  odule may be..  
1ba50 20 20 20 20 20 20 2f 2f 2f 20 4e 55 4c 4c 2e 0d        /// NULL..
1ba60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1ba70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1ba80 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1ba90 20 20 2f 2f 2f 20 41 20 63 61 6c 6c 20 74 6f 20    /// A call to 
1baa0 74 68 69 73 20 6d 65 74 68 6f 64 20 61 6c 77 61  this method alwa
1bab0 79 73 20 66 6f 6c 6c 6f 77 73 20 61 20 70 72 69  ys follows a pri
1bac0 6f 72 20 63 61 6c 6c 20 74 6f 20 78 42 65 67 69  or call to xBegi
1bad0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
1bae0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1baf0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1bb00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1bb10 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
1bb20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1bb30 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
1bb40 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
1bb50 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
1bb60 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
1bb70 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1bb80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1bb90 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1bba0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1bbb0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1bbc0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1bbd0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1bbe0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1bbf0 64 65 20 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20  de xRollback(.. 
1bc00 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1bc10 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
1bc20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
1bc30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1bc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1bc80 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1bc90 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1bca0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1bcb0 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
1bcc0 20 70 72 6f 76 69 64 65 73 20 6e 6f 74 69 66 69   provides notifi
1bcd0 63 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20  cation that the 
1bce0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
1bcf0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
1bd00 6d 65 6e 74 61 74 69 6f 6e 20 74 68 61 74 20 74  mentation that t
1bd10 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
1bd20 20 77 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 61   will be given a
1bd30 20 6e 65 77 20 6e 61 6d 65 2e 20 49 66 0d 0a 20   new name. If.. 
1bd40 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20         /// this 
1bd50 6d 65 74 68 6f 64 20 72 65 74 75 72 6e 73 20 53  method returns S
1bd60 51 4c 49 54 45 5f 4f 4b 20 74 68 65 6e 20 53 51  QLITE_OK then SQ
1bd70 4c 69 74 65 20 72 65 6e 61 6d 65 73 20 74 68 65  Lite renames the
1bd80 20 74 61 62 6c 65 2e 20 49 66 0d 0a 20 20 20 20   table. If..    
1bd90 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74      /// this met
1bda0 68 6f 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  hod returns an e
1bdb0 72 72 6f 72 20 63 6f 64 65 20 74 68 65 6e 20 74  rror code then t
1bdc0 68 65 20 72 65 6e 61 6d 69 6e 67 20 69 73 20 70  he renaming is p
1bdd0 72 65 76 65 6e 74 65 64 2e 0d 0a 20 20 20 20 20  revented...     
1bde0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1bdf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1be00 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1be10 54 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  The xRename meth
1be20 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66  od is required f
1be30 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c  or every virtual
1be40 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
1be50 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  /// implementati
1be60 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
1be70 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1be80 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1be90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1bea0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
1beb0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1bec0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
1bed0 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
1bee0 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
1bef0 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
1bf00 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1bf10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1bf20 72 61 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 22 3e  ram name="nArg">
1bf30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1bf40 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
1bf50 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e  ments to the fun
1bf60 63 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f 75 67  ction being soug
1bf70 68 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ht...        ///
1bf80 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1bf90 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1bfa0 6d 65 3d 22 7a 4e 61 6d 65 22 3e 0d 0a 20 20 20  me="zName">..   
1bfb0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d       /// The nam
1bfc0 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
1bfd0 6e 20 62 65 69 6e 67 20 73 6f 75 67 68 74 2e 0d  n being sought..
1bfe0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1bff0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1c000 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1c010 63 61 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20 20 20  callback">..    
1c020 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
1c030 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d  cess, this param
1c040 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
1c050 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  ified to contain
1c060 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1c070 2f 20 64 65 6c 65 67 61 74 65 20 72 65 73 70 6f  / delegate respo
1c080 6e 73 69 62 6c 65 20 66 6f 72 20 69 6d 70 6c 65  nsible for imple
1c090 6d 65 6e 74 69 6e 67 20 74 68 65 20 73 70 65 63  menting the spec
1c0a0 69 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 2e 0d  ified function..
1c0b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1c0c0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1c0d0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1c0e0 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20  pClientData">.. 
1c0f0 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
1c100 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
1c110 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
1c120 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74  modified to cont
1c130 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ain the..       
1c140 20 2f 2f 2f 20 6e 61 74 69 76 65 20 75 73 65 72   /// native user
1c150 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73  -data pointer as
1c160 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20  sociated with.. 
1c170 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1c180 6d 72 65 66 20 6e 61 6d 65 3d 22 63 61 6c 6c 62  mref name="callb
1c190 61 63 6b 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20  ack" />...      
1c1a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1c1b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1c1c0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1c1d0 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
1c1e0 68 65 20 73 70 65 63 69 66 69 65 64 20 66 75 6e  he specified fun
1c1f0 63 74 69 6f 6e 20 77 61 73 20 66 6f 75 6e 64 3b  ction was found;
1c200 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e   zero otherwise.
1c210 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1c220 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1c230 20 20 69 6e 74 20 78 46 69 6e 64 46 75 6e 63 74    int xFindFunct
1c240 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1c250 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
1c260 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
1c270 20 6e 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20   nArg,..        
1c280 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 61 6d 65      IntPtr zName
1c290 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
1c2a0 65 66 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63  ef SQLiteCallbac
1c2b0 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  k callback,..   
1c2c0 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
1c2d0 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 0d  Ptr pClientData.
1c2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1c2f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1c300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c340 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1c350 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1c360 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1c370 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
1c380 73 20 6d 65 74 68 6f 64 20 70 72 6f 76 69 64 65  s method provide
1c390 73 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20 74  s notification t
1c3a0 68 61 74 20 74 68 65 20 76 69 72 74 75 61 6c 20  hat the virtual 
1c3b0 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
1c3c0 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
1c3d0 6e 20 74 68 61 74 20 74 68 65 20 76 69 72 74 75  n that the virtu
1c3e0 61 6c 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65  al table will be
1c3f0 20 67 69 76 65 6e 20 61 20 6e 65 77 20 6e 61 6d   given a new nam
1c400 65 2e 20 49 66 0d 0a 20 20 20 20 20 20 20 20 2f  e. If..        /
1c410 2f 2f 20 74 68 69 73 20 6d 65 74 68 6f 64 20 72  // this method r
1c420 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b  eturns SQLITE_OK
1c430 20 74 68 65 6e 20 53 51 4c 69 74 65 20 72 65 6e   then SQLite ren
1c440 61 6d 65 73 20 74 68 65 20 74 61 62 6c 65 2e 20  ames the table. 
1c450 49 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  If..        /// 
1c460 74 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75  this method retu
1c470 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
1c480 65 20 74 68 65 6e 20 74 68 65 20 72 65 6e 61 6d  e then the renam
1c490 69 6e 67 20 69 73 20 70 72 65 76 65 6e 74 65 64  ing is prevented
1c4a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1c4b0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1c4c0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
1c4d0 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 52 65 6e      /// The xRen
1c4e0 61 6d 65 20 6d 65 74 68 6f 64 20 69 73 20 72 65  ame method is re
1c4f0 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
1c500 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
1c510 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
1c520 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
1c530 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1c540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1c550 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1c560 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1c570 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
1c580 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
1c590 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
1c5a0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
1c5b0 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
1c5c0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1c5d0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1c5e0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1c5f0 3d 22 7a 4e 65 77 22 3e 0d 0a 20 20 20 20 20 20  ="zNew">..      
1c600 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
1c610 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1c620 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74  UTF-8 encoded st
1c630 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
1c640 74 68 65 20 6e 65 77 0d 0a 20 20 20 20 20 20 20  the new..       
1c650 20 2f 2f 2f 20 6e 61 6d 65 20 66 6f 72 20 74 68   /// name for th
1c660 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
1c670 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1c680 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1c690 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1c6a0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1c6b0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1c6c0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1c6d0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1c6e0 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1c6f0 65 45 72 72 6f 72 43 6f 64 65 20 78 52 65 6e 61  eErrorCode xRena
1c700 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
1c710 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
1c720 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
1c730 74 72 20 7a 4e 65 77 0d 0a 20 20 20 20 20 20 20  tr zNew..       
1c740 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
1c750 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1c7a0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1c7b0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1c7c0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1c7d0 20 2f 2f 2f 20 54 68 65 73 65 20 6d 65 74 68 6f   /// These metho
1c7e0 64 73 20 70 72 6f 76 69 64 65 20 74 68 65 20 76  ds provide the v
1c7f0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
1c800 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 0d 0a  lementation an..
1c810 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 70 6f          /// oppo
1c820 72 74 75 6e 69 74 79 20 74 6f 20 69 6d 70 6c 65  rtunity to imple
1c830 6d 65 6e 74 20 6e 65 73 74 65 64 20 74 72 61 6e  ment nested tran
1c840 73 61 63 74 69 6f 6e 73 2e 20 54 68 65 79 20 61  sactions. They a
1c850 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20  re always..     
1c860 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 61 6c 20     /// optional 
1c870 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65  and will only be
1c880 20 63 61 6c 6c 65 64 20 69 6e 20 53 51 4c 69 74   called in SQLit
1c890 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 37 20  e version 3.7.7 
1c8a0 61 6e 64 20 6c 61 74 65 72 2e 0d 0a 20 20 20 20  and later...    
1c8b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1c8c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1c8d0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1c8e0 20 57 68 65 6e 20 78 53 61 76 65 70 6f 69 6e 74   When xSavepoint
1c8f0 28 58 2c 4e 29 20 69 73 20 69 6e 76 6f 6b 65 64  (X,N) is invoked
1c900 2c 20 74 68 61 74 20 69 73 20 61 20 73 69 67 6e  , that is a sign
1c910 61 6c 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  al to the virtua
1c920 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  l..        /// t
1c930 61 62 6c 65 20 58 20 74 68 61 74 20 69 74 20 73  able X that it s
1c940 68 6f 75 6c 64 20 73 61 76 65 20 69 74 73 20 63  hould save its c
1c950 75 72 72 65 6e 74 20 73 74 61 74 65 20 61 73 20  urrent state as 
1c960 73 61 76 65 70 6f 69 6e 74 20 4e 2e 20 41 0d 0a  savepoint N. A..
1c970 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 62 73          /// subs
1c980 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f 20 78  equent call to x
1c990 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20  RollbackTo(X,R) 
1c9a0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 73  means that the s
1c9b0 74 61 74 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  tate of the..   
1c9c0 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c       /// virtual
1c9d0 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20 72 65   table should re
1c9e0 74 75 72 6e 20 74 6f 20 77 68 61 74 20 69 74 20  turn to what it 
1c9f0 77 61 73 20 77 68 65 6e 20 78 53 61 76 65 70 6f  was when xSavepo
1ca00 69 6e 74 28 58 2c 52 29 20 77 61 73 0d 0a 20 20  int(X,R) was..  
1ca10 20 20 20 20 20 20 2f 2f 2f 20 6c 61 73 74 20 63        /// last c
1ca20 61 6c 6c 65 64 2e 20 54 68 65 20 63 61 6c 6c 20  alled. The call 
1ca30 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58  to xRollbackTo(X
1ca40 2c 52 29 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64  ,R) will invalid
1ca50 61 74 65 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20  ate all..       
1ca60 20 2f 2f 2f 20 73 61 76 65 70 6f 69 6e 74 73 20   /// savepoints 
1ca70 77 69 74 68 20 4e 3e 52 3b 20 6e 6f 6e 65 20 6f  with N>R; none o
1ca80 66 20 74 68 65 20 69 6e 76 61 6c 69 64 65 64 20  f the invalided 
1ca90 73 61 76 65 70 6f 69 6e 74 73 20 77 69 6c 6c 20  savepoints will 
1caa0 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1cab0 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6f 72 20 72  rolled back or r
1cac0 65 6c 65 61 73 65 64 20 77 69 74 68 6f 75 74 20  eleased without 
1cad0 66 69 72 73 74 20 62 65 69 6e 67 20 72 65 69 6e  first being rein
1cae0 69 74 69 61 6c 69 7a 65 64 20 62 79 20 61 20 63  itialized by a c
1caf0 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  all..        ///
1cb00 20 74 6f 20 78 53 61 76 65 70 6f 69 6e 74 28 29   to xSavepoint()
1cb10 2e 20 41 20 63 61 6c 6c 20 74 6f 20 78 52 65 6c  . A call to xRel
1cb20 65 61 73 65 28 58 2c 4d 29 20 69 6e 76 61 6c 69  ease(X,M) invali
1cb30 64 61 74 65 73 20 61 6c 6c 20 73 61 76 65 70 6f  dates all savepo
1cb40 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ints..        //
1cb50 2f 20 77 68 65 72 65 20 4e 3e 3d 4d 2e 0d 0a 20  / where N>=M... 
1cb60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1cb70 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1cb80 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1cb90 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20  /// None of the 
1cba0 78 53 61 76 65 70 6f 69 6e 74 28 29 2c 20 78 52  xSavepoint(), xR
1cbb0 65 6c 65 61 73 65 28 29 2c 20 6f 72 20 78 52 6f  elease(), or xRo
1cbc0 6c 6c 62 61 63 6b 54 6f 28 29 20 6d 65 74 68 6f  llbackTo() metho
1cbd0 64 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  ds will..       
1cbe0 20 2f 2f 2f 20 65 76 65 72 20 62 65 20 63 61 6c   /// ever be cal
1cbf0 6c 65 64 20 65 78 63 65 70 74 20 69 6e 20 62 65  led except in be
1cc00 74 77 65 65 6e 20 63 61 6c 6c 73 20 74 6f 20 78  tween calls to x
1cc10 42 65 67 69 6e 28 29 20 61 6e 64 20 65 69 74 68  Begin() and eith
1cc20 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  er..        /// 
1cc30 78 43 6f 6d 6d 69 74 28 29 20 6f 72 20 78 52 6f  xCommit() or xRo
1cc40 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20 20 20 20 20  llback()...     
1cc50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1cc60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1cc70 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1cc80 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1cc90 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
1cca0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
1ccb0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1ccc0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
1ccd0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
1cce0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1ccf0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1cd00 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1cd10 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20  iSavepoint">..  
1cd20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
1cd30 73 20 61 6e 20 69 6e 74 65 67 65 72 20 69 64 65  s an integer ide
1cd40 6e 74 69 66 69 65 72 20 75 6e 64 65 72 20 77 68  ntifier under wh
1cd50 69 63 68 20 74 68 65 20 74 68 65 20 63 75 72 72  ich the the curr
1cd60 65 6e 74 20 73 74 61 74 65 20 6f 66 0d 0a 20 20  ent state of..  
1cd70 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69        /// the vi
1cd80 72 74 75 61 6c 20 74 61 62 6c 65 20 73 68 6f 75  rtual table shou
1cd90 6c 64 20 62 65 20 73 61 76 65 64 2e 0d 0a 20 20  ld be saved...  
1cda0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1cdb0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1cdc0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1cdd0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1cde0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1cdf0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1ce00 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1ce10 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1ce20 6f 72 43 6f 64 65 20 78 53 61 76 65 70 6f 69 6e  orCode xSavepoin
1ce30 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1ce40 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
1ce50 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
1ce60 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20  Savepoint..     
1ce70 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1ce80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ce90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ceb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ced0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1cee0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1cef0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1cf00 20 20 20 2f 2f 2f 20 54 68 65 73 65 20 6d 65 74     /// These met
1cf10 68 6f 64 73 20 70 72 6f 76 69 64 65 20 74 68 65  hods provide the
1cf20 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
1cf30 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e  mplementation an
1cf40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70  ..        /// op
1cf50 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 69 6d 70  portunity to imp
1cf60 6c 65 6d 65 6e 74 20 6e 65 73 74 65 64 20 74 72  lement nested tr
1cf70 61 6e 73 61 63 74 69 6f 6e 73 2e 20 54 68 65 79  ansactions. They
1cf80 20 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20   are always..   
1cf90 20 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 61       /// optiona
1cfa0 6c 20 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79 20  l and will only 
1cfb0 62 65 20 63 61 6c 6c 65 64 20 69 6e 20 53 51 4c  be called in SQL
1cfc0 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
1cfd0 37 20 61 6e 64 20 6c 61 74 65 72 2e 0d 0a 20 20  7 and later...  
1cfe0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1cff0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1d000 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1d010 2f 2f 20 57 68 65 6e 20 78 53 61 76 65 70 6f 69  // When xSavepoi
1d020 6e 74 28 58 2c 4e 29 20 69 73 20 69 6e 76 6f 6b  nt(X,N) is invok
1d030 65 64 2c 20 74 68 61 74 20 69 73 20 61 20 73 69  ed, that is a si
1d040 67 6e 61 6c 20 74 6f 20 74 68 65 20 76 69 72 74  gnal to the virt
1d050 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ual..        ///
1d060 20 74 61 62 6c 65 20 58 20 74 68 61 74 20 69 74   table X that it
1d070 20 73 68 6f 75 6c 64 20 73 61 76 65 20 69 74 73   should save its
1d080 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 61   current state a
1d090 73 20 73 61 76 65 70 6f 69 6e 74 20 4e 2e 20 41  s savepoint N. A
1d0a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
1d0b0 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f  bsequent call to
1d0c0 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52   xRollbackTo(X,R
1d0d0 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  ) means that the
1d0e0 20 73 74 61 74 65 20 6f 66 20 74 68 65 0d 0a 20   state of the.. 
1d0f0 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75         /// virtu
1d100 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20  al table should 
1d110 72 65 74 75 72 6e 20 74 6f 20 77 68 61 74 20 69  return to what i
1d120 74 20 77 61 73 20 77 68 65 6e 20 78 53 61 76 65  t was when xSave
1d130 70 6f 69 6e 74 28 58 2c 52 29 20 77 61 73 0d 0a  point(X,R) was..
1d140 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 73 74          /// last
1d150 20 63 61 6c 6c 65 64 2e 20 54 68 65 20 63 61 6c   called. The cal
1d160 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  l to xRollbackTo
1d170 28 58 2c 52 29 20 77 69 6c 6c 20 69 6e 76 61 6c  (X,R) will inval
1d180 69 64 61 74 65 20 61 6c 6c 0d 0a 20 20 20 20 20  idate all..     
1d190 20 20 20 2f 2f 2f 20 73 61 76 65 70 6f 69 6e 74     /// savepoint
1d1a0 73 20 77 69 74 68 20 4e 3e 52 3b 20 6e 6f 6e 65  s with N>R; none
1d1b0 20 6f 66 20 74 68 65 20 69 6e 76 61 6c 69 64 65   of the invalide
1d1c0 64 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 6c  d savepoints wil
1d1d0 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  l be..        //
1d1e0 2f 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6f 72  / rolled back or
1d1f0 20 72 65 6c 65 61 73 65 64 20 77 69 74 68 6f 75   released withou
1d200 74 20 66 69 72 73 74 20 62 65 69 6e 67 20 72 65  t first being re
1d210 69 6e 69 74 69 61 6c 69 7a 65 64 20 62 79 20 61  initialized by a
1d220 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   call..        /
1d230 2f 2f 20 74 6f 20 78 53 61 76 65 70 6f 69 6e 74  // to xSavepoint
1d240 28 29 2e 20 41 20 63 61 6c 6c 20 74 6f 20 78 52  (). A call to xR
1d250 65 6c 65 61 73 65 28 58 2c 4d 29 20 69 6e 76 61  elease(X,M) inva
1d260 6c 69 64 61 74 65 73 20 61 6c 6c 20 73 61 76 65  lidates all save
1d270 70 6f 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  points..        
1d280 2f 2f 2f 20 77 68 65 72 65 20 4e 3e 3d 4d 2e 0d  /// where N>=M..
1d290 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1d2a0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1d2b0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1d2c0 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20 74 68    /// None of th
1d2d0 65 20 78 53 61 76 65 70 6f 69 6e 74 28 29 2c 20  e xSavepoint(), 
1d2e0 78 52 65 6c 65 61 73 65 28 29 2c 20 6f 72 20 78  xRelease(), or x
1d2f0 52 6f 6c 6c 62 61 63 6b 54 6f 28 29 20 6d 65 74  RollbackTo() met
1d300 68 6f 64 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20  hods will..     
1d310 20 20 20 2f 2f 2f 20 65 76 65 72 20 62 65 20 63     /// ever be c
1d320 61 6c 6c 65 64 20 65 78 63 65 70 74 20 69 6e 20  alled except in 
1d330 62 65 74 77 65 65 6e 20 63 61 6c 6c 73 20 74 6f  between calls to
1d340 20 78 42 65 67 69 6e 28 29 20 61 6e 64 20 65 69   xBegin() and ei
1d350 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ther..        //
1d360 2f 20 78 43 6f 6d 6d 69 74 28 29 20 6f 72 20 78  / xCommit() or x
1d370 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20 20 20  Rollback()...   
1d380 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1d390 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d3a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1d3b0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1d3c0 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
1d3d0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
1d3e0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
1d3f0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
1d400 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
1d410 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1d420 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1d430 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1d440 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a  ="iSavepoint">..
1d450 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1d460 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 75   is an integer u
1d470 73 65 64 20 74 6f 20 69 6e 64 69 63 61 74 65 20  sed to indicate 
1d480 74 68 61 74 20 61 6e 79 20 73 61 76 65 64 20 73  that any saved s
1d490 74 61 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20  tates with an.. 
1d4a0 20 20 20 20 20 20 20 2f 2f 2f 20 69 64 65 6e 74         /// ident
1d4b0 69 66 69 65 72 20 67 72 65 61 74 65 72 20 74 68  ifier greater th
1d4c0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1d4d0 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 65  his should be de
1d4e0 6c 65 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20  leted by the..  
1d4f0 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61        /// virtua
1d500 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
1d510 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1d520 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1d530 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1d540 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1d550 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1d560 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1d570 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1d580 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1d590 64 65 20 78 52 65 6c 65 61 73 65 28 0d 0a 20 20  de xRelease(..  
1d5a0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1d5b0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
1d5c0 20 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f       int iSavepo
1d5d0 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  int..           
1d5e0 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
1d5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d630 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d640 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1d650 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1d660 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1d670 20 54 68 65 73 65 20 6d 65 74 68 6f 64 73 20 70   These methods p
1d680 72 6f 76 69 64 65 20 74 68 65 20 76 69 72 74 75  rovide the virtu
1d690 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
1d6a0 6e 74 61 74 69 6f 6e 20 61 6e 0d 0a 20 20 20 20  ntation an..    
1d6b0 20 20 20 20 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e      /// opportun
1d6c0 69 74 79 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  ity to implement
1d6d0 20 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74   nested transact
1d6e0 69 6f 6e 73 2e 20 54 68 65 79 20 61 72 65 20 61  ions. They are a
1d6f0 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 2f  lways..        /
1d700 2f 2f 20 6f 70 74 69 6f 6e 61 6c 20 61 6e 64 20  // optional and 
1d710 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 63 61 6c  will only be cal
1d720 6c 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65  led in SQLite ve
1d730 72 73 69 6f 6e 20 33 2e 37 2e 37 20 61 6e 64 20  rsion 3.7.7 and 
1d740 6c 61 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  later...        
1d750 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
1d760 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1d770 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65  .        /// Whe
1d780 6e 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 4e  n xSavepoint(X,N
1d790 29 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68  ) is invoked, th
1d7a0 61 74 20 69 73 20 61 20 73 69 67 6e 61 6c 20 74  at is a signal t
1d7b0 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20  o the virtual.. 
1d7c0 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65         /// table
1d7d0 20 58 20 74 68 61 74 20 69 74 20 73 68 6f 75 6c   X that it shoul
1d7e0 64 20 73 61 76 65 20 69 74 73 20 63 75 72 72 65  d save its curre
1d7f0 6e 74 20 73 74 61 74 65 20 61 73 20 73 61 76 65  nt state as save
1d800 70 6f 69 6e 74 20 4e 2e 20 41 0d 0a 20 20 20 20  point N. A..    
1d810 20 20 20 20 2f 2f 2f 20 73 75 62 73 65 71 75 65      /// subseque
1d820 6e 74 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c  nt call to xRoll
1d830 62 61 63 6b 54 6f 28 58 2c 52 29 20 6d 65 61 6e  backTo(X,R) mean
1d840 73 20 74 68 61 74 20 74 68 65 20 73 74 61 74 65  s that the state
1d850 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
1d860 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62   /// virtual tab
1d870 6c 65 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e  le should return
1d880 20 74 6f 20 77 68 61 74 20 69 74 20 77 61 73 20   to what it was 
1d890 77 68 65 6e 20 78 53 61 76 65 70 6f 69 6e 74 28  when xSavepoint(
1d8a0 58 2c 52 29 20 77 61 73 0d 0a 20 20 20 20 20 20  X,R) was..      
1d8b0 20 20 2f 2f 2f 20 6c 61 73 74 20 63 61 6c 6c 65    /// last calle
1d8c0 64 2e 20 54 68 65 20 63 61 6c 6c 20 74 6f 20 78  d. The call to x
1d8d0 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20  RollbackTo(X,R) 
1d8e0 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20  will invalidate 
1d8f0 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  all..        ///
1d900 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68   savepoints with
1d910 20 4e 3e 52 3b 20 6e 6f 6e 65 20 6f 66 20 74 68   N>R; none of th
1d920 65 20 69 6e 76 61 6c 69 64 65 64 20 73 61 76 65  e invalided save
1d930 70 6f 69 6e 74 73 20 77 69 6c 6c 20 62 65 0d 0a  points will be..
1d940 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c          /// roll
1d950 65 64 20 62 61 63 6b 20 6f 72 20 72 65 6c 65 61  ed back or relea
1d960 73 65 64 20 77 69 74 68 6f 75 74 20 66 69 72 73  sed without firs
1d970 74 20 62 65 69 6e 67 20 72 65 69 6e 69 74 69 61  t being reinitia
1d980 6c 69 7a 65 64 20 62 79 20 61 20 63 61 6c 6c 0d  lized by a call.
1d990 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
1d9a0 78 53 61 76 65 70 6f 69 6e 74 28 29 2e 20 41 20  xSavepoint(). A 
1d9b0 63 61 6c 6c 20 74 6f 20 78 52 65 6c 65 61 73 65  call to xRelease
1d9c0 28 58 2c 4d 29 20 69 6e 76 61 6c 69 64 61 74 65  (X,M) invalidate
1d9d0 73 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73  s all savepoints
1d9e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68  ..        /// wh
1d9f0 65 72 65 20 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20  ere N>=M...     
1da00 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1da10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1da20 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1da30 4e 6f 6e 65 20 6f 66 20 74 68 65 20 78 53 61 76  None of the xSav
1da40 65 70 6f 69 6e 74 28 29 2c 20 78 52 65 6c 65 61  epoint(), xRelea
1da50 73 65 28 29 2c 20 6f 72 20 78 52 6f 6c 6c 62 61  se(), or xRollba
1da60 63 6b 54 6f 28 29 20 6d 65 74 68 6f 64 73 20 77  ckTo() methods w
1da70 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ill..        ///
1da80 20 65 76 65 72 20 62 65 20 63 61 6c 6c 65 64 20   ever be called 
1da90 65 78 63 65 70 74 20 69 6e 20 62 65 74 77 65 65  except in betwee
1daa0 6e 20 63 61 6c 6c 73 20 74 6f 20 78 42 65 67 69  n calls to xBegi
1dab0 6e 28 29 20 61 6e 64 20 65 69 74 68 65 72 0d 0a  n() and either..
1dac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6d          /// xCom
1dad0 6d 69 74 28 29 20 6f 72 20 78 52 6f 6c 6c 62 61  mit() or xRollba
1dae0 63 6b 28 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ck()...        /
1daf0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1db00 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1db10 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1db20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
1db30 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
1db40 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
1db50 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
1db60 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
1db70 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
1db80 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1db90 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1dba0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76  param name="iSav
1dbb0 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20  epoint">..      
1dbc0 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6e    /// This is an
1dbd0 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66   integer identif
1dbe0 69 65 72 20 75 73 65 64 20 74 6f 20 73 70 65 63  ier used to spec
1dbf0 69 66 79 20 61 20 73 70 65 63 69 66 69 63 20 73  ify a specific s
1dc00 61 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  aved..        //
1dc10 2f 20 73 74 61 74 65 20 66 6f 72 20 74 68 65 20  / state for the 
1dc20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 6f  virtual table fo
1dc30 72 20 69 74 20 74 6f 20 72 65 73 74 6f 72 65 20  r it to restore 
1dc40 69 74 73 65 6c 66 20 62 61 63 6b 20 74 6f 2c 20  itself back to, 
1dc50 77 68 69 63 68 0d 0a 20 20 20 20 20 20 20 20 2f  which..        /
1dc60 2f 2f 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 68  // should also h
1dc70 61 76 65 20 74 68 65 20 65 66 66 65 63 74 20 6f  ave the effect o
1dc80 66 20 64 65 6c 65 74 69 6e 67 20 61 6c 6c 20 73  f deleting all s
1dc90 61 76 65 64 20 73 74 61 74 65 73 20 77 69 74 68  aved states with
1dca0 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   an..        ///
1dcb0 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66   integer identif
1dcc0 69 65 72 20 67 72 65 61 74 65 72 20 74 68 61 6e  ier greater than
1dcd0 20 74 68 69 73 20 6f 6e 65 2e 0d 0a 20 20 20 20   this one...    
1dce0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1dcf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1dd00 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1dd10 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1dd20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1dd30 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1dd40 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1dd50 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1dd60 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  Code xRollbackTo
1dd70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
1dd80 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
1dd90 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53            int iS
1dda0 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20  avepoint..      
1ddb0 20 20 20 20 20 20 29 3b 0d 0a 20 20 20 20 7d 0d        );..    }.
1ddc0 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
1ddd0 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1dde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ddf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de20 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
1de30 6e 20 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  n ISQLiteManaged
1de40 4d 6f 64 75 6c 65 20 49 6e 74 65 72 66 61 63 65  Module Interface
1de50 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1de60 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
1de70 73 20 69 6e 74 65 72 66 61 63 65 20 72 65 70 72  s interface repr
1de80 65 73 65 6e 74 73 20 61 20 76 69 72 74 75 61 6c  esents a virtual
1de90 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
1dea0 61 74 69 6f 6e 20 77 72 69 74 74 65 6e 20 69 6e  ation written in
1deb0 0d 0a 20 20 20 20 2f 2f 2f 20 6d 61 6e 61 67 65  ..    /// manage
1dec0 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f  d code...    ///
1ded0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1dee0 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63   public interfac
1def0 65 20 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  e ISQLiteManaged
1df00 4d 6f 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20  Module..    {.. 
1df10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1df20 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1df30 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  / Returns non-ze
1df40 72 6f 20 69 66 20 74 68 65 20 73 63 68 65 6d 61  ro if the schema
1df50 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c   for the virtual
1df60 20 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e 0d   table has been.
1df70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 63  .        /// dec
1df80 6c 61 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  lared...        
1df90 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1dfa0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 44 65 63          bool Dec
1dfb0 6c 61 72 65 64 20 7b 20 67 65 74 3b 20 7d 0d 0a  lared { get; }..
1dfc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1dfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e010 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1e020 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1e030 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
1e040 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
1e050 6d 6f 64 75 6c 65 20 61 73 20 69 74 20 77 61 73  module as it was
1e060 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74 68   registered with
1e070 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20   the SQLite..   
1e080 20 20 20 20 20 2f 2f 2f 20 63 6f 72 65 20 6c 69       /// core li
1e090 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  brary...        
1e0a0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1e0b0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 4e          string N
1e0c0 61 6d 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 0d 0a  ame { get; }....
1e0d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1e0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1e120 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1e130 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1e140 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
1e150 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
1e160 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
1e170 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
1e180 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
1e190 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
1e1a0 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
1e1b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1e1c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1e1d0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e1e0 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d 0a 20  "connection">.. 
1e1f0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1e200 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1e210 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f  Connection" /> o
1e220 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
1e230 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a  ssociated with..
1e240 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
1e250 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1e260 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1e270 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1e280 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
1e290 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20  ClientData">..  
1e2a0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
1e2b0 74 69 76 65 20 75 73 65 72 2d 64 61 74 61 20 70  tive user-data p
1e2c0 6f 69 6e 74 65 72 20 61 73 73 6f 63 69 61 74 65  ointer associate
1e2d0 64 20 77 69 74 68 20 74 68 69 73 20 6d 6f 64 75  d with this modu
1e2e0 6c 65 2c 20 61 73 20 69 74 20 77 61 73 0d 0a 20  le, as it was.. 
1e2f0 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 6f 76 69         /// provi
1e300 64 65 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74  ded to the SQLit
1e310 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77  e core library w
1e320 68 65 6e 20 74 68 65 20 6e 61 74 69 76 65 20 6d  hen the native m
1e330 6f 64 75 6c 65 20 69 6e 73 74 61 6e 63 65 0d 0a  odule instance..
1e340 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 61 73 20          /// was 
1e350 63 72 65 61 74 65 64 2e 0d 0a 20 20 20 20 20 20  created...      
1e360 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1e370 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1e380 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e  am name="argumen
1e390 74 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ts">..        //
1e3a0 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6e 61 6d  / The module nam
1e3b0 65 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  e, database name
1e3c0 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  , virtual table 
1e3d0 6e 61 6d 65 2c 20 61 6e 64 20 61 6c 6c 20 6f 74  name, and all ot
1e3e0 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  her..        ///
1e3f0 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
1e400 64 20 74 6f 20 74 68 65 20 43 52 45 41 54 45 20  d to the CREATE 
1e410 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74  VIRTUAL TABLE st
1e420 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20  atement...      
1e430 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1e440 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1e450 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
1e460 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
1e470 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73  on success, this
1e480 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
1e490 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63  be modified to c
1e4a0 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20  ontain the..    
1e4b0 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1e4c0 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
1e4d0 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
1e4e0 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
1e4f0 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20  ated with..     
1e500 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75     /// the virtu
1e510 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
1e520 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1e530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1e540 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22  ram name="error"
1e550 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
1e560 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20 74 68 69  pon failure, thi
1e570 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
1e580 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
1e590 63 6f 6e 74 61 69 6e 20 61 6e 20 65 72 72 6f 72  contain an error
1e5a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
1e5b0 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20  ssage...        
1e5c0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1e5d0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1e5e0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1e5f0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1e600 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1e610 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1e620 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1e630 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1e640 20 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20   Create(..      
1e650 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
1e660 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
1e670 6e 2c 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  n,  /* in */..  
1e680 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1e690 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 20 20 20   pClientData,   
1e6a0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
1e6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1e6c0 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73  ring[] arguments
1e6d0 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ,           /* i
1e6e0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1e6f0 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74    ref SQLiteVirt
1e700 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20  ualTable table, 
1e710 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  /* out */..     
1e720 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
1e730 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
1e740 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
1e750 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1e760 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1e770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1e7c0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1e7d0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1e7e0 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
1e7f0 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
1e800 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1e810 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
1e820 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
1e830 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
1e840 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1e850 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1e860 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1e870 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e  me="connection">
1e880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1e890 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
1e8a0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f  iteConnection" /
1e8b0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1e8c0 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
1e8d0 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  h..        /// t
1e8e0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
1e8f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1e900 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1e910 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1e920 3d 22 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d  ="pClientData">.
1e930 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1e940 20 6e 61 74 69 76 65 20 75 73 65 72 2d 64 61 74   native user-dat
1e950 61 20 70 6f 69 6e 74 65 72 20 61 73 73 6f 63 69  a pointer associ
1e960 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6d  ated with this m
1e970 6f 64 75 6c 65 2c 20 61 73 20 69 74 20 77 61 73  odule, as it was
1e980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72  ..        /// pr
1e990 6f 76 69 64 65 64 20 74 6f 20 74 68 65 20 53 51  ovided to the SQ
1e9a0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
1e9b0 79 20 77 68 65 6e 20 74 68 65 20 6e 61 74 69 76  y when the nativ
1e9c0 65 20 6d 6f 64 75 6c 65 20 69 6e 73 74 61 6e 63  e module instanc
1e9d0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  e..        /// w
1e9e0 61 73 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 20  as created...   
1e9f0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1ea00 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1ea10 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75  param name="argu
1ea20 6d 65 6e 74 73 22 3e 0d 0a 20 20 20 20 20 20 20  ments">..       
1ea30 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20   /// The module 
1ea40 6e 61 6d 65 2c 20 64 61 74 61 62 61 73 65 20 6e  name, database n
1ea50 61 6d 65 2c 20 76 69 72 74 75 61 6c 20 74 61 62  ame, virtual tab
1ea60 6c 65 20 6e 61 6d 65 2c 20 61 6e 64 20 61 6c 6c  le name, and all
1ea70 20 6f 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20   other..        
1ea80 2f 2f 2f 20 61 72 67 75 6d 65 6e 74 73 20 70 61  /// arguments pa
1ea90 73 73 65 64 20 74 6f 20 74 68 65 20 43 52 45 41  ssed to the CREA
1eaa0 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
1eab0 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20   statement...   
1eac0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1ead0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1eae0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
1eaf0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
1eb00 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
1eb10 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
1eb20 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
1eb30 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20  o contain the.. 
1eb40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
1eb50 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
1eb60 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a  ualTable" /> obj
1eb70 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
1eb80 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20  ociated with..  
1eb90 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69        /// the vi
1eba0 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
1ebb0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1ebc0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1ebd0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
1ebe0 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
1ebf0 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20  / Upon failure, 
1ec00 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
1ec10 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
1ec20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 72  to contain an er
1ec30 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ror..        ///
1ec40 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20   message...     
1ec50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1ec60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
1ec70 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1ec80 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
1ec90 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
1eca0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1ecb0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1ecc0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1ecd0 6f 64 65 20 43 6f 6e 6e 65 63 74 28 0d 0a 20 20  ode Connect(..  
1ece0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1ecf0 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
1ed00 63 74 69 6f 6e 2c 20 20 2f 2a 20 69 6e 20 2a 2f  ction,  /* in */
1ed10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
1ed20 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61  tPtr pClientData
1ed30 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ,           /* i
1ed40 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
1ed50 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d    string[] argum
1ed60 65 6e 74 73 2c 20 20 20 20 20 20 20 20 20 20 20  ents,           
1ed70 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1ed80 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65        ref SQLite
1ed90 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
1eda0 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20  le, /* out */.. 
1edb0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1edc0 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20  tring error     
1edd0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20           /* out 
1ede0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1edf0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1ee00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee40 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ee50 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1ee60 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1ee70 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1ee80 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1ee90 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1eea0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1eeb0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1eec0 2e 78 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20  .xBestIndex" /> 
1eed0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
1eee0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1eef0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1ef00 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
1ef10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1ef20 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
1ef30 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1ef40 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1ef50 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
1ef60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
1ef70 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
1ef80 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
1ef90 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1efa0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1efb0 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
1efc0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1efd0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1efe0 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74  Index" /> object
1eff0 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69   instance contai
1f000 6e 69 6e 67 20 61 6c 6c 20 74 68 65 0d 0a 20 20  ning all the..  
1f010 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 20 66        /// data f
1f020 6f 72 20 74 68 65 20 69 6e 70 75 74 73 20 61 6e  or the inputs an
1f030 64 20 6f 75 74 70 75 74 73 20 72 65 6c 61 74 69  d outputs relati
1f040 6e 67 20 74 6f 20 69 6e 64 65 78 20 73 65 6c 65  ng to index sele
1f050 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ction...        
1f060 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1f070 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1f080 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1f090 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1f0a0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1f0b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1f0c0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1f0d0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1f0e0 20 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20   BestIndex(..   
1f0f0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
1f100 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
1f110 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  e, /* in */..   
1f120 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 49           SQLiteI
1f130 6e 64 65 78 20 69 6e 64 65 78 20 20 20 20 20 20  ndex index      
1f140 20 20 20 2f 2a 20 69 6e 2c 20 6f 75 74 20 2a 2f     /* in, out */
1f150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1f160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1f170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1f1c0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1f1d0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1f1e0 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
1f1f0 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
1f200 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1f210 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
1f220 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
1f230 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  Disconnect" /> m
1f240 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
1f250 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1f260 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1f270 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
1f280 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1f290 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
1f2a0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
1f2b0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
1f2c0 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
1f2d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
1f2e0 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
1f2f0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
1f300 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1f310 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1f320 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1f330 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1f340 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1f350 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1f360 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1f370 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44  QLiteErrorCode D
1f380 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20  isconnect(..    
1f390 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
1f3a0 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
1f3b0 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
1f3c0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1f3d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f420 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1f430 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1f440 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
1f450 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
1f460 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
1f470 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
1f480 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
1f490 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79  eModule.xDestroy
1f4a0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
1f4b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1f4c0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1f4d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1f4e0 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
1f4f0 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1f500 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
1f510 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
1f520 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
1f530 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
1f540 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74  / with this virt
1f550 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
1f560 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1f570 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1f580 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1f590 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1f5a0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1f5b0 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1f5c0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1f5d0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1f5e0 43 6f 64 65 20 44 65 73 74 72 6f 79 28 0d 0a 20  Code Destroy(.. 
1f5f0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1f600 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
1f610 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  ble /* in */..  
1f620 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
1f630 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f680 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1f690 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1f6a0 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
1f6b0 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
1f6c0 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
1f6d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
1f6e0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
1f6f0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e  tiveModule.xOpen
1f700 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
1f710 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1f720 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1f730 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1f740 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
1f750 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1f760 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
1f770 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
1f780 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
1f790 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
1f7a0 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74  / with this virt
1f7b0 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
1f7c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1f7d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1f7e0 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f  aram name="curso
1f7f0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
1f800 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
1f810 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
1f820 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
1f830 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20  o contain the.. 
1f840 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
1f850 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
1f860 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
1f870 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1f880 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  ce associated.. 
1f890 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20         /// with 
1f8a0 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64  the newly opened
1f8b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
1f8c0 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  ursor...        
1f8d0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1f8e0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1f8f0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1f900 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1f910 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1f920 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1f930 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1f940 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1f950 20 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20   Open(..        
1f960 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1f970 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20  lTable table,   
1f980 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
1f990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1f9a0 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  f SQLiteVirtualT
1f9b0 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
1f9c0 72 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20  r /* out */..   
1f9d0 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1f9e0 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1fa30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1fa40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1fa50 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
1fa60 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
1fa70 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
1fa80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
1fa90 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
1faa0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  iveModule.xClose
1fab0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
1fac0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1fad0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1fae0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
1faf0 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
1fb00 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1fb10 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
1fb20 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e  lTableCursor" />
1fb30 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1fb40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73  ..        /// as
1fb50 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1fb60 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  e previously ope
1fb70 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ned virtual tabl
1fb80 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a  e cursor to be..
1fb90 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64          /// used
1fba0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1fbb0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1fbc0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1fbd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
1fbe0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
1fbf0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
1fc00 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1fc10 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
1fc20 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6c 6f 73  teErrorCode Clos
1fc30 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1fc40 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1fc50 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20  leCursor cursor 
1fc60 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
1fc70 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1fc80 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1fc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1fcd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1fce0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1fcf0 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
1fd00 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
1fd10 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
1fd20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1fd30 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
1fd40 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
1fd50 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
1fd60 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1fd70 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1fd80 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72  <param name="cur
1fd90 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
1fda0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1fdb0 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
1fdc0 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f  ableCursor" /> o
1fdd0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a  bject instance..
1fde0 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
1fdf0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1fe00 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1fe10 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  d virtual table 
1fe20 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20  cursor to be..  
1fe30 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d        /// used..
1fe40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1fe50 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1fe60 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1fe70 69 6e 64 65 78 4e 75 6d 62 65 72 22 3e 0d 0a 20  indexNumber">.. 
1fe80 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65         /// Numbe
1fe90 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  r used to help i
1fea0 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
1feb0 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20  cted index...   
1fec0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1fed0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1fee0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65  param name="inde
1fef0 78 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20 20  xString">..     
1ff00 20 20 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73     /// String us
1ff10 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74  ed to help ident
1ff20 69 66 79 20 74 68 65 20 73 65 6c 65 63 74 65 64  ify the selected
1ff30 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20   index...       
1ff40 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1ff50 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1ff60 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e  m name="values">
1ff70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1ff80 65 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70  e values corresp
1ff90 6f 6e 64 69 6e 67 20 74 6f 20 65 61 63 68 20 63  onding to each c
1ffa0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 73 65 6c  olumn in the sel
1ffb0 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20  ected index...  
1ffc0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1ffd0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1ffe0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1fff0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
20000 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
20010 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
20020 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
20030 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
20040 6f 72 43 6f 64 65 20 46 69 6c 74 65 72 28 0d 0a  orCode Filter(..
20050 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
20060 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
20070 72 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a 20  rsor cursor, /* 
20080 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
20090 20 20 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62     int indexNumb
200a0 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  er,             
200b0 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
200c0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
200d0 20 69 6e 64 65 78 53 74 72 69 6e 67 2c 20 20 20   indexString,   
200e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
200f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
20100 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76   SQLiteValue[] v
20110 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 20  alues           
20120 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
20130 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
20140 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d  /////////////...
20190 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
201a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
201b0 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
201c0 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
201d0 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
201e0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
201f0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
20200 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 22 20  veModule.xNext" 
20210 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
20220 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
20230 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
20240 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72  <param name="cur
20250 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
20260 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
20270 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
20280 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f  ableCursor" /> o
20290 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a  bject instance..
202a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
202b0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
202c0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
202d0 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  d virtual table 
202e0 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20  cursor to be..  
202f0 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d        /// used..
20300 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
20310 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
20320 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
20330 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
20340 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
20350 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
20360 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
20370 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
20380 45 72 72 6f 72 43 6f 64 65 20 4e 65 78 74 28 0d  ErrorCode Next(.
20390 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
203a0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
203b0 75 72 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20  ursor cursor /* 
203c0 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
203d0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
203e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
203f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20420 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20430 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
20440 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
20450 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
20460 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65  lled in response
20470 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
20480 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
20490 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
204a0 75 6c 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74  ule.xEof" /> met
204b0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
204c0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
204d0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
204e0 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d   name="cursor">.
204f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
20500 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
20510 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
20520 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
20530 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20  instance..      
20540 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
20550 20 77 69 74 68 20 74 68 65 20 70 72 65 76 69 6f   with the previo
20560 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74  usly opened virt
20570 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
20580 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
20590 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20  /// used...     
205a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
205b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
205c0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
205d0 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
205e0 6e 6f 20 6d 6f 72 65 20 72 6f 77 73 20 61 72 65  no more rows are
205f0 20 61 76 61 69 6c 61 62 6c 65 3b 20 7a 65 72 6f   available; zero
20600 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20   otherwise...   
20610 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
20620 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  ns>..        boo
20630 6c 20 45 6f 66 28 0d 0a 20 20 20 20 20 20 20 20  l Eof(..        
20640 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
20650 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
20660 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  sor /* in */..  
20670 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
20680 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
206d0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
206e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
206f0 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
20700 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
20710 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
20720 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
20730 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
20740 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
20750 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  mn" /> method...
20760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
20770 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
20780 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
20790 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
207a0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
207b0 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
207c0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
207d0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
207e0 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
207f0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
20800 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  the previously o
20810 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61  pened virtual ta
20820 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65  ble cursor to be
20830 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73  ..        /// us
20840 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
20850 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
20860 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
20870 6d 65 3d 22 63 6f 6e 74 65 78 74 22 3e 0d 0a 20  me="context">.. 
20880 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
20890 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
208a0 43 6f 6e 74 65 78 74 22 20 2f 3e 20 6f 62 6a 65  Context" /> obje
208b0 63 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62  ct instance to b
208c0 65 20 75 73 65 64 20 66 6f 72 0d 0a 20 20 20 20  e used for..    
208d0 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e 69 6e      /// returnin
208e0 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
208f0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20  column value to 
20900 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
20910 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20  library...      
20920 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
20930 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
20940 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e  am name="index">
20950 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
20960 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64  e zero-based ind
20970 65 78 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ex corresponding
20980 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   to the column c
20990 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20  ontaining the.. 
209a0 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65         /// value
209b0 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 2e   to be returned.
209c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
209d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
209e0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
209f0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
20a00 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
20a10 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
20a20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
20a30 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
20a40 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6c 75 6d  eErrorCode Colum
20a50 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
20a60 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
20a70 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c  leCursor cursor,
20a80 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
20a90 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
20aa0 74 65 78 74 20 63 6f 6e 74 65 78 74 2c 20 20 20  text context,   
20ab0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
20ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
20ad0 74 20 69 6e 64 65 78 20 20 20 20 20 20 20 20 20  t index         
20ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20af0 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
20b00 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
20b10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20b60 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
20b70 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
20b80 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
20b90 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
20ba0 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
20bb0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
20bc0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
20bd0 6f 64 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e  odule.xRowId" />
20be0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
20bf0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
20c00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
20c10 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f  aram name="curso
20c20 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
20c30 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
20c40 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
20c50 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a  leCursor" /> obj
20c60 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20  ect instance..  
20c70 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69        /// associ
20c80 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 72  ated with the pr
20c90 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
20ca0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
20cb0 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20 20  rsor to be..    
20cc0 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20      /// used... 
20cd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
20ce0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
20cf0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f   <param name="ro
20d00 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  wId">..        /
20d10 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
20d20 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
20d30 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
20d40 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20   to contain the 
20d50 75 6e 69 71 75 65 0d 0a 20 20 20 20 20 20 20 20  unique..        
20d60 2f 2f 2f 20 69 6e 74 65 67 65 72 20 72 6f 77 20  /// integer row 
20d70 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74  identifier for t
20d80 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 66  he current row f
20d90 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64  or the specified
20da0 20 63 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20   cursor...      
20db0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
20dc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
20dd0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
20de0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
20df0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
20e00 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20e10 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
20e20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
20e30 64 65 20 52 6f 77 49 64 28 0d 0a 20 20 20 20 20  de RowId(..     
20e40 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
20e50 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
20e60 63 75 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f  cursor, /* in */
20e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
20e80 66 20 6c 6f 6e 67 20 72 6f 77 49 64 20 20 20 20  f long rowId    
20e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20ea0 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  * out */..      
20eb0 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
20ec0 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20f10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
20f20 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
20f30 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
20f40 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
20f50 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
20f60 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
20f70 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
20f80 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 22 20  Module.xUpdate" 
20f90 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
20fa0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
20fb0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
20fc0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
20fd0 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
20fe0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
20ff0 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
21000 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
21010 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
21020 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
21030 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61  with this virtua
21040 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
21050 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
21060 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
21070 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22  am name="values"
21080 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
21090 68 65 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65  he array of <see
210a0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c   cref="SQLiteVal
210b0 75 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ue" /> object in
210c0 73 74 61 6e 63 65 73 20 63 6f 6e 74 61 69 6e 69  stances containi
210d0 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
210e0 74 68 65 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66  the new or modif
210f0 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  ied column value
21100 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20  s, if any...    
21110 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
21120 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
21130 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64  aram name="rowId
21140 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
21150 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
21160 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73  is parameter mus
21170 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f  t be modified to
21180 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 75 6e 69   contain the uni
21190 71 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  que..        ///
211a0 20 69 6e 74 65 67 65 72 20 72 6f 77 20 69 64 65   integer row ide
211b0 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20  ntifier for the 
211c0 72 6f 77 20 74 68 61 74 20 77 61 73 20 69 6e 73  row that was ins
211d0 65 72 74 65 64 2c 20 69 66 20 61 6e 79 2e 0d 0a  erted, if any...
211e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
211f0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
21200 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
21210 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
21220 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
21230 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
21240 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
21250 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
21260 72 72 6f 72 43 6f 64 65 20 55 70 64 61 74 65 28  rrorCode Update(
21270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
21280 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
21290 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f   table, /* in */
212a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
212b0 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75  LiteValue[] valu
212c0 65 73 2c 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f  es,     /* in */
212d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
212e0 66 20 6c 6f 6e 67 20 72 6f 77 49 64 20 20 20 20  f long rowId    
212f0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a          /* out *
21300 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
21310 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21360 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21370 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
21380 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
21390 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
213a0 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
213b0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
213c0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
213d0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
213e0 78 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68 6f  xBegin" /> metho
213f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
21400 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
21410 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
21420 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
21430 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
21440 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
21450 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
21460 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
21470 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
21480 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
21490 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
214a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
214b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
214c0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
214d0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
214e0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
214f0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
21500 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
21510 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
21520 65 45 72 72 6f 72 43 6f 64 65 20 42 65 67 69 6e  eErrorCode Begin
21530 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
21540 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
21550 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f  e table /* in */
21560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
21570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
21580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
215d0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
215e0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
215f0 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
21600 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
21610 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
21620 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
21630 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
21640 53 79 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Sync" /> method.
21650 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
21660 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
21670 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
21680 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
21690 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
216a0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
216b0 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
216c0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
216d0 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
216e0 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
216f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
21700 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
21710 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
21720 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
21730 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
21740 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
21750 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
21760 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
21770 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
21780 72 72 6f 72 43 6f 64 65 20 53 79 6e 63 28 0d 0a  rrorCode Sync(..
21790 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
217a0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
217b0 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  able /* in */.. 
217c0 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
217d0 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
21810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
21830 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
21840 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
21850 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20  od is called in 
21860 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d  response to the.
21870 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
21880 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
21890 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d  ativeModule.xCom
218a0 6d 69 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  mit" /> method..
218b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
218c0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
218d0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
218e0 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  ="table">..     
218f0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
21900 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
21910 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a  ualTable" /> obj
21920 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
21930 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
21940 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76   /// with this v
21950 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
21960 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
21970 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
21980 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
21990 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
219a0 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
219b0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
219c0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
219d0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
219e0 72 6f 72 43 6f 64 65 20 43 6f 6d 6d 69 74 28 0d  rorCode Commit(.
219f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
21a00 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
21a10 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  table /* in */..
21a20 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
21a30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
21a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
21a90 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
21aa0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
21ab0 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
21ac0 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
21ad0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
21ae0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
21af0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  NativeModule.xRo
21b00 6c 6c 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f  llback" /> metho
21b10 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
21b20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
21b30 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
21b40 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
21b50 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
21b60 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
21b70 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
21b80 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
21b90 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
21ba0 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
21bb0 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
21bc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
21bd0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
21be0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
21bf0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
21c00 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
21c10 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
21c20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
21c30 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
21c40 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c 6c 62  eErrorCode Rollb
21c50 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
21c60 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
21c70 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e  able table /* in
21c80 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
21c90 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
21ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ce0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21cf0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
21d00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
21d10 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
21d20 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
21d30 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
21d40 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
21d50 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
21d60 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22  e.xFindFunction"
21d70 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
21d80 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
21d90 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
21da0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61   <param name="ta
21db0 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
21dc0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
21dd0 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
21de0 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
21df0 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
21e00 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
21e10 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75   with this virtu
21e20 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
21e30 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
21e40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
21e50 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65  ram name="argume
21e60 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 20  ntCount">..     
21e70 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
21e80 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
21e90 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62  o the function b
21ea0 65 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20 20  eing sought...  
21eb0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
21ec0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
21ed0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d  <param name="nam
21ee0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
21ef0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
21f00 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
21f10 73 6f 75 67 68 74 2e 0d 0a 20 20 20 20 20 20 20  sought...       
21f20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
21f30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
21f40 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e  m name="function
21f50 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
21f60 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
21f70 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73  is parameter mus
21f80 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f  t be modified to
21f90 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20   contain the..  
21fa0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
21fb0 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
21fc0 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ion" /> object i
21fd0 6e 73 74 61 6e 63 65 20 72 65 73 70 6f 6e 73 69  nstance responsi
21fe0 62 6c 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ble for..       
21ff0 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 69 6e   /// implementin
22000 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
22010 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  function...     
22020 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
22030 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
22040 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e  ram name="pClien
22050 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20  tData">..       
22060 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
22070 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  s, this paramete
22080 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
22090 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
220a0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
220b0 61 74 69 76 65 20 75 73 65 72 2d 64 61 74 61 20  ative user-data 
220c0 70 6f 69 6e 74 65 72 20 61 73 73 6f 63 69 61 74  pointer associat
220d0 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20  ed with..       
220e0 20 2f 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e   /// <paramref n
220f0 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 2f  ame="function" /
22100 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  >...        /// 
22110 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
22120 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
22130 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
22140 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 73 70 65  -zero if the spe
22150 63 69 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 20  cified function 
22160 77 61 73 20 66 6f 75 6e 64 3b 20 7a 65 72 6f 20  was found; zero 
22170 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20  otherwise...    
22180 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
22190 73 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  s>..        bool
221a0 20 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a   FindFunction(..
221b0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
221c0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
221d0 61 62 6c 65 2c 20 20 20 20 2f 2a 20 69 6e 20 2a  able,    /* in *
221e0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  /..            i
221f0 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74  nt argumentCount
22200 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ,           /* i
22210 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
22220 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 20 20    string name,  
22230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22240 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
22250 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 46       ref SQLiteF
22260 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  unction function
22270 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20  , /* out */..   
22280 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
22290 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 20  Ptr pClientData 
222a0 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d        /* out */.
222b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
222c0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
222d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22310 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
22320 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
22330 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
22340 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
22350 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
22360 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
22370 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
22380 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
22390 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64  ename" /> method
223a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
223b0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
223c0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
223d0 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
223e0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
223f0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
22400 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
22410 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
22420 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
22430 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
22440 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
22450 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
22460 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
22470 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
22480 6e 65 77 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 20  newName">..     
22490 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 6e     /// The new n
224a0 61 6d 65 20 66 6f 72 20 74 68 65 20 76 69 72 74  ame for the virt
224b0 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
224c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
224d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
224e0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
224f0 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
22500 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
22510 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
22520 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
22530 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
22540 43 6f 64 65 20 52 65 6e 61 6d 65 28 0d 0a 20 20  Code Rename(..  
22550 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
22560 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
22570 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  le, /* in */..  
22580 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
22590 20 6e 65 77 4e 61 6d 65 20 20 20 20 20 20 20 20   newName        
225a0 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
225b0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
225c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
225d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22610 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
22620 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
22630 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
22640 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
22650 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
22660 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
22670 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
22680 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65  tiveModule.xSave
22690 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64  point" /> method
226a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
226b0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
226c0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
226d0 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
226e0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
226f0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
22700 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
22710 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
22720 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
22730 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
22740 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
22750 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
22760 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
22770 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
22780 73 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20  savepoint">..   
22790 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73       /// This is
227a0 20 61 6e 20 69 6e 74 65 67 65 72 20 69 64 65 6e   an integer iden
227b0 74 69 66 69 65 72 20 75 6e 64 65 72 20 77 68 69  tifier under whi
227c0 63 68 20 74 68 65 20 74 68 65 20 63 75 72 72 65  ch the the curre
227d0 6e 74 20 73 74 61 74 65 20 6f 66 0d 0a 20 20 20  nt state of..   
227e0 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72       /// the vir
227f0 74 75 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c  tual table shoul
22800 64 20 62 65 20 73 61 76 65 64 2e 0d 0a 20 20 20  d be saved...   
22810 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
22820 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
22830 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
22840 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
22850 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
22860 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
22870 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
22880 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
22890 72 43 6f 64 65 20 53 61 76 65 70 6f 69 6e 74 28  rCode Savepoint(
228a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
228b0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
228c0 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f   table, /* in */
228d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
228e0 74 20 73 61 76 65 70 6f 69 6e 74 20 20 20 20 20  t savepoint     
228f0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
22900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
22910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
22920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22960 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
22970 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
22980 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
22990 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
229a0 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
229b0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
229c0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
229d0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
229e0 52 65 6c 65 61 73 65 22 20 2f 3e 20 6d 65 74 68  Release" /> meth
229f0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
22a00 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
22a10 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
22a20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20  name="table">.. 
22a30 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
22a40 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
22a50 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e  VirtualTable" />
22a60 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
22a70 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
22a80 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68       /// with th
22a90 69 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  is virtual table
22aa0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
22ab0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
22ac0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
22ad0 3d 22 73 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20  ="savepoint">.. 
22ae0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
22af0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73  is an integer us
22b00 65 64 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  ed to indicate t
22b10 68 61 74 20 61 6e 79 20 73 61 76 65 64 20 73 74  hat any saved st
22b20 61 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20  ates with an..  
22b30 20 20 20 20 20 20 2f 2f 2f 20 69 64 65 6e 74 69        /// identi
22b40 66 69 65 72 20 67 72 65 61 74 65 72 20 74 68 61  fier greater tha
22b50 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
22b60 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 65 6c  is should be del
22b70 65 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  eted by the..   
22b80 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c       /// virtual
22b90 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
22ba0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
22bb0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
22bc0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
22bd0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
22be0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
22bf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
22c00 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
22c10 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
22c20 65 20 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20  e Release(..    
22c30 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
22c40 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
22c50 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
22c60 20 20 20 20 20 20 20 20 69 6e 74 20 73 61 76 65          int save
22c70 70 6f 69 6e 74 20 20 20 20 20 20 20 20 20 20 20  point           
22c80 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
22c90 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
22ca0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22cf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
22d00 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
22d10 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
22d20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
22d30 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
22d40 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
22d50 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
22d60 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61  veModule.xRollba
22d70 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ckTo" /> method.
22d80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
22d90 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
22da0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
22db0 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
22dc0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
22dd0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
22de0 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
22df0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
22e00 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
22e10 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
22e20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
22e30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
22e40 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
22e50 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
22e60 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20  avepoint">..    
22e70 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20      /// This is 
22e80 61 6e 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74  an integer ident
22e90 69 66 69 65 72 20 75 73 65 64 20 74 6f 20 73 70  ifier used to sp
22ea0 65 63 69 66 79 20 61 20 73 70 65 63 69 66 69 63  ecify a specific
22eb0 20 73 61 76 65 64 0d 0a 20 20 20 20 20 20 20 20   saved..        
22ec0 2f 2f 2f 20 73 74 61 74 65 20 66 6f 72 20 74 68  /// state for th
22ed0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
22ee0 66 6f 72 20 69 74 20 74 6f 20 72 65 73 74 6f 72  for it to restor
22ef0 65 20 69 74 73 65 6c 66 20 62 61 63 6b 20 74 6f  e itself back to
22f00 2c 20 77 68 69 63 68 0d 0a 20 20 20 20 20 20 20  , which..       
22f10 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 61 6c 73 6f   /// should also
22f20 20 68 61 76 65 20 74 68 65 20 65 66 66 65 63 74   have the effect
22f30 20 6f 66 20 64 65 6c 65 74 69 6e 67 20 61 6c 6c   of deleting all
22f40 20 73 61 76 65 64 20 73 74 61 74 65 73 20 77 69   saved states wi
22f50 74 68 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f  th an..        /
22f60 2f 2f 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74  // integer ident
22f70 69 66 69 65 72 20 67 72 65 61 74 65 72 20 74 68  ifier greater th
22f80 61 6e 20 74 68 69 73 20 6f 6e 65 2e 0d 0a 20 20  an this one...  
22f90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
22fa0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
22fb0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
22fc0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
22fd0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
22fe0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
22ff0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
23000 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
23010 6f 72 43 6f 64 65 20 52 6f 6c 6c 62 61 63 6b 54  orCode RollbackT
23020 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o(..            
23030 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
23040 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20  le table, /* in 
23050 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
23060 69 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 20 20  int savepoint   
23070 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
23080 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
23090 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  );..    }..    #
230a0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
230b0 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
23100 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
23110 74 65 4d 65 6d 6f 72 79 20 53 74 61 74 69 63 20  teMemory Static 
23120 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  Class..    /// <
23130 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
23140 2f 20 54 68 69 73 20 63 6c 61 73 73 20 63 6f 6e  / This class con
23150 74 61 69 6e 73 20 73 74 61 74 69 63 20 6d 65 74  tains static met
23160 68 6f 64 73 20 74 68 61 74 20 61 72 65 20 75 73  hods that are us
23170 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 2c 0d  ed to allocate,.
23180 0a 20 20 20 20 2f 2f 2f 20 6d 61 6e 69 70 75 6c  .    /// manipul
23190 61 74 65 2c 20 61 6e 64 20 66 72 65 65 20 6e 61  ate, and free na
231a0 74 69 76 65 20 6d 65 6d 6f 72 79 20 70 72 6f 76  tive memory prov
231b0 69 64 65 64 20 62 79 20 74 68 65 20 53 51 4c 69  ided by the SQLi
231c0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
231d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
231e0 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
231f0 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  al static class 
23200 53 51 4c 69 74 65 4d 65 6d 6f 72 79 0d 0a 20 20  SQLiteMemory..  
23210 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
23220 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
23230 61 0d 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d  a..#if TRACK_MEM
23240 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20 20 20 20  ORY_BYTES..     
23250 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
23260 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
23270 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
23280 63 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 79  ce is used to sy
23290 6e 63 68 72 6f 6e 69 7a 65 20 61 63 63 65 73 73  nchronize access
232a0 20 74 6f 20 74 68 65 20 6f 74 68 65 72 0d 0a 20   to the other.. 
232b0 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 69         /// stati
232c0 63 20 66 69 65 6c 64 73 20 6f 66 20 74 68 69 73  c fields of this
232d0 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20   class...       
232e0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
232f0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23300 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73   static object s
23310 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62  yncRoot = new ob
23320 6a 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ject();....     
23330 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23380 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
23390 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
233a0 20 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   The total numbe
233b0 72 20 6f 66 20 6f 75 74 73 74 61 6e 64 69 6e 67  r of outstanding
233c0 20 6d 65 6d 6f 72 79 20 62 79 74 65 73 20 61 6c   memory bytes al
233d0 6c 6f 63 61 74 65 64 20 62 79 20 74 68 69 73 0d  located by this.
233e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6c 61  .        /// cla
233f0 73 73 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  ss using the SQL
23400 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
23410 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
23420 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
23430 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
23440 63 20 69 6e 74 20 62 79 74 65 73 41 6c 6c 6f 63  c int bytesAlloc
23450 61 74 65 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ated;....       
23460 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
234b0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
234c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
234d0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
234e0 72 20 6f 66 20 6f 75 74 73 74 61 6e 64 69 6e 67  r of outstanding
234f0 20 6d 65 6d 6f 72 79 20 62 79 74 65 73 20 65 76   memory bytes ev
23500 65 72 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0d  er allocated by.
23510 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69  .        /// thi
23520 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68  s class using th
23530 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
23540 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  brary...        
23550 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
23560 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23570 73 74 61 74 69 63 20 69 6e 74 20 6d 61 78 69 6d  static int maxim
23580 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64  umBytesAllocated
23590 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
235a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
235b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
235c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23600 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
23610 69 6f 6e 20 4d 65 6d 6f 72 79 20 41 6c 6c 6f 63  ion Memory Alloc
23620 61 74 69 6f 6e 20 48 65 6c 70 65 72 20 4d 65 74  ation Helper Met
23630 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
23640 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
23650 20 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 63 61 74       /// Allocat
23660 65 73 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  es at least the 
23670 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72  specified number
23680 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6e 61 74   of bytes of nat
23690 69 76 65 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20  ive memory..    
236a0 20 20 20 20 2f 2f 2f 20 76 69 61 20 74 68 65 20      /// via the 
236b0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
236c0 61 72 79 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  ary sqlite3_mall
236d0 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e  oc() function an
236e0 64 20 72 65 74 75 72 6e 73 0d 0a 20 20 20 20 20  d returns..     
236f0 20 20 20 2f 2f 2f 20 74 68 65 20 72 65 73 75 6c     /// the resul
23700 74 69 6e 67 20 6e 61 74 69 76 65 20 70 6f 69 6e  ting native poin
23710 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ter...        //
23720 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
23730 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
23740 20 6e 61 6d 65 3d 22 73 69 7a 65 22 3e 0d 0a 20   name="size">.. 
23750 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
23760 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74  umber of bytes t
23770 6f 20 61 6c 6c 6f 63 61 74 65 2e 0d 0a 20 20 20  o allocate...   
23780 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
23790 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
237a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
237b0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
237c0 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 70 6f   pointer that po
237d0 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 63 6b 20  ints to a block 
237e0 6f 66 20 6d 65 6d 6f 72 79 20 6f 66 20 61 74 20  of memory of at 
237f0 6c 65 61 73 74 20 74 68 65 0d 0a 20 20 20 20 20  least the..     
23800 20 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 65 64     /// specified
23810 20 73 69 7a 65 20 2d 4f 52 2d 20 3c 73 65 65 20   size -OR- <see 
23820 63 72 65 66 3d 22 49 6e 74 50 74 72 2e 5a 65 72  cref="IntPtr.Zer
23830 6f 22 20 2f 3e 20 69 66 20 74 68 65 20 6d 65 6d  o" /> if the mem
23840 6f 72 79 20 63 6f 75 6c 64 0d 0a 20 20 20 20 20  ory could..     
23850 20 20 20 2f 2f 2f 20 6e 6f 74 20 62 65 20 61 6c     /// not be al
23860 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20  located...      
23870 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
23880 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
23890 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20 41   static IntPtr A
238a0 6c 6c 6f 63 61 74 65 28 69 6e 74 20 73 69 7a 65  llocate(int size
238b0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
238c0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
238d0 20 70 4d 65 6d 6f 72 79 20 3d 20 55 6e 73 61 66   pMemory = Unsaf
238e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
238f0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 73 69  qlite3_malloc(si
23900 7a 65 29 3b 0d 0a 0d 0a 23 69 66 20 54 52 41 43  ze);....#if TRAC
23910 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a  K_MEMORY_BYTES..
23920 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23930 70 4d 65 6d 6f 72 79 20 21 3d 20 49 6e 74 50 74  pMemory != IntPt
23940 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
23950 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23960 20 20 20 20 20 20 20 20 69 6e 74 20 62 6c 6f 63          int bloc
23970 6b 53 69 7a 65 20 3d 20 53 69 7a 65 28 70 4d 65  kSize = Size(pMe
23980 6d 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mory);....      
23990 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6c            if (bl
239a0 6f 63 6b 53 69 7a 65 20 3e 20 30 29 0d 0a 20 20  ockSize > 0)..  
239b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
239c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239d0 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
239e0 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  oot)..          
239f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a10 20 20 20 20 20 62 79 74 65 73 41 6c 6c 6f 63 61       bytesAlloca
23a20 74 65 64 20 2b 3d 20 62 6c 6f 63 6b 53 69 7a 65  ted += blockSize
23a30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
23a50 28 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20  (bytesAllocated 
23a60 3e 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c  > maximumBytesAl
23a70 6c 6f 63 61 74 65 64 29 0d 0a 20 20 20 20 20 20  located)..      
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a90 20 20 20 20 20 20 6d 61 78 69 6d 75 6d 42 79 74        maximumByt
23aa0 65 73 41 6c 6c 6f 63 61 74 65 64 20 3d 20 62 79  esAllocated = by
23ab0 74 65 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 20  tesAllocated;.. 
23ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ad0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
23ae0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23af0 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
23b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
23b10 74 75 72 6e 20 70 4d 65 6d 6f 72 79 3b 0d 0a 20  turn pMemory;.. 
23b20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23b30 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23b80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
23b90 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
23ba0 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72  / Gets and retur
23bb0 6e 73 20 74 68 65 20 61 63 74 75 61 6c 20 73 69  ns the actual si
23bc0 7a 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  ze of the specif
23bd0 69 65 64 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b  ied memory block
23be0 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f   that..        /
23bf0 2f 2f 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c  // was previousl
23c00 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
23c10 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 41  the <see cref="A
23c20 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68  llocate" /> meth
23c30 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
23c40 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
23c50 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
23c60 6e 61 6d 65 3d 22 70 4d 65 6d 6f 72 79 22 3e 0d  name="pMemory">.
23c70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
23c80 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
23c90 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c  to the memory bl
23ca0 6f 63 6b 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  ock previously o
23cb0 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
23cc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
23cd0 65 65 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74  ee cref="Allocat
23ce0 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
23cf0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
23d00 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
23d10 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
23d20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 63 74 75      /// The actu
23d30 61 6c 20 73 69 7a 65 2c 20 69 6e 20 62 79 74 65  al size, in byte
23d40 73 2c 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  s, of the memory
23d50 20 62 6c 6f 63 6b 20 73 70 65 63 69 66 69 65 64   block specified
23d60 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20   via the..      
23d70 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 70 6f 69    /// native poi
23d80 6e 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  nter...        /
23d90 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
23da0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
23db0 61 74 69 63 20 69 6e 74 20 53 69 7a 65 28 49 6e  atic int Size(In
23dc0 74 50 74 72 20 70 4d 65 6d 6f 72 79 29 0d 0a 20  tPtr pMemory).. 
23dd0 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53         {..#if !S
23de0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
23df0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23e00 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
23e10 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
23e20 61 6c 6c 6f 63 5f 73 69 7a 65 5f 69 6e 74 65 72  alloc_size_inter
23e30 6f 70 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 23 65  op(pMemory);..#e
23e40 6c 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59  lif TRACK_MEMORY
23e50 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20  _BYTES..        
23e60 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
23e70 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 4f 6b 2c      // HACK: Ok,
23e80 20 77 65 20 63 61 6e 6e 6f 74 20 64 65 74 65 72   we cannot deter
23e90 6d 69 6e 65 20 74 68 65 20 73 69 7a 65 20 6f 66  mine the size of
23ea0 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c 6f 63   the memory bloc
23eb0 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
23ec0 2f 2f 20 20 20 20 20 20 20 74 68 65 72 65 66 6f  //       therefo
23ed0 72 65 2c 20 6a 75 73 74 20 74 72 61 63 6b 20 6e  re, just track n
23ee0 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 63 61 74  umber of allocat
23ef0 69 6f 6e 73 20 69 6e 73 74 65 61 64 2e 0d 0a 20  ions instead... 
23f00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
23f10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23f20 6e 20 28 70 4d 65 6d 6f 72 79 20 21 3d 20 49 6e  n (pMemory != In
23f30 74 50 74 72 2e 5a 65 72 6f 29 20 3f 20 31 20 3a  tPtr.Zero) ? 1 :
23f40 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20   0;..#else..    
23f50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30          return 0
23f60 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
23f70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fc0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23fd0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
23fe0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 72  ..        /// Fr
23ff0 65 65 73 20 61 20 6d 65 6d 6f 72 79 20 62 6c 6f  ees a memory blo
24000 63 6b 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 62  ck previously ob
24010 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d  tained from the.
24020 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
24030 65 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65  e cref="Allocate
24040 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
24050 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
24060 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
24070 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
24080 4d 65 6d 6f 72 79 22 3e 0d 0a 20 20 20 20 20 20  Memory">..      
24090 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
240a0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
240b0 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65  memory block pre
240c0 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64  viously obtained
240d0 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20   from the..     
240e0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
240f0 3d 22 41 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d  ="Allocate" /> m
24100 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
24110 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
24120 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
24130 74 69 63 20 76 6f 69 64 20 46 72 65 65 28 49 6e  tic void Free(In
24140 74 50 74 72 20 70 4d 65 6d 6f 72 79 29 0d 0a 20  tPtr pMemory).. 
24150 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 52         {..#if TR
24160 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53  ACK_MEMORY_BYTES
24170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24180 20 28 70 4d 65 6d 6f 72 79 20 21 3d 20 49 6e 74   (pMemory != Int
24190 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
241a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
241b0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 62 6c            int bl
241c0 6f 63 6b 53 69 7a 65 20 3d 20 53 69 7a 65 28 70  ockSize = Size(p
241d0 4d 65 6d 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  Memory);....    
241e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
241f0 62 6c 6f 63 6b 53 69 7a 65 20 3e 20 30 29 0d 0a  blockSize > 0)..
24200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24210 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24220 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e         lock (syn
24230 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20  cRoot)..        
24240 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24260 20 20 20 20 20 20 20 62 79 74 65 73 41 6c 6c 6f         bytesAllo
24270 63 61 74 65 64 20 2d 3d 20 62 6c 6f 63 6b 53 69  cated -= blockSi
24280 7a 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ze;..           
24290 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
242a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
242b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
242c0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
242d0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
242e0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
242f0 66 72 65 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a  free(pMemory);..
24300 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24310 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
24320 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
24330 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
24340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24380 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
24390 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 53 74 72  region SQLiteStr
243a0 69 6e 67 20 53 74 61 74 69 63 20 43 6c 61 73 73  ing Static Class
243b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
243c0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
243d0 73 20 63 6c 61 73 73 20 63 6f 6e 74 61 69 6e 73  s class contains
243e0 20 73 74 61 74 69 63 20 6d 65 74 68 6f 64 73 20   static methods 
243f0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 74 6f  that are used to
24400 20 64 65 61 6c 20 77 69 74 68 20 6e 61 74 69 76   deal with nativ
24410 65 0d 0a 20 20 20 20 2f 2f 2f 20 55 54 46 2d 38  e..    /// UTF-8
24420 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 73   string pointers
24430 20 74 6f 20 62 65 20 75 73 65 64 20 77 69 74 68   to be used with
24440 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
24450 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
24460 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
24470 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
24480 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 53  ic class SQLiteS
24490 74 72 69 6e 67 0d 0a 20 20 20 20 7b 0d 0a 20 20  tring..    {..  
244a0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
244b0 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
244c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
244d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
244e0 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65 20  /// This is the 
244f0 6d 61 78 69 6d 75 6d 20 70 6f 73 73 69 62 6c 65  maximum possible
24500 20 6c 65 6e 67 74 68 20 66 6f 72 20 74 68 65 20   length for the 
24510 6e 61 74 69 76 65 20 55 54 46 2d 38 20 65 6e 63  native UTF-8 enc
24520 6f 64 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  oded..        //
24530 2f 20 73 74 72 69 6e 67 73 20 75 73 65 64 20 77  / strings used w
24540 69 74 68 20 74 68 65 20 53 51 4c 69 74 65 20 63  ith the SQLite c
24550 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...  
24560 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
24570 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
24580 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
24590 20 54 68 69 72 74 79 42 69 74 73 20 3d 20 30 78   ThirtyBits = 0x
245a0 33 66 66 66 66 66 66 66 3b 0d 0a 0d 0a 20 20 20  3fffffff;....   
245b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
245c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24600 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
24610 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
24620 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65 20 3c  // This is the <
24630 73 65 65 20 63 72 65 66 3d 22 45 6e 63 6f 64 69  see cref="Encodi
24640 6e 67 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ng" /> object in
24650 73 74 61 6e 63 65 20 75 73 65 64 20 74 6f 20 68  stance used to h
24660 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  andle..        /
24670 2f 2f 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 66  // conversions f
24680 72 6f 6d 2f 74 6f 20 55 54 46 2d 38 2e 0d 0a 20  rom/to UTF-8... 
24690 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
246a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
246b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
246c0 61 64 6f 6e 6c 79 20 45 6e 63 6f 64 69 6e 67 20  adonly Encoding 
246d0 55 74 66 38 45 6e 63 6f 64 69 6e 67 20 3d 20 45  Utf8Encoding = E
246e0 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20  ncoding.UTF8;.. 
246f0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
24700 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
24710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24750 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24760 23 72 65 67 69 6f 6e 20 55 54 46 2d 38 20 45 6e  #region UTF-8 En
24770 63 6f 64 69 6e 67 20 48 65 6c 70 65 72 20 4d 65  coding Helper Me
24780 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
24790 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
247a0 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72        /// Conver
247b0 74 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ts the specified
247c0 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20   managed string 
247d0 69 6e 74 6f 20 74 68 65 20 55 54 46 2d 38 20 65  into the UTF-8 e
247e0 6e 63 6f 64 69 6e 67 20 61 6e 64 0d 0a 20 20 20  ncoding and..   
247f0 20 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e 73       /// returns
24800 20 74 68 65 20 61 72 72 61 79 20 6f 66 20 62 79   the array of by
24810 74 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69  tes containing i
24820 74 73 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ts representatio
24830 6e 20 69 6e 20 74 68 61 74 0d 0a 20 20 20 20 20  n in that..     
24840 20 20 20 2f 2f 2f 20 65 6e 63 6f 64 69 6e 67 2e     /// encoding.
24850 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
24860 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
24870 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
24880 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20  e="value">..    
24890 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61      /// The mana
248a0 67 65 64 20 73 74 72 69 6e 67 20 74 6f 20 63 6f  ged string to co
248b0 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20  nvert...        
248c0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
248d0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
248e0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
248f0 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 62 79   The array of by
24900 74 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  tes containing t
24910 68 65 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  he representatio
24920 6e 20 6f 66 20 74 68 65 20 6d 61 6e 61 67 65 64  n of the managed
24930 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
24940 72 69 6e 67 20 69 6e 20 74 68 65 20 55 54 46 2d  ring in the UTF-
24950 38 20 65 6e 63 6f 64 69 6e 67 20 6f 72 20 6e 75  8 encoding or nu
24960 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e  ll upon failure.
24970 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
24980 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
24990 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
249a0 62 79 74 65 5b 5d 20 47 65 74 55 74 66 38 42 79  byte[] GetUtf8By
249b0 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a  tesFromString(..
249c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
249d0 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ng value..      
249e0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
249f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24a00 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
24a10 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
24a20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
24a30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24a40 72 65 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64  return Utf8Encod
24a50 69 6e 67 2e 47 65 74 42 79 74 65 73 28 76 61 6c  ing.GetBytes(val
24a60 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
24a70 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ac0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
24ad0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
24ae0 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74       /// Convert
24af0 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  s the specified 
24b00 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 20 72  array of bytes r
24b10 65 70 72 65 73 65 6e 74 69 6e 67 20 61 20 73 74  epresenting a st
24b20 72 69 6e 67 20 69 6e 20 74 68 65 0d 0a 20 20 20  ring in the..   
24b30 20 20 20 20 20 2f 2f 2f 20 55 54 46 2d 38 20 65       /// UTF-8 e
24b40 6e 63 6f 64 69 6e 67 20 61 6e 64 20 72 65 74 75  ncoding and retu
24b50 72 6e 73 20 61 20 6d 61 6e 61 67 65 64 20 73 74  rns a managed st
24b60 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ring...        /
24b70 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
24b80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
24b90 6d 20 6e 61 6d 65 3d 22 62 79 74 65 73 22 3e 0d  m name="bytes">.
24ba0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
24bb0 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 20   array of bytes 
24bc0 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
24bd0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
24be0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
24bf0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
24c00 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65    /// The manage
24c10 64 20 73 74 72 69 6e 67 20 6f 72 20 6e 75 6c 6c  d string or null
24c20 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a   upon failure...
24c30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
24c40 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
24c50 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
24c60 72 69 6e 67 20 47 65 74 53 74 72 69 6e 67 46 72  ring GetStringFr
24c70 6f 6d 55 74 66 38 42 79 74 65 73 28 0d 0a 20 20  omUtf8Bytes(..  
24c80 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
24c90 20 62 79 74 65 73 0d 0a 20 20 20 20 20 20 20 20   bytes..        
24ca0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
24cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24cc0 20 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29   (bytes == null)
24cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24ce0 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
24cf0 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
24d00 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
24d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
24d20 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e  turn Utf8Encodin
24d30 67 2e 47 65 74 53 74 72 69 6e 67 28 62 79 74 65  g.GetString(byte
24d40 73 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  s);..#else..    
24d50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
24d60 74 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 53  tf8Encoding.GetS
24d70 74 72 69 6e 67 28 62 79 74 65 73 2c 20 30 2c 20  tring(bytes, 0, 
24d80 62 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  bytes.Length);..
24d90 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
24da0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
24db0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
24dc0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24e10 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54 46 2d      #region UTF-
24e20 38 20 53 74 72 69 6e 67 20 48 65 6c 70 65 72 20  8 String Helper 
24e30 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
24e40 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
24e50 20 20 20 20 20 20 20 20 2f 2f 2f 20 50 72 6f 62          /// Prob
24e60 65 73 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e  es a native poin
24e70 74 65 72 20 74 6f 20 61 20 73 74 72 69 6e 67 20  ter to a string 
24e80 69 6e 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63  in the UTF-8 enc
24e90 6f 64 69 6e 67 20 66 6f 72 20 69 74 73 0d 0a 20  oding for its.. 
24ea0 20 20 20 20 20 20 20 2f 2f 2f 20 74 65 72 6d 69         /// termi
24eb0 6e 61 74 69 6e 67 20 4e 55 4c 20 63 68 61 72 61  nating NUL chara
24ec0 63 74 65 72 2c 20 77 69 74 68 69 6e 20 74 68 65  cter, within the
24ed0 20 73 70 65 63 69 66 69 65 64 20 6c 65 6e 67 74   specified lengt
24ee0 68 20 6c 69 6d 69 74 2e 0d 0a 20 20 20 20 20 20  h limit...      
24ef0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
24f00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
24f10 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75  aram name="pValu
24f20 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
24f30 20 54 68 65 20 6e 61 74 69 76 65 20 4e 55 4c 2d   The native NUL-
24f40 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e  terminated strin
24f50 67 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20 20  g pointer...    
24f60 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
24f70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
24f80 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 69 6d 69 74  aram name="limit
24f90 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
24fa0 54 68 65 20 6d 61 78 69 6d 75 6d 20 6c 65 6e 67  The maximum leng
24fb0 74 68 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65  th of the native
24fc0 20 73 74 72 69 6e 67 2c 20 69 6e 20 62 79 74 65   string, in byte
24fd0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
24fe0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
24ff0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
25000 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
25010 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 6e   length of the n
25020 61 74 69 76 65 20 73 74 72 69 6e 67 2c 20 69 6e  ative string, in
25030 20 62 79 74 65 73 20 2d 4f 52 2d 20 7a 65 72 6f   bytes -OR- zero
25040 20 69 66 20 74 68 65 20 6c 65 6e 67 74 68 0d 0a   if the length..
25050 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 75 6c          /// coul
25060 64 20 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69  d not be determi
25070 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ned...        //
25080 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
25090 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
250a0 74 69 63 20 69 6e 74 20 50 72 6f 62 65 46 6f 72  tic int ProbeFor
250b0 55 74 66 38 42 79 74 65 4c 65 6e 67 74 68 28 0d  Utf8ByteLength(.
250c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
250d0 50 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20  Ptr pValue,..   
250e0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6d           int lim
250f0 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..            
25100 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
25110 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65            int le
25120 6e 67 74 68 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  ngth = 0;....   
25130 20 20 20 20 20 20 20 20 20 69 66 20 28 28 70 56           if ((pV
25140 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  alue != IntPtr.Z
25150 65 72 6f 29 20 26 26 20 28 6c 69 6d 69 74 20 3e  ero) && (limit >
25160 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20   0))..          
25170 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25180 20 20 20 20 20 64 6f 0d 0a 20 20 20 20 20 20 20       do..       
25190 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251b0 69 66 20 28 4d 61 72 73 68 61 6c 2e 52 65 61 64  if (Marshal.Read
251c0 42 79 74 65 28 70 56 61 6c 75 65 2c 20 6c 65 6e  Byte(pValue, len
251d0 67 74 68 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  gth) == 0)..    
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a 20 20      break;....  
25200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25210 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3e 3d 20    if (length >= 
25220 6c 69 6d 69 74 29 0d 0a 20 20 20 20 20 20 20 20  limit)..        
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 62 72 65 61 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20  break;....      
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65                le
25260 6e 67 74 68 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ngth++;..       
25270 20 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65           } while
25280 20 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20   (true);..      
25290 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
252a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 65         return le
252b0 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ngth;..        }
252c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
252d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25310 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
25320 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
25330 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72        /// Conver
25340 74 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ts the specified
25350 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d   native NUL-term
25360 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
25370 69 6e 67 20 70 6f 69 6e 74 65 72 0d 0a 20 20 20  ing pointer..   
25380 20 20 20 20 20 2f 2f 2f 20 69 6e 74 6f 20 61 20       /// into a 
25390 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 2e 0d  managed string..
253a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
253b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
253c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
253d0 3d 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20  ="pValue">..    
253e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
253f0 76 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65  ve NUL-terminate
25400 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70  d UTF-8 string p
25410 6f 69 6e 74 65 72 2e 0d 0a 20 20 20 20 20 20 20  ointer...       
25420 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
25430 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
25440 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
25450 2f 20 54 68 65 20 6d 61 6e 61 67 65 64 20 73 74  / The managed st
25460 72 69 6e 67 20 6f 72 20 6e 75 6c 6c 20 75 70 6f  ring or null upo
25470 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20  n failure...    
25480 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
25490 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
254a0 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
254b0 20 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49   StringFromUtf8I
254c0 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
254d0 20 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75      IntPtr pValu
254e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
254f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
25500 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25510 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
25520 74 50 74 72 28 70 56 61 6c 75 65 2c 0d 0a 20 20  tPtr(pValue,..  
25530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
25540 6f 62 65 46 6f 72 55 74 66 38 42 79 74 65 4c 65  obeForUtf8ByteLe
25550 6e 67 74 68 28 70 56 61 6c 75 65 2c 20 54 68 69  ngth(pValue, Thi
25560 72 74 79 42 69 74 73 29 29 3b 0d 0a 20 20 20 20  rtyBits));..    
25570 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25580 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
255d0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
255e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
255f0 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65 63  onverts the spec
25600 69 66 69 65 64 20 6e 61 74 69 76 65 20 55 54 46  ified native UTF
25610 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  -8 string pointe
25620 72 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69  r of the specifi
25630 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
25640 6c 65 6e 67 74 68 20 69 6e 74 6f 20 61 20 6d 61  length into a ma
25650 6e 61 67 65 64 20 73 74 72 69 6e 67 2e 0d 0a 20  naged string... 
25660 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
25670 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
25680 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
25690 70 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20  pValue">..      
256a0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
256b0 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f   UTF-8 string po
256c0 69 6e 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  inter...        
256d0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
256e0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
256f0 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 0d   name="length">.
25700 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
25710 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 6e   length of the n
25720 61 74 69 76 65 20 73 74 72 69 6e 67 2c 20 69 6e  ative string, in
25730 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 20 20 20   bytes...       
25740 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
25750 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
25760 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
25770 2f 20 54 68 65 20 6d 61 6e 61 67 65 64 20 73 74  / The managed st
25780 72 69 6e 67 20 6f 72 20 6e 75 6c 6c 20 75 70 6f  ring or null upo
25790 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20  n failure...    
257a0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
257b0 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
257c0 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
257d0 20 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49   StringFromUtf8I
257e0 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
257f0 20 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75      IntPtr pValu
25800 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25810 69 6e 74 20 6c 65 6e 67 74 68 0d 0a 20 20 20 20  int length..    
25820 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
25830 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25840 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20    if (pValue == 
25850 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25870 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
25880 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 65            if (le
25890 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
258a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
258b0 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
258c0 20 62 79 74 65 73 20 3d 20 6e 65 77 20 62 79 74   bytes = new byt
258d0 65 5b 6c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20  e[length];....  
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61                Ma
258f0 72 73 68 61 6c 2e 43 6f 70 79 28 70 56 61 6c 75  rshal.Copy(pValu
25900 65 2c 20 62 79 74 65 73 2c 20 30 2c 20 6c 65 6e  e, bytes, 0, len
25910 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth);....       
25920 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25930 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 55 74 66  GetStringFromUtf
25940 38 42 79 74 65 73 28 62 79 74 65 73 29 3b 0d 0a  8Bytes(bytes);..
25950 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25960 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
25970 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  urn String.Empty
25980 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
25990 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
259a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
259e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
259f0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
25a00 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74    /// Converts t
25a10 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 61 6e  he specified man
25a20 61 67 65 64 20 73 74 72 69 6e 67 20 69 6e 74 6f  aged string into
25a30 20 61 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65   a native NUL-te
25a40 72 6d 69 6e 61 74 65 64 0d 0a 20 20 20 20 20 20  rminated..      
25a50 20 20 2f 2f 2f 20 55 54 46 2d 38 20 73 74 72 69    /// UTF-8 stri
25a60 6e 67 20 70 6f 69 6e 74 65 72 20 75 73 69 6e 67  ng pointer using
25a70 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
25a80 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65   from the SQLite
25a90 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f   core..        /
25aa0 2f 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  // library...   
25ab0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
25ac0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
25ad0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
25ae0 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  lue">..        /
25af0 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65 64 20 73  // The managed s
25b00 74 72 69 6e 67 20 74 6f 20 63 6f 6e 76 65 72 74  tring to convert
25b10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
25b20 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
25b30 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
25b40 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
25b50 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69  native NUL-termi
25b60 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
25b70 6e 67 20 70 6f 69 6e 74 65 72 20 6f 72 0d 0a 20  ng pointer or.. 
25b80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
25b90 63 72 65 66 3d 22 49 6e 74 50 74 72 2e 5a 65 72  cref="IntPtr.Zer
25ba0 6f 22 20 2f 3e 20 75 70 6f 6e 20 66 61 69 6c 75  o" /> upon failu
25bb0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
25bc0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
25bd0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
25be0 69 63 20 49 6e 74 50 74 72 20 55 74 66 38 49 6e  ic IntPtr Utf8In
25bf0 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d  tPtrFromString(.
25c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
25c10 69 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  ing value..     
25c20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
25c30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25c40 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
25c50 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
25c60 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50       return IntP
25c70 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
25c80 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 72          IntPtr r
25c90 65 73 75 6c 74 20 3d 20 49 6e 74 50 74 72 2e 5a  esult = IntPtr.Z
25ca0 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
25cb0 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d    byte[] bytes =
25cc0 20 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f   GetUtf8BytesFro
25cd0 6d 53 74 72 69 6e 67 28 76 61 6c 75 65 29 3b 0d  mString(value);.
25ce0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25cf0 66 20 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c  f (bytes == null
25d00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25d10 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72     return IntPtr
25d20 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
25d30 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
25d40 20 3d 20 62 79 74 65 73 2e 4c 65 6e 67 74 68 3b   = bytes.Length;
25d50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25d60 72 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 4d  result = SQLiteM
25d70 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28 6c  emory.Allocate(l
25d80 65 6e 67 74 68 20 2b 20 31 29 3b 0d 0a 0d 0a 20  ength + 1);.... 
25d90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
25da0 65 73 75 6c 74 20 3d 3d 20 49 6e 74 50 74 72 2e  esult == IntPtr.
25db0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
25dc0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
25dd0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
25de0 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
25df0 6c 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 30 2c  l.Copy(bytes, 0,
25e00 20 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68 29   result, length)
25e10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ;..            M
25e20 61 72 73 68 61 6c 2e 57 72 69 74 65 42 79 74 65  arshal.WriteByte
25e30 28 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68 2c  (result, length,
25e40 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
25e50 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
25e60 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
25e70 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
25e80 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ed0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25ee0 23 72 65 67 69 6f 6e 20 55 54 46 2d 38 20 53 74  #region UTF-8 St
25ef0 72 69 6e 67 20 41 72 72 61 79 20 48 65 6c 70 65  ring Array Helpe
25f00 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
25f10 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
25f20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
25f30 6e 76 65 72 74 73 20 61 20 6c 6f 67 69 63 61 6c  nverts a logical
25f40 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65   array of native
25f50 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20   NUL-terminated 
25f60 55 54 46 2d 38 20 73 74 72 69 6e 67 0d 0a 20 20  UTF-8 string..  
25f70 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65        /// pointe
25f80 72 73 20 69 6e 74 6f 20 61 6e 20 61 72 72 61 79  rs into an array
25f90 20 6f 66 20 6d 61 6e 61 67 65 64 20 73 74 72 69   of managed stri
25fa0 6e 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ngs...        //
25fb0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
25fc0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
25fd0 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20   name="argc">.. 
25fe0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
25ff0 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
26000 73 20 69 6e 20 74 68 65 20 6c 6f 67 69 63 61 6c  s in the logical
26010 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65   array of native
26020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 55  ..        /// NU
26030 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  L-terminated UTF
26040 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  -8 string pointe
26050 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rs...        ///
26060 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
26070 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
26080 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
26090 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
260a0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
260b0 65 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20  e logical array 
260c0 6f 66 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65  of native NUL-te
260d0 72 6d 69 6e 61 74 65 64 0d 0a 20 20 20 20 20 20  rminated..      
260e0 20 20 2f 2f 2f 20 55 54 46 2d 38 20 73 74 72 69    /// UTF-8 stri
260f0 6e 67 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63  ng pointers to c
26100 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20  onvert...       
26110 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
26120 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
26130 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
26140 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 6d  / The array of m
26150 61 6e 61 67 65 64 20 73 74 72 69 6e 67 73 20 6f  anaged strings o
26160 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c  r null upon fail
26170 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
26180 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
26190 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
261a0 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 53 74 72  tic string[] Str
261b0 69 6e 67 41 72 72 61 79 46 72 6f 6d 55 74 66 38  ingArrayFromUtf8
261c0 53 69 7a 65 41 6e 64 49 6e 74 50 74 72 28 0d 0a  SizeAndIntPtr(..
261d0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
261e0 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20  argc,..         
261f0 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 0d 0a     IntPtr argv..
26200 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
26210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26220 20 20 20 20 20 20 69 66 20 28 61 72 67 63 20 3c        if (argc <
26230 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
26240 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
26250 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26260 20 69 66 20 28 61 72 67 76 20 3d 3d 20 49 6e 74   if (argv == Int
26270 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
26280 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26290 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
262a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
262b0 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 73 74 72  result = new str
262c0 69 6e 67 5b 61 72 67 63 5d 3b 0d 0a 0d 0a 20 20  ing[argc];....  
262d0 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
262e0 6e 74 20 69 6e 64 65 78 20 3d 20 30 2c 20 6f 66  nt index = 0, of
262f0 66 73 65 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20  fset = 0;..     
26300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26310 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65  ndex < result.Le
26320 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 20  ngth;..         
26330 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
26340 2b 2b 2c 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e  ++, offset += In
26350 74 50 74 72 2e 53 69 7a 65 29 0d 0a 20 20 20 20  tPtr.Size)..    
26360 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26370 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
26380 72 20 70 41 72 67 20 3d 20 53 51 4c 69 74 65 4d  r pArg = SQLiteM
26390 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
263a0 72 28 61 72 67 76 2c 20 6f 66 66 73 65 74 29 3b  r(argv, offset);
263b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
263c0 20 20 20 20 72 65 73 75 6c 74 5b 69 6e 64 65 78      result[index
263d0 5d 20 3d 20 28 70 41 72 67 20 21 3d 20 49 6e 74  ] = (pArg != Int
263e0 50 74 72 2e 5a 65 72 6f 29 20 3f 0d 0a 20 20 20  Ptr.Zero) ?..   
263f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26400 20 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49   StringFromUtf8I
26410 6e 74 50 74 72 28 70 41 72 67 29 20 3a 20 6e 75  ntPtr(pArg) : nu
26420 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
26430 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
26440 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
26450 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
26460 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
264a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
264b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
264c0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
264d0 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 6e   /// Converts an
264e0 20 61 72 72 61 79 20 6f 66 20 6d 61 6e 61 67 65   array of manage
264f0 64 20 73 74 72 69 6e 67 73 20 69 6e 74 6f 20 61  d strings into a
26500 6e 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76  n array of nativ
26510 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  e..        /// N
26520 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54  UL-terminated UT
26530 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74  F-8 string point
26540 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ers...        //
26550 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
26560 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
26570 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d   name="values">.
26580 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
26590 20 61 72 72 61 79 20 6f 66 20 6d 61 6e 61 67 65   array of manage
265a0 64 20 73 74 72 69 6e 67 73 20 74 6f 20 63 6f 6e  d strings to con
265b0 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  vert...        /
265c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
265d0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
265e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
265f0 54 68 65 20 61 72 72 61 79 20 6f 66 20 6e 61 74  The array of nat
26600 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74  ive NUL-terminat
26610 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
26620 70 6f 69 6e 74 65 72 73 20 6f 72 20 6e 75 6c 6c  pointers or null
26630 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 70  ..        /// up
26640 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20  on failure...   
26650 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
26660 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
26670 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74  lic static IntPt
26680 72 5b 5d 20 55 74 66 38 49 6e 74 50 74 72 41 72  r[] Utf8IntPtrAr
26690 72 61 79 46 72 6f 6d 53 74 72 69 6e 67 41 72 72  rayFromStringArr
266a0 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
266b0 20 73 74 72 69 6e 67 5b 5d 20 76 61 6c 75 65 73   string[] values
266c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
266d0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
266e0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
266f0 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
26700 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26710 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
26720 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b           IntPtr[
26730 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 49  ] result = new I
26740 6e 74 50 74 72 5b 76 61 6c 75 65 73 2e 4c 65 6e  ntPtr[values.Len
26750 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth];....       
26760 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
26770 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
26780 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 20   result.Length; 
26790 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
267a0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
267b0 5b 69 6e 64 65 78 5d 20 3d 20 55 74 66 38 49 6e  [index] = Utf8In
267c0 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 76  tPtrFromString(v
267d0 61 6c 75 65 73 5b 69 6e 64 65 78 5d 29 3b 0d 0a  alues[index]);..
267e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
267f0 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
26800 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
26810 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
26820 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
26830 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
26840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26880 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
26890 67 69 6f 6e 20 53 51 4c 69 74 65 42 79 74 65 73  gion SQLiteBytes
268a0 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20   Static Class.. 
268b0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
268c0 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63  ..    /// This c
268d0 6c 61 73 73 20 63 6f 6e 74 61 69 6e 73 20 73 74  lass contains st
268e0 61 74 69 63 20 6d 65 74 68 6f 64 73 20 74 68 61  atic methods tha
268f0 74 20 61 72 65 20 75 73 65 64 20 74 6f 20 64 65  t are used to de
26900 61 6c 20 77 69 74 68 20 6e 61 74 69 76 65 0d 0a  al with native..
26910 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65 72 73      /// pointers
26920 20 74 6f 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b   to memory block
26930 73 20 74 68 61 74 20 6c 6f 67 69 63 61 6c 6c 79  s that logically
26940 20 63 6f 6e 74 61 69 6e 20 61 72 72 61 79 73 20   contain arrays 
26950 6f 66 20 62 79 74 65 73 20 74 6f 20 62 65 0d 0a  of bytes to be..
26960 20 20 20 20 2f 2f 2f 20 75 73 65 64 20 77 69 74      /// used wit
26970 68 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  h the SQLite cor
26980 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...    
26990 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
269a0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
269b0 74 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65  tic class SQLite
269c0 42 79 74 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Bytes..    {..  
269d0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 42 79        #region By
269e0 74 65 20 41 72 72 61 79 20 48 65 6c 70 65 72 20  te Array Helper 
269f0 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
26a00 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
26a10 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76          /// Conv
26a20 65 72 74 73 20 61 20 6e 61 74 69 76 65 20 70 6f  erts a native po
26a30 69 6e 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63  inter to a logic
26a40 61 6c 20 61 72 72 61 79 20 6f 66 20 62 79 74 65  al array of byte
26a50 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  s of the..      
26a60 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 65 64 20    /// specified 
26a70 6c 65 6e 67 74 68 20 69 6e 74 6f 20 61 20 6d 61  length into a ma
26a80 6e 61 67 65 64 20 62 79 74 65 20 61 72 72 61 79  naged byte array
26a90 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
26aa0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
26ab0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
26ac0 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20  me="pValue">..  
26ad0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
26ae0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
26af0 74 68 65 20 6c 6f 67 69 63 61 6c 20 61 72 72 61  the logical arra
26b00 79 20 6f 66 20 62 79 74 65 73 20 74 6f 20 63 6f  y of bytes to co
26b10 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20  nvert...        
26b20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
26b30 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
26b40 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 0d   name="length">.
26b50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
26b60 20 6c 65 6e 67 74 68 2c 20 69 6e 20 62 79 74 65   length, in byte
26b70 73 2c 20 6f 66 20 74 68 65 20 6c 6f 67 69 63 61  s, of the logica
26b80 6c 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73  l array of bytes
26b90 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20   to convert...  
26ba0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
26bb0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
26bc0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
26bd0 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67     /// The manag
26be0 65 64 20 62 79 74 65 20 61 72 72 61 79 20 6f 72  ed byte array or
26bf0 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75   null upon failu
26c00 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
26c10 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
26c20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
26c30 69 63 20 62 79 74 65 5b 5d 20 46 72 6f 6d 49 6e  ic byte[] FromIn
26c40 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
26c50 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65     IntPtr pValue
26c60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
26c70 6e 74 20 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20  nt length..     
26c80 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
26c90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26ca0 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49   if (pValue == I
26cb0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
26cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26cd0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
26ce0 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e           if (len
26cf0 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  gth == 0)..     
26d00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26d10 6e 20 6e 65 77 20 62 79 74 65 5b 30 5d 3b 0d 0a  n new byte[0];..
26d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
26d30 74 65 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65  te[] result = ne
26d40 77 20 62 79 74 65 5b 6c 65 6e 67 74 68 5d 3b 0d  w byte[length];.
26d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
26d60 61 72 73 68 61 6c 2e 43 6f 70 79 28 70 56 61 6c  arshal.Copy(pVal
26d70 75 65 2c 20 72 65 73 75 6c 74 2c 20 30 2c 20 6c  ue, result, 0, l
26d80 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20  ength);....     
26d90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
26da0 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
26db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
26dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e00 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
26e10 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
26e20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72        /// Conver
26e30 74 73 20 61 20 6d 61 6e 61 67 65 64 20 62 79 74  ts a managed byt
26e40 65 20 61 72 72 61 79 20 69 6e 74 6f 20 61 20 6e  e array into a n
26e50 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
26e60 20 61 20 6c 6f 67 69 63 61 6c 0d 0a 20 20 20 20   a logical..    
26e70 20 20 20 20 2f 2f 2f 20 61 72 72 61 79 20 6f 66      /// array of
26e80 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 20 20 20   bytes...       
26e90 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
26ea0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
26eb0 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
26ec0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
26ed0 68 65 20 6d 61 6e 61 67 65 64 20 62 79 74 65 20  he managed byte 
26ee0 61 72 72 61 79 20 74 6f 20 63 6f 6e 76 65 72 74  array to convert
26ef0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
26f00 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
26f10 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
26f20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
26f30 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
26f40 6f 20 61 20 6c 6f 67 69 63 61 6c 20 62 79 74 65  o a logical byte
26f50 20 61 72 72 61 79 20 6f 72 20 6e 75 6c 6c 20 75   array or null u
26f60 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20  pon failure...  
26f70 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
26f80 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
26f90 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50  blic static IntP
26fa0 74 72 20 54 6f 49 6e 74 50 74 72 28 0d 0a 20 20  tr ToIntPtr(..  
26fb0 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
26fc0 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
26fd0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
26fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
26ff0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
27000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27010 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e    return IntPtr.
27020 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
27030 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20       int length 
27040 3d 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 3b 0d  = value.Length;.
27050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27060 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29 0d  f (length == 0).
27070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27080 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a   return IntPtr.Z
27090 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
270a0 20 20 20 20 49 6e 74 50 74 72 20 72 65 73 75 6c      IntPtr resul
270b0 74 20 3d 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79  t = SQLiteMemory
270c0 2e 41 6c 6c 6f 63 61 74 65 28 6c 65 6e 67 74 68  .Allocate(length
270d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
270e0 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20    if (result == 
270f0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
27100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27110 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f  turn IntPtr.Zero
27120 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27130 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 76 61   Marshal.Copy(va
27140 6c 75 65 2c 20 30 2c 20 72 65 73 75 6c 74 2c 20  lue, 0, result, 
27150 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20  length);....    
27160 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
27170 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
27180 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
27190 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
271a0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
271b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
271c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27200 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
27210 51 4c 69 74 65 4d 61 72 73 68 61 6c 20 53 74 61  QLiteMarshal Sta
27220 74 69 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 69  tic Class..    i
27230 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63  nternal static c
27240 6c 61 73 73 20 53 51 4c 69 74 65 4d 61 72 73 68  lass SQLiteMarsh
27250 61 6c 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  al..    {..     
27260 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 50 74     #region IntPt
27270 72 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73  r Helper Methods
27280 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
27290 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
272a0 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 6e   /// Returns a n
272b0 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  ew <see cref="In
272c0 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tPtr" /> object 
272d0 69 6e 73 74 61 6e 63 65 20 62 61 73 65 64 20 6f  instance based o
272e0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
272f0 2f 2f 20 73 70 65 63 69 66 69 65 64 20 3c 73 65  // specified <se
27300 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
27310 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
27320 63 65 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65  ce and an intege
27330 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  r..        /// o
27340 66 66 73 65 74 2e 0d 0a 20 20 20 20 20 20 20 20  ffset...        
27350 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
27360 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
27370 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72  am name="pointer
27380 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
27390 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
273a0 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ntPtr" /> object
273b0 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73   instance repres
273c0 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d  enting the base.
273d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d  .        /// mem
273e0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20  ory location... 
273f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
27400 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
27410 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66   <param name="of
27420 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  fset">..        
27430 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20  /// The integer 
27440 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
27450 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61  base memory loca
27460 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 6e 65  tion that the ne
27470 77 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  w..        /// <
27480 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72  see cref="IntPtr
27490 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
274a0 61 6e 63 65 20 73 68 6f 75 6c 64 20 70 6f 69 6e  ance should poin
274b0 74 20 74 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2f  t to...        /
274c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
274d0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
274e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
274f0 54 68 65 20 6e 65 77 20 3c 73 65 65 20 63 72 65  The new <see cre
27500 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62  f="IntPtr" /> ob
27510 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
27520 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
27530 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
27540 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e  public static In
27550 74 50 74 72 20 49 6e 74 50 74 72 46 6f 72 4f 66  tPtr IntPtrForOf
27560 66 73 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20  fset(..         
27570 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65     IntPtr pointe
27580 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
27590 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20 20 20  int offset..    
275a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
275b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
275c0 20 20 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74    return new Int
275d0 50 74 72 28 70 6f 69 6e 74 65 72 2e 54 6f 49 6e  Ptr(pointer.ToIn
275e0 74 36 34 28 29 20 2b 20 6f 66 66 73 65 74 29 3b  t64() + offset);
275f0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
27600 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27650 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
27660 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
27670 20 2f 2f 2f 20 52 6f 75 6e 64 73 20 75 70 20 61   /// Rounds up a
27680 6e 20 69 6e 74 65 67 65 72 20 73 69 7a 65 20 74  n integer size t
27690 6f 20 74 68 65 20 6e 65 78 74 20 6d 75 6c 74 69  o the next multi
276a0 70 6c 65 20 6f 66 20 74 68 65 20 61 6c 69 67 6e  ple of the align
276b0 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ment...        /
276c0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
276d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
276e0 6d 20 6e 61 6d 65 3d 22 73 69 7a 65 22 3e 0d 0a  m name="size">..
276f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
27700 73 69 7a 65 2c 20 69 6e 20 62 79 74 65 73 2c 20  size, in bytes, 
27710 74 6f 20 62 65 20 72 6f 75 6e 64 65 64 20 75 70  to be rounded up
27720 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
27730 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
27740 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
27750 3d 22 61 6c 69 67 6e 6d 65 6e 74 22 3e 0d 0a 20  ="alignment">.. 
27760 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 72         /// The r
27770 65 71 75 69 72 65 64 20 61 6c 69 67 6e 6d 65 6e  equired alignmen
27780 74 20 66 6f 72 20 74 68 65 20 72 65 74 75 72 6e  t for the return
27790 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
277a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
277b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
277c0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
277d0 2f 20 54 68 65 20 73 69 7a 65 2c 20 69 6e 20 62  / The size, in b
277e0 79 74 65 73 2c 20 72 6f 75 6e 64 65 64 20 75 70  ytes, rounded up
277f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6d 75 6c   to the next mul
27800 74 69 70 6c 65 20 6f 66 20 74 68 65 0d 0a 20 20  tiple of the..  
27810 20 20 20 20 20 20 2f 2f 2f 20 61 6c 69 67 6e 6d        /// alignm
27820 65 6e 74 2e 20 20 54 68 69 73 20 76 61 6c 75 65  ent.  This value
27830 20 6d 61 79 20 65 6e 64 20 75 70 20 62 65 69 6e   may end up bein
27840 67 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  g the same as th
27850 65 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20  e original..    
27860 20 20 20 20 2f 2f 2f 20 73 69 7a 65 2e 0d 0a 20      /// size... 
27870 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
27880 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
27890 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74  ublic static int
278a0 20 52 6f 75 6e 64 55 70 28 0d 0a 20 20 20 20 20   RoundUp(..     
278b0 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 2c         int size,
278c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
278d0 74 20 61 6c 69 67 6e 6d 65 6e 74 0d 0a 20 20 20  t alignment..   
278e0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
278f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27900 20 20 20 69 6e 74 20 61 6c 69 67 6e 6d 65 6e 74     int alignment
27910 4d 69 6e 75 73 4f 6e 65 20 3d 20 61 6c 69 67 6e  MinusOne = align
27920 6d 65 6e 74 20 2d 20 31 3b 0d 0a 20 20 20 20 20  ment - 1;..     
27930 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28         return ((
27940 73 69 7a 65 20 2b 20 61 6c 69 67 6e 6d 65 6e 74  size + alignment
27950 4d 69 6e 75 73 4f 6e 65 29 20 26 20 7e 61 6c 69  MinusOne) & ~ali
27960 67 6e 6d 65 6e 74 4d 69 6e 75 73 4f 6e 65 29 3b  gnmentMinusOne);
27970 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
27980 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
279d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
279e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
279f0 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
27a00 74 68 65 20 6f 66 66 73 65 74 2c 20 69 6e 20 62  the offset, in b
27a10 79 74 65 73 2c 20 6f 66 20 74 68 65 20 6e 65 78  ytes, of the nex
27a20 74 20 73 74 72 75 63 74 75 72 65 20 6d 65 6d 62  t structure memb
27a30 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  er...        ///
27a40 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
27a50 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
27a60 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a  name="offset">..
27a70 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
27a80 6f 66 66 73 65 74 2c 20 69 6e 20 62 79 74 65 73  offset, in bytes
27a90 2c 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  , of the current
27aa0 20 73 74 72 75 63 74 75 72 65 20 6d 65 6d 62 65   structure membe
27ab0 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
27ac0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
27ad0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
27ae0 65 3d 22 73 69 7a 65 22 3e 0d 0a 20 20 20 20 20  e="size">..     
27af0 20 20 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65 2c     /// The size,
27b00 20 69 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68   in bytes, of th
27b10 65 20 63 75 72 72 65 6e 74 20 73 74 72 75 63 74  e current struct
27b20 75 72 65 20 6d 65 6d 62 65 72 2e 0d 0a 20 20 20  ure member...   
27b30 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
27b40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
27b50 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 6c 69 67  param name="alig
27b60 6e 6d 65 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20  nment">..       
27b70 20 2f 2f 2f 20 54 68 65 20 61 6c 69 67 6e 6d 65   /// The alignme
27b80 6e 74 2c 20 69 6e 20 62 79 74 65 73 2c 20 6f 66  nt, in bytes, of
27b90 20 74 68 65 20 6e 65 78 74 20 73 74 72 75 63 74   the next struct
27ba0 75 72 65 20 6d 65 6d 62 65 72 2e 0d 0a 20 20 20  ure member...   
27bb0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
27bc0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
27bd0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
27be0 20 20 2f 2f 2f 20 54 68 65 20 6f 66 66 73 65 74    /// The offset
27bf0 2c 20 69 6e 20 62 79 74 65 73 2c 20 6f 66 20 74  , in bytes, of t
27c00 68 65 20 6e 65 78 74 20 73 74 72 75 63 74 75 72  he next structur
27c10 65 20 6d 65 6d 62 65 72 2e 0d 0a 20 20 20 20 20  e member...     
27c20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
27c30 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
27c40 63 20 73 74 61 74 69 63 20 69 6e 74 20 4e 65 78  c static int Nex
27c50 74 4f 66 66 73 65 74 4f 66 28 0d 0a 20 20 20 20  tOffsetOf(..    
27c60 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
27c70 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et,..           
27c80 20 69 6e 74 20 73 69 7a 65 2c 0d 0a 20 20 20 20   int size,..    
27c90 20 20 20 20 20 20 20 20 69 6e 74 20 61 6c 69 67          int alig
27ca0 6e 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  nment..         
27cb0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
27cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
27cd0 75 72 6e 20 52 6f 75 6e 64 55 70 28 6f 66 66 73  urn RoundUp(offs
27ce0 65 74 20 2b 20 73 69 7a 65 2c 20 61 6c 69 67 6e  et + size, align
27cf0 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
27d00 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
27d10 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
27d20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
27d70 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 61 72 73      #region Mars
27d80 68 61 6c 20 52 65 61 64 20 48 65 6c 70 65 72 20  hal Read Helper 
27d90 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
27da0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
27db0 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 61 64          /// Read
27dc0 73 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 49  s a <see cref="I
27dd0 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20 66  nt32" /> value f
27de0 72 6f 6d 20 74 68 65 20 73 70 65 63 69 66 69 65  rom the specifie
27df0 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20  d memory..      
27e00 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d    /// location..
27e10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
27e20 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
27e30 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
27e40 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20  ="pointer">..   
27e50 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
27e60 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
27e70 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
27e80 63 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  ce representing 
27e90 74 68 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20  the base..      
27ea0 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63    /// memory loc
27eb0 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
27ec0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
27ed0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
27ee0 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d   name="offset">.
27ef0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
27f00 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20   integer offset 
27f10 66 72 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65  from the base me
27f20 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68  mory location wh
27f30 65 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ere the..       
27f40 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
27f50 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20  Int32" /> value 
27f60 74 6f 20 62 65 20 72 65 61 64 20 69 73 20 6c 6f  to be read is lo
27f70 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  cated...        
27f80 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
27f90 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
27fa0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
27fb0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
27fc0 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20  Int32" /> value 
27fd0 61 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  at the specified
27fe0 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
27ff0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
28000 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
28010 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
28020 20 69 6e 74 20 52 65 61 64 49 6e 74 33 32 28 0d   int ReadInt32(.
28030 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
28040 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20  Ptr pointer,..  
28050 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66            int of
28060 66 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20  fset..          
28070 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
28080 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
28090 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
280a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
280b0 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  rn Marshal.ReadI
280c0 6e 74 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66  nt32(pointer, of
280d0 66 73 65 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  fset);..#else.. 
280e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
280f0 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  n Marshal.ReadIn
28100 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  t32(IntPtrForOff
28110 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
28120 73 65 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  set));..#endif..
28130 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28140 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28190 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
281a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
281b0 2f 2f 20 52 65 61 64 73 20 61 20 3c 73 65 65 20  // Reads a <see 
281c0 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e  cref="Double" />
281d0 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
281e0 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79  specified memory
281f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f  ..        /// lo
28200 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
28210 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
28220 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
28230 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65  ram name="pointe
28240 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
28250 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
28260 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63  IntPtr" /> objec
28270 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65  t instance repre
28280 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65  senting the base
28290 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
282a0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  mory location...
282b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
282c0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
282d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f  / <param name="o
282e0 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20  ffset">..       
282f0 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
28300 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
28310 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63   base memory loc
28320 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d  ation where the.
28330 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
28340 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20  e cref="Double" 
28350 2f 3e 20 74 6f 20 62 65 20 72 65 61 64 20 69 73  /> to be read is
28360 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20   located...     
28370 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
28380 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
28390 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
283a0 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
283b0 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20 76 61  f="Double" /> va
283c0 6c 75 65 20 61 74 20 74 68 65 20 73 70 65 63 69  lue at the speci
283d0 66 69 65 64 20 6d 65 6d 6f 72 79 20 6c 6f 63 61  fied memory loca
283e0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
283f0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
28400 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
28410 61 74 69 63 20 64 6f 75 62 6c 65 20 52 65 61 64  atic double Read
28420 44 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20 20 20  Double(..       
28430 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e       IntPtr poin
28440 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ter,..          
28450 20 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20    int offset..  
28460 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
28470 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
28480 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
28490 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
284a0 20 20 20 20 72 65 74 75 72 6e 20 42 69 74 43 6f      return BitCo
284b0 6e 76 65 72 74 65 72 2e 49 6e 74 36 34 42 69 74  nverter.Int64Bit
284c0 73 54 6f 44 6f 75 62 6c 65 28 4d 61 72 73 68 61  sToDouble(Marsha
284d0 6c 2e 52 65 61 64 49 6e 74 36 34 28 0d 0a 20 20  l.ReadInt64(..  
284e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6f                po
284f0 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29 3b  inter, offset));
28500 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
28510 20 20 20 20 20 72 65 74 75 72 6e 20 42 69 74 43       return BitC
28520 6f 6e 76 65 72 74 65 72 2e 54 6f 44 6f 75 62 6c  onverter.ToDoubl
28530 65 28 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 47  e(BitConverter.G
28540 65 74 42 79 74 65 73 28 0d 0a 20 20 20 20 20 20  etBytes(..      
28550 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
28560 6c 2e 52 65 61 64 49 6e 74 36 34 28 49 6e 74 50  l.ReadInt64(IntP
28570 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e  trForOffset(poin
28580 74 65 72 2c 20 6f 66 66 73 65 74 29 29 29 2c 20  ter, offset))), 
28590 30 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  0);..#endif..   
285a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
285b0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
285c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28600 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
28610 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
28620 52 65 61 64 73 20 61 6e 20 3c 73 65 65 20 63 72  Reads an <see cr
28630 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76  ef="IntPtr" /> v
28640 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 73 70  alue from the sp
28650 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a  ecified memory..
28660 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61          /// loca
28670 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
28680 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
28690 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
286a0 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22  m name="pointer"
286b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
286c0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  he <see cref="In
286d0 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tPtr" /> object 
286e0 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73 65  instance represe
286f0 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a  nting the base..
28700 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f          /// memo
28710 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  ry location...  
28720 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
28730 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
28740 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66  <param name="off
28750 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  set">..        /
28760 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f  // The integer o
28770 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
28780 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  ase memory locat
28790 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a 20  ion where the.. 
287a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
287b0 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
287c0 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65 61   value to be rea
287d0 64 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20  d is located... 
287e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
287f0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
28800 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
28810 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
28820 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f   cref="IntPtr" /
28830 3e 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 73  > value at the s
28840 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 20  pecified memory 
28850 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  location...     
28860 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
28870 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
28880 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20  c static IntPtr 
28890 52 65 61 64 49 6e 74 50 74 72 28 0d 0a 20 20 20  ReadIntPtr(..   
288a0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
288b0 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20  pointer,..      
288c0 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
288d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
288e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
288f0 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
28900 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
28910 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
28920 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
28930 72 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  r(pointer, offse
28940 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  t);..#else..    
28950 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
28960 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
28970 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  r(IntPtrForOffse
28980 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
28990 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  t));..#endif..  
289a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
289b0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
289c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
289d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28a10 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
28a20 6e 20 4d 61 72 73 68 61 6c 20 57 72 69 74 65 20  n Marshal Write 
28a30 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
28a40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
28a50 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
28a60 2f 2f 20 57 72 69 74 65 73 20 61 6e 20 3c 73 65  // Writes an <se
28a70 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f  e cref="Int32" /
28a80 3e 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20 73  > value to the s
28a90 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d  pecified memory.
28aa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63  .        /// loc
28ab0 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
28ac0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
28ad0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
28ae0 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72  am name="pointer
28af0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
28b00 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
28b10 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ntPtr" /> object
28b20 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73   instance repres
28b30 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d  enting the base.
28b40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d  .        /// mem
28b50 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20  ory location... 
28b60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
28b70 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
28b80 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66   <param name="of
28b90 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  fset">..        
28ba0 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20  /// The integer 
28bb0 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
28bc0 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61  base memory loca
28bd0 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a  tion where the..
28be0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
28bf0 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
28c00 20 76 61 6c 75 65 20 74 6f 20 62 65 20 77 72 69   value to be wri
28c10 74 74 65 6e 20 69 73 20 6c 6f 63 61 74 65 64 2e  tten is located.
28c20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
28c30 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
28c40 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
28c50 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20  "value">..      
28c60 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
28c70 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76  ref="Int32" /> v
28c80 61 6c 75 65 20 74 6f 20 77 72 69 74 65 2e 0d 0a  alue to write...
28c90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
28ca0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
28cb0 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
28cc0 20 57 72 69 74 65 49 6e 74 33 32 28 0d 0a 20 20   WriteInt32(..  
28cd0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
28ce0 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20   pointer,..     
28cf0 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
28d00 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
28d10 69 6e 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  int value..     
28d20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
28d30 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
28d40 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
28d50 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
28d60 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e   Marshal.WriteIn
28d70 74 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  t32(pointer, off
28d80 73 65 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  set, value);..#e
28d90 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
28da0 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e   Marshal.WriteIn
28db0 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  t32(IntPtrForOff
28dc0 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
28dd0 73 65 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  set), value);..#
28de0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
28df0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
28e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e40 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
28e50 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
28e60 20 20 20 20 20 20 2f 2f 2f 20 57 72 69 74 65 73        /// Writes
28e70 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f   a <see cref="Do
28e80 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74  uble" /> value t
28e90 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified 
28ea0 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  memory..        
28eb0 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20  /// location... 
28ec0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
28ed0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
28ee0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28ef0 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20  pointer">..     
28f00 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
28f10 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
28f20 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
28f30 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
28f40 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20  e base..        
28f50 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  /// memory locat
28f60 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
28f70 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
28f80 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
28f90 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20  ame="offset">.. 
28fa0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69         /// The i
28fb0 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72  nteger offset fr
28fc0 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f  om the base memo
28fd0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72  ry location wher
28fe0 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  e the..        /
28ff0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f  // <see cref="Do
29000 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74  uble" /> value t
29010 6f 20 62 65 20 77 72 69 74 74 65 6e 20 69 73 20  o be written is 
29020 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20  located...      
29030 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
29040 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
29050 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e  am name="value">
29060 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
29070 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75  e <see cref="Dou
29080 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  ble" /> value to
29090 20 77 72 69 74 65 2e 0d 0a 20 20 20 20 20 20 20   write...       
290a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
290b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
290c0 61 74 69 63 20 76 6f 69 64 20 57 72 69 74 65 44  atic void WriteD
290d0 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  ouble(..        
290e0 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74      IntPtr point
290f0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
29100 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20   int offset,..  
29110 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
29120 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
29130 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
29140 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
29150 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
29160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
29170 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 36 34  rshal.WriteInt64
29180 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
29190 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
291a0 20 20 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e     BitConverter.
291b0 44 6f 75 62 6c 65 54 6f 49 6e 74 36 34 42 69 74  DoubleToInt64Bit
291c0 73 28 76 61 6c 75 65 29 29 3b 0d 0a 23 65 6c 73  s(value));..#els
291d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  e..            M
291e0 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 36  arshal.WriteInt6
291f0 34 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  4(IntPtrForOffse
29200 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
29210 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
29220 20 20 20 20 20 42 69 74 43 6f 6e 76 65 72 74 65       BitConverte
29230 72 2e 54 6f 49 6e 74 36 34 28 42 69 74 43 6f 6e  r.ToInt64(BitCon
29240 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
29250 76 61 6c 75 65 29 2c 20 30 29 29 3b 0d 0a 23 65  value), 0));..#e
29260 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
29270 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
29280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
292d0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
292e0 20 20 20 20 20 2f 2f 2f 20 57 72 69 74 65 73 20       /// Writes 
292f0 61 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  a <see cref="Int
29300 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  Ptr" /> value to
29310 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d   the specified m
29320 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f  emory..        /
29330 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  // location...  
29340 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
29350 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
29360 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
29370 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20  ointer">..      
29380 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
29390 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20  ref="IntPtr" /> 
293a0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
293b0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
293c0 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f   base..        /
293d0 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  // memory locati
293e0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
293f0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
29400 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
29410 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20  me="offset">..  
29420 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
29430 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f  teger offset fro
29440 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72  m the base memor
29450 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65  y location where
29460 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
29470 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  / <see cref="Int
29480 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  Ptr" /> value to
29490 20 62 65 20 77 72 69 74 74 65 6e 20 69 73 20 6c   be written is l
294a0 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ocated...       
294b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
294c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
294d0 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
294e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
294f0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
29500 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20  tr" /> value to 
29510 77 72 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  write...        
29520 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
29530 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
29540 74 69 63 20 76 6f 69 64 20 57 72 69 74 65 49 6e  tic void WriteIn
29550 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
29560 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65     IntPtr pointe
29570 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
29580 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20  int offset,..   
29590 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
295a0 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
295b0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
295c0 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
295d0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
295e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72  .            Mar
295f0 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72  shal.WriteIntPtr
29600 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
29610 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
29620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
29630 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74  rshal.WriteIntPt
29640 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  r(IntPtrForOffse
29650 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
29660 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  t), value);..#en
29670 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
29680 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
29690 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
296a0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
296b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
296c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
296d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
296e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
296f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29700 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
29710 74 65 4d 6f 64 75 6c 65 20 42 61 73 65 20 43 6c  teModule Base Cl
29720 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
29730 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
29740 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65  This class repre
29750 73 65 6e 74 73 20 61 20 6d 61 6e 61 67 65 64 20  sents a managed 
29760 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
29770 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
29780 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 74  ion...    /// It
29790 20 69 73 20 6e 6f 74 20 73 65 61 6c 65 64 20 61   is not sealed a
297a0 6e 64 20 6d 75 73 74 20 62 65 20 75 73 65 64 20  nd must be used 
297b0 61 73 20 74 68 65 20 62 61 73 65 20 63 6c 61 73  as the base clas
297c0 73 20 66 6f 72 20 61 6e 79 0d 0a 20 20 20 20 2f  s for any..    /
297d0 2f 2f 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  // user-defined 
297e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
297f0 64 75 6c 65 20 63 6c 61 73 73 65 73 20 69 6d 70  dule classes imp
29800 6c 65 6d 65 6e 74 65 64 20 69 6e 20 6d 61 6e 61  lemented in mana
29810 67 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f  ged code...    /
29820 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
29830 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61     public abstra
29840 63 74 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d  ct class SQLiteM
29850 6f 64 75 6c 65 20 3a 0d 0a 20 20 20 20 20 20 20  odule :..       
29860 20 20 20 20 20 49 53 51 4c 69 74 65 4d 61 6e 61       ISQLiteMana
29870 67 65 64 4d 6f 64 75 6c 65 2c 20 2f 2a 49 53 51  gedModule, /*ISQ
29880 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
29890 2c 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ,*/..           
298a0 20 49 44 69 73 70 6f 73 61 62 6c 65 20 2f 2a 20   IDisposable /* 
298b0 4e 4f 54 20 53 45 41 4c 45 44 20 2a 2f 0d 0a 20  NOT SEALED */.. 
298c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
298d0 65 67 69 6f 6e 20 53 51 4c 69 74 65 4e 61 74 69  egion SQLiteNati
298e0 76 65 4d 6f 64 75 6c 65 20 50 72 69 76 61 74 65  veModule Private
298f0 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
29900 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
29910 6c 61 73 73 20 53 51 4c 69 74 65 4e 61 74 69 76  lass SQLiteNativ
29920 65 4d 6f 64 75 6c 65 20 3a 0d 0a 20 20 20 20 20  eModule :..     
29930 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69             ISQLi
29940 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2c 20  teNativeModule, 
29950 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20  IDisposable..   
29960 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29970 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
29980 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  ate Constants.. 
29990 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
299a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
299b0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
299c0 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74  s the value that
299d0 20 69 73 20 61 6c 77 61 79 73 20 75 73 65 64 20   is always used 
299e0 66 6f 72 20 74 68 65 20 22 6c 6f 67 45 72 72 6f  for the "logErro
299f0 72 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs"..           
29a00 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72 20 74   /// parameter t
29a10 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 73 74  o the various st
29a20 61 74 69 63 20 65 72 72 6f 72 20 68 61 6e 64 6c  atic error handl
29a30 69 6e 67 20 6d 65 74 68 6f 64 73 20 70 72 6f 76  ing methods prov
29a40 69 64 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ided..          
29a50 20 20 2f 2f 2f 20 62 79 20 74 68 65 20 3c 73 65    /// by the <se
29a60 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
29a70 64 75 6c 65 22 20 2f 3e 20 63 6c 61 73 73 2e 0d  dule" /> class..
29a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29a90 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
29aa0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
29ab0 20 63 6f 6e 73 74 20 62 6f 6f 6c 20 44 65 66 61   const bool Defa
29ac0 75 6c 74 4c 6f 67 45 72 72 6f 72 73 20 3d 20 74  ultLogErrors = t
29ad0 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
29ae0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
29af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29b30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
29b40 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
29b50 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68    /// This is th
29b60 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
29b70 74 65 78 74 20 75 73 65 64 20 77 68 65 6e 20 74  text used when t
29b80 68 65 20 63 6f 6e 74 61 69 6e 65 64 0d 0a 20 20  he contained..  
29b90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
29ba0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d  ee cref="SQLiteM
29bb0 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  odule" /> object
29bc0 20 69 6e 73 74 61 6e 63 65 20 69 73 20 6e 6f 74   instance is not
29bd0 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20   available..    
29be0 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20          /// for 
29bf0 61 6e 79 20 72 65 61 73 6f 6e 2e 0d 0a 20 20 20  any reason...   
29c00 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
29c10 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
29c20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
29c30 73 74 20 73 74 72 69 6e 67 20 4d 6f 64 75 6c 65  st string Module
29c40 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72 6f  NotAvailableErro
29c50 72 4d 65 73 73 61 67 65 20 3d 0d 0a 20 20 20 20  rMessage =..    
29c60 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 61 74              "nat
29c70 69 76 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  ive module imple
29c80 6d 65 6e 74 61 74 69 6f 6e 20 6e 6f 74 20 61 76  mentation not av
29c90 61 69 6c 61 62 6c 65 22 3b 0d 0a 20 20 20 20 20  ailable";..     
29ca0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
29cb0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
29cc0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29d10 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
29d20 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20  ate Data..      
29d30 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
29d40 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
29d50 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
29d60 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
29d70 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
29d80 61 6e 63 65 20 75 73 65 64 20 74 6f 20 70 72 6f  ance used to pro
29d90 76 69 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20  vide..          
29da0 20 20 2f 2f 2f 20 61 6e 20 69 6d 70 6c 65 6d 65    /// an impleme
29db0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c  ntation of the <
29dc0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
29dd0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f  eNativeModule" /
29de0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29df0 2f 2f 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20  // interface... 
29e00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
29e10 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
29e20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
29e30 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
29e40 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le;..           
29e50 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
29e60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
29e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
29ec0 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
29ed0 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
29ee0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
29ef0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
29f00 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
29f10 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
29f20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
29f30 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
29f40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
29f50 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
29f60 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
29f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29f80 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
29f90 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
29fa0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
29fb0 75 73 65 64 20 74 6f 20 70 72 6f 76 69 64 65 0d  used to provide.
29fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29fd0 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69   an implementati
29fe0 6f 6e 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63  on of the <see c
29ff0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2a000 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20  veModule" />..  
2a010 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e            /// in
2a020 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 20 20  terface...      
2a030 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2a040 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2a050 70 75 62 6c 69 63 20 53 51 4c 69 74 65 4e 61 74  public SQLiteNat
2a060 69 76 65 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20  iveModule(..    
2a070 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
2a080 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d  teModule module.
2a090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a0a0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2a0b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a0c0 20 20 20 74 68 69 73 2e 6d 6f 64 75 6c 65 20 3d     this.module =
2a0d0 20 6d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20   module;..      
2a0e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a0f0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2a100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a150 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2a160 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
2a170 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  e Static Methods
2a180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a190 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2a1a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74           /// Set
2a1b0 73 20 74 68 65 20 74 61 62 6c 65 20 65 72 72 6f  s the table erro
2a1c0 72 20 6d 65 73 73 61 67 65 20 74 6f 20 6f 6e 65  r message to one
2a1d0 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
2a1e0 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20  the native..    
2a1f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75          /// modu
2a200 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
2a210 6e 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  n is not availab
2a220 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...           
2a230 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2a240 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a250 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
2a260 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  tab">..         
2a270 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
2a280 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
2a290 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
2a2a0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
2a2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a2c0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2a2d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2a2e0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2a2f0 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65     /// The value
2a300 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53   of <see cref="S
2a310 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
2a320 72 72 6f 72 22 20 2f 3e 2e 0d 0a 20 20 20 20 20  rror" />...     
2a330 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2a340 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2a350 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2a360 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2a370 65 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  e ModuleNotAvail
2a380 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 0d  ableTableError(.
2a390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a3a0 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2a3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a3e0 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 6e   SetTableError(n
2a3f0 75 6c 6c 2c 20 70 56 74 61 62 2c 20 44 65 66 61  ull, pVtab, Defa
2a400 75 6c 74 4c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20  ultLogErrors,.. 
2a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a420 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69     ModuleNotAvai
2a430 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73 73 61 67  lableErrorMessag
2a440 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2a450 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
2a460 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
2a470 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ror;..          
2a480 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a490 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a4e0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2a4f0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2a500 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 74 61   /// Sets the ta
2a510 62 6c 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ble error messag
2a520 65 20 74 6f 20 6f 6e 65 20 74 68 61 74 20 69 6e  e to one that in
2a530 64 69 63 61 74 65 73 20 74 68 65 20 6e 61 74 69  dicates the nati
2a540 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ve..            
2a550 2f 2f 2f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  /// module imple
2a560 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 6e 6f 74  mentation is not
2a570 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20   available...   
2a580 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
2a590 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2a5a0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2a5b0 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
2a5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a5d0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
2a5e0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
2a5f0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
2a600 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20 20  erived..        
2a610 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72      /// structur
2a620 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
2a630 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2a640 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2a650 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2a660 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c       /// The val
2a670 75 65 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d  ue of <see cref=
2a680 22 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  "SQLiteErrorCode
2a690 2e 45 72 72 6f 72 22 20 2f 3e 2e 0d 0a 20 20 20  .Error" />...   
2a6a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2a6b0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2a6c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2a6d0 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  tic SQLiteErrorC
2a6e0 6f 64 65 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  ode ModuleNotAva
2a6f0 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f  ilableCursorErro
2a700 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
2a710 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73      IntPtr pCurs
2a720 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
2a730 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
2a740 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a750 20 20 20 20 20 20 53 65 74 43 75 72 73 6f 72 45        SetCursorE
2a760 72 72 6f 72 28 6e 75 6c 6c 2c 20 70 43 75 72 73  rror(null, pCurs
2a770 6f 72 2c 20 44 65 66 61 75 6c 74 4c 6f 67 45 72  or, DefaultLogEr
2a780 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  rors,..         
2a790 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c             Modul
2a7a0 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72  eNotAvailableErr
2a7b0 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  orMessage);.... 
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a7d0 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
2a7e0 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
2a7f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2a800 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2a810 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
2a820 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a860 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a870 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53        #region IS
2a880 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2a890 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  e Members..     
2a8a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2a8b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2a8c0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2a8d0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2a8e0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
2a8f0 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  eate" /> method.
2a900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a910 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2a920 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2a930 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e  aram name="pDb">
2a940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a950 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2a960 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2a970 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
2a980 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2a990 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2a9a0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2a9b0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2a9c0 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20  ame="pAux">..   
2a9d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2a9e0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2a9f0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2aa00 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
2aa10 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2aa20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2aa30 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2aa40 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2aa50 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
2aa60 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2aa70 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2aa80 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2aa90 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Create" /> metho
2aaa0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2aab0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2aac0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2aad0 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22  aram name="argv"
2aae0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2aaf0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2ab00 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2ab10 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
2ab20 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
2ab30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ab40 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2ab50 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2ab60 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
2ab70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2ab80 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2ab90 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2aba0 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
2abb0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2abc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2abd0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2abe0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2abf0 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20  ="pError">..    
2ac00 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2ac10 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2ac20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2ac30 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d  le.xCreate" /> m
2ac40 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2ac50 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2ac60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ac70 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2ac80 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2ac90 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2aca0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2acb0 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
2acc0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2acd0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2ace0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2acf0 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2ad00 72 6f 72 43 6f 64 65 20 78 43 72 65 61 74 65 28  rorCode xCreate(
2ad10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ad20 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
2ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2ad40 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
2ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2ad60 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
2ad70 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61          IntPtr a
2ad80 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgv,..          
2ad90 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
2ada0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
2adb0 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
2adc0 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20  Ptr pError..    
2add0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2ade0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2ae00 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2ae10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ae20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2ae30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2ae40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae60 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65   pError = SQLite
2ae70 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
2ae80 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20  rFromString(..  
2ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aea0 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41        ModuleNotA
2aeb0 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73  vailableErrorMes
2aec0 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sage);....      
2aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2aee0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
2aef0 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2af10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2af20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2af30 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20  xCreate(..      
2af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
2af50 62 2c 20 70 41 75 78 2c 20 61 72 67 63 2c 20 61  b, pAux, argc, a
2af60 72 67 76 2c 20 72 65 66 20 70 56 74 61 62 2c 20  rgv, ref pVtab, 
2af70 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20  ref pError);..  
2af80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2af90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2afa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2afe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2aff0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2b000 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2b010 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2b020 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2b030 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
2b040 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2b050 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2b060 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2b070 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2b080 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20  e="pDb">..      
2b090 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2b0a0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2b0b0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2b0c0 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  .xConnect" /> me
2b0d0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2b0e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2b0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b100 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41   <param name="pA
2b110 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ux">..          
2b120 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2b130 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2b140 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
2b150 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
2b160 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b170 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2b180 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2b190 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
2b1a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b1b0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2b1c0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2b1d0 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
2b1e0 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2b1f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2b200 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2b210 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2b220 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20  name="argv">..  
2b230 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2b240 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2b250 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2b260 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
2b270 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2b280 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2b290 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2b2a0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2b2b0 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2b2c0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2b2d0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2b2e0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2b2f0 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
2b300 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2b310 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2b320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b330 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2b340 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  Error">..       
2b350 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2b360 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2b370 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2b380 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  xConnect" /> met
2b390 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2b3a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b3c0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
2b3d0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2b3e0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2b3f0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2b400 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
2b410 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2b420 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2b430 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2b440 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2b450 6f 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63 74 28  orCode xConnect(
2b460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b470 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
2b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2b490 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
2b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2b4b0 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
2b4c0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61          IntPtr a
2b4d0 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgv,..          
2b4e0 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
2b4f0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
2b500 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
2b510 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20  Ptr pError..    
2b520 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2b530 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2b550 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2b560 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b570 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2b580 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2b590 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5b0 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65   pError = SQLite
2b5c0 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
2b5d0 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20  rFromString(..  
2b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5f0 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41        ModuleNotA
2b600 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73  vailableErrorMes
2b610 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sage);....      
2b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b630 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
2b640 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
2b650 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2b660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b670 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2b680 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20  xConnect(..     
2b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2b6a0 44 62 2c 20 70 41 75 78 2c 20 61 72 67 63 2c 20  Db, pAux, argc, 
2b6b0 61 72 67 76 2c 20 72 65 66 20 70 56 74 61 62 2c  argv, ref pVtab,
2b6c0 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 20   ref pError);.. 
2b6d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2b6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2b730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b740 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2b750 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2b760 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2b770 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2b780 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 22  dule.xBestIndex"
2b790 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2b7a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
2b7b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2b7c0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2b7d0 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
2b7e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2b7f0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2b800 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2b810 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
2b820 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2b830 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2b840 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2b850 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2b860 61 6d 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20  ame="pIndex">.. 
2b870 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2b880 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2b890 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2b8a0 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
2b8b0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2b8c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2b8d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2b8e0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2b8f0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2b900 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2b910 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2b920 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
2b930 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ndex" /> method.
2b940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b950 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2b960 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2b970 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2b980 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20   xBestIndex(..  
2b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2b9a0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
2b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2b9c0 50 74 72 20 70 49 6e 64 65 78 0d 0a 20 20 20 20  Ptr pIndex..    
2b9d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2b9e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2ba00 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2ba10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ba20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2ba30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ba50 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2ba60 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f  ailableTableErro
2ba70 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  r(pVtab);....   
2ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ba90 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 42 65 73 74  urn module.xBest
2baa0 49 6e 64 65 78 28 70 56 74 61 62 2c 20 70 49 6e  Index(pVtab, pIn
2bab0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
2bac0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2bad0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2bae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2baf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2bb20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2bb30 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2bb40 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2bb50 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2bb60 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69  NativeModule.xDi
2bb70 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  sconnect" /> met
2bb80 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2bb90 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2bba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2bbb0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2bbc0 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
2bbd0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2bbe0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2bbf0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2bc00 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  Disconnect" /> m
2bc10 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2bc20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2bc30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2bc40 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2bc50 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2bc60 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2bc70 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2bc80 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22  ule.xDisconnect"
2bc90 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2bca0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2bcb0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2bcc0 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2bcd0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44 69 73  teErrorCode xDis
2bce0 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  connect(..      
2bcf0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2bd00 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
2bd10 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2bd20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2bd30 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2bd40 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2bd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd60 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2bd70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2bd80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2bd90 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2bda0 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56  bleTableError(pV
2bdb0 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
2bdc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2bdd0 6d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65  module.xDisconne
2bde0 63 74 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20  ct(pVtab);..    
2bdf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2be00 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2be10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2be50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2be60 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2be70 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2be80 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2be90 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2bea0 65 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d  e.xDestroy" /> m
2beb0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2bec0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2bed0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2bee0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2bef0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
2bf00 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2bf10 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2bf20 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2bf30 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65  .xDestroy" /> me
2bf40 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2bf50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2bf60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bf70 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2bf80 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2bf90 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2bfa0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2bfb0 6c 65 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e 20  le.xDestroy" /> 
2bfc0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2bfd0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2bfe0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2bff0 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2c000 72 6f 72 43 6f 64 65 20 78 44 65 73 74 72 6f 79  rorCode xDestroy
2c010 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c020 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
2c030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c040 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2c050 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c060 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2c070 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2c080 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2c090 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0b0 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2c0c0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2c0d0 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2c0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c0f0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2c100 78 44 65 73 74 72 6f 79 28 70 56 74 61 62 29 3b  xDestroy(pVtab);
2c110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c170 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2c180 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2c190 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c1a0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2c1b0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2c1c0 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f  eModule.xOpen" /
2c1d0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2c1e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2c1f0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2c200 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2c210 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
2c220 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2c230 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2c240 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2c250 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65  ule.xOpen" /> me
2c260 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2c270 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2c280 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c290 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
2c2a0 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
2c2b0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2c2c0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2c2d0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2c2e0 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  xOpen" /> method
2c2f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c300 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2c310 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
2c320 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2c330 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2c340 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2c350 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2c360 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Open" /> method.
2c370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c380 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2c390 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2c3a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2c3b0 20 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20   xOpen(..       
2c3c0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2c3d0 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
2c3e0 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
2c3f0 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
2c400 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2c410 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2c430 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2c440 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c450 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2c460 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c480 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2c490 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f  ailableTableErro
2c4a0 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  r(pVtab);....   
2c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c4c0 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e  urn module.xOpen
2c4d0 28 70 56 74 61 62 2c 20 72 65 66 20 70 43 75 72  (pVtab, ref pCur
2c4e0 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  sor);..         
2c4f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2c500 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c540 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2c550 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2c560 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2c570 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2c580 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2c590 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c  NativeModule.xCl
2c5a0 6f 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ose" /> method..
2c5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c5c0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2c5d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2c5e0 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
2c5f0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r">..           
2c600 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2c610 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2c620 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f  ativeModule.xClo
2c630 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  se" /> method...
2c640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c650 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2c660 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2c670 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2c680 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2c690 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2c6a0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f  ativeModule.xClo
2c6b0 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  se" /> method...
2c6c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c6d0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2c6e0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2c6f0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
2c700 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20  Close(..        
2c710 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2c720 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  Cursor..        
2c730 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2c740 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c750 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2c760 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2c770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c780 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2c790 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2c7a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c7b0 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2c7c0 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70  bleCursorError(p
2c7d0 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  Cursor);....    
2c7e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2c7f0 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  rn module.xClose
2c800 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20  (pCursor);..    
2c810 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c820 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2c830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2c870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c880 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2c890 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2c8a0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2c8b0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2c8c0 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  e.xFilter" /> me
2c8d0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2c8e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2c8f0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c900 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2c910 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
2c920 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2c930 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2c940 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2c950 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  e.xFilter" /> me
2c960 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2c970 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2c980 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c990 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64   <param name="id
2c9a0 78 4e 75 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20  xNum">..        
2c9b0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2c9c0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2c9d0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2c9e0 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f  Filter" /> metho
2c9f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2ca00 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2ca10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2ca20 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78 53 74  aram name="idxSt
2ca30 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r">..           
2ca40 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2ca50 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2ca60 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c  ativeModule.xFil
2ca70 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ter" /> method..
2ca80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ca90 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2caa0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2cab0 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a  m name="argc">..
2cac0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2cad0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2cae0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2caf0 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2cb00 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2cb10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2cb20 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2cb30 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2cb40 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20  e="argv">..     
2cb50 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2cb60 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2cb70 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2cb80 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  e.xFilter" /> me
2cb90 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2cba0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2cbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2cbc0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2cbd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2cbe0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2cbf0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2cc00 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d  le.xFilter" /> m
2cc10 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2cc20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2cc30 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2cc40 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2cc50 6f 72 43 6f 64 65 20 78 46 69 6c 74 65 72 28 0d  orCode xFilter(.
2cc60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cc70 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c   IntPtr pCursor,
2cc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cc90 20 20 69 6e 74 20 69 64 78 4e 75 6d 2c 0d 0a 20    int idxNum,.. 
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2ccb0 6e 74 50 74 72 20 69 64 78 53 74 72 2c 0d 0a 20  ntPtr idxStr,.. 
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ccd0 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
2cce0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2ccf0 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 20   argv..         
2cd00 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2cd10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2cd20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
2cd30 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd50 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
2cd60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2cd70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2cd80 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2cd90 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43  leCursorError(pC
2cda0 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ursor);....     
2cdb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2cdc0 6e 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72  n module.xFilter
2cdd0 28 70 43 75 72 73 6f 72 2c 20 69 64 78 4e 75 6d  (pCursor, idxNum
2cde0 2c 20 69 64 78 53 74 72 2c 20 61 72 67 63 2c 20  , idxStr, argc, 
2cdf0 61 72 67 76 29 3b 0d 0a 20 20 20 20 20 20 20 20  argv);..        
2ce00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2ce10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2ce20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce50 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ce60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2ce70 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2ce80 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2ce90 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2cea0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e  eNativeModule.xN
2ceb0 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ext" /> method..
2cec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ced0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2cee0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2cef0 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
2cf00 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r">..           
2cf10 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2cf20 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2cf30 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78  ativeModule.xNex
2cf40 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2cf50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2cf60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2cf70 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2cf80 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2cf90 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2cfa0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2cfb0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74  tiveModule.xNext
2cfc0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2cfd0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2cfe0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2cff0 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2d000 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4e 65  iteErrorCode xNe
2d010 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt(..           
2d020 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2d030 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
2d040 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2d050 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d060 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2d070 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
2d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2d090 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
2d0a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2d0b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
2d0c0 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2d0d0 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75 72  CursorError(pCur
2d0e0 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sor);....       
2d0f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d100 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 28 70 43 75  module.xNext(pCu
2d110 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rsor);..        
2d120 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d130 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2d140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d170 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d180 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2d190 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2d1a0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2d1b0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2d1c0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45  eNativeModule.xE
2d1d0 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  of" /> method...
2d1e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d1f0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2d200 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2d210 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
2d220 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2d230 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d240 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d250 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22  tiveModule.xEof"
2d260 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2d270 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2d280 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2d290 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2d2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d2b0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2d2c0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2d2d0 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22 20 2f  veModule.xEof" /
2d2e0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2d2f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2d300 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2d310 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 78 45     public int xE
2d320 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  of(..           
2d330 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2d340 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
2d350 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2d360 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d370 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2d380 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
2d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2d3a0 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
2d3b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2d3c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d3d0 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65            Module
2d3e0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73  NotAvailableCurs
2d3f0 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f 72 29  orError(pCursor)
2d400 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d410 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
2d420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d430 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2d440 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2d450 64 75 6c 65 2e 78 45 6f 66 28 70 43 75 72 73 6f  dule.xEof(pCurso
2d460 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2d470 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d480 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2d490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2d4d0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2d4e0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2d4f0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d500 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d510 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
2d520 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  mn" /> method...
2d530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d540 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2d550 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2d560 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
2d570 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2d580 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d590 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d5a0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
2d5b0 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  mn" /> method...
2d5c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d5d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2d5e0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2d5f0 20 6e 61 6d 65 3d 22 70 43 6f 6e 74 65 78 74 22   name="pContext"
2d600 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2d610 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2d620 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2d630 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  iveModule.xColum
2d640 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
2d650 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d660 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2d670 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2d680 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
2d690 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2d6a0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2d6b0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2d6c0 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f  odule.xColumn" /
2d6d0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2d6e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2d6f0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2d700 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2d710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d720 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2d730 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2d740 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20  Module.xColumn" 
2d750 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2d760 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
2d770 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2d780 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2d790 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75  eErrorCode xColu
2d7a0 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn(..           
2d7b0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2d7c0 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
2d7d0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f        IntPtr pCo
2d7e0 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20  ntext,..        
2d7f0 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
2d800 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  x..             
2d810 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2d820 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d830 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2d840 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2d850 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d860 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2d870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d880 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2d890 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75  leNotAvailableCu
2d8a0 72 73 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f  rsorError(pCurso
2d8b0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
2d8c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2d8d0 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 28 70 43 75  dule.xColumn(pCu
2d8e0 72 73 6f 72 2c 20 70 43 6f 6e 74 65 78 74 2c 20  rsor, pContext, 
2d8f0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
2d900 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d910 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2d920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d950 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2d960 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
2d970 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2d980 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2d990 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2d9a0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2d9b0 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64  RowId" /> method
2d9c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2d9d0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2d9e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d9f0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
2da00 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  sor">..         
2da10 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2da20 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2da30 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2da40 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  owId" /> method.
2da50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2da60 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2da70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2da80 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e  am name="rowId">
2da90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2daa0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2dab0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2dac0 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 22  veModule.xRowId"
2dad0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2dae0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2daf0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2db00 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2db10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2db20 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2db30 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2db40 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 22  veModule.xRowId"
2db50 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2db60 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2db70 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2db80 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2db90 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 77  teErrorCode xRow
2dba0 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id(..           
2dbb0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2dbc0 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
2dbd0 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72        ref long r
2dbe0 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  owId..          
2dbf0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2dc00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2dc10 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2dc20 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2dc40 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2dc50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2dc60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2dc70 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2dc80 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75  eCursorError(pCu
2dc90 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsor);....      
2dca0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2dcb0 20 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 28 70   module.xRowId(p
2dcc0 43 75 72 73 6f 72 2c 20 72 65 66 20 72 6f 77 49  Cursor, ref rowI
2dcd0 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
2dce0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2dcf0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2dd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2dd40 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2dd50 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2dd60 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2dd70 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2dd80 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
2dd90 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
2dda0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ddb0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2ddc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2ddd0 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
2dde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ddf0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2de00 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2de10 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65  veModule.xUpdate
2de20 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2de30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2de40 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2de50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2de60 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20  ame="argc">..   
2de70 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2de80 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2de90 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2dea0 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20  ule.xUpdate" /> 
2deb0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2dec0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2ded0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2dee0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2def0 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20  argv">..        
2df00 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2df10 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2df20 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2df30 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Update" /> metho
2df40 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2df50 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2df60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2df70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64  aram name="rowId
2df80 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2df90 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2dfa0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2dfb0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
2dfc0 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2dfe0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2dff0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2e000 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2e010 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2e020 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2e030 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64  ativeModule.xUpd
2e040 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ate" /> method..
2e050 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e060 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2e070 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2e080 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2e090 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20  xUpdate(..      
2e0a0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2e0b0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
2e0c0 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
2e0d0 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
2e0e0 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 2c      IntPtr argv,
2e0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e100 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64    ref long rowId
2e110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e120 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2e130 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e140 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70      // CheckDisp
2e150 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
2e160 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2e170 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e190 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c      return Modul
2e1a0 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62  eNotAvailableTab
2e1b0 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d  leError(pVtab);.
2e1c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e1d0 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
2e1e0 2e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20  .xUpdate(pVtab, 
2e1f0 61 72 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20  argc, argv, ref 
2e200 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20  rowId);..       
2e210 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e220 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2e230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e260 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2e270 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
2e280 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2e290 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2e2a0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2e2b0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2e2c0 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  Begin" /> method
2e2d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e2e0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2e2f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e300 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
2e310 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
2e320 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2e330 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2e340 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67  ativeModule.xBeg
2e350 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  in" /> method...
2e360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e370 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2e380 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2e390 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2e3a0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2e3b0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2e3c0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67  ativeModule.xBeg
2e3d0 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  in" /> method...
2e3e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e3f0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2e400 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2e410 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
2e420 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20  Begin(..        
2e430 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2e440 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
2e450 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2e460 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e470 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2e480 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2e4a0 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2e4b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2e4c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2e4d0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2e4e0 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2e4f0 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
2e500 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2e510 64 75 6c 65 2e 78 42 65 67 69 6e 28 70 56 74 61  dule.xBegin(pVta
2e520 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b);..           
2e530 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2e540 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2e550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e580 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2e590 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2e5a0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2e5b0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2e5c0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2e5d0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63  tiveModule.xSync
2e5e0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2e5f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2e600 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2e610 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2e620 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2e630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e640 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2e650 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2e660 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e  Module.xSync" />
2e670 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2e680 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2e690 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2e6a0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2e6b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2e6c0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2e6d0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2e6e0 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20  odule.xSync" /> 
2e6f0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2e700 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2e710 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2e720 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2e730 72 6f 72 43 6f 64 65 20 78 53 79 6e 63 28 0d 0a  rorCode xSync(..
2e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e750 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
2e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2e770 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e790 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2e7a0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2e7b0 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2e7c0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7e0 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
2e7f0 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
2e800 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
2e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e820 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 53 79  eturn module.xSy
2e830 6e 63 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20  nc(pVtab);..    
2e840 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2e850 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2e860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e8b0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2e8c0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2e8d0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2e8e0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2e8f0 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65  e.xCommit" /> me
2e900 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2e910 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2e920 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2e930 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2e940 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
2e950 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2e960 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2e970 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2e980 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65 74 68  xCommit" /> meth
2e990 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2e9a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2e9b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e9c0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2e9d0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2e9e0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2e9f0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2ea00 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65 74  .xCommit" /> met
2ea10 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2ea20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2ea30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2ea40 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
2ea50 43 6f 64 65 20 78 43 6f 6d 6d 69 74 28 0d 0a 20  Code xCommit(.. 
2ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2ea70 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
2ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2ea90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2eab0 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2eac0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ead0 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2eae0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2eb00 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2eb10 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2eb20 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2eb40 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6f 6d  turn module.xCom
2eb50 6d 69 74 28 70 56 74 61 62 29 3b 0d 0a 20 20 20  mit(pVtab);..   
2eb60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2eb70 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2eb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2ebc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ebd0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2ebe0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2ebf0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2ec00 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2ec10 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f 3e  le.xRollback" />
2ec20 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2ec30 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2ec40 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2ec50 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2ec60 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
2ec70 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2ec80 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2ec90 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2eca0 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f 3e  le.xRollback" />
2ecb0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2ecc0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2ecd0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2ece0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2ecf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2ed00 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2ed10 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2ed20 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22  odule.xRollback"
2ed30 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2ed40 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2ed50 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2ed60 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2ed70 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c  teErrorCode xRol
2ed80 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
2ed90 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2eda0 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
2edb0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2edc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2edd0 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2ede0 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ee00 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2ee10 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ee20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2ee30 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2ee40 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2ee50 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
2ee60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2ee70 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 28 70  dule.xRollback(p
2ee80 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  Vtab);..        
2ee90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2eea0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2eeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
2eef0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2ef00 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2ef10 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2ef20 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2ef30 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
2ef40 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  indFunction" /> 
2ef50 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2ef60 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2ef70 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2ef80 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2ef90 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2efa0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2efb0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2efc0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2efd0 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22  e.xFindFunction"
2efe0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2eff0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2f000 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2f010 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2f020 6d 65 3d 22 6e 41 72 67 22 3e 0d 0a 20 20 20 20  me="nArg">..    
2f030 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2f040 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2f050 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2f060 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
2f070 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2f080 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2f090 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2f0a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2f0b0 61 6d 65 3d 22 7a 4e 61 6d 65 22 3e 0d 0a 20 20  ame="zName">..  
2f0c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2f0d0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2f0e0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2f0f0 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69  dule.xFindFuncti
2f100 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  on" /> method...
2f110 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f120 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2f130 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2f140 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22   name="callback"
2f150 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2f160 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2f170 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2f180 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  iveModule.xFindF
2f190 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68  unction" /> meth
2f1a0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2f1b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2f1c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2f1d0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69  param name="pCli
2f1e0 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20  entData">..     
2f1f0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2f200 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2f210 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2f220 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22  e.xFindFunction"
2f230 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2f240 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2f250 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2f260 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2f270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f280 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2f290 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2f2a0 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  veModule.xFindFu
2f2b0 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  nction" /> metho
2f2c0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2f2d0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2f2f0 69 63 20 69 6e 74 20 78 46 69 6e 64 46 75 6e 63  ic int xFindFunc
2f300 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
2f310 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
2f320 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
2f330 20 20 20 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d        int nArg,.
2f340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f350 20 49 6e 74 50 74 72 20 7a 4e 61 6d 65 2c 0d 0a   IntPtr zName,..
2f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f370 72 65 66 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  ref SQLiteCallba
2f380 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
2f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f3a0 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74  f IntPtr pClient
2f3b0 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
2f3c0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2f3d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f3e0 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2f3f0 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2f400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2f410 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2f420 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2f430 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f440 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c             Modul
2f450 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62  eNotAvailableTab
2f460 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d  leError(pVtab);.
2f470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f480 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f4b0 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75       return modu
2f4c0 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
2f4d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f4e0 20 20 20 20 20 20 20 70 56 74 61 62 2c 20 6e 41         pVtab, nA
2f4f0 72 67 2c 20 7a 4e 61 6d 65 2c 20 72 65 66 20 63  rg, zName, ref c
2f500 61 6c 6c 62 61 63 6b 2c 20 72 65 66 20 70 43 6c  allback, ref pCl
2f510 69 65 6e 74 44 61 74 61 29 3b 0d 0a 20 20 20 20  ientData);..    
2f520 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f530 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2f540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f590 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2f5a0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2f5b0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2f5c0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2f5d0 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65  e.xRename" /> me
2f5e0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2f5f0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2f600 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2f610 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2f620 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
2f630 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2f640 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2f650 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2f660 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68  xRename" /> meth
2f670 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2f680 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2f690 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2f6a0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 65 77  param name="zNew
2f6b0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2f6c0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2f6d0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2f6e0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61  tiveModule.xRena
2f6f0 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  me" /> method...
2f700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f710 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2f720 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2f730 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2f740 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2f750 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2f760 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e  ativeModule.xRen
2f770 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ame" /> method..
2f780 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2f790 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2f7a0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2f7b0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2f7c0 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20  xRename(..      
2f7d0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2f7e0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
2f7f0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2f800 7a 4e 65 77 0d 0a 20 20 20 20 20 20 20 20 20 20  zNew..          
2f810 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2f820 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f830 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2f840 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2f860 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2f870 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2f880 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2f890 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2f8a0 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2f8b0 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
2f8c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2f8d0 64 75 6c 65 2e 78 52 65 6e 61 6d 65 28 70 56 74  dule.xRename(pVt
2f8e0 61 62 2c 20 7a 4e 65 77 29 3b 0d 0a 20 20 20 20  ab, zNew);..    
2f8f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f900 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2f910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f950 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f960 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2f970 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2f980 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2f990 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2f9a0 65 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e  e.xSavepoint" />
2f9b0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2f9c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2f9d0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2f9e0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2f9f0 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
2fa00 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2fa10 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2fa20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2fa30 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f  le.xSavepoint" /
2fa40 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2fa50 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2fa60 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2fa70 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2fa80 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a  ="iSavepoint">..
2fa90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2faa0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2fab0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2fac0 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  Module.xSavepoin
2fad0 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2fae0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2faf0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2fb00 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2fb10 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2fb20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2fb30 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2fb40 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65  tiveModule.xSave
2fb50 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64  point" /> method
2fb60 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2fb70 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2fb80 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2fb90 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2fba0 65 20 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20  e xSavepoint(.. 
2fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2fbc0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2fbe0 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20  t iSavepoint..  
2fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2fc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2fc30 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2fc40 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2fc50 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc70 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
2fc80 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
2fc90 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
2fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2fcb0 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 53 61  eturn module.xSa
2fcc0 76 65 70 6f 69 6e 74 28 70 56 74 61 62 2c 20 69  vepoint(pVtab, i
2fcd0 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20 20 20  Savepoint);..   
2fce0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2fcf0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2fd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2fd50 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2fd60 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2fd70 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2fd80 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2fd90 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f 3e 20  le.xRelease" /> 
2fda0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2fdb0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2fdc0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2fdd0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2fde0 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2fdf0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2fe00 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2fe10 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2fe20 65 2e 78 52 65 6c 65 61 73 65 22 20 2f 3e 20 6d  e.xRelease" /> m
2fe30 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2fe40 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2fe50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2fe60 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
2fe70 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20  Savepoint">..   
2fe80 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2fe90 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2fea0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2feb0 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f 3e  ule.xRelease" />
2fec0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2fed0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2fee0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2fef0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2ff00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2ff10 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2ff20 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2ff30 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20  odule.xRelease" 
2ff40 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2ff50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
2ff60 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2ff70 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2ff80 65 45 72 72 6f 72 43 6f 64 65 20 78 52 65 6c 65  eErrorCode xRele
2ff90 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ase(..          
2ffa0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
2ffb0 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
2ffc0 20 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f       int iSavepo
2ffd0 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  int..           
2ffe0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2fff0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30000 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
30010 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
30020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
30030 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
30040 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30050 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
30060 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
30070 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
30080 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30090 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
300a0 75 6c 65 2e 78 52 65 6c 65 61 73 65 28 70 56 74  ule.xRelease(pVt
300b0 61 62 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  ab, iSavepoint);
300c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
300d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
300e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
300f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30120 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
30130 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
30140 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
30150 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
30160 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
30170 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
30180 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  kTo" /> method..
30190 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
301a0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
301b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
301c0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
301d0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
301e0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
301f0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
30200 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  iveModule.xRollb
30210 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64  ackTo" /> method
30220 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
30230 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
30240 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
30250 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70  ram name="iSavep
30260 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  oint">..        
30270 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
30280 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
30290 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
302a0 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d  RollbackTo" /> m
302b0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
302c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
302d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
302e0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
302f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
30300 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
30310 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
30320 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22  ule.xRollbackTo"
30330 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
30340 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
30350 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
30360 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
30370 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c  teErrorCode xRol
30380 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
30390 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
303a0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
303b0 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61           int iSa
303c0 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  vepoint..       
303d0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
303e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
303f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
30400 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
30410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30420 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
30430 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
30440 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30450 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
30460 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70  ableTableError(p
30470 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
30480 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30490 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63   module.xRollbac
304a0 6b 54 6f 28 70 56 74 61 62 2c 20 69 53 61 76 65  kTo(pVtab, iSave
304b0 70 6f 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  point);..       
304c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
304d0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
304e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
304f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30530 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
30540 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
30550 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
30560 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
30570 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
30580 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65       /// Dispose
30590 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  s of this object
305a0 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
305b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
305c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
305d0 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
305e0 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
305f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30600 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
30610 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
30620 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
30630 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
30640 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  is);..          
30650 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
30660 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
30670 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
30680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
306c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
306d0 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
306e0 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
306f0 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
30700 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
30710 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20  sposed;..       
30720 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
30730 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
30740 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20 3c 73  /// Throws an <s
30750 65 65 20 63 72 65 66 3d 22 4f 62 6a 65 63 74 44  ee cref="ObjectD
30760 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
30770 22 20 2f 3e 20 69 66 20 74 68 69 73 20 6f 62 6a  " /> if this obj
30780 65 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ect..           
30790 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 68 61   /// instance ha
307a0 73 20 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e  s been disposed.
307b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
307c0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
307d0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
307e0 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70  e void CheckDisp
307f0 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20  osed() /* throw 
30800 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
30810 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f  {..#if THROW_ON_
30820 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20  DISPOSED..      
30830 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
30840 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
30850 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30870 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
30880 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
30890 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
308a0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
308b0 6f 66 28 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  of(SQLiteNativeM
308c0 6f 64 75 6c 65 29 2e 4e 61 6d 65 29 3b 0d 0a 20  odule).Name);.. 
308d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
308e0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
308f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
30900 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
30910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
30950 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
30960 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
30970 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65       /// Dispose
30980 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  s of this object
30990 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
309a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
309b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
309c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
309d0 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e  ame="disposing">
309e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
309f0 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
30a00 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69  is method is bei
30a10 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74  ng called from t
30a20 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
30a30 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44  /// <see cref="D
30a40 69 73 70 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74  ispose()" /> met
30a50 68 6f 64 2e 20 20 5a 65 72 6f 20 69 66 20 74 68  hod.  Zero if th
30a60 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69  is method is bei
30a70 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
30a80 2f 2f 2f 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  /// called from 
30a90 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a  the finalizer...
30aa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
30ab0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
30ac0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a        private /*
30ad0 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
30ae0 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f  al */ void Dispo
30af0 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
30b00 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
30b10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30b20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
30b30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30b40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30b50 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28            //if (
30b60 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
30b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b80 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  //{..           
30b90 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
30ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bc0 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
30bd0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
30be0 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65  / dispose manage
30bf0 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
30c00 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
30c10 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
30c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c40 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
30c50 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a           //}....
30c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c70 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
30ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cb0 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e  // release unman
30cc0 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
30cd0 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
30ce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
30cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d10 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
30d20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d40 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 6d    // NOTE: The m
30d50 6f 64 75 6c 65 20 69 73 20 6e 6f 74 20 6f 77 6e  odule is not own
30d60 65 64 20 62 79 20 75 73 3b 20 74 68 65 72 65 66  ed by us; theref
30d70 6f 72 65 2c 20 64 6f 20 6e 6f 74 0d 0a 20 20 20  ore, do not..   
30d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d90 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6f 73   //       dispos
30da0 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  e it...         
30db0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
30dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30dd0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 21 3d     if (module !=
30de0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e00 6d 6f 64 75 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  module = null;..
30e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30e20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
30e30 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
30e40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30e50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
30e60 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
30e70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ec0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
30ed0 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72     #region Destr
30ee0 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  uctor..         
30ef0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
30f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30f10 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68 69 73  / Finalizes this
30f20 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
30f30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
30f40 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
30f50 20 20 20 20 20 20 20 20 20 20 20 7e 53 51 4c 69             ~SQLi
30f60 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29  teNativeModule()
30f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30f90 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b   Dispose(false);
30fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
30fc0 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
30fd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
30fe0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
30ff0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31030 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
31040 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
31050 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
31060 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
31070 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
31080 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  // The default v
31090 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6e 61  ersion of the na
310a0 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64  tive sqlite3_mod
310b0 75 6c 65 20 73 74 72 75 63 74 75 72 65 20 69 6e  ule structure in
310c0 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
310d0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
310e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
310f0 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 69  tatic readonly i
31100 6e 74 20 44 65 66 61 75 6c 74 4d 6f 64 75 6c 65  nt DefaultModule
31110 56 65 72 73 69 6f 6e 20 3d 20 32 3b 0d 0a 20 20  Version = 2;..  
31120 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
31130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
31140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31180 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
31190 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44  region Private D
311a0 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ata..        ///
311b0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
311c0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65      /// This fie
311d0 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ld is used to st
311e0 6f 72 65 20 74 68 65 20 6e 61 74 69 76 65 20 73  ore the native s
311f0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74  qlite3_module st
31200 72 75 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  ructure..       
31210 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
31220 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
31230 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
31240 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
31250 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
31260 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69 76 65  ate UnsafeNative
31270 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
31280 6d 6f 64 75 6c 65 20 6e 61 74 69 76 65 4d 6f 64  module nativeMod
31290 75 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ule;....        
312a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
312f0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
31300 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
31310 69 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  is field is used
31320 20 74 6f 20 73 74 6f 72 65 20 61 20 70 6f 69 6e   to store a poin
31330 74 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76  ter to the nativ
31340 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  e sqlite3_module
31350 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
31360 72 75 63 74 75 72 65 20 72 65 74 75 72 6e 65 64  ructure returned
31370 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f   by the sqlite3_
31380 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c  create_disposabl
31390 65 5f 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20  e_module..      
313a0 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 2e 0d    /// function..
313b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
313c0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
313d0 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20   private IntPtr 
313e0 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65  disposableModule
313f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
31400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31440 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 50 4c 41 54  ////....#if PLAT
31450 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
31460 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 2f  EWORK..        /
31470 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
31480 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66        /// This f
31490 69 65 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20  ield is used to 
314a0 68 6f 6c 64 20 74 68 65 20 62 6c 6f 63 6b 20 6f  hold the block o
314b0 66 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20  f native memory 
314c0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0d 0a 20  that contains.. 
314d0 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6e         /// the n
314e0 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f  ative sqlite3_mo
314f0 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 20 61  dule structure a
31500 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
31510 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20  his object..    
31520 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
31530 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e   when running on
31540 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d 70 61 63   the .NET Compac
31550 74 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20  t Framework...  
31560 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
31570 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
31580 69 76 61 74 65 20 49 6e 74 50 74 72 20 70 4e 61  ivate IntPtr pNa
31590 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a 23 65 6e  tiveModule;..#en
315a0 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  dif....        /
315b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
315c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
315d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
315e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
315f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
31600 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
31610 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
31620 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  s field is used 
31630 74 6f 20 73 74 6f 72 65 20 74 68 65 20 76 69 72  to store the vir
31640 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 73 74 61  tual table insta
31650 6e 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 0d  nces associated.
31660 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
31670 68 20 74 68 69 73 20 6d 6f 64 75 6c 65 2e 20 20  h this module.  
31680 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
31690 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
316a0 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 0d 0a  3_vtab derived..
316b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75          /// stru
316c0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
316d0 20 6b 65 79 20 69 6e 74 6f 20 74 68 69 73 20 63   key into this c
316e0 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  ollection...    
316f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
31700 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
31710 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79 3c 49  ate Dictionary<I
31720 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69 72  ntPtr, SQLiteVir
31730 74 75 61 6c 54 61 62 6c 65 3e 20 74 61 62 6c 65  tualTable> table
31740 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s;....        //
31750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31790 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
317a0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
317b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
317c0 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 74   field is used t
317d0 6f 20 73 74 6f 72 65 20 74 68 65 20 76 69 72 74  o store the virt
317e0 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
317f0 20 69 6e 73 74 61 6e 63 65 73 0d 0a 20 20 20 20   instances..    
31800 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
31810 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 6f 64  ed with this mod
31820 75 6c 65 2e 20 20 54 68 65 20 6e 61 74 69 76 65  ule.  The native
31830 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0d   pointer to the.
31840 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
31850 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
31860 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
31870 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65  re is used to ke
31880 79 20 69 6e 74 6f 20 74 68 69 73 0d 0a 20 20 20  y into this..   
31890 20 20 20 20 20 2f 2f 2f 20 63 6f 6c 6c 65 63 74       /// collect
318a0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
318b0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
318c0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 44 69        private Di
318d0 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c  ctionary<IntPtr,
318e0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
318f0 62 6c 65 43 75 72 73 6f 72 3e 20 63 75 72 73 6f  bleCursor> curso
31900 72 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  rs;....        /
31910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31950 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
31960 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
31970 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
31980 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  s field is used 
31990 74 6f 20 73 74 6f 72 65 20 74 68 65 20 76 69 72  to store the vir
319a0 74 75 61 6c 20 74 61 62 6c 65 20 66 75 6e 63 74  tual table funct
319b0 69 6f 6e 20 69 6e 73 74 61 6e 63 65 73 0d 0a 20  ion instances.. 
319c0 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63         /// assoc
319d0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
319e0 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 63 61 73  module.  The cas
319f0 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 66 75  e-insensitive fu
31a00 6e 63 74 69 6f 6e 20 6e 61 6d 65 0d 0a 20 20 20  nction name..   
31a10 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20 74 68 65       /// and the
31a20 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
31a30 65 6e 74 73 20 28 77 69 74 68 20 2d 31 20 6d 65  ents (with -1 me
31a40 61 6e 69 6e 67 20 22 61 6e 79 22 29 20 61 72 65  aning "any") are
31a50 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20   used to..      
31a60 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 75 63 74 20    /// construct 
31a70 74 68 65 20 73 74 72 69 6e 67 20 74 68 61 74 20  the string that 
31a80 69 73 20 75 73 65 64 20 74 6f 20 6b 65 79 20 69  is used to key i
31a90 6e 74 6f 20 74 68 69 73 20 63 6f 6c 6c 65 63 74  nto this collect
31aa0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
31ab0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
31ac0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 44 69        private Di
31ad0 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
31ae0 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e   SQLiteFunction>
31af0 20 66 75 6e 63 74 69 6f 6e 73 3b 0d 0a 20 20 20   functions;..   
31b00 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
31b10 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
31b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
31b70 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
31b80 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
31b90 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
31ba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
31bb0 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
31bc0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
31bd0 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
31be0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
31bf0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
31c00 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20  name="name">..  
31c10 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
31c20 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  me of the module
31c30 2e 20 20 54 68 69 73 20 70 61 72 61 6d 65 74 65  .  This paramete
31c40 72 20 63 61 6e 6e 6f 74 20 62 65 20 6e 75 6c 6c  r cannot be null
31c50 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
31c60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
31c70 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f   public SQLiteMo
31c80 64 75 6c 65 28 73 74 72 69 6e 67 20 6e 61 6d 65  dule(string name
31c90 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
31ca0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 61            if (na
31cb0 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
31cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
31cd0 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
31ce0 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6e 61  ullException("na
31cf0 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
31d00 20 20 20 20 20 74 68 69 73 2e 6e 61 6d 65 20 3d       this.name =
31d10 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20   name;..        
31d20 20 20 20 20 74 68 69 73 2e 74 61 62 6c 65 73 20      this.tables 
31d30 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
31d40 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56  <IntPtr, SQLiteV
31d50 69 72 74 75 61 6c 54 61 62 6c 65 3e 28 29 3b 0d  irtualTable>();.
31d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
31d70 73 2e 63 75 72 73 6f 72 73 20 3d 20 6e 65 77 20  s.cursors = new 
31d80 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74  Dictionary<IntPt
31d90 72 2c 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  r, SQLiteVirtual
31da0 54 61 62 6c 65 43 75 72 73 6f 72 3e 28 29 3b 0d  TableCursor>();.
31db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
31dc0 73 2e 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65  s.functions = ne
31dd0 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  w Dictionary<str
31de0 69 6e 67 2c 20 53 51 4c 69 74 65 46 75 6e 63 74  ing, SQLiteFunct
31df0 69 6f 6e 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20  ion>();..       
31e00 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
31e10 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
31e20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
31e70 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74       #region Int
31e80 65 72 6e 61 6c 20 4d 65 74 68 6f 64 73 0d 0a 20  ernal Methods.. 
31e90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
31ea0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
31eb0 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69  / Calls the nati
31ec0 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  ve SQLite core l
31ed0 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20  ibrary in order 
31ee0 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 0d  to create a new.
31ef0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 69 73  .        /// dis
31f00 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65 20 63  posable module c
31f10 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d  ontaining the im
31f20 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
31f30 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
31f40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
31f50 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
31f60 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
31f70 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20  e="pDb">..      
31f80 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
31f90 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
31fa0 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 6f 20  tion pointer to 
31fb0 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  use...        //
31fc0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
31fd0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
31fe0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
31ff0 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63  on-zero upon suc
32000 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  cess...        /
32010 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
32020 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
32030 62 6f 6f 6c 20 43 72 65 61 74 65 44 69 73 70 6f  bool CreateDispo
32040 73 61 62 6c 65 4d 6f 64 75 6c 65 28 0d 0a 20 20  sableModule(..  
32050 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
32060 20 70 44 62 0d 0a 20 20 20 20 20 20 20 20 20 20   pDb..          
32070 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
32080 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
32090 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65  disposableModule
320a0 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
320b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
320c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
320d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
320e0 74 50 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74  tPtr pName = Int
320f0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
32100 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
32110 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61               pNa
32130 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  me = SQLiteStrin
32140 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
32150 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d  String(name);...
32160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32170 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
32180 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64  hods.sqlite3_mod
32190 75 6c 65 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65  ule nativeModule
321a0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
321b0 20 20 20 20 20 20 20 20 41 6c 6c 6f 63 61 74 65          Allocate
321c0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 3b 0d  NativeModule();.
321d0 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
321e0 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
321f0 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K..             
32200 20 20 20 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64     disposableMod
32210 75 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ule =..         
32220 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
32230 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
32240 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69  qlite3_create_di
32250 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28  sposable_module(
32260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32270 20 20 20 20 20 20 20 20 20 20 70 44 62 2c 20 70            pDb, p
32280 4e 61 6d 65 2c 20 72 65 66 20 6e 61 74 69 76 65  Name, ref native
32290 4d 6f 64 75 6c 65 2c 20 49 6e 74 50 74 72 2e 5a  Module, IntPtr.Z
322a0 65 72 6f 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20  ero, null);.... 
322b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
322c0 65 74 75 72 6e 20 28 64 69 73 70 6f 73 61 62 6c  eturn (disposabl
322d0 65 4d 6f 64 75 6c 65 20 21 3d 20 49 6e 74 50 74  eModule != IntPt
322e0 72 2e 5a 65 72 6f 29 3b 0d 0a 23 65 6c 69 66 20  r.Zero);..#elif 
322f0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
32300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32310 20 20 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75    disposableModu
32320 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  le =..          
32330 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
32340 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
32350 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73  lite3_create_dis
32360 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 5f 69  posable_module_i
32370 6e 74 65 72 6f 70 28 0d 0a 20 20 20 20 20 20 20  nterop(..       
32380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32390 70 44 62 2c 20 70 4e 61 6d 65 2c 20 41 6c 6c 6f  pDb, pName, Allo
323a0 63 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  cateNativeModule
323b0 49 6e 74 65 72 6f 70 28 29 2c 0d 0a 20 20 20 20  Interop(),..    
323c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323d0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
323e0 69 56 65 72 73 69 6f 6e 2c 20 6e 61 74 69 76 65  iVersion, native
323f0 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 2c 0d  Module.xCreate,.
32400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32410 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
32420 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 2c 20 6e  dule.xConnect, n
32430 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73  ativeModule.xBes
32440 74 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20  tIndex,..       
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32460 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69  nativeModule.xDi
32470 73 63 6f 6e 6e 65 63 74 2c 20 6e 61 74 69 76 65  sconnect, native
32480 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 2c  Module.xDestroy,
32490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
324a0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
324b0 6f 64 75 6c 65 2e 78 4f 70 65 6e 2c 20 6e 61 74  odule.xOpen, nat
324c0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  iveModule.xClose
324d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
324e0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
324f0 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 2c 20  Module.xFilter, 
32500 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65  nativeModule.xNe
32510 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt,..           
32520 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
32530 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 2c 20 6e  veModule.xEof, n
32540 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c  ativeModule.xCol
32550 75 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  umn,..          
32560 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
32570 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64  iveModule.xRowId
32580 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  , nativeModule.x
32590 55 70 64 61 74 65 2c 0d 0a 20 20 20 20 20 20 20  Update,..       
325a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325b0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65  nativeModule.xBe
325c0 67 69 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c  gin, nativeModul
325d0 65 2e 78 53 79 6e 63 2c 0d 0a 20 20 20 20 20 20  e.xSync,..      
325e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325f0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43   nativeModule.xC
32600 6f 6d 6d 69 74 2c 20 6e 61 74 69 76 65 4d 6f 64  ommit, nativeMod
32610 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 2c 0d 0a  ule.xRollback,..
32620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32630 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
32640 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
32650 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  n, nativeModule.
32660 78 52 65 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  xRename,..      
32670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32680 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53   nativeModule.xS
32690 61 76 65 70 6f 69 6e 74 2c 20 6e 61 74 69 76 65  avepoint, native
326a0 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 2c  Module.xRelease,
326b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
326c0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
326d0 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54  odule.xRollbackT
326e0 6f 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  o, IntPtr.Zero, 
326f0 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
32700 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32710 20 28 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75   (disposableModu
32720 6c 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  le != IntPtr.Zer
32730 6f 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  o);..#else..    
32740 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
32750 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
32760 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
32770 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
32780 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
32790 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
327a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
327b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
327c0 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72  (pName != IntPtr
327d0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
327e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
327f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
32800 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
32810 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  (pName);..      
32820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e                pN
32830 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ame = IntPtr.Zer
32840 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
32850 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
32860 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
32870 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
32880 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
328e0 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
328f0 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  e Methods..     
32900 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
32910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 72  ..        /// Cr
32920 65 61 74 65 73 20 61 6e 64 20 72 65 74 75 72 6e  eates and return
32930 73 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  s the native sql
32940 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63  ite_module struc
32950 74 75 72 65 20 75 73 69 6e 67 20 74 68 65 0d 0a  ture using the..
32960 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 66          /// conf
32970 69 67 75 72 65 64 20 28 6f 72 20 64 65 66 61 75  igured (or defau
32980 6c 74 29 20 3c 73 65 65 20 63 72 65 66 3d 22 49  lt) <see cref="I
32990 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
329a0 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  le" />..        
329b0 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65 20 69 6d  /// interface im
329c0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20  plementation... 
329d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
329e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
329f0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
32a00 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
32a10 74 69 76 65 20 73 71 6c 69 74 65 5f 6d 6f 64 75  tive sqlite_modu
32a20 6c 65 20 73 74 72 75 63 74 75 72 65 20 75 73 69  le structure usi
32a30 6e 67 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65  ng the configure
32a40 64 20 28 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  d (or..        /
32a50 2f 2f 20 64 65 66 61 75 6c 74 29 20 3c 73 65 65  // default) <see
32a60 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
32a70 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69  tiveModule" /> i
32a80 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 20 20  nterface..      
32a90 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
32aa0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
32ab0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
32ac0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 55         private U
32ad0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32ae0 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ds.sqlite3_modul
32af0 65 20 41 6c 6c 6f 63 61 74 65 4e 61 74 69 76 65  e AllocateNative
32b00 4d 6f 64 75 6c 65 28 29 0d 0a 20 20 20 20 20 20  Module()..      
32b10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32b20 20 72 65 74 75 72 6e 20 41 6c 6c 6f 63 61 74 65   return Allocate
32b30 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 47 65 74  NativeModule(Get
32b40 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6d 70 6c  NativeModuleImpl
32b50 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
32b60 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
32b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32bb0 2f 2f 0d 0a 0d 0a 23 69 66 20 50 4c 41 54 46 4f  //....#if PLATFO
32bc0 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
32bd0 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ORK..        ///
32be0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
32bf0 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
32c00 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 6d 65  and returns a me
32c10 6d 6f 72 79 20 62 6c 6f 63 6b 20 6f 62 74 61 69  mory block obtai
32c20 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ned from the SQL
32c30 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20  ite core..      
32c40 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 20 75 73    /// library us
32c50 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
32c60 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d  native sqlite3_m
32c70 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 20  odule structure 
32c80 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20  for this..      
32c90 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73    /// object ins
32ca0 74 61 6e 63 65 20 77 68 65 6e 20 72 75 6e 6e 69  tance when runni
32cb0 6e 67 20 6f 6e 20 74 68 65 20 2e 4e 45 54 20 43  ng on the .NET C
32cc0 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f 72 6b  ompact Framework
32cd0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
32ce0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
32cf0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
32d00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
32d10 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
32d20 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 73   to the native s
32d30 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74  qlite3_module st
32d40 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
32d50 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
32d60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
32d70 65 20 49 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74  e IntPtr Allocat
32d80 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6e 74  eNativeModuleInt
32d90 65 72 6f 70 28 29 0d 0a 20 20 20 20 20 20 20 20  erop()..        
32da0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
32db0 66 20 28 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65  f (pNativeModule
32dc0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
32dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
32de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32df0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
32e00 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 4e 6f       // HACK: No
32e10 20 65 61 73 79 20 77 61 79 20 74 6f 20 64 65 74   easy way to det
32e20 65 72 6d 69 6e 65 20 74 68 65 20 73 69 7a 65 20  ermine the size 
32e30 6f 66 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20  of the native.. 
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32e50 2f 20 20 20 20 20 20 20 73 71 6c 69 74 65 5f 6d  /       sqlite_m
32e60 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 20  odule structure 
32e70 77 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20  when running on 
32e80 74 68 65 20 2e 4e 45 54 0d 0a 20 20 20 20 20 20  the .NET..      
32e90 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
32ea0 20 20 20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65     Compact Frame
32eb0 77 6f 72 6b 3b 20 74 68 65 72 65 66 6f 72 65 2c  work; therefore,
32ec0 20 6a 75 73 74 20 62 61 73 65 20 74 68 65 20 73   just base the s
32ed0 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ize..           
32ee0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e       //       on
32ef0 20 77 68 61 74 20 77 65 20 6b 6e 6f 77 3a 0d 0a   what we know:..
32f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f10 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
32f20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 54 68 65      //       The
32f30 72 65 20 69 73 20 6f 6e 65 20 69 6e 74 65 67 65  re is one intege
32f40 72 20 6d 65 6d 62 65 72 2e 0d 0a 20 20 20 20 20  r member...     
32f50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
32f60 20 20 20 20 54 68 65 72 65 20 61 72 65 20 32 32      There are 22
32f70 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
32f80 72 20 6d 65 6d 62 65 72 73 2e 0d 0a 20 20 20 20  r members...    
32f90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
32fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fb0 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 20  pNativeModule = 
32fc0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c  SQLiteMemory.All
32fd0 6f 63 61 74 65 28 32 33 20 2a 20 49 6e 74 50 74  ocate(23 * IntPt
32fe0 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20  r.Size);....    
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33000 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 3d  pNativeModule ==
33010 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
33020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33030 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 75 74     throw new Out
33040 4f 66 4d 65 6d 6f 72 79 45 78 63 65 70 74 69 6f  OfMemoryExceptio
33050 6e 28 22 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  n("sqlite3_modul
33060 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e");..          
33070 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33080 20 20 20 72 65 74 75 72 6e 20 70 4e 61 74 69 76     return pNativ
33090 65 4d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20  eModule;..      
330a0 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
330b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
330c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
330d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
330e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
330f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
33100 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
33110 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
33120 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 64   /// Creates and
33130 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 61 74   returns the nat
33140 69 76 65 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c  ive sqlite_modul
33150 65 20 73 74 72 75 63 74 75 72 65 20 75 73 69 6e  e structure usin
33160 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
33170 2f 2f 20 73 70 65 63 69 66 69 65 64 20 3c 73 65  // specified <se
33180 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
33190 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  ativeModule" /> 
331a0 69 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 20  interface..     
331b0 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74     /// implement
331c0 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
331d0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
331e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
331f0 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
33200 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
33210 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
33220 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
33230 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65 20  e" /> interface 
33240 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
33250 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75  o..        /// u
33260 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
33270 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
33280 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
33290 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
332a0 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f  e native sqlite_
332b0 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72 65  module structure
332c0 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
332d0 66 69 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  fied..        //
332e0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
332f0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
33300 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65 20 69  " /> interface i
33310 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a  mplementation...
33320 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
33330 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
33340 70 72 69 76 61 74 65 20 55 6e 73 61 66 65 4e 61  private UnsafeNa
33350 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
33360 74 65 33 5f 6d 6f 64 75 6c 65 20 41 6c 6c 6f 63  te3_module Alloc
33370 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28  ateNativeModule(
33380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 53  ..            IS
33390 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
333a0 65 20 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20  e module..      
333b0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
333c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
333d0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 20 6e  nativeModule = n
333e0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
333f0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
33400 6f 64 75 6c 65 28 29 3b 0d 0a 20 20 20 20 20 20  odule();..      
33410 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
33420 6c 65 2e 69 56 65 72 73 69 6f 6e 20 3d 20 44 65  le.iVersion = De
33430 66 61 75 6c 74 4d 6f 64 75 6c 65 56 65 72 73 69  faultModuleVersi
33440 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  on;....         
33450 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 21 3d     if (module !=
33460 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
33470 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33480 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
33490 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20 6e 65  ule.xCreate = ne
334a0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
334b0 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28 0d 0a  thods.xCreate(..
334c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334d0 20 20 20 6d 6f 64 75 6c 65 2e 78 43 72 65 61 74     module.xCreat
334e0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
334f0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
33500 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20 6e  ule.xConnect = n
33510 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
33520 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74 28  ethods.xConnect(
33530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33540 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f        module.xCo
33550 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  nnect);....     
33560 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
33570 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64  eModule.xBestInd
33580 65 78 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ex = new UnsafeN
33590 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65  ativeMethods.xBe
335a0 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20  stIndex(..      
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
335c0 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 29  dule.xBestIndex)
335d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
335e0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
335f0 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d 20  e.xDisconnect = 
33600 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
33610 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e 6e  Methods.xDisconn
33620 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
33630 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
33640 2e 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d 0a  .xDisconnect);..
33650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33660 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
33670 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20 55 6e  Destroy = new Un
33680 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
33690 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20 20 20  s.xDestroy(..   
336a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336b0 20 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79   module.xDestroy
336c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
336d0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
336e0 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65 77 20 55  le.xOpen = new U
336f0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
33700 64 73 2e 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20  ds.xOpen(..     
33710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
33720 6f 64 75 6c 65 2e 78 4f 70 65 6e 29 3b 0d 0a 0d  odule.xOpen);...
33730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33740 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43   nativeModule.xC
33750 6c 6f 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66  lose = new Unsaf
33760 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
33770 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20  Close(..        
33780 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
33790 6c 65 2e 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20  le.xClose);.... 
337a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
337b0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c  ativeModule.xFil
337c0 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ter = new Unsafe
337d0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 46  NativeMethods.xF
337e0 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20  ilter(..        
337f0 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
33800 6c 65 2e 78 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a  le.xFilter);....
33810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33820 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65  nativeModule.xNe
33830 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  xt = new UnsafeN
33840 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e 65  ativeMethods.xNe
33850 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt(..           
33860 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
33870 78 4e 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  xNext);....     
33880 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
33890 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20 6e  eModule.xEof = n
338a0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
338b0 65 74 68 6f 64 73 2e 78 45 6f 66 28 6d 6f 64 75  ethods.xEof(modu
338c0 6c 65 2e 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20 20  le.xEof);....   
338d0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
338e0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  iveModule.xColum
338f0 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
33900 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6c  tiveMethods.xCol
33910 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  umn(..          
33920 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
33930 2e 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20 20  .xColumn);....  
33940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
33950 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49  tiveModule.xRowI
33960 64 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  d = new UnsafeNa
33970 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 77  tiveMethods.xRow
33980 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id(..           
33990 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
339a0 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20 20  xRowId);....    
339b0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
339c0 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65  veModule.xUpdate
339d0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
339e0 69 76 65 4d 65 74 68 6f 64 73 2e 78 55 70 64 61  iveMethods.xUpda
339f0 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
33a00 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
33a10 78 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20  xUpdate);....   
33a20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
33a30 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e  iveModule.xBegin
33a40 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
33a50 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 67 69  iveMethods.xBegi
33a60 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
33a70 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
33a80 42 65 67 69 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  Begin);....     
33a90 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
33aa0 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d 20  eModule.xSync = 
33ab0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
33ac0 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 0d 0a  Methods.xSync(..
33ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ae0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53 79 6e 63      module.xSync
33af0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
33b00 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
33b10 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e 65 77  le.xCommit = new
33b20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
33b30 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a 20  hods.xCommit(.. 
33b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b50 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69     module.xCommi
33b60 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
33b70 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
33b80 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20  ule.xRollback = 
33b90 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
33ba0 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63  Methods.xRollbac
33bb0 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
33bc0 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
33bd0 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20  Rollback);....  
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
33bf0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64  tiveModule.xFind
33c00 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20 55  Function = new U
33c10 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
33c20 64 73 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ds.xFindFunction
33c30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33c40 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 46         module.xF
33c50 69 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d  indFunction);...
33c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33c70 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
33c80 65 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61  ename = new Unsa
33c90 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
33ca0 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20  xRename(..      
33cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
33cc0 64 75 6c 65 2e 78 52 65 6e 61 6d 65 29 3b 0d 0a  dule.xRename);..
33cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33ce0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
33cf0 53 61 76 65 70 6f 69 6e 74 20 3d 20 6e 65 77 20  Savepoint = new 
33d00 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
33d10 6f 64 73 2e 78 53 61 76 65 70 6f 69 6e 74 28 0d  ods.xSavepoint(.
33d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33d30 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53 61 76       module.xSav
33d40 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  epoint);....    
33d50 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
33d60 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73  veModule.xReleas
33d70 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
33d80 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6c  tiveMethods.xRel
33d90 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  ease(..         
33da0 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
33db0 65 2e 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a  e.xRelease);....
33dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dd0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  nativeModule.xRo
33de0 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20 55  llbackTo = new U
33df0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
33e00 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d  ds.xRollbackTo(.
33e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33e20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c       module.xRol
33e30 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20 20 20 20  lbackTo);..     
33e40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
33e50 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
33e60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33e70 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
33e80 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 20  eModule.xCreate 
33e90 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
33ea0 76 65 4d 65 74 68 6f 64 73 2e 78 43 72 65 61 74  veMethods.xCreat
33eb0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
33ec0 20 20 20 20 20 20 20 20 78 43 72 65 61 74 65 29          xCreate)
33ed0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33ee0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
33ef0 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20 6e 65 77  e.xConnect = new
33f00 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
33f10 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a  hods.xConnect(..
33f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f30 20 20 20 20 78 43 6f 6e 6e 65 63 74 29 3b 0d 0a      xConnect);..
33f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33f50 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
33f60 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65 77 20  BestIndex = new 
33f70 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
33f80 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78 28 0d  ods.xBestIndex(.
33f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33fa0 20 20 20 20 20 78 42 65 73 74 49 6e 64 65 78 29       xBestIndex)
33fb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33fc0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
33fd0 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d 20  e.xDisconnect = 
33fe0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
33ff0 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e 6e  Methods.xDisconn
34000 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
34010 20 20 20 20 20 20 20 20 20 20 78 44 69 73 63 6f            xDisco
34020 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  nnect);....     
34030 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
34040 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79  eModule.xDestroy
34050 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
34060 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 65 73 74  iveMethods.xDest
34070 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  roy(..          
34080 20 20 20 20 20 20 20 20 20 20 78 44 65 73 74 72            xDestr
34090 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  oy);....        
340a0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
340b0 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65 77  dule.xOpen = new
340c0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
340d0 68 6f 64 73 2e 78 4f 70 65 6e 28 78 4f 70 65 6e  hods.xOpen(xOpen
340e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
340f0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
34100 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55 6e  .xClose = new Un
34110 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
34120 73 2e 78 43 6c 6f 73 65 28 78 43 6c 6f 73 65 29  s.xClose(xClose)
34130 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34140 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
34150 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65 77 20  e.xFilter = new 
34160 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
34170 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a 20 20  ods.xFilter(..  
34180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34190 20 20 78 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a 20    xFilter);.... 
341a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
341b0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78  ativeModule.xNex
341c0 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
341d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e 65 78  tiveMethods.xNex
341e0 74 28 78 4e 65 78 74 29 3b 0d 0a 20 20 20 20 20  t(xNext);..     
341f0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
34200 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20 6e  eModule.xEof = n
34210 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
34220 65 74 68 6f 64 73 2e 78 45 6f 66 28 78 45 6f 66  ethods.xEof(xEof
34230 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34240 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
34250 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77  le.xColumn = new
34260 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
34270 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20  hods.xColumn(.. 
34280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34290 20 20 20 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a     xColumn);....
342a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342b0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  nativeModule.xRo
342c0 77 49 64 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  wId = new Unsafe
342d0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52  NativeMethods.xR
342e0 6f 77 49 64 28 78 52 6f 77 49 64 29 3b 0d 0a 0d  owId(xRowId);...
342f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34300 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55   nativeModule.xU
34310 70 64 61 74 65 20 3d 20 6e 65 77 20 55 6e 73 61  pdate = new Unsa
34320 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
34330 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20  xUpdate(..      
34340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 55                xU
34350 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  pdate);....     
34360 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
34370 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20 3d  eModule.xBegin =
34380 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
34390 65 4d 65 74 68 6f 64 73 2e 78 42 65 67 69 6e 28  eMethods.xBegin(
343a0 78 42 65 67 69 6e 29 3b 0d 0a 20 20 20 20 20 20  xBegin);..      
343b0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
343c0 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d 20 6e  Module.xSync = n
343d0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
343e0 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 78 53 79  ethods.xSync(xSy
343f0 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nc);....        
34400 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
34410 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e  dule.xCommit = n
34420 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
34430 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d  ethods.xCommit(.
34440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34450 20 20 20 20 20 78 43 6f 6d 6d 69 74 29 3b 0d 0a       xCommit);..
34460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34470 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
34480 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20 55  Rollback = new U
34490 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
344a0 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20  ds.xRollback(.. 
344b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344c0 20 20 20 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a     xRollback);..
344d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
344e0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
344f0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20 6e  FindFunction = n
34500 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
34510 65 74 68 6f 64 73 2e 78 46 69 6e 64 46 75 6e 63  ethods.xFindFunc
34520 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
34530 20 20 20 20 20 20 20 20 20 20 20 78 46 69 6e 64             xFind
34540 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  Function);....  
34550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
34560 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61  tiveModule.xRena
34570 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  me = new UnsafeN
34580 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65  ativeMethods.xRe
34590 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  name(..         
345a0 20 20 20 20 20 20 20 20 20 20 20 78 52 65 6e 61             xRena
345b0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
345c0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
345d0 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 20  dule.xSavepoint 
345e0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
345f0 76 65 4d 65 74 68 6f 64 73 2e 78 53 61 76 65 70  veMethods.xSavep
34600 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  oint(..         
34610 20 20 20 20 20 20 20 20 20 20 20 78 53 61 76 65             xSave
34620 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  point);....     
34630 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
34640 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65  eModule.xRelease
34650 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
34660 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6c 65  iveMethods.xRele
34670 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ase(..          
34680 20 20 20 20 20 20 20 20 20 20 78 52 65 6c 65 61            xRelea
34690 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
346a0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
346b0 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f  dule.xRollbackTo
346c0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
346d0 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c  iveMethods.xRoll
346e0 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20  backTo(..       
346f0 20 20 20 20 20 20 20 20 20 20 20 20 20 78 52 6f               xRo
34700 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20 20 20  llbackTo);..    
34710 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34720 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34730 6e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a 20  nativeModule;.. 
34740 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34750 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
34760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
347a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
347b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
347c0 2f 20 43 72 65 61 74 65 73 20 61 20 63 6f 70 79  / Creates a copy
347d0 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
347e0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  d..        /// <
347f0 73 65 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65  see cref="Unsafe
34800 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
34810 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22 20 2f 3e  lite3_module" />
34820 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
34830 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75  ,..        /// u
34840 73 69 6e 67 20 64 65 66 61 75 6c 74 20 69 6d 70  sing default imp
34850 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72  lementations for
34860 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 64   the contained d
34870 65 6c 65 67 61 74 65 73 20 77 68 65 6e 0d 0a 20  elegates when.. 
34880 20 20 20 20 20 20 20 2f 2f 2f 20 6e 65 63 65 73         /// neces
34890 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sary...        /
348a0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
348b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
348c0 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
348d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
348e0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 55 6e 73  e <see cref="Uns
348f0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
34900 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22  .sqlite3_module"
34910 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20   /> object..    
34920 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
34930 20 74 6f 20 63 6f 70 79 2e 0d 0a 20 20 20 20 20   to copy...     
34940 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
34950 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
34960 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
34970 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73 65 65  /// The new <see
34980 20 63 72 65 66 3d 22 55 6e 73 61 66 65 4e 61 74   cref="UnsafeNat
34990 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
349a0 65 33 5f 6d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62  e3_module" /> ob
349b0 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
349c0 2f 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  / instance...   
349d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
349e0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ns>..        pri
349f0 76 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69 76  vate UnsafeNativ
34a00 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
34a10 5f 6d 6f 64 75 6c 65 20 43 6f 70 79 4e 61 74 69  _module CopyNati
34a20 76 65 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20  veModule(..     
34a30 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
34a40 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
34a50 65 33 5f 6d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  e3_module module
34a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
34a70 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
34a80 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
34a90 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
34aa0 74 65 33 5f 6d 6f 64 75 6c 65 20 6e 65 77 4d 6f  te3_module newMo
34ab0 64 75 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  dule =..        
34ac0 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73 61          new Unsa
34ad0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
34ae0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 28 29  sqlite3_module()
34af0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34b00 20 6e 65 77 4d 6f 64 75 6c 65 2e 69 56 65 72 73   newModule.iVers
34b10 69 6f 6e 20 3d 20 6d 6f 64 75 6c 65 2e 69 56 65  ion = module.iVe
34b20 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsion;....      
34b30 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e        newModule.
34b40 78 43 72 65 61 74 65 20 3d 20 6e 65 77 20 55 6e  xCreate = new Un
34b50 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
34b60 73 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20  s.xCreate(..    
34b70 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64              (mod
34b80 75 6c 65 2e 78 43 72 65 61 74 65 20 21 3d 20 6e  ule.xCreate != n
34b90 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43  ull) ? module.xC
34ba0 72 65 61 74 65 20 3a 20 78 43 72 65 61 74 65 29  reate : xCreate)
34bb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34bc0 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e   newModule.xConn
34bd0 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ect = new Unsafe
34be0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
34bf0 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
34c00 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
34c10 2e 78 43 6f 6e 6e 65 63 74 20 21 3d 20 6e 75 6c  .xConnect != nul
34c20 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43 6f 6e  l) ? module.xCon
34c30 6e 65 63 74 20 3a 20 78 43 6f 6e 6e 65 63 74 29  nect : xConnect)
34c40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34c50 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 42 65 73 74   newModule.xBest
34c60 49 6e 64 65 78 20 3d 20 6e 65 77 20 55 6e 73 61  Index = new Unsa
34c70 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
34c80 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20  xBestIndex(..   
34c90 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f               (mo
34ca0 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 20  dule.xBestIndex 
34cb0 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
34cc0 65 2e 78 42 65 73 74 49 6e 64 65 78 20 3a 20 78  e.xBestIndex : x
34cd0 42 65 73 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20  BestIndex);.... 
34ce0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f             newMo
34cf0 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74  dule.xDisconnect
34d00 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
34d10 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63  iveMethods.xDisc
34d20 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
34d30 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
34d40 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 21 3d 20  .xDisconnect != 
34d50 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
34d60 44 69 73 63 6f 6e 6e 65 63 74 20 3a 0d 0a 20 20  Disconnect :..  
34d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 44                xD
34d80 69 73 63 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20  isconnect);.... 
34d90 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f             newMo
34da0 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20 3d 20  dule.xDestroy = 
34db0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
34dc0 4d 65 74 68 6f 64 73 2e 78 44 65 73 74 72 6f 79  Methods.xDestroy
34dd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34de0 20 20 20 28 6d 6f 64 75 6c 65 2e 78 44 65 73 74     (module.xDest
34df0 72 6f 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  roy != null) ? m
34e00 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20 3a  odule.xDestroy :
34e10 20 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20   xDestroy);.... 
34e20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f             newMo
34e30 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65 77  dule.xOpen = new
34e40 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
34e50 68 6f 64 73 2e 78 4f 70 65 6e 28 0d 0a 20 20 20  hods.xOpen(..   
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f               (mo
34e70 64 75 6c 65 2e 78 4f 70 65 6e 20 21 3d 20 6e 75  dule.xOpen != nu
34e80 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 4f 70  ll) ? module.xOp
34e90 65 6e 20 3a 20 78 4f 70 65 6e 29 3b 0d 0a 0d 0a  en : xOpen);....
34ea0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
34eb0 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3d 20 6e  odule.xClose = n
34ec0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
34ed0 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65 28 0d 0a  ethods.xClose(..
34ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ef0 28 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 21  (module.xClose !
34f00 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65  = null) ? module
34f10 2e 78 43 6c 6f 73 65 20 3a 20 78 43 6c 6f 73 65  .xClose : xClose
34f20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34f30 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 46 69 6c    newModule.xFil
34f40 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ter = new Unsafe
34f50 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 46  NativeMethods.xF
34f60 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20  ilter(..        
34f70 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e          (module.
34f80 78 46 69 6c 74 65 72 20 21 3d 20 6e 75 6c 6c 29  xFilter != null)
34f90 20 3f 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74 65   ? module.xFilte
34fa0 72 20 3a 20 78 46 69 6c 74 65 72 29 3b 0d 0a 0d  r : xFilter);...
34fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
34fc0 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 3d 20 6e  Module.xNext = n
34fd0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
34fe0 65 74 68 6f 64 73 2e 78 4e 65 78 74 28 0d 0a 20  ethods.xNext(.. 
34ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
35000 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 21 3d 20  module.xNext != 
35010 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
35020 4e 65 78 74 20 3a 20 78 4e 65 78 74 29 3b 0d 0a  Next : xNext);..
35030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
35040 77 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20 6e  wModule.xEof = n
35050 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
35060 65 74 68 6f 64 73 2e 78 45 6f 66 28 0d 0a 20 20  ethods.xEof(..  
35070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
35080 6f 64 75 6c 65 2e 78 45 6f 66 20 21 3d 20 6e 75  odule.xEof != nu
35090 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 45 6f  ll) ? module.xEo
350a0 66 20 3a 20 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20  f : xEof);....  
350b0 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64            newMod
350c0 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65  ule.xColumn = ne
350d0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
350e0 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a  thods.xColumn(..
350f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35100 28 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20  (module.xColumn 
35110 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
35120 65 2e 78 43 6f 6c 75 6d 6e 20 3a 20 78 43 6f 6c  e.xColumn : xCol
35130 75 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  umn);....       
35140 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78       newModule.x
35150 52 6f 77 49 64 20 3d 20 6e 65 77 20 55 6e 73 61  RowId = new Unsa
35160 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
35170 78 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20  xRowId(..       
35180 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
35190 2e 78 52 6f 77 49 64 20 21 3d 20 6e 75 6c 6c 29  .xRowId != null)
351a0 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64   ? module.xRowId
351b0 20 3a 20 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20   : xRowId);.... 
351c0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f             newMo
351d0 64 75 6c 65 2e 78 55 70 64 61 74 65 20 3d 20 6e  dule.xUpdate = n
351e0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
351f0 65 74 68 6f 64 73 2e 78 55 70 64 61 74 65 28 0d  ethods.xUpdate(.
35200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35210 20 28 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65   (module.xUpdate
35220 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
35230 6c 65 2e 78 55 70 64 61 74 65 20 3a 20 78 55 70  le.xUpdate : xUp
35240 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  date);....      
35250 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e        newModule.
35260 78 42 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e 73  xBegin = new Uns
35270 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
35280 2e 78 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20  .xBegin(..      
35290 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
352a0 65 2e 78 42 65 67 69 6e 20 21 3d 20 6e 75 6c 6c  e.xBegin != null
352b0 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 42 65 67 69  ) ? module.xBegi
352c0 6e 20 3a 20 78 42 65 67 69 6e 29 3b 0d 0a 0d 0a  n : xBegin);....
352d0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
352e0 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d 20 6e 65  odule.xSync = ne
352f0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
35300 74 68 6f 64 73 2e 78 53 79 6e 63 28 0d 0a 20 20  thods.xSync(..  
35310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
35320 6f 64 75 6c 65 2e 78 53 79 6e 63 20 21 3d 20 6e  odule.xSync != n
35330 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 53  ull) ? module.xS
35340 79 6e 63 20 3a 20 78 53 79 6e 63 29 3b 0d 0a 0d  ync : xSync);...
35350 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
35360 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d  Module.xCommit =
35370 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
35380 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74  eMethods.xCommit
35390 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
353a0 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d     (module.xComm
353b0 69 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f  it != null) ? mo
353c0 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3a 20 78  dule.xCommit : x
353d0 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20 20  Commit);....    
353e0 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
353f0 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65  e.xRollback = ne
35400 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
35410 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28  thods.xRollback(
35420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35430 20 20 28 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62    (module.xRollb
35440 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  ack != null) ? m
35450 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20  odule.xRollback 
35460 3a 20 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d  : xRollback);...
35470 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
35480 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
35490 74 69 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66  tion = new Unsaf
354a0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
354b0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  FindFunction(.. 
354c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
354d0 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  module.xFindFunc
354e0 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  tion != null) ? 
354f0 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  module.xFindFunc
35500 74 69 6f 6e 20 3a 0d 0a 20 20 20 20 20 20 20 20  tion :..        
35510 20 20 20 20 20 20 20 20 78 46 69 6e 64 46 75 6e          xFindFun
35520 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  ction);....     
35530 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
35540 2e 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20 55  .xRename = new U
35550 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
35560 64 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20  ds.xRename(..   
35570 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f               (mo
35580 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 21 3d 20  dule.xRename != 
35590 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
355a0 52 65 6e 61 6d 65 20 3a 20 78 52 65 6e 61 6d 65  Rename : xRename
355b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
355c0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 53 61 76    newModule.xSav
355d0 65 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e 73  epoint = new Uns
355e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
355f0 2e 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20  .xSavepoint(..  
35600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
35610 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74  odule.xSavepoint
35620 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
35630 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 20 3a 20  le.xSavepoint : 
35640 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a  xSavepoint);....
35650 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
35660 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 20 3d  odule.xRelease =
35670 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
35680 65 4d 65 74 68 6f 64 73 2e 78 52 65 6c 65 61 73  eMethods.xReleas
35690 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
356a0 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52 65 6c      (module.xRel
356b0 65 61 73 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  ease != null) ? 
356c0 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 20  module.xRelease 
356d0 3a 20 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a  : xRelease);....
356e0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
356f0 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54  odule.xRollbackT
35700 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  o = new UnsafeNa
35710 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c  tiveMethods.xRol
35720 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
35730 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
35740 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 21 3d  e.xRollbackTo !=
35750 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
35760 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3a 0d 0a 20  xRollbackTo :.. 
35770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
35780 52 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 0d 0a  RollbackTo);....
35790 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
357a0 72 6e 20 6e 65 77 4d 6f 64 75 6c 65 3b 0d 0a 20  rn newModule;.. 
357b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
357c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
357d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
357e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
357f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
35810 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
35820 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
35830 2f 20 43 61 6c 6c 73 20 6f 6e 65 20 6f 66 20 74  / Calls one of t
35840 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
35850 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
35860 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20  methods...      
35870 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
35880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
35890 61 72 61 6d 20 6e 61 6d 65 3d 22 63 72 65 61 74  aram name="creat
358a0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
358b0 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 63 61 6c   Non-zero to cal
358c0 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  l the <see cref=
358d0 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
358e0 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e  odule.Create" />
358f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
35900 74 68 6f 64 3b 20 6f 74 68 65 72 77 69 73 65 2c  thod; otherwise,
35910 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
35920 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
35930 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e  dule.Connect" />
35940 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
35950 74 68 6f 64 20 77 69 6c 6c 20 62 65 20 63 61 6c  thod will be cal
35960 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  led...        //
35970 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
35980 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
35990 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20  ame="pDb">..    
359a0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
359b0 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ve database conn
359c0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a  ection handle...
359d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
359e0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
359f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
35a00 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  Aux">..        /
35a10 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  // The original 
35a20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 76  native pointer v
35a30 61 6c 75 65 20 74 68 61 74 20 77 61 73 20 70 72  alue that was pr
35a40 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20  ovided to the.. 
35a50 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
35a60 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
35a70 28 29 2c 20 73 71 6c 69 74 65 33 5f 63 72 65 61  (), sqlite3_crea
35a80 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 20 6f  te_module_v2() o
35a90 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  r..        /// s
35aa0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69  qlite3_create_di
35ab0 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28  sposable_module(
35ac0 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20  ) functions...  
35ad0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
35ae0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
35af0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
35b00 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  c">..        ///
35b10 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   The number of a
35b20 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68  rguments from th
35b30 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
35b40 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
35b50 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
35b60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
35b70 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
35b80 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20  ="argv">..      
35b90 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
35ba0 6f 66 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65  of string argume
35bb0 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52 45  nts from the CRE
35bc0 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
35bd0 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  E..        /// s
35be0 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20  tatement...     
35bf0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
35c00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
35c10 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
35c20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
35c30 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
35c40 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
35c50 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
35c60 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e 65 77  point to the new
35c70 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ly..        /// 
35c80 63 72 65 61 74 65 64 20 6e 61 74 69 76 65 20 73  created native s
35c90 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
35ca0 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
35cb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
35cc0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
35cd0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
35ce0 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  Error">..       
35cf0 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72   /// Upon failur
35d00 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  e, this paramete
35d10 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
35d20 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  ed to point to t
35d30 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  he error..      
35d40 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c 20 77    /// message, w
35d50 69 74 68 20 74 68 65 20 75 6e 64 65 72 6c 79 69  ith the underlyi
35d60 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76 69 6e 67  ng memory having
35d70 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 66   been obtained f
35d80 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20  rom the..       
35d90 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61 6c   /// sqlite3_mal
35da0 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0d  loc() function..
35db0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
35dc0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
35dd0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
35de0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
35df0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
35e00 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
35e10 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
35e20 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
35e30 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
35e40 65 20 43 72 65 61 74 65 4f 72 43 6f 6e 6e 65 63  e CreateOrConnec
35e50 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
35e60 62 6f 6f 6c 20 63 72 65 61 74 65 2c 0d 0a 20 20  bool create,..  
35e70 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
35e80 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20 20   pDb,..         
35e90 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c 0d     IntPtr pAux,.
35ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
35eb0 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
35ec0 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 2c      IntPtr argv,
35ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
35ee0 66 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d  f IntPtr pVtab,.
35ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
35f00 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a   IntPtr pError..
35f10 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
35f20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35f30 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
35f40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35f50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
35f60 20 66 69 6c 65 4e 61 6d 65 20 3d 20 53 51 4c 69   fileName = SQLi
35f70 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46  teString.StringF
35f80 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a  romUtf8IntPtr(..
35f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fa0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
35fb0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
35fc0 64 62 5f 66 69 6c 65 6e 61 6d 65 28 70 44 62 2c  db_filename(pDb,
35fd0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 3b 0d   IntPtr.Zero));.
35fe0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35ff0 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
36000 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
36010 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69  ction = new SQLi
36020 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20  teConnection(.. 
36030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36040 20 20 20 20 20 20 20 70 44 62 2c 20 66 69 6c 65         pDb, file
36050 4e 61 6d 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20  Name, false)).. 
36060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
36070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36080 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
36090 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d  ualTable table =
360a0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
360b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
360c0 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b  ng error = null;
360d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
360e0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 72 65          if ((cre
360f0 61 74 65 20 26 26 20 43 72 65 61 74 65 28 63 6f  ate && Create(co
36100 6e 6e 65 63 74 69 6f 6e 2c 20 70 41 75 78 2c 0d  nnection, pAux,.
36110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36120 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
36130 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67  iteString.String
36140 41 72 72 61 79 46 72 6f 6d 55 74 66 38 53 69 7a  ArrayFromUtf8Siz
36150 65 41 6e 64 49 6e 74 50 74 72 28 61 72 67 63 2c  eAndIntPtr(argc,
36160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
36180 67 76 29 2c 20 72 65 66 20 74 61 62 6c 65 2c 20  gv), ref table, 
36190 72 65 66 20 65 72 72 6f 72 29 20 3d 3d 20 53 51  ref error) == SQ
361a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
361b0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
361c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 21                (!
361d0 63 72 65 61 74 65 20 26 26 20 43 6f 6e 6e 65 63  create && Connec
361e0 74 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 70 41  t(connection, pA
361f0 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ux,..           
36200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36210 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74   SQLiteString.St
36220 72 69 6e 67 41 72 72 61 79 46 72 6f 6d 55 74 66  ringArrayFromUtf
36230 38 53 69 7a 65 41 6e 64 49 6e 74 50 74 72 28 61  8SizeAndIntPtr(a
36240 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgc,..          
36250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36260 20 20 61 72 67 76 29 2c 20 72 65 66 20 74 61 62    argv), ref tab
36270 6c 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20 3d  le, ref error) =
36280 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
36290 65 2e 4f 6b 29 29 0d 0a 20 20 20 20 20 20 20 20  e.Ok))..        
362a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
362b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362c0 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65         if (table
362d0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
362e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36310 20 20 70 56 74 61 62 20 3d 20 54 61 62 6c 65 54    pVtab = TableT
36320 6f 49 6e 74 50 74 72 28 74 61 62 6c 65 29 3b 0d  oIntPtr(table);.
36330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36340 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
36350 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
36360 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20  ode.Ok;..       
36370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36380 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36390 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
363a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
363b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
363c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363d0 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20           pError 
363e0 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
363f0 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
36400 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ing(..          
36410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36420 20 20 20 20 20 20 22 6e 6f 20 74 61 62 6c 65 20        "no table 
36430 77 61 73 20 63 72 65 61 74 65 64 22 29 3b 0d 0a  was created");..
36440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36450 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
36460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
36470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36480 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
36490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
364b0 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f             pErro
364c0 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  r = SQLiteString
364d0 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
364e0 74 72 69 6e 67 28 65 72 72 6f 72 29 3b 0d 0a 20  tring(error);.. 
364f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36500 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
36510 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
36520 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
36530 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
36540 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a  tion e) /* NOTE:
36550 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e   Must catch ALL.
36560 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
36570 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36580 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c      pError = SQL
36590 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e  iteString.Utf8In
365a0 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 65  tPtrFromString(e
365b0 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
365c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
365d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
365e0 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
365f0 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
36600 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36650 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36660 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
36670 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 61  ..        /// Ca
36680 6c 6c 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 76  lls one of the v
36690 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 69 6e  irtual table fin
366a0 61 6c 69 7a 61 74 69 6f 6e 20 6d 65 74 68 6f 64  alization method
366b0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
366c0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
366d0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
366e0 61 6d 65 3d 22 64 65 73 74 72 6f 79 22 3e 0d 0a  ame="destroy">..
366f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
36700 7a 65 72 6f 20 74 6f 20 63 61 6c 6c 20 74 68 65  zero to call the
36710 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
36720 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
36730 2e 44 65 73 74 72 6f 79 22 20 2f 3e 0d 0a 20 20  .Destroy" />..  
36740 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
36750 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 65  ; otherwise, the
36760 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
36770 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
36780 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 44 69  ManagedModule.Di
36790 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  sconnect" /> met
367a0 68 6f 64 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  hod will be..   
367b0 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 2e       /// called.
367c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
367d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
367e0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
367f0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
36800 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
36810 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
36820 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
36830 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
36840 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
36850 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
36860 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
36870 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
36880 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
36890 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
368a0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
368b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
368c0 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
368d0 65 20 44 65 73 74 72 6f 79 4f 72 44 69 73 63 6f  e DestroyOrDisco
368e0 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
368f0 20 20 20 20 62 6f 6f 6c 20 64 65 73 74 72 6f 79      bool destroy
36900 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
36910 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
36920 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
36930 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36940 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
36950 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36960 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
36970 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20  tualTable table 
36980 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74  = TableFromIntPt
36990 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  r(pVtab);....   
369a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
369b0 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d  (table != null).
369c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
369d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
369e0 20 20 20 20 20 20 20 20 69 66 20 28 28 64 65 73          if ((des
369f0 74 72 6f 79 20 26 26 20 28 44 65 73 74 72 6f 79  troy && (Destroy
36a00 28 74 61 62 6c 65 29 20 3d 3d 20 53 51 4c 69 74  (table) == SQLit
36a10 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 20  eErrorCode.Ok)) 
36a20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
36a30 20 20 20 20 20 20 20 20 20 20 20 20 28 21 64 65              (!de
36a40 73 74 72 6f 79 20 26 26 20 28 44 69 73 63 6f 6e  stroy && (Discon
36a50 6e 65 63 74 28 74 61 62 6c 65 29 20 3d 3d 20 53  nect(table) == S
36a60 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
36a70 6b 29 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  k)))..          
36a80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36aa0 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 73 20       if (tables 
36ab0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
36ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ad0 20 20 20 20 20 20 74 61 62 6c 65 73 2e 52 65 6d        tables.Rem
36ae0 6f 76 65 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ove(pVtab);.... 
36af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
36b10 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
36b20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
36b30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
36b40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
36b50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
36b60 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
36b70 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
36b80 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
36b90 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
36ba0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36bb0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
36bc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
36bd0 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69  OTE: At this poi
36be0 6e 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  nt, there is no 
36bf0 77 61 79 20 74 6f 20 72 65 70 6f 72 74 20 74 68  way to report th
36c00 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  e error..       
36c10 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
36c20 20 20 63 6f 6e 64 69 74 69 6f 6e 20 62 61 63 6b    condition back
36c30 20 74 6f 20 74 68 65 20 63 61 6c 6c 65 72 3b 20   to the caller; 
36c40 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 74  therefore, use t
36c50 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
36c60 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 6f 67      //       log
36c70 67 69 6e 67 20 66 61 63 69 6c 69 74 79 20 69 6e  ging facility in
36c80 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20  stead...        
36c90 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
36ca0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
36cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36cc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36cd0 20 20 20 20 20 20 20 20 69 66 20 28 4c 6f 67 45          if (LogE
36ce0 78 63 65 70 74 69 6f 6e 73 4e 6f 54 68 72 6f 77  xceptionsNoThrow
36cf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36d00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20    /* throw */.. 
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d40 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
36d50 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69  .LogMessage(SQLi
36d60 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43  teBase.COR_E_EXC
36d70 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20  EPTION,..       
36d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d90 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
36da0 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43  at(CultureInfo.C
36db0 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
36dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36dd0 20 20 20 20 20 20 20 20 20 20 20 20 22 43 61 75              "Cau
36de0 67 68 74 20 65 78 63 65 70 74 69 6f 6e 20 69 6e  ght exception in
36df0 20 5c 22 7b 30 7d 5c 22 20 6d 65 74 68 6f 64 3a   \"{0}\" method:
36e00 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
36e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e20 20 20 20 20 64 65 73 74 72 6f 79 20 3f 20 22 78      destroy ? "x
36e30 44 65 73 74 72 6f 79 22 20 3a 20 22 78 44 69 73  Destroy" : "xDis
36e40 63 6f 6e 6e 65 63 74 22 2c 20 65 29 29 3b 0d 0a  connect", e));..
36e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
36e70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
36e80 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
36e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36ea0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36eb0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
36ec0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
36ed0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
36ee0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
36ef0 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
36f00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 72                Fr
36f20 65 65 54 61 62 6c 65 28 70 56 74 61 62 29 3b 0d  eeTable(pVtab);.
36f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
36f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
36f50 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
36f60 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
36f70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
36f80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
36f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36fd0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 61       #region Sta
36fe0 74 69 63 20 45 72 72 6f 72 20 48 61 6e 64 6c 69  tic Error Handli
36ff0 6e 67 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  ng Helper Method
37000 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
37010 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
37020 20 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73 20 66    /// Arranges f
37030 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64  or the specified
37040 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
37050 6f 20 62 65 20 70 6c 61 63 65 64 20 69 6e 74 6f  o be placed into
37060 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
37070 2f 20 7a 45 72 72 4d 73 67 20 66 69 65 6c 64 20  / zErrMsg field 
37080 6f 66 20 61 20 73 71 6c 69 74 65 33 5f 76 74 61  of a sqlite3_vta
37090 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
370a0 75 72 65 2c 20 66 72 65 65 69 6e 67 20 74 68 65  ure, freeing the
370b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 78  ..        /// ex
370c0 69 73 74 69 6e 67 20 65 72 72 6f 72 20 6d 65 73  isting error mes
370d0 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20  sage, if any... 
370e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
370f0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
37100 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
37110 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20  module">..      
37120 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
37130 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c  ref="SQLiteModul
37140 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
37150 74 61 6e 63 65 20 74 6f 20 62 65 20 75 73 65 64  tance to be used
37160 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
37170 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
37180 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
37190 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
371a0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
371b0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
371c0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
371d0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
371e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
371f0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
37200 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
37210 22 6c 6f 67 45 72 72 6f 72 73 22 3e 0d 0a 20 20  "logErrors">..  
37220 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
37230 72 6f 20 69 66 20 74 68 69 73 20 65 72 72 6f 72  ro if this error
37240 20 6d 65 73 73 61 67 65 20 73 68 6f 75 6c 64 20   message should 
37250 61 6c 73 6f 20 62 65 20 6c 6f 67 67 65 64 20 75  also be logged u
37260 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  sing the..      
37270 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
37280 22 53 51 4c 69 74 65 4c 6f 67 22 20 2f 3e 20 63  "SQLiteLog" /> c
37290 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lass...        /
372a0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
372b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
372c0 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20  name="error">.. 
372d0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65         /// The e
372e0 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20  rror message... 
372f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
37300 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
37310 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
37320 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
37330 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a   upon success...
37340 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
37350 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
37360 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
37370 6f 6f 6c 20 53 65 74 54 61 62 6c 65 45 72 72 6f  ool SetTableErro
37380 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
37390 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
373a0 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ule,..          
373b0 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
373c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
373d0 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20  l logErrors,..  
373e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
373f0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
37400 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
37410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
37420 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
37430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37440 20 20 69 66 20 28 6c 6f 67 45 72 72 6f 72 73 29    if (logErrors)
37450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37460 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37470 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
37480 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  og.LogMessage(SQ
37490 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
374a0 72 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ror,..          
374b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
374c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74  ring.Format(Cult
374d0 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
374e0 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37500 20 22 56 69 72 74 75 61 6c 20 74 61 62 6c 65 20   "Virtual table 
37510 65 72 72 6f 72 3a 20 7b 30 7d 22 2c 20 65 72 72  error: {0}", err
37520 6f 72 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  or)); /* throw *
37530 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
37540 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
37550 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
37560 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
37570 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37580 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
37590 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
375a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
375b0 20 20 20 20 69 66 20 28 70 56 74 61 62 20 3d 3d      if (pVtab ==
375c0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
375d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
375e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
375f0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
37600 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20  offset = 0;.... 
37610 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65             offse
37620 74 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61  t = SQLiteMarsha
37630 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f  l.NextOffsetOf(o
37640 66 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 53 69  ffset, IntPtr.Si
37650 7a 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ze,..           
37660 20 20 20 20 20 73 69 7a 65 6f 66 28 69 6e 74 29       sizeof(int)
37670 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37680 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74    offset = SQLit
37690 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66  eMarshal.NextOff
376a0 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69  setOf(offset, si
376b0 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20  zeof(int),..    
376c0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
376d0 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20  tr.Size);....   
376e0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
376f0 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 4d  pError = SQLiteM
37700 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
37710 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74 29  r(pVtab, offset)
37720 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37730 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20 49   if (pError != I
37740 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
37750 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37760 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
37770 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 45  teMemory.Free(pE
37780 72 72 6f 72 29 3b 20 70 45 72 72 6f 72 20 3d 20  rror); pError = 
37790 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
377a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
377b0 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74  LiteMarshal.Writ
377c0 65 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20 6f  eIntPtr(pVtab, o
377d0 66 66 73 65 74 2c 20 70 45 72 72 6f 72 29 3b 0d  ffset, pError);.
377e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
377f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
37800 20 28 65 72 72 6f 72 20 3d 3d 20 6e 75 6c 6c 29   (error == null)
37810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37820 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
37830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
37840 6f 6c 20 73 75 63 63 65 73 73 20 3d 20 66 61 6c  ol success = fal
37850 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
37860 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
37870 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37880 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
37890 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
378a0 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
378b0 67 28 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  g(error);..     
378c0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
378d0 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e  eMarshal.WriteIn
378e0 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73  tPtr(pVtab, offs
378f0 65 74 2c 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20  et, pError);..  
37900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
37910 63 63 65 73 73 20 3d 20 74 72 75 65 3b 0d 0a 20  ccess = true;.. 
37920 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
37930 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
37940 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
37950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37960 20 20 69 66 20 28 21 73 75 63 63 65 73 73 20 26    if (!success &
37970 26 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74  & (pError != Int
37980 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20  Ptr.Zero))..    
37990 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
379a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379b0 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
379c0 46 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20  Free(pError);.. 
379d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379e0 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50     pError = IntP
379f0 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
37a00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
37a10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
37a20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37a30 20 73 75 63 63 65 73 73 3b 0d 0a 20 20 20 20 20   success;..     
37a40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
37a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
37aa0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
37ab0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 72  ..        /// Ar
37ac0 72 61 6e 67 65 73 20 66 6f 72 20 74 68 65 20 73  ranges for the s
37ad0 70 65 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d  pecified error m
37ae0 65 73 73 61 67 65 20 74 6f 20 62 65 20 70 6c 61  essage to be pla
37af0 63 65 64 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20  ced into the..  
37b00 20 20 20 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73        /// zErrMs
37b10 67 20 66 69 65 6c 64 20 6f 66 20 61 20 73 71 6c  g field of a sql
37b20 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
37b30 64 20 73 74 72 75 63 74 75 72 65 2c 20 66 72 65  d structure, fre
37b40 65 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  eing the..      
37b50 20 20 2f 2f 2f 20 65 78 69 73 74 69 6e 67 20 65    /// existing e
37b60 72 72 6f 72 20 6d 65 73 73 61 67 65 2c 20 69 66  rror message, if
37b70 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f   any...        /
37b80 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
37b90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
37ba0 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
37bb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
37bc0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
37bd0 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62  iteModule" /> ob
37be0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74 6f  ject instance to
37bf0 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20   be used...     
37c00 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
37c10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
37c20 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
37c30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
37c40 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
37c50 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
37c60 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
37c70 61 6e 63 65 20 75 73 65 64 20 74 6f 0d 0a 20 20  ance used to..  
37c80 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 6f 6b 75 70        /// lookup
37c90 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   the native poin
37ca0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
37cb0 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
37cc0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
37cd0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
37ce0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
37cf0 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72  aram name="logEr
37d00 72 6f 72 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  rors">..        
37d10 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
37d20 74 68 69 73 20 65 72 72 6f 72 20 6d 65 73 73 61  this error messa
37d30 67 65 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62  ge should also b
37d40 65 20 6c 6f 67 67 65 64 20 75 73 69 6e 67 20 74  e logged using t
37d50 68 65 0d 0a 20 20 20 20 20 20