System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ac4a68b4a98ad2ab2455743fd4a543ff248cdd62:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 4a 6f   * Written by Jo
0080: 65 20 4d 69 73 74 61 63 68 6b 69 6e 20 28 6a 6f  e Mistachkin (jo
0090: 65 40 6d 69 73 74 61 63 68 6b 69 6e 2e 63 6f 6d  e@mistachkin.com
00a0: 29 0d 0a 20 2a 0d 0a 20 2a 20 52 65 6c 65 61 73  ).. *.. * Releas
00b0: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00c0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at 
00d0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00e0: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 75 73  *********/....us
0120: 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65  ing System.Colle
0130: 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d  ctions.Generic;.
0140: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c  .using System.Gl
0150: 6f 62 61 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 75 73  obalization;..us
0160: 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69  ing System.Runti
0170: 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63  me.InteropServic
0180: 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  es;..using Syste
0190: 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 6e 61 6d 65 73  m.Text;....names
01a0: 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61  pace System.Data
01b0: 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20  .SQLite..{..    
01c0: 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 43 6f  #region SQLiteCo
01d0: 6e 74 65 78 74 20 48 65 6c 70 65 72 20 43 6c 61  ntext Helper Cla
01e0: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
01f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
0200: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
0210: 65 6e 74 73 20 61 20 63 6f 6e 74 65 78 74 20 66  ents a context f
0220: 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63  rom the SQLite c
0230: 6f 72 65 20 6c 69 62 72 61 72 79 20 74 68 61 74  ore library that
0240: 20 63 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 62 65   can..    /// be
0250: 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
0260: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 2a 28  qlite3_result_*(
0270: 29 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64  ) and associated
0280: 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20   functions...   
0290: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
02a0: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c  .    public seal
02b0: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 43  ed class SQLiteC
02c0: 6f 6e 74 65 78 74 20 3a 20 49 53 51 4c 69 74 65  ontext : ISQLite
02d0: 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20  NativeHandle..  
02e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
02f0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
0300: 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  a..        /// <
0310: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
0320: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
0330: 20 63 6f 6e 74 65 78 74 20 68 61 6e 64 6c 65 2e   context handle.
0340: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
0350: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
0360: 20 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72    private IntPtr
0370: 20 70 43 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20   pContext;..    
0380: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0390: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
03a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
03f0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
0400: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
0410: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0420: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
0430: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
0440: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
0450: 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65  ss using the spe
0460: 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20  cified native.. 
0470: 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 65         /// conte
0480: 78 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  xt handle...    
0490: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
04a0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
04b0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6f  <param name="pCo
04c0: 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20  ntext">..       
04d0: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
04e0: 63 6f 6e 74 65 78 74 20 68 61 6e 64 6c 65 20 74  context handle t
04f0: 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  o use...        
0500: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0510: 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53        internal S
0520: 51 4c 69 74 65 43 6f 6e 74 65 78 74 28 49 6e 74  QLiteContext(Int
0530: 50 74 72 20 70 43 6f 6e 74 65 78 74 29 0d 0a 20  Ptr pContext).. 
0540: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0550: 20 20 20 20 20 20 74 68 69 73 2e 70 43 6f 6e 74        this.pCont
0560: 65 78 74 20 3d 20 70 43 6f 6e 74 65 78 74 3b 0d  ext = pContext;.
0570: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
0580: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0590: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
05a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
05f0: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
0600: 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72 73  veHandle Members
0610: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
0620: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
0630: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
0640: 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69   underlying SQLi
0650: 74 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65  te native handle
0660: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
0670: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
0680: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
0690: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
06a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
06b0: 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 74 50       public IntP
06c0: 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d  tr NativeHandle.
06d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
06e0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
06f0: 74 75 72 6e 20 70 43 6f 6e 74 65 78 74 3b 20 7d  turn pContext; }
0700: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
0710: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
0720: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
0730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0770: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
0780: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74  egion Public Met
0790: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
07a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
07b0: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
07c0: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
07d0: 20 74 6f 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20   to NULL...     
07e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
07f0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
0800: 63 20 76 6f 69 64 20 53 65 74 4e 75 6c 6c 28 29  c void SetNull()
0810: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
0820: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
0830: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
0840: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
0850: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
0860: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
0870: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
0880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
0890: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
08a0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
08b0: 6e 75 6c 6c 28 70 43 6f 6e 74 65 78 74 29 3b 0d  null(pContext);.
08c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
08d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
08e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0920: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
0930: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
0940: 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e  /// Sets the con
0950: 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74  text result to t
0960: 68 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65  he specified <se
0970: 65 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 44  e cref="System.D
0980: 6f 75 62 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20  ouble" />..     
0990: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20     /// value... 
09a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
09b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
09c0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
09d0: 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  value">..       
09e0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
09f0: 65 66 3d 22 53 79 73 74 65 6d 2e 44 6f 75 62 6c  ef="System.Doubl
0a00: 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75  e" /> value to u
0a10: 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
0a20: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
0a30: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
0a40: 65 74 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 20  etDouble(double 
0a50: 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  value)..        
0a60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
0a70: 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49  f (pContext == I
0a80: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
0a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
0aa0: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
0ab0: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
0ac0: 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  ();....#if !PLAT
0ad0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
0ae0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
0af0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
0b00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
0b10: 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 70 43 6f  esult_double(pCo
0b20: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
0b30: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
0b40: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
0b50: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
0b60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
0b70: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e  result_double_in
0b80: 74 65 72 6f 70 28 70 43 6f 6e 74 65 78 74 2c 20  terop(pContext, 
0b90: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
0ba0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
0bb0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
0bc0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
0bd0: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
0be0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0bf0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0c40: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
0c50: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
0c60: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
0c70: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
0c80: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
0c90: 72 65 66 3d 22 53 79 73 74 65 6d 2e 49 6e 74 33  ref="System.Int3
0ca0: 32 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  2" />..        /
0cb0: 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  // value...     
0cc0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0cd0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
0ce0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
0cf0: 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
0d00: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
0d10: 53 79 73 74 65 6d 2e 49 6e 74 33 32 22 20 2f 3e  System.Int32" />
0d20: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d 0a   value to use...
0d30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
0d40: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
0d50: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 49 6e 74  blic void SetInt
0d60: 28 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20  (int value)..   
0d70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0d80: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
0d90: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
0da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0db0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
0dc0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
0dd0: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
0de0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
0df0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
0e00: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 70  te3_result_int(p
0e10: 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  Context, value);
0e20: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
0e30: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0e80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
0e90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
0ea0: 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f   /// Sets the co
0eb0: 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20  ntext result to 
0ec0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 3c 73  the specified <s
0ed0: 65 65 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e  ee cref="System.
0ee0: 49 6e 74 36 34 22 20 2f 3e 0d 0a 20 20 20 20 20  Int64" />..     
0ef0: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20     /// value... 
0f00: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
0f10: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
0f20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0f30: 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  value">..       
0f40: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
0f50: 65 66 3d 22 53 79 73 74 65 6d 2e 49 6e 74 36 34  ef="System.Int64
0f60: 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75 73  " /> value to us
0f70: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
0f80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
0f90: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
0fa0: 74 49 6e 74 36 34 28 6c 6f 6e 67 20 76 61 6c 75  tInt64(long valu
0fb0: 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
0fc0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
0fd0: 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74  Context == IntPt
0fe0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
0ff0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1000: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
1010: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
1020: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
1030: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
1040: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  K..            U
1050: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1060: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
1070: 74 5f 69 6e 74 36 34 28 70 43 6f 6e 74 65 78 74  t_int64(pContext
1080: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
1090: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
10a0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  D..            U
10b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10c0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
10d0: 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  t_int64_interop(
10e0: 70 43 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61  pContext, ref va
10f0: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
1100: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1110: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
1120: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
1130: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
1140: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1190: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
11a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
11b0: 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20         /// Sets 
11c0: 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75  the context resu
11d0: 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  lt to the specif
11e0: 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ied <see cref="S
11f0: 79 73 74 65 6d 2e 53 74 72 69 6e 67 22 20 2f 3e  ystem.String" />
1200: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61  ..        /// va
1210: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
1220: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1230: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1240: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a   name="value">..
1250: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1260: 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74 65  <see cref="Syste
1270: 6d 2e 53 74 72 69 6e 67 22 20 2f 3e 20 76 61 6c  m.String" /> val
1280: 75 65 20 74 6f 20 75 73 65 2e 20 20 54 68 69 73  ue to use.  This
1290: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 0d 0a   value will be..
12a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76          /// conv
12b0: 65 72 74 65 64 20 74 6f 20 74 68 65 20 55 54 46  erted to the UTF
12c0: 2d 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f  -8 encoding prio
12d0: 72 20 74 6f 20 62 65 69 6e 67 20 75 73 65 64 2e  r to being used.
12e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
12f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1300: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 53  public void SetS
1310: 74 72 69 6e 67 28 73 74 72 69 6e 67 20 76 61 6c  tring(string val
1320: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ue)..        {..
1330: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1340: 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50  pContext == IntP
1350: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1360: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1370: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
1380: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
1390: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13a0: 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 53  byte[] bytes = S
13b0: 51 4c 69 74 65 53 74 72 69 6e 67 2e 47 65 74 55  QLiteString.GetU
13c0: 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72 69  tf8BytesFromStri
13d0: 6e 67 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20  ng(value);....  
13e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 79            if (by
13f0: 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  tes == null)..  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1410: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
1420: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 76  NullException("v
1430: 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  alue");....     
1440: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
1450: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1460: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 0d  e3_result_text(.
1470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1480: 20 70 43 6f 6e 74 65 78 74 2c 20 62 79 74 65 73   pContext, bytes
1490: 2c 20 62 79 74 65 73 2e 4c 65 6e 67 74 68 2c 20  , bytes.Length, 
14a0: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
14b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
14d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1510: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1520: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1530: 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74  // Sets the cont
1540: 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68  ext result to th
1550: 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65  e specified <see
1560: 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 53 74   cref="System.St
1570: 72 69 6e 67 22 20 2f 3e 0d 0a 20 20 20 20 20 20  ring" />..      
1580: 20 20 2f 2f 2f 20 76 61 6c 75 65 20 63 6f 6e 74    /// value cont
1590: 61 69 6e 69 6e 67 20 61 6e 20 65 72 72 6f 72 20  aining an error 
15a0: 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20  message...      
15b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
15c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
15d0: 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
15e0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
15f0: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
1600: 79 73 74 65 6d 2e 53 74 72 69 6e 67 22 20 2f 3e  ystem.String" />
1610: 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 69 6e   value containin
1620: 67 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  g the error mess
1630: 61 67 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  age..        ///
1640: 20 74 65 78 74 2e 20 20 54 68 69 73 20 76 61 6c   text.  This val
1650: 75 65 20 77 69 6c 6c 20 62 65 20 63 6f 6e 76 65  ue will be conve
1660: 72 74 65 64 20 74 6f 20 74 68 65 20 55 54 46 2d  rted to the UTF-
1670: 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f 72  8 encoding prior
1680: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
1690: 20 62 65 69 6e 67 20 75 73 65 64 2e 0d 0a 20 20   being used...  
16a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
16b0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  m>..        publ
16c0: 69 63 20 76 6f 69 64 20 53 65 74 45 72 72 6f 72  ic void SetError
16d0: 28 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a  (string value)..
16e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16f0: 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74         if (pCont
1700: 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ext == IntPtr.Ze
1710: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
1720: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
1730: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
1740: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20  xception();.... 
1750: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
1760: 5d 20 62 79 74 65 73 20 3d 20 53 51 4c 69 74 65  ] bytes = SQLite
1770: 53 74 72 69 6e 67 2e 47 65 74 55 74 66 38 42 79  String.GetUtf8By
1780: 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 76 61  tesFromString(va
1790: 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
17a0: 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d       if (bytes =
17b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
17c0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
17d0: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
17e0: 78 63 65 70 74 69 6f 6e 28 22 76 61 6c 75 65 22  xception("value"
17f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1800: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
1810: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
1820: 73 75 6c 74 5f 65 72 72 6f 72 28 0d 0a 20 20 20  sult_error(..   
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f               pCo
1840: 6e 74 65 78 74 2c 20 62 79 74 65 73 2c 20 62 79  ntext, bytes, by
1850: 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  tes.Length);..  
1860: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1870: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
18d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
18e0: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
18f0: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
1900: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
1910: 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72  ref="SQLiteError
1920: 43 6f 64 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20  Code" />..      
1930: 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20    /// value...  
1940: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1950: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1960: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
1970: 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  alue">..        
1980: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1990: 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  f="SQLiteErrorCo
19a0: 64 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20  de" /> value to 
19b0: 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  use...        //
19c0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
19d0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
19e0: 53 65 74 45 72 72 6f 72 43 6f 64 65 28 53 51 4c  SetErrorCode(SQL
19f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 76 61 6c  iteErrorCode val
1a00: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ue)..        {..
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a20: 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50  pContext == IntP
1a30: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1a40: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1a50: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
1a60: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
1a70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1a90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
1aa0: 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65 28 70 43  lt_error_code(pC
1ab0: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
1ac0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1ad0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1b20: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1b30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1b40: 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e  /// Sets the con
1b50: 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 63  text result to c
1b60: 6f 6e 74 61 69 6e 20 74 68 65 20 65 72 72 6f 72  ontain the error
1b70: 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 54 4f 4f   code SQLITE_TOO
1b80: 42 49 47 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  BIG...        //
1b90: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1ba0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
1bb0: 64 20 53 65 74 45 72 72 6f 72 54 6f 6f 42 69 67  d SetErrorTooBig
1bc0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
1bd0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
1be0: 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74  Context == IntPt
1bf0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1c00: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1c10: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
1c20: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
1c30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
1c40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1c50: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
1c60: 74 5f 65 72 72 6f 72 5f 74 6f 6f 62 69 67 28 70  t_error_toobig(p
1c70: 43 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 20  Context);..     
1c80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ce0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1cf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65  ..        /// Se
1d00: 74 73 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72  ts the context r
1d10: 65 73 75 6c 74 20 74 6f 20 63 6f 6e 74 61 69 6e  esult to contain
1d20: 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
1d30: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 0d 0a 20  SQLITE_NOMEM... 
1d40: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1d50: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
1d60: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72  ublic void SetEr
1d70: 72 6f 72 4e 6f 4d 65 6d 6f 72 79 28 29 0d 0a 20  rorNoMemory().. 
1d80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d90: 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65        if (pConte
1da0: 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  xt == IntPtr.Zer
1db0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
1dc0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
1dd0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
1de0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20  ception();....  
1df0: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
1e00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1e10: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
1e20: 6f 72 5f 6e 6f 6d 65 6d 28 70 43 6f 6e 74 65 78  or_nomem(pContex
1e30: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  t);..        }..
1e40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e90: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1ea0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1eb0: 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65      /// Sets the
1ec0: 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20   context result 
1ed0: 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64  to the specified
1ee0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74   <see cref="Syst
1ef0: 65 6d 2e 42 79 74 65 22 20 2f 3e 0d 0a 20 20 20  em.Byte" />..   
1f00: 20 20 20 20 20 2f 2f 2f 20 61 72 72 61 79 20 76       /// array v
1f10: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
1f20: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1f30: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1f40: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
1f50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1f60: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74   <see cref="Syst
1f70: 65 6d 2e 42 79 74 65 22 20 2f 3e 20 61 72 72 61  em.Byte" /> arra
1f80: 79 20 76 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d  y value to use..
1f90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1fa0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70  aram>..        p
1fb0: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 42 6c  ublic void SetBl
1fc0: 6f 62 28 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  ob(byte[] value)
1fd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1fe0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
1ff0: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
2000: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
2010: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
2020: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
2030: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
2040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2050: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
2060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2070: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
2080: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
2090: 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  ("value");....  
20a0: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
20b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
20c0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f  lite3_result_blo
20d0: 62 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b(..            
20e0: 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20 76 61      pContext, va
20f0: 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  lue, value.Lengt
2100: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
2110: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2120: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2170: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2180: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2190: 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63    /// Sets the c
21a0: 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f  ontext result to
21b0: 20 61 20 42 4c 4f 42 20 6f 66 20 7a 65 72 6f 73   a BLOB of zeros
21c0: 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
21d0: 64 20 73 69 7a 65 2e 0d 0a 20 20 20 20 20 20 20  d size...       
21e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
21f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
2200: 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
2210: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
2220: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 7a 65 72  he number of zer
2230: 6f 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 66  o bytes to use f
2240: 6f 72 20 74 68 65 20 42 4c 4f 42 20 63 6f 6e 74  or the BLOB cont
2250: 65 78 74 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20  ext result...   
2260: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2270: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
2280: 63 20 76 6f 69 64 20 53 65 74 5a 65 72 6f 42 6c  c void SetZeroBl
2290: 6f 62 28 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  ob(int value).. 
22a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22b0: 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65        if (pConte
22c0: 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  xt == IntPtr.Zer
22d0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
22e0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
22f0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
2300: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20  ception();....  
2310: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
2320: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2330: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72  lite3_result_zer
2340: 6f 62 6c 6f 62 28 70 43 6f 6e 74 65 78 74 2c 20  oblob(pContext, 
2350: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
2360: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
23d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73          /// Sets
23e0: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73   the context res
23f0: 75 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69  ult to the speci
2400: 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  fied <see cref="
2410: 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 2e  SQLiteValue" />.
2420: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2430: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2440: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2450: 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20  e="value">..    
2460: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
2470: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c   cref="SQLiteVal
2480: 75 65 22 20 2f 3e 20 74 6f 20 75 73 65 2e 0d 0a  ue" /> to use...
2490: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
24a0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
24b0: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
24c0: 75 65 28 53 51 4c 69 74 65 56 61 6c 75 65 20 76  ue(SQLiteValue v
24d0: 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  alue)..        {
24e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24f0: 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e   (pContext == In
2500: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
2510: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2520: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
2530: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
2540: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2550: 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
2560: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2570: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2580: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
2590: 70 74 69 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d  ption("value");.
25a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
25b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
25c0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
25d0: 74 5f 76 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  t_value(..      
25e0: 20 20 20 20 20 20 20 20 20 20 70 43 6f 6e 74 65            pConte
25f0: 78 74 2c 20 76 61 6c 75 65 2e 4e 61 74 69 76 65  xt, value.Native
2600: 48 61 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20  Handle);..      
2610: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2620: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
2630: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2640: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2690: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
26a0: 20 53 51 4c 69 74 65 56 61 6c 75 65 20 48 65 6c   SQLiteValue Hel
26b0: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 70  per Class..    p
26c0: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
26d0: 73 73 20 53 51 4c 69 74 65 56 61 6c 75 65 20 3a  ss SQLiteValue :
26e0: 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61   ISQLiteNativeHa
26f0: 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ndle..    {..   
2700: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2710: 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20  vate Data..     
2720: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2730: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
2740: 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20 68  e native value h
2750: 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  andle...        
2760: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2770: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2780: 49 6e 74 50 74 72 20 70 56 61 6c 75 65 3b 0d 0a  IntPtr pValue;..
2790: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
27a0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
27b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2800: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
2810: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
2820: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2830: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2840: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
2850: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
2860: 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65   class using the
2870: 20 73 70 65 63 69 66 69 65 64 20 6e 61 74 69 76   specified nativ
2880: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
2890: 61 6c 75 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  alue handle...  
28a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
28b0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
28c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
28d0: 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  Value">..       
28e0: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
28f0: 76 61 6c 75 65 20 68 61 6e 64 6c 65 20 74 6f 20  value handle to 
2900: 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  use...        //
2910: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2920: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c      internal SQL
2930: 69 74 65 56 61 6c 75 65 28 49 6e 74 50 74 72 20  iteValue(IntPtr 
2940: 70 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20  pValue)..       
2950: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2960: 74 68 69 73 2e 70 56 61 6c 75 65 20 3d 20 70 56  this.pValue = pV
2970: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alue;..        }
2980: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2990: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
29a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29f0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
2a00: 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  te Methods..    
2a10: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2a20: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  >..        /// I
2a30: 6e 76 61 6c 69 64 61 74 65 73 20 74 68 65 20 6e  nvalidates the n
2a40: 61 74 69 76 65 20 76 61 6c 75 65 20 68 61 6e 64  ative value hand
2a50: 6c 65 2c 20 74 68 65 72 65 62 79 20 70 72 65 76  le, thereby prev
2a60: 65 6e 74 69 6e 67 20 66 75 72 74 68 65 72 0d 0a  enting further..
2a70: 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 63 63 65          /// acce
2a80: 73 73 20 74 6f 20 69 74 20 66 72 6f 6d 20 74 68  ss to it from th
2a90: 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
2aa0: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
2ab0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2ac0: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
2ad0: 64 20 50 72 65 76 65 6e 74 4e 61 74 69 76 65 41  d PreventNativeA
2ae0: 63 63 65 73 73 28 29 0d 0a 20 20 20 20 20 20 20  ccess()..       
2af0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b00: 70 56 61 6c 75 65 20 3d 20 49 6e 74 50 74 72 2e  pValue = IntPtr.
2b10: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 7d  Zero;..        }
2b20: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2b30: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b80: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2b90: 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69     #region ISQLi
2ba0: 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 4d  teNativeHandle M
2bb0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
2bc0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2bd0: 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72         /// Retur
2be0: 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  ns the underlyin
2bf0: 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20  g SQLite native 
2c00: 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61 74 65  handle associate
2c10: 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20 20 20  d with this..   
2c20: 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20       /// object 
2c30: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
2c40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2c50: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
2c60: 63 20 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48  c IntPtr NativeH
2c70: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b  andle..        {
2c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
2c90: 74 20 7b 20 72 65 74 75 72 6e 20 70 56 61 6c 75  t { return pValu
2ca0: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e; }..        }.
2cb0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2cc0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d10: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d20: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
2d30: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
2d40: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
2d50: 6c 20 70 65 72 73 69 73 74 65 64 3b 0d 0a 20 20  l persisted;..  
2d60: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2d70: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
2d80: 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   Returns non-zer
2d90: 6f 20 69 66 20 74 68 65 20 6e 61 74 69 76 65 20  o if the native 
2da0: 53 51 4c 69 74 65 20 76 61 6c 75 65 20 68 61 73  SQLite value has
2db0: 20 62 65 65 6e 20 73 75 63 63 65 73 73 66 75 6c   been successful
2dc0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ly..        /// 
2dd0: 70 65 72 73 69 73 74 65 64 20 61 73 20 61 20 6d  persisted as a m
2de0: 61 6e 61 67 65 64 20 76 61 6c 75 65 20 77 69 74  anaged value wit
2df0: 68 69 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20  hin this object 
2e00: 69 6e 73 74 61 6e 63 65 20 28 69 2e 65 2e 20 74  instance (i.e. t
2e10: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
2e20: 3c 73 65 65 20 63 72 65 66 3d 22 56 61 6c 75 65  <see cref="Value
2e30: 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20 6d 61  " /> property ma
2e40: 79 20 74 68 65 6e 20 62 65 20 72 65 61 64 20 73  y then be read s
2e50: 75 63 63 65 73 73 66 75 6c 6c 79 29 2e 0d 0a 20  uccessfully)... 
2e60: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2e70: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
2e80: 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 73 69  ublic bool Persi
2e90: 73 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7b 0d  sted..        {.
2ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
2eb0: 20 7b 20 72 65 74 75 72 6e 20 70 65 72 73 69 73   { return persis
2ec0: 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ted; }..        
2ed0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f30: 70 72 69 76 61 74 65 20 6f 62 6a 65 63 74 20 76  private object v
2f40: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 2f  alue;..        /
2f50: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2f60: 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65        /// If the
2f70: 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 20 66   managed value f
2f80: 6f 72 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  or this object i
2f90: 6e 73 74 61 6e 63 65 20 69 73 20 61 76 61 69 6c  nstance is avail
2fa0: 61 62 6c 65 20 28 69 2e 65 2e 20 69 74 0d 0a 20  able (i.e. it.. 
2fb0: 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 73 20 62         /// has b
2fc0: 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 70  een previously p
2fd0: 65 72 73 69 73 74 65 64 20 76 69 61 20 74 68 65  ersisted via the
2fe0: 20 3c 73 65 65 20 63 72 65 66 3d 22 50 65 72 73   <see cref="Pers
2ff0: 69 73 74 22 2f 3e 29 20 6d 65 74 68 6f 64 2c 0d  ist"/>) method,.
3000: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61  .        /// tha
3010: 74 20 76 61 6c 75 65 20 69 73 20 72 65 74 75 72  t value is retur
3020: 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ned; otherwise, 
3030: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 73 20  an exception is 
3040: 74 68 72 6f 77 6e 2e 20 20 54 68 65 0d 0a 20 20  thrown.  The..  
3050: 20 20 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e        /// return
3060: 65 64 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  ed value may be 
3070: 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f  null...        /
3080: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3090: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62         public ob
30a0: 6a 65 63 74 20 56 61 6c 75 65 0d 0a 20 20 20 20  ject Value..    
30b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30c0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
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 69 66 20 28 21 70 65 72 73         if (!pers
30f0: 69 73 74 65 64 29 0d 0a 20 20 20 20 20 20 20 20  isted)..        
3100: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3120: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
3130: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
3140: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
3150: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76 61               "va
3160: 6c 75 65 20 77 61 73 20 6e 6f 74 20 70 65 72 73  lue was not pers
3170: 69 73 74 65 64 22 29 3b 0d 0a 20 20 20 20 20 20  isted");..      
3180: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31a0: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
31b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
31d0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
31e0: 20 20 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d  /////////////...
3230: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
3240: 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
3250: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
3260: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3270: 2f 2f 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74  /// Gets and ret
3280: 75 72 6e 73 20 74 68 65 20 74 79 70 65 20 61 66  urns the type af
3290: 66 69 6e 69 74 79 20 61 73 73 6f 63 69 61 74 65  finity associate
32a0: 64 20 77 69 74 68 20 74 68 69 73 20 76 61 6c 75  d with this valu
32b0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
32c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
32d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
32e0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
32f0: 68 65 20 74 79 70 65 20 61 66 66 69 6e 69 74 79  he type affinity
3300: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3310: 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20   this value...  
3320: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
3330: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
3340: 62 6c 69 63 20 54 79 70 65 41 66 66 69 6e 69 74  blic TypeAffinit
3350: 79 20 47 65 74 54 79 70 65 41 66 66 69 6e 69 74  y GetTypeAffinit
3360: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  y()..        {..
3370: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3380: 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72  pValue == IntPtr
3390: 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 54 79  .Zero) return Ty
33a0: 70 65 41 66 66 69 6e 69 74 79 2e 4e 6f 6e 65 3b  peAffinity.None;
33b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
33c0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
33d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
33e0: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
33f0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
3400: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
3410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3450: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
3460: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3470: 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e       /// Gets an
3480: 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  d returns the nu
3490: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 61 73  mber of bytes as
34a0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
34b0: 69 73 20 76 61 6c 75 65 2c 20 69 66 0d 0a 20 20  is value, if..  
34c0: 20 20 20 20 20 20 2f 2f 2f 20 69 74 20 72 65 66        /// it ref
34d0: 65 72 73 20 74 6f 20 61 20 55 54 46 2d 38 20 65  ers to a UTF-8 e
34e0: 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 2e 0d 0a  ncoded string...
34f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
3500: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3510: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
3520: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
3530: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 61  umber of bytes a
3540: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
3550: 68 69 73 20 76 61 6c 75 65 2e 20 20 54 68 65 20  his value.  The 
3560: 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 0d 0a  returned value..
3570: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 61 79 20          /// may 
3580: 62 65 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20  be zero...      
3590: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
35a0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
35b0: 20 69 6e 74 20 47 65 74 42 79 74 65 73 28 29 0d   int GetBytes().
35c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
35d0: 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
35e0: 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
35f0: 6f 29 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20  o) return 0;..  
3600: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3610: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3620: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
3630: 75 65 5f 62 79 74 65 73 28 70 56 61 6c 75 65 29  ue_bytes(pValue)
3640: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
3650: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
36a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
36b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
36c0: 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64 20 72    /// Gets and r
36d0: 65 74 75 72 6e 73 20 74 68 65 20 3c 73 65 65 20  eturns the <see 
36e0: 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 49 6e 74  cref="System.Int
36f0: 33 32 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65  32" /> associate
3700: 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  d with..        
3710: 2f 2f 2f 20 74 68 69 73 20 76 61 6c 75 65 2e 0d  /// this value..
3720: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
3730: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
3740: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
3750: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
3760: 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74 65  <see cref="Syste
3770: 6d 2e 49 6e 74 33 32 22 20 2f 3e 20 61 73 73 6f  m.Int32" /> asso
3780: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
3790: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
37a0: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
37b0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
37c0: 69 6e 74 20 47 65 74 49 6e 74 28 29 0d 0a 20 20  int GetInt()..  
37d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37e0: 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65 20       if (pValue 
37f0: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  == IntPtr.Zero) 
3800: 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 28 69  return default(i
3810: 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
3820: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
3830: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3840: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70  ite3_value_int(p
3850: 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  Value);..       
3860: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
3870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
38c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
38d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73          /// Gets
38e0: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
38f0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74   <see cref="Syst
3900: 65 6d 2e 49 6e 74 36 34 22 20 2f 3e 20 61 73 73  em.Int64" /> ass
3910: 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20  ociated with..  
3920: 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 76        /// this v
3930: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
3940: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3950: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
3960: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
3970: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
3980: 22 53 79 73 74 65 6d 2e 49 6e 74 36 34 22 20 2f  "System.Int64" /
3990: 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  > associated wit
39a0: 68 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20  h this value... 
39b0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
39c0: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
39d0: 75 62 6c 69 63 20 6c 6f 6e 67 20 47 65 74 49 6e  ublic long GetIn
39e0: 74 36 34 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  t64()..        {
39f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3a00: 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50   (pValue == IntP
3a10: 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20  tr.Zero) return 
3a20: 64 65 66 61 75 6c 74 28 6c 6f 6e 67 29 3b 0d 0a  default(long);..
3a30: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
3a40: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
3a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
3a60: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
3a70: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3a80: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 56 61  _value_int64(pVa
3a90: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
3aa0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
3ab0: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
3ac0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
3ad0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
3ae0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3af0: 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65  value_int64_inte
3b00: 72 6f 70 28 70 56 61 6c 75 65 2c 20 6f 75 74 20  rop(pValue, out 
3b10: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
3b20: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
3b30: 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  e;..#else..     
3b40: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
3b50: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
3b60: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
3b70: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
3b80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
3b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bd0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
3be0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3bf0: 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64      /// Gets and
3c00: 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73 65   returns the <se
3c10: 65 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 44  e cref="System.D
3c20: 6f 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63 69  ouble" /> associ
3c30: 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20  ated with..     
3c40: 20 20 20 2f 2f 2f 20 74 68 69 73 20 76 61 6c 75     /// this valu
3c50: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
3c60: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3c70: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
3c80: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
3c90: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79  he <see cref="Sy
3ca0: 73 74 65 6d 2e 44 6f 75 62 6c 65 22 20 2f 3e 20  stem.Double" /> 
3cb0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
3cc0: 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20  this value...   
3cd0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
3ce0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
3cf0: 6c 69 63 20 64 6f 75 62 6c 65 20 47 65 74 44 6f  lic double GetDo
3d00: 75 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20  uble()..        
3d10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
3d20: 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74  f (pValue == Int
3d30: 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e  Ptr.Zero) return
3d40: 20 64 65 66 61 75 6c 74 28 64 6f 75 62 6c 65 29   default(double)
3d50: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
3d60: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
3d70: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
3d80: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
3d90: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3da0: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
3db0: 28 70 56 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  (pValue);..#elif
3dc0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
3dd0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  D..            d
3de0: 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 20 20  ouble value;..  
3df0: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
3e00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
3e10: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
3e20: 6c 65 5f 69 6e 74 65 72 6f 70 28 70 56 61 6c 75  le_interop(pValu
3e30: 65 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a  e, out value);..
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3e50: 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65  rn value;..#else
3e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
3e70: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
3e80: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
3e90: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
3ea0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3eb0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ef0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
3f00: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3f10: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47  >..        /// G
3f20: 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ets and returns 
3f30: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
3f40: 79 73 74 65 6d 2e 53 74 72 69 6e 67 22 20 2f 3e  ystem.String" />
3f50: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3f60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
3f70: 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  is value...     
3f80: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3f90: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
3fa0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
3fb0: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
3fc0: 72 65 66 3d 22 53 79 73 74 65 6d 2e 53 74 72 69  ref="System.Stri
3fd0: 6e 67 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65  ng" /> associate
3fe0: 64 20 77 69 74 68 20 74 68 69 73 20 76 61 6c 75  d with this valu
3ff0: 65 2e 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20  e.  The..       
4000: 20 2f 2f 2f 20 76 61 6c 75 65 20 69 73 20 63 6f   /// value is co
4010: 6e 76 65 72 74 65 64 20 66 72 6f 6d 20 74 68 65  nverted from the
4020: 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20   UTF-8 encoding 
4030: 70 72 69 6f 72 20 74 6f 20 62 65 69 6e 67 20 72  prior to being r
4040: 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20  eturned...      
4050: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
4060: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
4070: 20 73 74 72 69 6e 67 20 47 65 74 53 74 72 69 6e   string GetStrin
4080: 67 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  g()..        {..
4090: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
40a0: 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72  pValue == IntPtr
40b0: 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 6e 75  .Zero) return nu
40c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
40d0: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 53 74   return SQLiteSt
40e0: 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55  ring.StringFromU
40f0: 74 66 38 49 6e 74 50 74 72 28 70 56 61 6c 75 65  tf8IntPtr(pValue
4100: 2c 20 47 65 74 42 79 74 65 73 28 29 29 3b 0d 0a  , GetBytes());..
4110: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4120: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4170: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
4180: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
4190: 2f 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75  // Gets and retu
41a0: 72 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72 65  rns the <see cre
41b0: 66 3d 22 53 79 73 74 65 6d 2e 42 79 74 65 22 20  f="System.Byte" 
41c0: 2f 3e 20 61 72 72 61 79 20 61 73 73 6f 63 69 61  /> array associa
41d0: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
41e0: 20 77 69 74 68 20 74 68 69 73 20 76 61 6c 75 65   with this value
41f0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
4200: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
4210: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
4220: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
4230: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73  e <see cref="Sys
4240: 74 65 6d 2e 42 79 74 65 22 20 2f 3e 20 61 72 72  tem.Byte" /> arr
4250: 61 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ay associated wi
4260: 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a  th this value...
4270: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
4280: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
4290: 70 75 62 6c 69 63 20 62 79 74 65 5b 5d 20 47 65  public byte[] Ge
42a0: 74 42 6c 6f 62 28 29 0d 0a 20 20 20 20 20 20 20  tBlob()..       
42b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
42c0: 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e  if (pValue == In
42d0: 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72  tPtr.Zero) retur
42e0: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
42f0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
4300: 74 65 4d 61 72 73 68 61 6c 2e 42 79 74 65 73 46  teMarshal.BytesF
4310: 72 6f 6d 49 6e 74 50 74 72 28 70 56 61 6c 75 65  romIntPtr(pValue
4320: 2c 20 47 65 74 42 79 74 65 73 28 29 29 3b 0d 0a  , GetBytes());..
4330: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4340: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4390: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
43a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
43b0: 2f 2f 20 55 73 65 73 20 74 68 65 20 6e 61 74 69  // Uses the nati
43c0: 76 65 20 76 61 6c 75 65 20 68 61 6e 64 6c 65 20  ve value handle 
43d0: 74 6f 20 6f 62 74 61 69 6e 20 61 6e 64 20 73 74  to obtain and st
43e0: 6f 72 65 20 74 68 65 20 6d 61 6e 61 67 65 64 20  ore the managed 
43f0: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 2f  value..        /
4400: 2f 2f 20 66 6f 72 20 74 68 69 73 20 6f 62 6a 65  // for this obje
4410: 63 74 20 69 6e 73 74 61 6e 63 65 2c 20 74 68 75  ct instance, thu
4420: 73 20 73 61 76 69 6e 67 20 69 74 20 66 6f 72 20  s saving it for 
4430: 6c 61 74 65 72 20 75 73 65 2e 20 20 54 68 65 20  later use.  The 
4440: 74 79 70 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  type..        //
4450: 2f 20 6f 66 20 74 68 65 20 6d 61 6e 61 67 65 64  / of the managed
4460: 20 76 61 6c 75 65 20 69 73 20 64 65 74 65 72 6d   value is determ
4470: 69 6e 65 64 20 62 79 20 74 68 65 20 74 79 70 65  ined by the type
4480: 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
4490: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61  ..        /// na
44a0: 74 69 76 65 20 76 61 6c 75 65 2e 20 20 49 66 20  tive value.  If 
44b0: 74 68 65 20 74 79 70 65 20 61 66 66 69 6e 69 74  the type affinit
44c0: 79 20 69 73 20 6e 6f 74 20 72 65 63 6f 67 6e 69  y is not recogni
44d0: 7a 65 64 20 62 79 20 74 68 69 73 0d 0a 20 20 20  zed by this..   
44e0: 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2c       /// method,
44f0: 20 6e 6f 20 77 6f 72 6b 20 69 73 20 64 6f 6e 65   no work is done
4500: 20 61 6e 64 20 66 61 6c 73 65 20 69 73 20 72 65   and false is re
4510: 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20  turned...       
4520: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4530: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
4540: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
4550: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
4560: 74 68 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65  the native value
4570: 20 77 61 73 20 70 65 72 73 69 73 74 65 64 20 73   was persisted s
4580: 75 63 63 65 73 73 66 75 6c 6c 79 2e 0d 0a 20 20  uccessfully...  
4590: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
45a0: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
45b0: 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 73 69 73  blic bool Persis
45c0: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  t()..        {..
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
45e0: 63 68 20 28 47 65 74 54 79 70 65 41 66 66 69 6e  ch (GetTypeAffin
45f0: 69 74 79 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ity())..        
4600: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4610: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
4620: 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69  Affinity.Uniniti
4630: 61 6c 69 7a 65 64 3a 0d 0a 20 20 20 20 20 20 20  alized:..       
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
4650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4660: 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20          value = 
4670: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
4690: 72 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65  reventNativeAcce
46a0: 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ss();..         
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
46c0: 65 74 75 72 6e 20 28 70 65 72 73 69 73 74 65 64  eturn (persisted
46d0: 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20   = true);..     
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
46f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4700: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
4710: 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20  ity.Int64:..    
4720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4730: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4740: 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65             value
4750: 20 3d 20 47 65 74 49 6e 74 36 34 28 29 3b 0d 0a   = GetInt64();..
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4770: 20 20 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e          PreventN
4780: 61 74 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a  ativeAccess();..
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
47b0: 70 65 72 73 69 73 74 65 64 20 3d 20 74 72 75 65  persisted = true
47c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
47d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
47e0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
47f0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
4800: 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ble:..          
4810: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4830: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 47 65 74       value = Get
4840: 44 6f 75 62 6c 65 28 29 3b 0d 0a 20 20 20 20 20  Double();..     
4850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4860: 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76 65     PreventNative
4870: 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20 20  Access();..     
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4890: 20 20 20 72 65 74 75 72 6e 20 28 70 65 72 73 69     return (persi
48a0: 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20  sted = true);.. 
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
48d0: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
48e0: 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d 0a 20  ffinity.Text:.. 
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4900: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
4920: 6c 75 65 20 3d 20 47 65 74 53 74 72 69 6e 67 28  lue = GetString(
4930: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4940: 20 20 20 20 20 20 20 20 20 20 20 20 50 72 65 76              Prev
4950: 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73 28  entNativeAccess(
4960: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4970: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4980: 72 6e 20 28 70 65 72 73 69 73 74 65 64 20 3d 20  rn (persisted = 
4990: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
49a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
49c0: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
49d0: 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20  .Blob:..        
49e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 47         value = G
4a10: 65 74 42 79 74 65 73 28 29 3b 0d 0a 20 20 20 20  etBytes();..    
4a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a30: 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76      PreventNativ
4a40: 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20  eAccess();..    
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a60: 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72 73      return (pers
4a70: 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a  isted = true);..
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a90: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4aa0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
4ab0: 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a  Affinity.Null:..
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ad0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
4af0: 61 6c 75 65 20 3d 20 44 42 4e 75 6c 6c 2e 56 61  alue = DBNull.Va
4b00: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
4b20: 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73  eventNativeAcces
4b30: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4b50: 74 75 72 6e 20 28 70 65 72 73 69 73 74 65 64 20  turn (persisted 
4b60: 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  = true);..      
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b90: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
4bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4bc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4bd0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4bf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4c00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4c10: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
4c20: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
4c30: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
4c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c80: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
4c90: 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65  egion SQLiteInde
4ca0: 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20 45 6e  xConstraintOp En
4cb0: 75 6d 65 72 61 74 69 6f 6e 0d 0a 20 20 20 20 2f  umeration..    /
4cc0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
4cd0: 20 20 2f 2f 2f 20 54 68 65 73 65 20 61 72 65 20    /// These are 
4ce0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
4cf0: 65 73 20 66 6f 72 20 74 68 65 20 6f 70 65 72 61  es for the opera
4d00: 74 6f 72 73 20 74 68 61 74 20 61 72 65 20 70 61  tors that are pa
4d10: 72 74 20 6f 66 20 61 0d 0a 20 20 20 20 2f 2f 2f  rt of a..    ///
4d20: 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 65 72 6d   constraint term
4d30: 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c   in the WHERE cl
4d40: 61 75 73 65 20 6f 66 20 61 20 71 75 65 72 79 20  ause of a query 
4d50: 74 68 61 74 20 75 73 65 73 20 61 20 76 69 72 74  that uses a virt
4d60: 75 61 6c 0d 0a 20 20 20 20 2f 2f 2f 20 74 61 62  ual..    /// tab
4d70: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
4d80: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62  ummary>..    pub
4d90: 6c 69 63 20 65 6e 75 6d 20 53 51 4c 69 74 65 49  lic enum SQLiteI
4da0: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70  ndexConstraintOp
4db0: 20 3a 20 62 79 74 65 0d 0a 20 20 20 20 7b 0d 0a   : byte..    {..
4dc0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
4dd0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
4de0: 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72 65  // This value re
4df0: 70 72 65 73 65 6e 74 73 20 74 68 65 20 65 71 75  presents the equ
4e00: 61 6c 69 74 79 20 6f 70 65 72 61 74 6f 72 2e 0d  ality operator..
4e10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
4e20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
4e30: 20 45 71 75 61 6c 54 6f 20 3d 20 32 2c 0d 0a 0d   EqualTo = 2,...
4e40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
4e50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
4e60: 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72  /// This value r
4e70: 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 67 72  epresents the gr
4e80: 65 61 74 65 72 20 74 68 61 6e 20 6f 70 65 72 61  eater than opera
4e90: 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tor...        //
4ea0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4eb0: 20 20 20 20 20 20 47 72 65 61 74 65 72 54 68 61        GreaterTha
4ec0: 6e 20 3d 20 34 2c 0d 0a 0d 0a 20 20 20 20 20 20  n = 4,....      
4ed0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4ee0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
4ef0: 73 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e  s value represen
4f00: 74 73 20 74 68 65 20 6c 65 73 73 20 74 68 61 6e  ts the less than
4f10: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6f 70 65   or equal to ope
4f20: 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  rator...        
4f30: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
4f40: 20 20 20 20 20 20 20 20 4c 65 73 73 54 68 61 6e          LessThan
4f50: 4f 72 45 71 75 61 6c 54 6f 20 3d 20 38 2c 0d 0a  OrEqualTo = 8,..
4f60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
4f70: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
4f80: 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20   /// This value 
4f90: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
4fa0: 65 73 73 20 74 68 61 6e 20 6f 70 65 72 61 74 6f  ess than operato
4fb0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
4fc0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
4fd0: 20 20 20 20 4c 65 73 73 54 68 61 6e 20 3d 20 31      LessThan = 1
4fe0: 36 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  6,....        //
4ff0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5000: 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61       /// This va
5010: 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 74  lue represents t
5020: 68 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  he greater than 
5030: 6f 72 20 65 71 75 61 6c 20 74 6f 20 6f 70 65 72  or equal to oper
5040: 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ator...        /
5050: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5060: 20 20 20 20 20 20 20 47 72 65 61 74 65 72 54 68         GreaterTh
5070: 61 6e 4f 72 45 71 75 61 6c 54 6f 20 3d 20 33 32  anOrEqualTo = 32
5080: 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ,....        ///
5090: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
50a0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c      /// This val
50b0: 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  ue represents th
50c0: 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72  e MATCH operator
50d0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
50e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
50f0: 20 20 20 4d 61 74 63 68 20 3d 20 36 34 0d 0a 20     Match = 64.. 
5100: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
5110: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
5120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5160: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
5170: 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64  region SQLiteInd
5180: 65 78 43 6f 6e 73 74 72 61 69 6e 74 20 48 65 6c  exConstraint Hel
5190: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f  per Class..    /
51a0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
51b0: 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
51c0: 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
51d0: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
51e0: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20  ndex_constraint 
51f0: 73 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20 2f  structure..    /
5200: 2f 2f 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 69  // from the SQLi
5210: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
5220: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
5230: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
5240: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51   sealed class SQ
5250: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
5260: 69 6e 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  int..    {..    
5270: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65      #region Inte
5280: 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72  rnal Constructor
5290: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
52a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
52b0: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
52c0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
52d0: 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67  this class using
52e0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e   the specified n
52f0: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f  ative..        /
5300: 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  // sqlite3_index
5310: 5f 63 6f 6e 73 74 72 61 69 6e 74 20 73 74 72 75  _constraint stru
5320: 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
5330: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5340: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
5350: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 73 74 72 61  am name="constra
5360: 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  int">..        /
5370: 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 73 71  // The native sq
5380: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
5390: 74 72 61 69 6e 74 20 73 74 72 75 63 74 75 72 65  traint structure
53a0: 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20   to use...      
53b0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
53c0: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
53d0: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
53e0: 74 72 61 69 6e 74 28 0d 0a 20 20 20 20 20 20 20  traint(..       
53f0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
5400: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5410: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
5420: 74 20 63 6f 6e 73 74 72 61 69 6e 74 0d 0a 20 20  t constraint..  
5430: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
5440: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
5450: 63 6f 6e 73 74 72 61 69 6e 74 2e 69 43 6f 6c 75  constraint.iColu
5460: 6d 6e 2c 20 63 6f 6e 73 74 72 61 69 6e 74 2e 6f  mn, constraint.o
5470: 70 2c 20 63 6f 6e 73 74 72 61 69 6e 74 2e 75 73  p, constraint.us
5480: 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
5490: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 72            constr
54a0: 61 69 6e 74 2e 69 54 65 72 6d 4f 66 66 73 65 74  aint.iTermOffset
54b0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
54c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
54d0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
54e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
54f0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
5500: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5550: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
5560: 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72  vate Constructor
5570: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
5580: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
5590: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
55a0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
55b0: 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67  this class using
55c0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
55d0: 69 65 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ield..        //
55e0: 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20  / values...     
55f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5600: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
5610: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 43 6f 6c  param name="iCol
5620: 75 6d 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  umn">..        /
5630: 2f 2f 20 43 6f 6c 75 6d 6e 20 6f 6e 20 6c 65 66  // Column on lef
5640: 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 63  t-hand side of c
5650: 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20  onstraint...    
5660: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
5670: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
5680: 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 70 22 3e 0d  aram name="op">.
5690: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
56a0: 73 74 72 61 69 6e 74 20 6f 70 65 72 61 74 6f 72  straint operator
56b0: 20 28 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c   (<see cref="SQL
56c0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
56d0: 6e 74 4f 70 22 20 2f 3e 29 2e 0d 0a 20 20 20 20  ntOp" />)...    
56e0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
56f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
5700: 61 72 61 6d 20 6e 61 6d 65 3d 22 75 73 61 62 6c  aram name="usabl
5710: 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
5720: 20 54 72 75 65 20 69 66 20 74 68 69 73 20 63 6f   True if this co
5730: 6e 73 74 72 61 69 6e 74 20 69 73 20 75 73 61 62  nstraint is usab
5740: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
5750: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
5760: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5770: 6d 65 3d 22 69 54 65 72 6d 4f 66 66 73 65 74 22  me="iTermOffset"
5780: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
5790: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2d  sed internally -
57a0: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
57b0: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
57c0: 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a  .BestIndex" />..
57d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75          /// shou
57e0: 6c 64 20 69 67 6e 6f 72 65 2e 0d 0a 20 20 20 20  ld ignore...    
57f0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
5800: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
5810: 65 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  e SQLiteIndexCon
5820: 73 74 72 61 69 6e 74 28 0d 0a 20 20 20 20 20 20  straint(..      
5830: 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d        int iColum
5840: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
5850: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
5860: 72 61 69 6e 74 4f 70 20 6f 70 2c 0d 0a 20 20 20  raintOp op,..   
5870: 20 20 20 20 20 20 20 20 20 62 79 74 65 20 75 73           byte us
5880: 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
5890: 20 20 20 69 6e 74 20 69 54 65 72 6d 4f 66 66 73     int iTermOffs
58a0: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
58b0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
58c0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
58d0: 43 6f 6c 75 6d 6e 20 3d 20 69 43 6f 6c 75 6d 6e  Column = iColumn
58e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
58f0: 68 69 73 2e 6f 70 20 3d 20 6f 70 3b 0d 0a 20 20  his.op = op;..  
5900: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 75            this.u
5910: 73 61 62 6c 65 20 3d 20 75 73 61 62 6c 65 3b 0d  sable = usable;.
5920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
5930: 73 2e 69 54 65 72 6d 4f 66 66 73 65 74 20 3d 20  s.iTermOffset = 
5940: 69 54 65 72 6d 4f 66 66 73 65 74 3b 0d 0a 20 20  iTermOffset;..  
5950: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5960: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
5970: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
59c0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
59d0: 20 50 75 62 6c 69 63 20 46 69 65 6c 64 73 0d 0a   Public Fields..
59e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
59f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
5a00: 2f 2f 20 43 6f 6c 75 6d 6e 20 6f 6e 20 6c 65 66  // Column on lef
5a10: 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 63  t-hand side of c
5a20: 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20  onstraint...    
5a30: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5a40: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
5a50: 69 63 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 0d  ic int iColumn;.
5a60: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ab0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
5ac0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5ad0: 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 61 69      /// Constrai
5ae0: 6e 74 20 6f 70 65 72 61 74 6f 72 20 28 3c 73 65  nt operator (<se
5af0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
5b00: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 22  dexConstraintOp"
5b10: 20 2f 3e 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f   />)...        /
5b20: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5b30: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
5b40: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
5b50: 69 6e 74 4f 70 20 6f 70 3b 0d 0a 0d 0a 20 20 20  intOp op;....   
5b60: 20 20 20 20 20 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 2f  ////////////////
5ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5bb0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
5bc0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
5bd0: 2f 20 54 72 75 65 20 69 66 20 74 68 69 73 20 63  / True if this c
5be0: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 75 73 61  onstraint is usa
5bf0: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
5c00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
5c10: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 79 74        public byt
5c20: 65 20 75 73 61 62 6c 65 3b 0d 0a 0d 0a 20 20 20  e usable;....   
5c30: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5c80: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
5c90: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
5ca0: 2f 20 55 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  / Used internall
5cb0: 79 20 2d 20 3c 73 65 65 20 63 72 65 66 3d 22 49  y - <see cref="I
5cc0: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
5cd0: 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f  ule.BestIndex" /
5ce0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  >..        /// s
5cf0: 68 6f 75 6c 64 20 69 67 6e 6f 72 65 2e 0d 0a 20  hould ignore... 
5d00: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
5d10: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
5d20: 75 62 6c 69 63 20 69 6e 74 20 69 54 65 72 6d 4f  ublic int iTermO
5d30: 66 66 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20  ffset;..        
5d40: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
5d50: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
5d60: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
5d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5db0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
5dc0: 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 4f  ion SQLiteIndexO
5dd0: 72 64 65 72 42 79 20 48 65 6c 70 65 72 20 43 6c  rderBy Helper Cl
5de0: 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
5df0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5e00: 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65  This class repre
5e10: 73 65 6e 74 73 20 74 68 65 20 6e 61 74 69 76 65  sents the native
5e20: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f   sqlite3_index_o
5e30: 72 64 65 72 62 79 20 73 74 72 75 63 74 75 72 65  rderby structure
5e40: 20 66 72 6f 6d 0d 0a 20 20 20 20 2f 2f 2f 20 74   from..    /// t
5e50: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
5e60: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f  ibrary...    ///
5e70: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5e80: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
5e90: 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78  lass SQLiteIndex
5ea0: 4f 72 64 65 72 42 79 0d 0a 20 20 20 20 7b 0d 0a  OrderBy..    {..
5eb0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
5ec0: 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72 75  Internal Constru
5ed0: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f  ctors..        /
5ee0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
5ef0: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72        /// Constr
5f00: 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ucts an instance
5f10: 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20 75   of this class u
5f20: 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69  sing the specifi
5f30: 65 64 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  ed native..     
5f40: 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69     /// sqlite3_i
5f50: 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 73 74 72  ndex_orderby str
5f60: 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
5f70: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5f80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
5f90: 72 61 6d 20 6e 61 6d 65 3d 22 6f 72 64 65 72 42  ram name="orderB
5fa0: 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  y">..        ///
5fb0: 20 54 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   The native sqli
5fc0: 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62  te3_index_orderb
5fd0: 79 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 75  y structure to u
5fe0: 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
5ff0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
6000: 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69     internal SQLi
6010: 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 28 0d  teIndexOrderBy(.
6020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
6030: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6040: 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f  .sqlite3_index_o
6050: 72 64 65 72 62 79 20 6f 72 64 65 72 42 79 0d 0a  rderby orderBy..
6060: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
6070: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
6080: 73 28 6f 72 64 65 72 42 79 2e 69 43 6f 6c 75 6d  s(orderBy.iColum
6090: 6e 2c 20 6f 72 64 65 72 42 79 2e 64 65 73 63 29  n, orderBy.desc)
60a0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
60b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
60c0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
60d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
60e0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
60f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6130: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6140: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
6150: 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  ate Constructors
6160: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
6170: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
6180: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
6190: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
61a0: 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20  his class using 
61b0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
61c0: 65 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  eld..        ///
61d0: 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20 20   values...      
61e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
61f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
6200: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 43 6f 6c 75  aram name="iColu
6210: 6d 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  mn">..        //
6220: 2f 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 2e  / Column number.
6230: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
6240: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
6250: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6260: 22 64 65 73 63 22 3e 0d 0a 20 20 20 20 20 20 20  "desc">..       
6270: 20 2f 2f 2f 20 54 72 75 65 20 66 6f 72 20 44 45   /// True for DE
6280: 53 43 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 41  SC.  False for A
6290: 53 43 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  SC...        ///
62a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
62b0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
62c0: 65 49 6e 64 65 78 4f 72 64 65 72 42 79 28 0d 0a  eIndexOrderBy(..
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
62e0: 69 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20  iColumn,..      
62f0: 20 20 20 20 20 20 62 79 74 65 20 64 65 73 63 0d        byte desc.
6300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
6310: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6320: 20 20 20 20 20 20 20 74 68 69 73 2e 69 43 6f 6c         this.iCol
6330: 75 6d 6e 20 3d 20 69 43 6f 6c 75 6d 6e 3b 0d 0a  umn = iColumn;..
6340: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
6350: 2e 64 65 73 63 20 3d 20 64 65 73 63 3b 0d 0a 20  .desc = desc;.. 
6360: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6370: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6380: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
63d0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
63e0: 6e 20 50 75 62 6c 69 63 20 46 69 65 6c 64 73 0d  n Public Fields.
63f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
6400: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
6410: 2f 2f 2f 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65  /// Column numbe
6420: 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
6430: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6440: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 69      public int i
6450: 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Column;....     
6460: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
64b0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
64c0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
64d0: 54 72 75 65 20 66 6f 72 20 44 45 53 43 2e 20 20  True for DESC.  
64e0: 46 61 6c 73 65 20 66 6f 72 20 41 53 43 2e 0d 0a  False for ASC...
64f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
6500: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
6510: 70 75 62 6c 69 63 20 62 79 74 65 20 64 65 73 63  public byte desc
6520: 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
6530: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
6540: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6550: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
65a0: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
65b0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
65c0: 61 69 6e 74 55 73 61 67 65 20 48 65 6c 70 65 72  aintUsage Helper
65d0: 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20   Class..    /// 
65e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
65f0: 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 72 65  // This class re
6600: 70 72 65 73 65 6e 74 73 20 74 68 65 20 6e 61 74  presents the nat
6610: 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  ive sqlite3_inde
6620: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61  x_constraint_usa
6630: 67 65 0d 0a 20 20 20 20 2f 2f 2f 20 73 74 72 75  ge..    /// stru
6640: 63 74 75 72 65 20 66 72 6f 6d 20 74 68 65 20 53  cture from the S
6650: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
6660: 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ry...    /// </s
6670: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62  ummary>..    pub
6680: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
6690: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
66a0: 74 72 61 69 6e 74 55 73 61 67 65 0d 0a 20 20 20  traintUsage..   
66b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
66c0: 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e  ion Internal Con
66d0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
66e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
66f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
6700: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
6710: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
6720: 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65  ss using the spe
6730: 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20  cified native.. 
6740: 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
6750: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
6760: 69 6e 74 5f 75 73 61 67 65 20 73 74 72 75 63 74  int_usage struct
6770: 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
6780: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6790: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
67a0: 20 6e 61 6d 65 3d 22 63 6f 6e 73 74 72 61 69 6e   name="constrain
67b0: 74 55 73 61 67 65 22 3e 0d 0a 20 20 20 20 20 20  tUsage">..      
67c0: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
67d0: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63   sqlite3_index_c
67e0: 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20  onstraint_usage 
67f0: 73 74 72 75 63 74 75 72 65 20 74 6f 20 75 73 65  structure to use
6800: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
6810: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
6820: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
6830: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
6840: 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  sage(..         
6850: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
6860: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
6870: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f  ndex_constraint_
6880: 75 73 61 67 65 20 63 6f 6e 73 74 72 61 69 6e 74  usage constraint
6890: 55 73 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  Usage..         
68a0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
68b0: 20 20 3a 20 74 68 69 73 28 63 6f 6e 73 74 72 61    : this(constra
68c0: 69 6e 74 55 73 61 67 65 2e 61 72 67 76 49 6e 64  intUsage.argvInd
68d0: 65 78 2c 20 63 6f 6e 73 74 72 61 69 6e 74 55 73  ex, constraintUs
68e0: 61 67 65 2e 6f 6d 69 74 29 0d 0a 20 20 20 20 20  age.omit)..     
68f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6900: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
6910: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
6920: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
6930: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
6940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
6990: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
69a0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
69b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
69c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
69d0: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
69e0: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
69f0: 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65  ss using the spe
6a00: 63 69 66 69 65 64 20 66 69 65 6c 64 0d 0a 20 20  cified field..  
6a10: 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73        /// values
6a20: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
6a30: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
6a40: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6a50: 6d 65 3d 22 61 72 67 76 49 6e 64 65 78 22 3e 0d  me="argvIndex">.
6a60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20  .        /// If 
6a70: 67 72 65 61 74 65 72 20 74 68 61 6e 20 30 2c 20  greater than 0, 
6a80: 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 70 61  constraint is pa
6a90: 72 74 20 6f 66 20 61 72 67 76 20 74 6f 20 78 46  rt of argv to xF
6aa0: 69 6c 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  ilter...        
6ab0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
6ac0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
6ad0: 20 6e 61 6d 65 3d 22 6f 6d 69 74 22 3e 0d 0a 20   name="omit">.. 
6ae0: 20 20 20 20 20 20 20 2f 2f 2f 20 44 6f 20 6e 6f         /// Do no
6af0: 74 20 63 6f 64 65 20 61 20 74 65 73 74 20 66 6f  t code a test fo
6b00: 72 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  r this constrain
6b10: 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
6b20: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
6b30: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
6b40: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
6b50: 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  sage(..         
6b60: 20 20 20 69 6e 74 20 61 72 67 76 49 6e 64 65 78     int argvIndex
6b70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
6b80: 79 74 65 20 6f 6d 69 74 0d 0a 20 20 20 20 20 20  yte omit..      
6b90: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
6ba0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6bb0: 74 68 69 73 2e 61 72 67 76 49 6e 64 65 78 20 3d  this.argvIndex =
6bc0: 20 61 72 67 76 49 6e 64 65 78 3b 0d 0a 20 20 20   argvIndex;..   
6bd0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 6d           this.om
6be0: 69 74 20 3d 20 6f 6d 69 74 3b 0d 0a 20 20 20 20  it = omit;..    
6bf0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
6c00: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
6c10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6c60: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6c70: 50 75 62 6c 69 63 20 46 69 65 6c 64 73 0d 0a 20  Public Fields.. 
6c80: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
6c90: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
6ca0: 2f 20 49 66 20 67 72 65 61 74 65 72 20 74 68 61  / If greater tha
6cb0: 6e 20 30 2c 20 63 6f 6e 73 74 72 61 69 6e 74 20  n 0, constraint 
6cc0: 69 73 20 70 61 72 74 20 6f 66 20 61 72 67 76 20  is part of argv 
6cd0: 74 6f 20 78 46 69 6c 74 65 72 2e 0d 0a 20 20 20  to xFilter...   
6ce0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
6cf0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
6d00: 6c 69 63 20 69 6e 74 20 61 72 67 76 49 6e 64 65  lic int argvInde
6d10: 78 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  x;....        //
6d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d60: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6d70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6d80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 6f 20 6e          /// Do n
6d90: 6f 74 20 63 6f 64 65 20 61 20 74 65 73 74 20 66  ot code a test f
6da0: 6f 72 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  or this constrai
6db0: 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
6dc0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
6dd0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 79 74 65       public byte
6de0: 20 6f 6d 69 74 3b 0d 0a 20 20 20 20 20 20 20 20   omit;..        
6df0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
6e00: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
6e10: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
6e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e60: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
6e70: 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 49  ion SQLiteIndexI
6e80: 6e 70 75 74 73 20 48 65 6c 70 65 72 20 43 6c 61  nputs Helper Cla
6e90: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
6ea0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
6eb0: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
6ec0: 65 6e 74 73 20 74 68 65 20 76 61 72 69 6f 75 73  ents the various
6ed0: 20 69 6e 70 75 74 73 20 70 72 6f 76 69 64 65 64   inputs provided
6ee0: 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63   by the SQLite c
6ef0: 6f 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62  ore..    /// lib
6f00: 72 61 72 79 20 74 6f 20 74 68 65 20 3c 73 65 65  rary to the <see
6f10: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
6f20: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74  nagedModule.Best
6f30: 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
6f40: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
6f50: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
6f60: 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  c sealed class S
6f70: 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73  QLiteIndexInputs
6f80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6f90: 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61   #region Interna
6fa0: 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  l Constructors..
6fb0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
6fc0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
6fd0: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e  // Constructs an
6fe0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
6ff0: 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20  s class...      
7000: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7010: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
7020: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e 73  aram name="nCons
7030: 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20  traint">..      
7040: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
7050: 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53   of <see cref="S
7060: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
7070: 61 69 6e 74 22 20 2f 3e 20 69 6e 73 74 61 6e 63  aint" /> instanc
7080: 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  es to..        /
7090: 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20  // pre-allocate 
70a0: 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20  space for...    
70b0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
70c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
70d0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 4f 72 64 65  aram name="nOrde
70e0: 72 42 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rBy">..        /
70f0: 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
7100: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
7110: 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 22 20  teIndexOrderBy" 
7120: 2f 3e 20 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d  /> instances to.
7130: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 65  .        /// pre
7140: 2d 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20  -allocate space 
7150: 66 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  for...        //
7160: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
7170: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c      internal SQL
7180: 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73 28 69  iteIndexInputs(i
7190: 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 2c 20  nt nConstraint, 
71a0: 69 6e 74 20 6e 4f 72 64 65 72 42 79 29 0d 0a 20  int nOrderBy).. 
71b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
71c0: 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
71d0: 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49 6e  s = new SQLiteIn
71e0: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 5b 6e 43  dexConstraint[nC
71f0: 6f 6e 73 74 72 61 69 6e 74 5d 3b 0d 0a 20 20 20  onstraint];..   
7200: 20 20 20 20 20 20 20 20 20 6f 72 64 65 72 42 79           orderBy
7210: 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49 6e  s = new SQLiteIn
7220: 64 65 78 4f 72 64 65 72 42 79 5b 6e 4f 72 64 65  dexOrderBy[nOrde
7230: 72 42 79 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rBy];..        }
7240: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
7250: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
72b0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
72c0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
72d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
72e0: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
72f0: 69 6e 74 5b 5d 20 63 6f 6e 73 74 72 61 69 6e 74  int[] constraint
7300: 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s;..        /// 
7310: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
7320: 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20     /// An array 
7330: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
7340: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
7350: 69 6e 74 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  int" /> object i
7360: 6e 73 74 61 6e 63 65 73 2c 0d 0a 20 20 20 20 20  nstances,..     
7370: 20 20 20 2f 2f 2f 20 65 61 63 68 20 63 6f 6e 74     /// each cont
7380: 61 69 6e 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  aining informati
7390: 6f 6e 20 73 75 70 70 6c 69 65 64 20 62 79 20 74  on supplied by t
73a0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
73b0: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
73c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
73d0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
73e0: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
73f0: 72 61 69 6e 74 5b 5d 20 43 6f 6e 73 74 72 61 69  raint[] Constrai
7400: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nts..        {..
7410: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
7420: 7b 20 72 65 74 75 72 6e 20 63 6f 6e 73 74 72 61  { return constra
7430: 69 6e 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ints; }..       
7440: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
7450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7490: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
74a0: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 49   private SQLiteI
74b0: 6e 64 65 78 4f 72 64 65 72 42 79 5b 5d 20 6f 72  ndexOrderBy[] or
74c0: 64 65 72 42 79 73 3b 0d 0a 20 20 20 20 20 20 20  derBys;..       
74d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
74e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20 61          /// An a
74f0: 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72 65  rray of <see cre
7500: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 72  f="SQLiteIndexOr
7510: 64 65 72 42 79 22 20 2f 3e 20 6f 62 6a 65 63 74  derBy" /> object
7520: 20 69 6e 73 74 61 6e 63 65 73 2c 0d 0a 20 20 20   instances,..   
7530: 20 20 20 20 20 2f 2f 2f 20 65 61 63 68 20 63 6f       /// each co
7540: 6e 74 61 69 6e 69 6e 67 20 69 6e 66 6f 72 6d 61  ntaining informa
7550: 74 69 6f 6e 20 73 75 70 70 6c 69 65 64 20 62 79  tion supplied by
7560: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
7570: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
7580: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7590: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
75a0: 63 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  c SQLiteIndexOrd
75b0: 65 72 42 79 5b 5d 20 4f 72 64 65 72 42 79 73 0d  erBy[] OrderBys.
75c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
75d0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
75e0: 74 75 72 6e 20 6f 72 64 65 72 42 79 73 3b 20 7d  turn orderBys; }
75f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7600: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
7610: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
7620: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
7630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
7680: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49   #region SQLiteI
7690: 6e 64 65 78 4f 75 74 70 75 74 73 20 48 65 6c 70  ndexOutputs Help
76a0: 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  er Class..    //
76b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
76c0: 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
76d0: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 76  represents the v
76e0: 61 72 69 6f 75 73 20 6f 75 74 70 75 74 73 20 70  arious outputs p
76f0: 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 20 53  rovided to the S
7700: 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20  QLite core..    
7710: 2f 2f 2f 20 6c 69 62 72 61 72 79 20 62 79 20 74  /// library by t
7720: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
7730: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
7740: 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e  le.BestIndex" />
7750: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f   method...    //
7760: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
7770: 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20    public sealed 
7780: 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65  class SQLiteInde
7790: 78 4f 75 74 70 75 74 73 0d 0a 20 20 20 20 7b 0d  xOutputs..    {.
77a0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
77b0: 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72   Internal Constr
77c0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
77d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
77e0: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
77f0: 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
7800: 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e  e of this class.
7810: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
7820: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
7830: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7840: 65 3d 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22 3e  e="nConstraint">
7850: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
7860: 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65  e number of <see
7870: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
7880: 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  exConstraintUsag
7890: 65 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 73 0d  e" /> instances.
78a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
78b0: 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20 73 70 61  pre-allocate spa
78c0: 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20 20 20 20  ce for...       
78d0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
78e0: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
78f0: 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75  SQLiteIndexOutpu
7900: 74 73 28 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69  ts(int nConstrai
7910: 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nt)..        {..
7920: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
7930: 74 72 61 69 6e 74 55 73 61 67 65 73 20 3d 20 6e  traintUsages = n
7940: 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  ew SQLiteIndexCo
7950: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 6e 43  nstraintUsage[nC
7960: 6f 6e 73 74 72 61 69 6e 74 5d 3b 0d 0a 20 20 20  onstraint];..   
7970: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7980: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
7990: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
79a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
79e0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
79f0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
7a00: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
7a10: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 43  ate SQLiteIndexC
7a20: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d  onstraintUsage[]
7a30: 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65   constraintUsage
7a40: 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s;..        /// 
7a50: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
7a60: 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20     /// An array 
7a70: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
7a80: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
7a90: 69 6e 74 55 73 61 67 65 22 20 2f 3e 20 6f 62 6a  intUsage" /> obj
7aa0: 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ect..        ///
7ab0: 20 69 6e 73 74 61 6e 63 65 73 2c 20 65 61 63 68   instances, each
7ac0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6e 66 6f   containing info
7ad0: 72 6d 61 74 69 6f 6e 20 74 6f 20 62 65 20 73 75  rmation to be su
7ae0: 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 53 51  pplied to the SQ
7af0: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  Lite..        //
7b00: 2f 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  / core library..
7b10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
7b20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7b30: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e   public SQLiteIn
7b40: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  dexConstraintUsa
7b50: 67 65 5b 5d 20 43 6f 6e 73 74 72 61 69 6e 74 55  ge[] ConstraintU
7b60: 73 61 67 65 73 0d 0a 20 20 20 20 20 20 20 20 7b  sages..        {
7b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
7b80: 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 73 74  t { return const
7b90: 72 61 69 6e 74 55 73 61 67 65 73 3b 20 7d 0d 0a  raintUsages; }..
7ba0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7bb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7c00: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7c10: 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b  int indexNumber;
7c20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
7c30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7c40: 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65 64   /// Number used
7c50: 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
7c60: 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
7c70: 6e 64 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75  ndex.  This valu
7c80: 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20  e will..        
7c90: 2f 2f 2f 20 6c 61 74 65 72 20 62 65 20 70 72 6f  /// later be pro
7ca0: 76 69 64 65 64 20 74 6f 20 74 68 65 20 3c 73 65  vided to the <se
7cb0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
7cc0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c  anagedModule.Fil
7cd0: 74 65 72 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20  ter" />..       
7ce0: 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   /// method...  
7cf0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
7d00: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
7d10: 62 6c 69 63 20 69 6e 74 20 49 6e 64 65 78 4e 75  blic int IndexNu
7d20: 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mber..        {.
7d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
7d40: 20 7b 20 72 65 74 75 72 6e 20 69 6e 64 65 78 4e   { return indexN
7d50: 75 6d 62 65 72 3b 20 7d 0d 0a 20 20 20 20 20 20  umber; }..      
7d60: 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 64 65        set { inde
7d70: 78 4e 75 6d 62 65 72 20 3d 20 76 61 6c 75 65 3b  xNumber = value;
7d80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7d90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
7da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
7df0: 61 74 65 20 73 74 72 69 6e 67 20 69 6e 64 65 78  ate string index
7e00: 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20  String;..       
7e10: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
7e20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 74 72 69          /// Stri
7e30: 6e 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  ng used to help 
7e40: 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c  identify the sel
7e50: 65 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54 68  ected index.  Th
7e60: 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20  is value will.. 
7e70: 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74 65 72         /// later
7e80: 20 62 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20   be provided to 
7e90: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
7ea0: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
7eb0: 75 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e 0d 0a  ule.Filter" />..
7ec0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68          /// meth
7ed0: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
7ee0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
7ef0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
7f00: 6e 67 20 49 6e 64 65 78 53 74 72 69 6e 67 0d 0a  ng IndexString..
7f10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7f20: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
7f30: 75 72 6e 20 69 6e 64 65 78 53 74 72 69 6e 67 3b  urn indexString;
7f40: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7f50: 73 65 74 20 7b 20 69 6e 64 65 78 53 74 72 69 6e  set { indexStrin
7f60: 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  g = value; }..  
7f70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7f80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7fd0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 69 6e        private in
7fe0: 74 20 6e 65 65 64 54 6f 46 72 65 65 49 6e 64 65  t needToFreeInde
7ff0: 78 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20  xString;..      
8000: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8010: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
8020: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 69 6e 64  -zero if the ind
8030: 65 78 20 73 74 72 69 6e 67 20 6d 75 73 74 20 62  ex string must b
8040: 65 20 66 72 65 65 64 20 62 79 20 74 68 65 20 53  e freed by the S
8050: 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20  QLite core..    
8060: 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 2e      /// library.
8070: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
8080: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8090: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 4e 65 65    public int Nee
80a0: 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69  dToFreeIndexStri
80b0: 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ng..        {.. 
80c0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
80d0: 20 72 65 74 75 72 6e 20 6e 65 65 64 54 6f 46 72   return needToFr
80e0: 65 65 49 6e 64 65 78 53 74 72 69 6e 67 3b 20 7d  eeIndexString; }
80f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
8100: 74 20 7b 20 6e 65 65 64 54 6f 46 72 65 65 49 6e  t { needToFreeIn
8110: 64 65 78 53 74 72 69 6e 67 20 3d 20 76 61 6c 75  dexString = valu
8120: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e; }..        }.
8130: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
8140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8180: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
8190: 69 76 61 74 65 20 69 6e 74 20 6f 72 64 65 72 42  ivate int orderB
81a0: 79 43 6f 6e 73 75 6d 65 64 3b 0d 0a 20 20 20 20  yConsumed;..    
81b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
81c0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
81d0: 72 75 65 20 69 66 20 6f 75 74 70 75 74 20 69 73  rue if output is
81e0: 20 61 6c 72 65 61 64 79 20 6f 72 64 65 72 65 64   already ordered
81f0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
8200: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
8210: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 4f 72     public int Or
8220: 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 0d 0a 20  derByConsumed.. 
8230: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8240: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
8250: 72 6e 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d  rn orderByConsum
8260: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ed; }..         
8270: 20 20 20 73 65 74 20 7b 20 6f 72 64 65 72 42 79     set { orderBy
8280: 43 6f 6e 73 75 6d 65 64 20 3d 20 76 61 6c 75 65  Consumed = value
8290: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
82a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
82b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
8300: 76 61 74 65 20 64 6f 75 62 6c 65 20 65 73 74 69  vate double esti
8310: 6d 61 74 65 64 43 6f 73 74 3b 0d 0a 20 20 20 20  matedCost;..    
8320: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8330: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 45  >..        /// E
8340: 73 74 69 6d 61 74 65 64 20 63 6f 73 74 20 6f 66  stimated cost of
8350: 20 75 73 69 6e 67 20 74 68 69 73 20 69 6e 64 65   using this inde
8360: 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  x...        /// 
8370: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8380: 20 20 20 20 70 75 62 6c 69 63 20 64 6f 75 62 6c      public doubl
8390: 65 20 45 73 74 69 6d 61 74 65 64 43 6f 73 74 0d  e EstimatedCost.
83a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
83b0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
83c0: 74 75 72 6e 20 65 73 74 69 6d 61 74 65 64 43 6f  turn estimatedCo
83d0: 73 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  st; }..         
83e0: 20 20 20 73 65 74 20 7b 20 65 73 74 69 6d 61 74     set { estimat
83f0: 65 64 43 6f 73 74 20 3d 20 76 61 6c 75 65 3b 20  edCost = value; 
8400: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
8410: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
8420: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
8430: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
8440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8490: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
84a0: 49 6e 64 65 78 20 48 65 6c 70 65 72 20 43 6c 61  Index Helper Cla
84b0: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
84c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
84d0: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
84e0: 65 6e 74 73 20 74 68 65 20 76 61 72 69 6f 75 73  ents the various
84f0: 20 69 6e 70 75 74 73 20 61 6e 64 20 6f 75 74 70   inputs and outp
8500: 75 74 73 20 75 73 65 64 20 77 69 74 68 20 74 68  uts used with th
8510: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  e..    /// <see 
8520: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
8530: 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49  agedModule.BestI
8540: 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ndex" /> method.
8550: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
8560: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
8570: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51   sealed class SQ
8580: 4c 69 74 65 49 6e 64 65 78 0d 0a 20 20 20 20 7b  LiteIndex..    {
8590: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
85a0: 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74  n Internal Const
85b0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
85c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
85d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
85e0: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
85f0: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
8600: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
8610: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
8620: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
8630: 6d 65 3d 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22  me="nConstraint"
8640: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
8650: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65  he number of <se
8660: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
8670: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f  dexConstraint" /
8680: 3e 20 28 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  > (and..        
8690: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
86a0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
86b0: 61 69 6e 74 55 73 61 67 65 22 20 2f 3e 29 20 69  aintUsage" />) i
86c0: 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20  nstances to..   
86d0: 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c       /// pre-all
86e0: 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e  ocate space for.
86f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
8700: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
8710: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
8720: 22 6e 4f 72 64 65 72 42 79 22 3e 0d 0a 20 20 20  "nOrderBy">..   
8730: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d       /// The num
8740: 62 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66  ber of <see cref
8750: 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  ="SQLiteIndexOrd
8760: 65 72 42 79 22 20 2f 3e 20 69 6e 73 74 61 6e 63  erBy" /> instanc
8770: 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  es to..        /
8780: 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20  // pre-allocate 
8790: 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20  space for...    
87a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
87b0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
87c0: 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 28 0d  al SQLiteIndex(.
87d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
87e0: 20 6e 43 6f 6e 73 74 72 61 69 6e 74 2c 0d 0a 20   nConstraint,.. 
87f0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
8800: 4f 72 64 65 72 42 79 0d 0a 20 20 20 20 20 20 20  OrderBy..       
8810: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
8820: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
8830: 6e 70 75 74 73 20 3d 20 6e 65 77 20 53 51 4c 69  nputs = new SQLi
8840: 74 65 49 6e 64 65 78 49 6e 70 75 74 73 28 6e 43  teIndexInputs(nC
8850: 6f 6e 73 74 72 61 69 6e 74 2c 20 6e 4f 72 64 65  onstraint, nOrde
8860: 72 42 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rBy);..         
8870: 20 20 20 6f 75 74 70 75 74 73 20 3d 20 6e 65 77     outputs = new
8880: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70   SQLiteIndexOutp
8890: 75 74 73 28 6e 43 6f 6e 73 74 72 61 69 6e 74 29  uts(nConstraint)
88a0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
88b0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
88c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
88d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
8920: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
8930: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
8940: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
8950: 49 6e 64 65 78 49 6e 70 75 74 73 20 69 6e 70 75  IndexInputs inpu
8960: 74 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ts;..        ///
8970: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8980: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
8990: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
89a0: 65 78 49 6e 70 75 74 73 22 20 2f 3e 20 6f 62 6a  exInputs" /> obj
89b0: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e  ect instance con
89c0: 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20  taining..       
89d0: 20 2f 2f 2f 20 74 68 65 20 69 6e 70 75 74 73 20   /// the inputs 
89e0: 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
89f0: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
8a00: 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78  Module.BestIndex
8a10: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  " />..        //
8a20: 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  / method...     
8a30: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8a40: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
8a50: 63 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70  c SQLiteIndexInp
8a60: 75 74 73 20 49 6e 70 75 74 73 0d 0a 20 20 20 20  uts Inputs..    
8a70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8a80: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
8a90: 69 6e 70 75 74 73 3b 20 7d 0d 0a 20 20 20 20 20  inputs; }..     
8aa0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8af0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8b00: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
8b10: 65 49 6e 64 65 78 4f 75 74 70 75 74 73 20 6f 75  eIndexOutputs ou
8b20: 74 70 75 74 73 3b 0d 0a 20 20 20 20 20 20 20 20  tputs;..        
8b30: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8b40: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
8b50: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
8b60: 49 6e 64 65 78 4f 75 74 70 75 74 73 22 20 2f 3e  IndexOutputs" />
8b70: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
8b80: 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
8b90: 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6f 75 74       /// the out
8ba0: 70 75 74 73 20 66 72 6f 6d 20 74 68 65 20 3c 73  puts from the <s
8bb0: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
8bc0: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65  ManagedModule.Be
8bd0: 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20  stIndex" />..   
8be0: 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e       /// method.
8bf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
8c00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8c10: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49    public SQLiteI
8c20: 6e 64 65 78 4f 75 74 70 75 74 73 20 4f 75 74 70  ndexOutputs Outp
8c30: 75 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  uts..        {..
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
8c50: 7b 20 72 65 74 75 72 6e 20 6f 75 74 70 75 74 73  { return outputs
8c60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
8c70: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
8c80: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
8c90: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
8ca0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8cf0: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
8d00: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 42  teVirtualTable B
8d10: 61 73 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f  ase Class..    /
8d20: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
8d30: 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
8d40: 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 6d 61   represents a ma
8d50: 6e 61 67 65 64 20 76 69 72 74 75 61 6c 20 74 61  naged virtual ta
8d60: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
8d70: 6f 6e 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 20  on.  It is..    
8d80: 2f 2f 2f 20 6e 6f 74 20 73 65 61 6c 65 64 20 61  /// not sealed a
8d90: 6e 64 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  nd should be use
8da0: 64 20 61 73 20 74 68 65 20 62 61 73 65 20 63 6c  d as the base cl
8db0: 61 73 73 20 66 6f 72 20 61 6e 79 20 75 73 65 72  ass for any user
8dc0: 2d 64 65 66 69 6e 65 64 0d 0a 20 20 20 20 2f 2f  -defined..    //
8dd0: 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  / virtual tables
8de0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e 20   implemented in 
8df0: 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20  managed code... 
8e00: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8e10: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 63 6c  >..    public cl
8e20: 61 73 73 20 53 51 4c 69 74 65 56 69 72 74 75 61  ass SQLiteVirtua
8e30: 6c 54 61 62 6c 65 20 3a 0d 0a 20 20 20 20 20 20  lTable :..      
8e40: 20 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74        ISQLiteNat
8e50: 69 76 65 48 61 6e 64 6c 65 2c 20 49 44 69 73 70  iveHandle, IDisp
8e60: 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45  osable /* NOT SE
8e70: 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a  ALED */..    {..
8e80: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
8e90: 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74  Private Constant
8ea0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
8eb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8ec0: 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20    /// The index 
8ed0: 77 69 74 68 69 6e 20 74 68 65 20 61 72 72 61 79  within the array
8ee0: 20 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76   of strings prov
8ef0: 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20  ided to the..   
8f00: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
8f10: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
8f20: 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22  edModule.Create"
8f30: 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20   /> and..       
8f40: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
8f50: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
8f60: 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e  dule.Connect" />
8f70: 20 6d 65 74 68 6f 64 73 20 63 6f 6e 74 61 69 6e   methods contain
8f80: 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
8f90: 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66 20 74 68 65   /// name of the
8fa0: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
8fb0: 74 69 6e 67 20 74 68 69 73 20 76 69 72 74 75 61  ting this virtua
8fc0: 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
8fd0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8fe0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
8ff0: 65 20 63 6f 6e 73 74 20 69 6e 74 20 4d 6f 64 75  e const int Modu
9000: 6c 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 30 3b  leNameIndex = 0;
9010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
9020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9060: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
9070: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9080: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
9090: 64 65 78 20 77 69 74 68 69 6e 20 74 68 65 20 61  dex within the a
90a0: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
90b0: 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d  provided to the.
90c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
90d0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
90e0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65  anagedModule.Cre
90f0: 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20  ate" /> and..   
9100: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
9110: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
9120: 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74  edModule.Connect
9130: 22 20 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f 6e  " /> methods con
9140: 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20  taining the..   
9150: 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66       /// name of
9160: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
9170: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 76 69  ntaining this vi
9180: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
9190: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
91a0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
91b0: 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20  ivate const int 
91c0: 44 61 74 61 62 61 73 65 4e 61 6d 65 49 6e 64 65  DatabaseNameInde
91d0: 78 20 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20  x = 1;....      
91e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
91f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9230: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
9240: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
9250: 54 68 65 20 69 6e 64 65 78 20 77 69 74 68 69 6e  The index within
9260: 20 74 68 65 20 61 72 72 61 79 20 6f 66 20 73 74   the array of st
9270: 72 69 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74  rings provided t
9280: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
9290: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
92a0: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
92b0: 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e  le.Create" /> an
92c0: 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  d..        /// <
92d0: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
92e0: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43  eManagedModule.C
92f0: 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
9300: 64 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ds containing th
9310: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
9320: 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  ame of the virtu
9330: 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
9340: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9350: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
9360: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 54 61 62  te const int Tab
9370: 6c 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 32 3b  leNameIndex = 2;
9380: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
9390: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
93a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
93f0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
9400: 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
9410: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
9420: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
9430: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e  // Constructs an
9440: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
9450: 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20  s class...      
9460: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9470: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
9480: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d  aram name="argum
9490: 65 6e 74 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  ents">..        
94a0: 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c  /// The original
94b0: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
94c0: 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68  s provided to th
94d0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
94e0: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
94f0: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43  eManagedModule.C
9500: 72 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20  reate" /> and.. 
9510: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
9520: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
9530: 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65  agedModule.Conne
9540: 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73 2e 0d  ct" /> methods..
9550: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
9560: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70  aram>..        p
9570: 75 62 6c 69 63 20 53 51 4c 69 74 65 56 69 72 74  ublic SQLiteVirt
9580: 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20  ualTable(..     
9590: 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
95a0: 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20  arguments..     
95b0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
95c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
95d0: 20 74 68 69 73 2e 61 72 67 75 6d 65 6e 74 73 20   this.arguments 
95e0: 3d 20 61 72 67 75 6d 65 6e 74 73 3b 0d 0a 20 20  = arguments;..  
95f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9600: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
9610: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9660: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
9670: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
9680: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ies..        pri
9690: 76 61 74 65 20 73 74 72 69 6e 67 5b 5d 20 61 72  vate string[] ar
96a0: 67 75 6d 65 6e 74 73 3b 0d 0a 20 20 20 20 20 20  guments;..      
96b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
96c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
96d0: 20 6f 72 69 67 69 6e 61 6c 20 61 72 72 61 79 20   original array 
96e0: 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69  of strings provi
96f0: 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ded to the..    
9700: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
9710: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
9720: 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20  dModule.Create" 
9730: 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  /> and..        
9740: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
9750: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
9760: 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  ule.Connect" /> 
9770: 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20  methods...      
9780: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9790: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
97a0: 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 5b   virtual string[
97b0: 5d 20 41 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20  ] Arguments..   
97c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
97d0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
97e0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
97f0: 6e 20 61 72 67 75 6d 65 6e 74 73 3b 20 7d 0d 0a  n arguments; }..
9800: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9810: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9860: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
9870: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
9880: 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
9890: 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
98a0: 65 6e 74 69 6e 67 20 74 68 69 73 20 76 69 72 74  enting this virt
98b0: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
98c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
98d0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
98e0: 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e  ic virtual strin
98f0: 67 20 4d 6f 64 75 6c 65 4e 61 6d 65 0d 0a 20 20  g ModuleName..  
9900: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9910: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
9920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9930: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
9940: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
9950: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9960: 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20  ing[] arguments 
9970: 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a  = Arguments;....
9980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9990: 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21  if ((arguments !
99a0: 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
99b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99c0: 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74  (arguments.Lengt
99d0: 68 20 3e 20 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e  h > ModuleNameIn
99e0: 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20  dex))..         
99f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9a10: 74 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 4d  turn arguments[M
9a20: 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 3b  oduleNameIndex];
9a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9a40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9a50: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
9a60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9aa0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
9ab0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
9ac0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9b10: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
9b20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
9b30: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
9b40: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
9b50: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 76 69  ntaining this vi
9b60: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
9b70: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
9b80: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
9b90: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72  blic virtual str
9ba0: 69 6e 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65  ing DatabaseName
9bb0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
9bc0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
9bd0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9bf0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9c10: 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
9c20: 6e 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b  nts = Arguments;
9c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c40: 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e      if ((argumen
9c50: 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ts != null) &&..
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c70: 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c      (arguments.L
9c80: 65 6e 67 74 68 20 3e 20 44 61 74 61 62 61 73 65  ength > Database
9c90: 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20  NameIndex))..   
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cc0: 20 20 20 20 72 65 74 75 72 6e 20 61 72 67 75 6d      return argum
9cd0: 65 6e 74 73 5b 44 61 74 61 62 61 73 65 4e 61 6d  ents[DatabaseNam
9ce0: 65 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  eIndex];..      
9cf0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
9d10: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
9d20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9d30: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9d40: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
9d50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9d60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9d70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9dd0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
9de0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
9df0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72   name of the vir
9e00: 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
9e10: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
9e20: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
9e30: 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69  lic virtual stri
9e40: 6e 67 20 54 61 62 6c 65 4e 61 6d 65 0d 0a 20 20  ng TableName..  
9e50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9e60: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
9e70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9e80: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
9e90: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9eb0: 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20  ing[] arguments 
9ec0: 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a  = Arguments;....
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ee0: 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21  if ((arguments !
9ef0: 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
9f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f10: 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74  (arguments.Lengt
9f20: 68 20 3e 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64  h > TableNameInd
9f30: 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ex))..          
9f40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9f60: 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 54 61  urn arguments[Ta
9f70: 62 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a  bleNameIndex];..
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f90: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
9fa0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
9fb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fd0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
9fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a000: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a010: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
a020: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
a030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a070: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
a080: 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
a090: 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
a0a0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
a0b0: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
a0c0: 74 6f 20 72 65 63 6f 72 64 20 74 68 65 20 72 65  to record the re
a0d0: 6e 61 6d 69 6e 67 20 6f 66 20 74 68 65 20 76 69  naming of the vi
a0e0: 72 74 75 61 6c 20 74 61 62 6c 65 20 61 73 73 6f  rtual table asso
a0f0: 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
a100: 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 6f 62  /// with this ob
a110: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
a120: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
a130: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
a140: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
a150: 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20  "name">..       
a160: 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 6e 61 6d   /// The new nam
a170: 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
a180: 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
a190: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
a1a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
a1b0: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
a1c0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e  // Non-zero upon
a1d0: 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20   success...     
a1e0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
a1f0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
a200: 63 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 52  c virtual bool R
a210: 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  ename(..        
a220: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d      string name.
a230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
a240: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a250: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
a260: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
a270: 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67 75         if ((argu
a280: 6d 65 6e 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26  ments != null) &
a290: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
a2a0: 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65     (arguments.Le
a2b0: 6e 67 74 68 20 3e 20 54 61 62 6c 65 4e 61 6d 65  ngth > TableName
a2c0: 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20  Index))..       
a2d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a2e0: 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
a2f0: 73 5b 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78  s[TableNameIndex
a300: 5d 20 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20  ] = name;..     
a310: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a320: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
a330: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a340: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
a350: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  se;..        }..
a360: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a370: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
a380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a3d0: 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65   #region ISQLite
a3e0: 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 4d 65 6d  NativeHandle Mem
a3f0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72  bers..        pr
a400: 69 76 61 74 65 20 49 6e 74 50 74 72 20 6e 61 74  ivate IntPtr nat
a410: 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20  iveHandle;..    
a420: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
a430: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52  >..        /// R
a440: 65 74 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72  eturns the under
a450: 6c 79 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74  lying SQLite nat
a460: 69 76 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63  ive handle assoc
a470: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d  iated with this.
a480: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a  .        /// obj
a490: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
a4a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
a4b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
a4c0: 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 49 6e  ublic virtual In
a4d0: 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c  tPtr NativeHandl
a4e0: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
a4f0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
a500: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a510: 20 72 65 74 75 72 6e 20 6e 61 74 69 76 65 48 61   return nativeHa
a520: 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ndle; }..       
a530: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65       internal se
a540: 74 20 7b 20 6e 61 74 69 76 65 48 61 6e 64 6c 65  t { nativeHandle
a550: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
a560: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a570: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a580: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a5d0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
a5e0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d   IDisposable Mem
a5f0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  bers..        //
a600: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
a610: 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65       /// Dispose
a620: 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  s of this object
a630: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
a640: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
a650: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
a660: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
a670: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
a680: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
a690: 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
a6a0: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
a6b0: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
a6c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
a6d0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
a6e0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
a740: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
a750: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
a760: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ers..        pri
a770: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
a780: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed;..        ///
a790: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
a7a0: 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61      /// Throws a
a7b0: 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73  n <see cref="Sys
a7c0: 74 65 6d 2e 4f 62 6a 65 63 74 44 69 73 70 6f 73  tem.ObjectDispos
a7d0: 65 64 45 78 63 65 70 74 69 6f 6e 22 2f 3e 20 69  edException"/> i
a7e0: 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  f this..        
a7f0: 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  /// object insta
a800: 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  nce has been dis
a810: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
a820: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
a830: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
a840: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
a850: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
a860: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
a870: 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53   THROW_ON_DISPOS
a880: 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ED..            
a890: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
a8a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
a8c0: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
a8d0: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
a8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8f0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
a900: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 29  iteVirtualTable)
a910: 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  .Name);..       
a920: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
a930: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a940: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a990: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
a9a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
a9b0: 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20 74  // Disposes of t
a9c0: 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
a9d0: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
a9e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
a9f0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
aa00: 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67   name="disposing
aa10: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
aa20: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73  Non-zero if this
aa30: 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67   method is being
aa40: 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   called from the
aa50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
aa60: 65 65 20 63 72 65 66 3d 22 44 69 73 70 6f 73 65  ee cref="Dispose
aa70: 28 29 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 20 20  ()" /> method.  
aa80: 5a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74  Zero if this met
aa90: 68 6f 64 20 69 73 20 62 65 69 6e 67 20 63 61 6c  hod is being cal
aaa0: 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  led..        ///
aab0: 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 69   from the finali
aac0: 7a 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  zer...        //
aad0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
aae0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
aaf0: 72 74 75 61 6c 20 76 6f 69 64 20 44 69 73 70 6f  rtual void Dispo
ab00: 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
ab10: 67 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  g)..        {.. 
ab20: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
ab30: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
ab40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ab50: 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28            //if (
ab60: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d              //{.
ab80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab90: 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
aba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
abd0: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
abe0: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
abf0: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
ac00: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
ac10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac30: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
ac40: 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20       //}....    
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 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 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ac90: 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75      // release u
aca0: 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63  nmanaged resourc
acb0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
acc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
acd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ace0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acf0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
ad00: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
ad10: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
ad20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
ad30: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
ad40: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ada0: 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72     #region Destr
adb0: 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  uctor..        /
adc0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
add0: 20 20 20 20 20 20 2f 2f 2f 20 46 69 6e 61 6c 69        /// Finali
ade0: 7a 65 73 20 74 68 69 73 20 6f 62 6a 65 63 74 20  zes this object 
adf0: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
ae00: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
ae10: 3e 0d 0a 20 20 20 20 20 20 20 20 7e 53 51 4c 69  >..        ~SQLi
ae20: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 29  teVirtualTable()
ae30: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
ae40: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
ae50: 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20  (false);..      
ae60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
ae70: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
ae80: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
ae90: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
aea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aee0: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
aef0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
af00: 62 6c 65 43 75 72 73 6f 72 20 42 61 73 65 20 43  bleCursor Base C
af10: 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
af20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
af30: 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72   This class repr
af40: 65 73 65 6e 74 73 20 61 20 6d 61 6e 61 67 65 64  esents a managed
af50: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
af60: 75 72 73 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 61  ursor implementa
af70: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49  tion...    /// I
af80: 74 20 69 73 20 6e 6f 74 20 73 65 61 6c 65 64 20  t is not sealed 
af90: 61 6e 64 20 73 68 6f 75 6c 64 20 62 65 20 75 73  and should be us
afa0: 65 64 20 61 73 20 74 68 65 20 62 61 73 65 20 63  ed as the base c
afb0: 6c 61 73 73 20 66 6f 72 20 61 6e 79 0d 0a 20 20  lass for any..  
afc0: 20 20 2f 2f 2f 20 75 73 65 72 2d 64 65 66 69 6e    /// user-defin
afd0: 65 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ed virtual table
afe0: 20 63 75 72 73 6f 72 20 69 6d 70 6c 65 6d 65 6e   cursor implemen
aff0: 74 65 64 20 69 6e 20 6d 61 6e 61 67 65 64 20 63  ted in managed c
b000: 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
b010: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
b020: 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74  blic class SQLit
b030: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
b040: 73 6f 72 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  sor :..         
b050: 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65     ISQLiteNative
b060: 48 61 6e 64 6c 65 2c 20 49 44 69 73 70 6f 73 61  Handle, IDisposa
b070: 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45  ble /* NOT SEALE
b080: 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  D */..    {..   
b090: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
b0a0: 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
b0b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b0c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
b0d0: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
b0e0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
b0f0: 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
b100: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b110: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
b120: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
b130: 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
b140: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
b150: 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
b160: 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
b170: 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
b180: 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
b190: 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
b1a0: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
b1b0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
b1c0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
b1d0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
b1e0: 62 6c 65 43 75 72 73 6f 72 28 0d 0a 20 20 20 20  bleCursor(..    
b1f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
b200: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
b210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
b220: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
b230: 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 61 62          this.tab
b240: 6c 65 20 3d 20 74 61 62 6c 65 3b 0d 0a 20 20 20  le = table;..   
b250: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b260: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b270: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b2c0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
b2d0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
b2e0: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
b2f0: 61 74 65 20 53 51 4c 69 74 65 56 69 72 74 75 61  ate SQLiteVirtua
b300: 6c 54 61 62 6c 65 20 74 61 62 6c 65 3b 0d 0a 20  lTable table;.. 
b310: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
b320: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
b330: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
b340: 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
b350: 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
b360: 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
b370: 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
b380: 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
b390: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
b3a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b3b0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
b3c0: 69 63 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74  ic virtual SQLit
b3d0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 54 61  eVirtualTable Ta
b3e0: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ble..        {..
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
b400: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
b410: 29 3b 20 72 65 74 75 72 6e 20 74 61 62 6c 65 3b  ); return table;
b420: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
b430: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
b440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b480: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
b490: 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d  ate int indexNum
b4a0: 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ber;..        //
b4b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
b4c0: 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20       /// Number 
b4d0: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
b4e0: 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
b4f0: 65 64 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20  ed index.  This 
b500: 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20 20 20  value will..    
b510: 20 20 20 20 2f 2f 2f 20 62 65 20 73 65 74 20 76      /// be set v
b520: 69 61 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ia the <see cref
b530: 3d 22 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74  ="Filter" /> met
b540: 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
b550: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
b560: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
b570: 74 75 61 6c 20 69 6e 74 20 49 6e 64 65 78 4e 75  tual int IndexNu
b580: 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mber..        {.
b590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
b5a0: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
b5b0: 28 29 3b 20 72 65 74 75 72 6e 20 69 6e 64 65 78  (); return index
b5c0: 4e 75 6d 62 65 72 3b 20 7d 0d 0a 20 20 20 20 20  Number; }..     
b5d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b620: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b630: 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
b640: 67 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a  g indexString;..
b650: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
b660: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
b670: 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20 74  // String used t
b680: 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
b690: 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
b6a0: 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ex.  This value 
b6b0: 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  will..        //
b6c0: 2f 20 62 65 20 73 65 74 20 76 69 61 20 74 68 65  / be set via the
b6d0: 20 3c 73 65 65 20 63 72 65 66 3d 22 46 69 6c 74   <see cref="Filt
b6e0: 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  er" /> method...
b6f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
b700: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
b710: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73  public virtual s
b720: 74 72 69 6e 67 20 49 6e 64 65 78 53 74 72 69 6e  tring IndexStrin
b730: 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  g..        {..  
b740: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
b750: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
b760: 20 72 65 74 75 72 6e 20 69 6e 64 65 78 53 74 72   return indexStr
b770: 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ing; }..        
b780: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
b790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b7e0: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 56 61  private SQLiteVa
b7f0: 6c 75 65 5b 5d 20 76 61 6c 75 65 73 3b 0d 0a 20  lue[] values;.. 
b800: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
b810: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
b820: 2f 20 54 68 65 20 76 61 6c 75 65 73 20 75 73 65  / The values use
b830: 64 20 74 6f 20 66 69 6c 74 65 72 20 74 68 65 20  d to filter the 
b840: 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 76 69  rows returned vi
b850: 61 20 74 68 69 73 20 63 75 72 73 6f 72 20 6f 62  a this cursor ob
b860: 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
b870: 2f 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68 69  / instance.  Thi
b880: 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  s value will be 
b890: 73 65 74 20 76 69 61 20 74 68 65 20 3c 73 65 65  set via the <see
b8a0: 20 63 72 65 66 3d 22 46 69 6c 74 65 72 22 20 2f   cref="Filter" /
b8b0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
b8c0: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
b8d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
b8e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
b8f0: 69 72 74 75 61 6c 20 53 51 4c 69 74 65 56 61 6c  irtual SQLiteVal
b900: 75 65 5b 5d 20 56 61 6c 75 65 73 0d 0a 20 20 20  ue[] Values..   
b910: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b920: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
b930: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
b940: 6e 20 76 61 6c 75 65 73 3b 20 7d 0d 0a 20 20 20  n values; }..   
b950: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b960: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b970: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b9c0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
b9d0: 20 50 72 6f 74 65 63 74 65 64 20 4d 65 74 68 6f   Protected Metho
b9e0: 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
b9f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
ba00: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
ba10: 74 6f 20 70 65 72 73 69 73 74 20 74 68 65 20 73  to persist the s
ba20: 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63 72  pecified <see cr
ba30: 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22  ef="SQLiteValue"
ba40: 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20   /> object..    
ba50: 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
ba60: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 61  s in order to ma
ba70: 6b 65 20 74 68 65 6d 20 61 76 61 69 6c 61 62 6c  ke them availabl
ba80: 65 20 61 66 74 65 72 20 74 68 65 0d 0a 20 20 20  e after 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 46 69 6c 74 65 72 22  edModule.Filter"
bac0: 20 2f 3e 20 6d 65 74 68 6f 64 20 72 65 74 75 72   /> method retur
bad0: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns...        ///
bae0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
baf0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
bb00: 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a  name="values">..
bb10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
bb20: 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72  array of <see cr
bb30: 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22  ef="SQLiteValue"
bb40: 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
bb50: 6e 63 65 73 20 74 6f 20 62 65 0d 0a 20 20 20 20  nces to be..    
bb60: 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73 74 65      /// persiste
bb70: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
bb80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
bb90: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
bba0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
bbb0: 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20   number of <see 
bbc0: 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75  cref="SQLiteValu
bbd0: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
bbe0: 74 61 6e 63 65 73 20 74 68 61 74 20 77 65 72 65  tances that were
bbf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
bc00: 63 63 65 73 73 66 75 6c 6c 79 20 70 65 72 73 69  ccessfully persi
bc10: 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sted...        /
bc20: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
bc30: 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
bc40: 20 76 69 72 74 75 61 6c 20 69 6e 74 20 54 72 79   virtual int Try
bc50: 50 65 72 73 69 73 74 56 61 6c 75 65 73 28 0d 0a  PersistValues(..
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
bc70: 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73  teValue[] values
bc80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
bc90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
bca0: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75          int resu
bcb0: 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  lt = 0;....     
bcc0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
bcd0: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
bce0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bcf0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
bd00: 63 68 20 28 53 51 4c 69 74 65 56 61 6c 75 65 20  ch (SQLiteValue 
bd10: 76 61 6c 75 65 20 69 6e 20 76 61 6c 75 65 73 29  value in values)
bd20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bd40: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
bd50: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd70: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
bd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd90: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
bda0: 50 65 72 73 69 73 74 28 29 29 0d 0a 20 20 20 20  Persist())..    
bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdc0: 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b 0d 0a 20      result++;.. 
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
bde0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bdf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
be00: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
be10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
be20: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
be30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
be40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be50: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
be80: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
be90: 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
bea0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
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 69 73 20 6d 65 74 68 6f    /// This metho
bed0: 64 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  d should normall
bee0: 79 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  y be used by the
bef0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
bf00: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
bf10: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69  ManagedModule.Fi
bf20: 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 20  lter" /> method 
bf30: 69 6e 20 6f 72 64 65 72 20 74 6f 0d 0a 20 20 20  in order to..   
bf40: 20 20 20 20 20 2f 2f 2f 20 70 65 72 66 6f 72 6d       /// perform
bf50: 20 66 69 6c 74 65 72 69 6e 67 20 6f 66 20 74 68   filtering of th
bf60: 65 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 6e  e result rows an
bf70: 64 2f 6f 72 20 74 6f 20 72 65 63 6f 72 64 20 74  d/or to record t
bf80: 68 65 20 66 69 6c 74 65 72 69 6e 67 0d 0a 20 20  he filtering..  
bf90: 20 20 20 20 20 20 2f 2f 2f 20 63 72 69 74 65 72        /// criter
bfa0: 69 61 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  ia provided by t
bfb0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
bfc0: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
bfd0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
bfe0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
bff0: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 4e  ram name="indexN
c000: 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20 20 20 20  umber">..       
c010: 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65 64   /// Number used
c020: 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
c030: 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
c040: 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
c050: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
c060: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
c070: 6e 61 6d 65 3d 22 69 6e 64 65 78 53 74 72 69 6e  name="indexStrin
c080: 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  g">..        ///
c090: 20 53 74 72 69 6e 67 20 75 73 65 64 20 74 6f 20   String used to 
c0a0: 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
c0b0: 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
c0c0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
c0d0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
c0e0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
c0f0: 3d 22 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20  ="values">..    
c100: 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75      /// The valu
c110: 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
c120: 20 74 6f 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   to each column 
c130: 69 6e 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  in the selected 
c140: 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
c150: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
c160: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
c170: 74 75 61 6c 20 76 6f 69 64 20 46 69 6c 74 65 72  tual void Filter
c180: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  (..            i
c190: 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72 2c 0d  nt indexNumber,.
c1a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
c1b0: 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67 2c  ing indexString,
c1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
c1d0: 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75  LiteValue[] valu
c1e0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
c1f0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
c200: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
c210: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
c220: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 76            if ((v
c230: 61 6c 75 65 73 20 21 3d 20 6e 75 6c 6c 29 20 26  alues != null) &
c240: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
c250: 20 20 20 28 54 72 79 50 65 72 73 69 73 74 56 61     (TryPersistVa
c260: 6c 75 65 73 28 76 61 6c 75 65 73 29 20 21 3d 20  lues(values) != 
c270: 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 29 29 0d  values.Length)).
c280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
c2b0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2d0: 22 66 61 69 6c 65 64 20 74 6f 20 70 65 72 73 69  "failed to persi
c2e0: 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  st one or more v
c2f0: 61 6c 75 65 73 22 29 3b 0d 0a 20 20 20 20 20 20  alues");..      
c300: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c310: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65         this.inde
c320: 78 4e 75 6d 62 65 72 20 3d 20 69 6e 64 65 78 4e  xNumber = indexN
c330: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
c340: 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 53 74      this.indexSt
c350: 72 69 6e 67 20 3d 20 69 6e 64 65 78 53 74 72 69  ring = indexStri
c360: 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng;..           
c370: 20 74 68 69 73 2e 76 61 6c 75 65 73 20 3d 20 76   this.values = v
c380: 61 6c 75 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  alues;..        
c390: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
c3a0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
c3b0: 20 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 2f 2f 2f  ////////////////
c3f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c400: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
c410: 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20  iteNativeHandle 
c420: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
c430: 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20   private IntPtr 
c440: 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 20  nativeHandle;.. 
c450: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
c460: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
c470: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 75 6e  / Returns the un
c480: 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 20  derlying SQLite 
c490: 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 61 73  native handle as
c4a0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
c4b0: 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
c4c0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
c4d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
c4e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
c4f0: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
c500: 20 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61   IntPtr NativeHa
c510: 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ndle..        {.
c520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
c530: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
c540: 28 29 3b 20 72 65 74 75 72 6e 20 6e 61 74 69 76  (); return nativ
c550: 65 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20 20  eHandle; }..    
c560: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
c570: 20 73 65 74 20 7b 20 6e 61 74 69 76 65 48 61 6e   set { nativeHan
c580: 64 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  dle = value; }..
c590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c5a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
c5b0: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c600: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
c610: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
c620: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
c630: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
c640: 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70          /// Disp
c650: 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a  oses of this obj
c660: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
c670: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
c680: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
c690: 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f  ublic void Dispo
c6a0: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  se()..        {.
c6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73  .            Dis
c6c0: 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20  pose(true);..   
c6d0: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
c6e0: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
c6f0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  s);..        }..
c700: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
c710: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
c720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c760: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c770: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
c780: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
c790: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
c7a0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73  private bool dis
c7b0: 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  posed;..        
c7c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
c7d0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77         /// Throw
c7e0: 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22  s an <see cref="
c7f0: 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 44 69 73  System.ObjectDis
c800: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 22 2f  posedException"/
c810: 3e 20 69 66 20 74 68 69 73 0d 0a 20 20 20 20 20  > if this..     
c820: 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e     /// object in
c830: 73 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20  stance has been 
c840: 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20  disposed...     
c850: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
c860: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
c870: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73  te void CheckDis
c880: 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77  posed() /* throw
c890: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
c8a0: 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53  #if THROW_ON_DIS
c8b0: 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20  POSED..         
c8c0: 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29     if (disposed)
c8d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
c8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c8f0: 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63   throw new Objec
c900: 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
c910: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
c920: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
c930: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
c940: 6c 65 43 75 72 73 6f 72 29 2e 4e 61 6d 65 29 3b  leCursor).Name);
c950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
c960: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
c970: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
c980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c9d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
c9e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70          /// Disp
c9f0: 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a  oses of this obj
ca00: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
ca10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
ca20: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
ca30: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
ca40: 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20  disposing">..   
ca50: 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
ca60: 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64  o if this method
ca70: 20 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64   is being called
ca80: 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20   from the..     
ca90: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
caa0: 3d 22 44 69 73 70 6f 73 65 28 29 22 20 2f 3e 20  ="Dispose()" /> 
cab0: 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20 69 66  method.  Zero if
cac0: 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   this method is 
cad0: 62 65 69 6e 67 20 63 61 6c 6c 65 64 0d 0a 20 20  being called..  
cae0: 20 20 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74        /// from t
caf0: 68 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a 20  he finalizer... 
cb00: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
cb10: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  am>..        pro
cb20: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76  tected virtual v
cb30: 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c  oid Dispose(bool
cb40: 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20   disposing)..   
cb50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cb60: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
cb70: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
cb80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
cb90: 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69     //if (disposi
cba0: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
cbb0: 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
cbc0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
cbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbf0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
cc00: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64        //    // d
cc10: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
cc20: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
cc30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc40: 20 20 2f 2f 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 0d 0a 20 20  ////////////..  
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
cc80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
cc90: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ccd0: 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65  release unmanage
cce0: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
ccf0: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
cd00: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
cd40: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
cd50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
cd60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
cd70: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
cd80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
cd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
cde0: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
cdf0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
ce00: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
ce10: 2f 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68 69  // Finalizes thi
ce20: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
ce30: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
ce40: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
ce50: 20 20 20 20 7e 53 51 4c 69 74 65 56 69 72 74 75      ~SQLiteVirtu
ce60: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28 29 0d  alTableCursor().
ce70: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ce80: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
ce90: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
cea0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
ceb0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
cec0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
ced0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
cee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf20: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
cf30: 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e  ISQLiteNativeHan
cf40: 64 6c 65 20 49 6e 74 65 72 66 61 63 65 0d 0a 20  dle Interface.. 
cf50: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
cf60: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69  ..    /// This i
cf70: 6e 74 65 72 66 61 63 65 20 72 65 70 72 65 73 65  nterface represe
cf80: 6e 74 73 20 61 20 6e 61 74 69 76 65 20 68 61 6e  nts a native han
cf90: 64 6c 65 20 70 72 6f 76 69 64 65 64 20 62 79 20  dle provided by 
cfa0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d  the SQLite core.
cfb0: 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79  .    /// library
cfc0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
cfd0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
cfe0: 63 20 69 6e 74 65 72 66 61 63 65 20 49 53 51 4c  c interface ISQL
cff0: 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d  iteNativeHandle.
d000: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
d010: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d020: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
d030: 61 74 69 76 65 20 68 61 6e 64 6c 65 20 76 61 6c  ative handle val
d040: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
d050: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d060: 20 20 20 20 20 49 6e 74 50 74 72 20 4e 61 74 69       IntPtr Nati
d070: 76 65 48 61 6e 64 6c 65 20 7b 20 67 65 74 3b 20  veHandle { get; 
d080: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  }..    }..    #e
d090: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
d0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d0f0: 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69     #region ISQLi
d100: 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 49  teNativeModule I
d110: 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f  nterface..    //
d120: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
d130: 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66   /// This interf
d140: 61 63 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ace represents a
d150: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
d160: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 72  mplementation wr
d170: 69 74 74 65 6e 20 69 6e 0d 0a 20 20 20 20 2f 2f  itten in..    //
d180: 2f 20 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a  / native code...
d190: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d1a0: 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69  y>..    public i
d1b0: 6e 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65  nterface ISQLite
d1c0: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 0d 0a 20 20  NativeModule..  
d1d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f    {..        ///
d1e0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
d1f0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
d200: 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  hod is called to
d210: 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 69 6e   create a new in
d220: 73 74 61 6e 63 65 20 6f 66 20 61 20 76 69 72 74  stance of a virt
d230: 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ual table..     
d240: 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e     /// in respon
d250: 73 65 20 74 6f 20 61 20 43 52 45 41 54 45 20 56  se to a CREATE V
d260: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d270: 74 65 6d 65 6e 74 2e 20 54 68 65 20 64 62 20 70  tement. The db p
d280: 61 72 61 6d 65 74 65 72 0d 0a 20 20 20 20 20 20  arameter..      
d290: 20 20 2f 2f 2f 20 69 73 20 61 20 70 6f 69 6e 74    /// is a point
d2a0: 65 72 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65  er to the SQLite
d2b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
d2c0: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 65 78 65  tion that is exe
d2d0: 63 75 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  cuting..        
d2e0: 2f 2f 2f 20 74 68 65 20 43 52 45 41 54 45 20 56  /// the CREATE V
d2f0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d300: 74 65 6d 65 6e 74 2e 20 54 68 65 20 70 41 75 78  tement. The pAux
d310: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65   argument is the
d320: 20 63 6f 70 79 0d 0a 20 20 20 20 20 20 20 20 2f   copy..        /
d330: 2f 2f 20 6f 66 20 74 68 65 20 63 6c 69 65 6e 74  // of the client
d340: 20 64 61 74 61 20 70 6f 69 6e 74 65 72 20 74 68   data pointer th
d350: 61 74 20 77 61 73 20 74 68 65 20 66 6f 75 72 74  at was the fourt
d360: 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  h argument to th
d370: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
d380: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
d390: 64 75 6c 65 28 29 20 6f 72 20 73 71 6c 69 74 65  dule() or sqlite
d3a0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
d3b0: 76 32 28 29 20 63 61 6c 6c 20 74 68 61 74 0d 0a  v2() call that..
d3c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 67 69          /// regi
d3d0: 73 74 65 72 65 64 20 74 68 65 20 76 69 72 74 75  stered the virtu
d3e0: 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 2e  al table module.
d3f0: 20 54 68 65 20 61 72 67 76 20 70 61 72 61 6d 65   The argv parame
d400: 74 65 72 20 69 73 20 61 6e 0d 0a 20 20 20 20 20  ter is an..     
d410: 20 20 20 2f 2f 2f 20 61 72 72 61 79 20 6f 66 20     /// array of 
d420: 61 72 67 63 20 70 6f 69 6e 74 65 72 73 20 74 6f  argc pointers to
d430: 20 6e 75 6c 6c 20 74 65 72 6d 69 6e 61 74 65 64   null terminated
d440: 20 73 74 72 69 6e 67 73 2e 20 54 68 65 20 66 69   strings. The fi
d450: 72 73 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rst..        ///
d460: 20 73 74 72 69 6e 67 2c 20 61 72 67 76 5b 30 5d   string, argv[0]
d470: 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  , is the name of
d480: 20 74 68 65 20 6d 6f 64 75 6c 65 20 62 65 69 6e   the module bein
d490: 67 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 0d 0a  g invoked. The..
d4a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75          /// modu
d4b0: 6c 65 20 6e 61 6d 65 20 69 73 20 74 68 65 20 6e  le name is the n
d4c0: 61 6d 65 20 70 72 6f 76 69 64 65 64 20 61 73 20  ame provided as 
d4d0: 74 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d  the second argum
d4e0: 65 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ent to..        
d4f0: 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61  /// sqlite3_crea
d500: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 61 6e 64 20  te_module() and 
d510: 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
d520: 74 6f 20 74 68 65 20 55 53 49 4e 47 20 63 6c 61  to the USING cla
d530: 75 73 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  use of..        
d540: 2f 2f 2f 20 74 68 65 20 43 52 45 41 54 45 20 56  /// the CREATE V
d550: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d560: 74 65 6d 65 6e 74 20 74 68 61 74 20 69 73 20 72  tement that is r
d570: 75 6e 6e 69 6e 67 2e 20 54 68 65 20 73 65 63 6f  unning. The seco
d580: 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nd,..        ///
d590: 20 61 72 67 76 5b 31 5d 2c 20 69 73 20 74 68 65   argv[1], is the
d5a0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
d5b0: 61 62 61 73 65 20 69 6e 20 77 68 69 63 68 20 74  abase in which t
d5c0: 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 74  he new virtual t
d5d0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
d5e0: 2f 20 69 73 20 62 65 69 6e 67 20 63 72 65 61 74  / is being creat
d5f0: 65 64 2e 20 54 68 65 20 64 61 74 61 62 61 73 65  ed. The database
d600: 20 6e 61 6d 65 20 69 73 20 22 6d 61 69 6e 22 20   name is "main" 
d610: 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79 0d  for the primary.
d620: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74  .        /// dat
d630: 61 62 61 73 65 2c 20 6f 72 20 22 74 65 6d 70 22  abase, or "temp"
d640: 20 66 6f 72 20 54 45 4d 50 20 64 61 74 61 62 61   for TEMP databa
d650: 73 65 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20  se, or the name 
d660: 67 69 76 65 6e 20 61 74 20 74 68 65 0d 0a 20 20  given at the..  
d670: 20 20 20 20 20 20 2f 2f 2f 20 65 6e 64 20 6f 66        /// end of
d680: 20 74 68 65 20 41 54 54 41 43 48 20 73 74 61 74   the ATTACH stat
d690: 65 6d 65 6e 74 20 66 6f 72 20 61 74 74 61 63 68  ement for attach
d6a0: 65 64 20 64 61 74 61 62 61 73 65 73 2e 20 54 68  ed databases. Th
d6b0: 65 20 74 68 69 72 64 0d 0a 20 20 20 20 20 20 20  e third..       
d6c0: 20 2f 2f 2f 20 65 6c 65 6d 65 6e 74 20 6f 66 20   /// element of 
d6d0: 74 68 65 20 61 72 72 61 79 2c 20 61 72 67 76 5b  the array, argv[
d6e0: 32 5d 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20  2], is the name 
d6f0: 6f 66 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  of the new virtu
d700: 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  al..        /// 
d710: 74 61 62 6c 65 2c 20 61 73 20 73 70 65 63 69 66  table, as specif
d720: 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ied following th
d730: 65 20 54 41 42 4c 45 20 6b 65 79 77 6f 72 64 20  e TABLE keyword 
d740: 69 6e 20 74 68 65 20 43 52 45 41 54 45 0d 0a 20  in the CREATE.. 
d750: 20 20 20 20 20 20 20 2f 2f 2f 20 56 49 52 54 55         /// VIRTU
d760: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
d770: 6e 74 2e 20 49 66 20 70 72 65 73 65 6e 74 2c 20  nt. If present, 
d780: 74 68 65 20 66 6f 75 72 74 68 20 61 6e 64 20 73  the fourth and s
d790: 75 62 73 65 71 75 65 6e 74 0d 0a 20 20 20 20 20  ubsequent..     
d7a0: 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20 69     /// strings i
d7b0: 6e 20 74 68 65 20 61 72 67 76 5b 5d 20 61 72 72  n the argv[] arr
d7c0: 61 79 20 72 65 70 6f 72 74 20 74 68 65 20 61 72  ay report the ar
d7d0: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
d7e0: 6f 64 75 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20  odule name..    
d7f0: 20 20 20 20 2f 2f 2f 20 69 6e 20 74 68 65 20 43      /// in the C
d800: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
d810: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  BLE statement...
d820: 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20          ///..   
d830: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6a 6f 62       /// The job
d840: 20 6f 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20   of this method 
d850: 69 73 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  is to construct 
d860: 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
d870: 74 61 62 6c 65 20 6f 62 6a 65 63 74 0d 0a 20 20  table object..  
d880: 20 20 20 20 20 20 2f 2f 2f 20 28 61 6e 20 73 71        /// (an sq
d890: 6c 69 74 65 33 5f 76 74 61 62 20 6f 62 6a 65 63  lite3_vtab objec
d8a0: 74 29 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20  t) and return a 
d8b0: 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 20 69 6e  pointer to it in
d8c0: 20 2a 70 70 56 54 61 62 2e 0d 0a 20 20 20 20 20   *ppVTab...     
d8d0: 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20     ///..        
d8e0: 2f 2f 2f 20 41 73 20 70 61 72 74 20 6f 66 20 74  /// As part of t
d8f0: 68 65 20 74 61 73 6b 20 6f 66 20 63 72 65 61 74  he task of creat
d900: 69 6e 67 20 61 20 6e 65 77 20 73 71 6c 69 74 65  ing a new sqlite
d910: 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
d920: 2c 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  , this..        
d930: 2f 2f 2f 20 6d 65 74 68 6f 64 20 6d 75 73 74 20  /// method must 
d940: 69 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33 5f 64  invoke sqlite3_d
d950: 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 74 6f  eclare_vtab() to
d960: 20 74 65 6c 6c 20 74 68 65 20 53 51 4c 69 74 65   tell the SQLite
d970: 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f   core..        /
d980: 2f 2f 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6c  // about the col
d990: 75 6d 6e 73 20 61 6e 64 20 64 61 74 61 74 79 70  umns and datatyp
d9a0: 65 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61  es in the virtua
d9b0: 6c 20 74 61 62 6c 65 2e 20 54 68 65 0d 0a 20 20  l table. The..  
d9c0: 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
d9d0: 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
d9e0: 20 41 50 49 20 68 61 73 20 74 68 65 20 66 6f 6c   API has the fol
d9f0: 6c 6f 77 69 6e 67 20 70 72 6f 74 6f 74 79 70 65  lowing prototype
da00: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a  :..        ///..
da10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 20          /// int 
da20: 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
da30: 76 74 61 62 28 73 71 6c 69 74 65 33 20 2a 64 62  vtab(sqlite3 *db
da40: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43  , const char *zC
da50: 72 65 61 74 65 54 61 62 6c 65 29 0d 0a 20 20 20  reateTable)..   
da60: 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20       ///..      
da70: 20 20 2f 2f 2f 20 54 68 65 20 66 69 72 73 74 20    /// The first 
da80: 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
da90: 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
daa0: 28 29 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  () must be the s
dab0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ame..        ///
dac0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
dad0: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 61 73 20  tion pointer as 
dae0: 74 68 65 20 66 69 72 73 74 20 70 61 72 61 6d 65  the first parame
daf0: 74 65 72 20 74 6f 20 74 68 69 73 20 6d 65 74 68  ter to this meth
db00: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
db10: 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75   The second argu
db20: 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 5f  ment to sqlite3_
db30: 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 6d  declare_vtab() m
db40: 75 73 74 20 61 0d 0a 20 20 20 20 20 20 20 20 2f  ust a..        /
db50: 2f 2f 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74  // zero-terminat
db60: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
db70: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
db80: 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 43 52 45 41  well-formed CREA
db90: 54 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  TE..        /// 
dba0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
dbb0: 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
dbc0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
dbd0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 61 6e  virtual table an
dbe0: 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  d..        /// t
dbf0: 68 65 69 72 20 64 61 74 61 20 74 79 70 65 73 2e  heir data types.
dc00: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
dc10: 20 74 61 62 6c 65 20 69 6e 20 74 68 69 73 20 43   table in this C
dc20: 52 45 41 54 45 20 54 41 42 4c 45 0d 0a 20 20 20  REATE TABLE..   
dc30: 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 6d 65       /// stateme
dc40: 6e 74 20 69 73 20 69 67 6e 6f 72 65 64 2c 20 61  nt is ignored, a
dc50: 73 20 61 72 65 20 61 6c 6c 20 63 6f 6e 73 74 72  s are all constr
dc60: 61 69 6e 74 73 2e 20 4f 6e 6c 79 20 74 68 65 20  aints. Only the 
dc70: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 0d 0a 20 20  column names..  
dc80: 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20 64 61        /// and da
dc90: 74 61 74 79 70 65 73 20 6d 61 74 74 65 72 2e 20  tatypes matter. 
dca0: 54 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  The CREATE TABLE
dcb0: 20 73 74 61 74 65 6d 65 6e 74 20 73 74 72 69 6e   statement strin
dcc0: 67 20 6e 65 65 64 20 6e 6f 74 20 74 6f 0d 0a 20  g need not to.. 
dcd0: 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 68 65         /// be he
dce0: 6c 64 20 69 6e 20 70 65 72 73 69 73 74 65 6e 74  ld in persistent
dcf0: 20 6d 65 6d 6f 72 79 2e 20 54 68 65 20 73 74 72   memory. The str
dd00: 69 6e 67 20 63 61 6e 20 62 65 20 64 65 61 6c 6c  ing can be deall
dd10: 6f 63 61 74 65 64 20 61 6e 64 2f 6f 72 0d 0a 20  ocated and/or.. 
dd20: 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 75 73 65         /// reuse
dd30: 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  d as soon as the
dd40: 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
dd50: 5f 76 74 61 62 28 29 20 72 6f 75 74 69 6e 65 20  _vtab() routine 
dd60: 72 65 74 75 72 6e 73 2e 0d 0a 20 20 20 20 20 20  returns...      
dd70: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
dd80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
dd90: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e  aram name="pDb">
dda0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
ddb0: 65 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73  e native databas
ddc0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
ddd0: 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dle...        //
dde0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
ddf0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
de00: 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20  ame="pAux">..   
de10: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69       /// The ori
de20: 67 69 6e 61 6c 20 6e 61 74 69 76 65 20 70 6f 69  ginal native poi
de30: 6e 74 65 72 20 76 61 6c 75 65 20 74 68 61 74 20  nter value that 
de40: 77 61 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20  was provided to 
de50: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
de60: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
de70: 6d 6f 64 75 6c 65 28 29 2c 20 73 71 6c 69 74 65  module(), sqlite
de80: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
de90: 76 32 28 29 20 6f 72 0d 0a 20 20 20 20 20 20 20  v2() or..       
dea0: 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72 65   /// sqlite3_cre
deb0: 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d  ate_disposable_m
dec0: 6f 64 75 6c 65 28 29 20 66 75 6e 63 74 69 6f 6e  odule() function
ded0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
dee0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
def0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
df00: 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20  e="argc">..     
df10: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
df20: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66  r of arguments f
df30: 72 6f 6d 20 74 68 65 20 43 52 45 41 54 45 20 56  rom the CREATE V
df40: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
df50: 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  tement...       
df60: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
df70: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
df80: 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a  m name="argv">..
df90: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
dfa0: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 20  array of string 
dfb0: 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74  arguments from t
dfc0: 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41  he CREATE VIRTUA
dfd0: 4c 20 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20  L TABLE..       
dfe0: 20 2f 2f 2f 20 73 74 61 74 65 6d 65 6e 74 2e 0d   /// statement..
dff0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
e000: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
e010: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
e020: 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
e030: 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
e040: 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  s, this paramete
e050: 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
e060: 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  ed to point to t
e070: 68 65 20 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20  he newly..      
e080: 20 20 2f 2f 2f 20 63 72 65 61 74 65 64 20 6e 61    /// created na
e090: 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61  tive sqlite3_vta
e0a0: 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
e0b0: 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
e0c0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
e0d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
e0e0: 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20  ame="pError">.. 
e0f0: 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
e100: 66 61 69 6c 75 72 65 2c 20 74 68 69 73 20 70 61  failure, this pa
e110: 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
e120: 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e  modified to poin
e130: 74 20 74 6f 20 74 68 65 20 65 72 72 6f 72 0d 0a  t to the error..
e140: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 73 73          /// mess
e150: 61 67 65 2c 20 77 69 74 68 20 74 68 65 20 75 6e  age, with the un
e160: 64 65 72 6c 79 69 6e 67 20 6d 65 6d 6f 72 79 20  derlying memory 
e170: 68 61 76 69 6e 67 20 62 65 65 6e 20 6f 62 74 61  having been obta
e180: 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20  ined from the.. 
e190: 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
e1a0: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63  e3_malloc() func
e1b0: 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
e1c0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
e1d0: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
e1e0: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
e1f0: 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
e200: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
e210: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
e220: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
e230: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
e240: 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20  xCreate(..      
e250: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62        IntPtr pDb
e260: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
e270: 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
e280: 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
e290: 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
e2a0: 49 6e 74 50 74 72 5b 5d 20 61 72 67 76 2c 0d 0a  IntPtr[] argv,..
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
e2c0: 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
e2d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
e2e0: 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20  ntPtr pError..  
e2f0: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
e300: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e350: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
e360: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e370: 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65    /// The xConne
e380: 63 74 20 6d 65 74 68 6f 64 20 69 73 20 76 65 72  ct method is ver
e390: 79 20 73 69 6d 69 6c 61 72 20 74 6f 20 78 43 72  y similar to xCr
e3a0: 65 61 74 65 2e 20 49 74 20 68 61 73 20 74 68 65  eate. It has the
e3b0: 20 73 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f   same..        /
e3c0: 2f 2f 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e  // parameters an
e3d0: 64 20 63 6f 6e 73 74 72 75 63 74 73 20 61 20 6e  d constructs a n
e3e0: 65 77 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  ew sqlite3_vtab 
e3f0: 73 74 72 75 63 74 75 72 65 20 6a 75 73 74 20 6c  structure just l
e400: 69 6b 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ike..        ///
e410: 20 78 43 72 65 61 74 65 2e 20 41 6e 64 20 69 74   xCreate. And it
e420: 20 6d 75 73 74 20 61 6c 73 6f 20 63 61 6c 6c 20   must also call 
e430: 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
e440: 76 74 61 62 28 29 20 6c 69 6b 65 20 78 43 72 65  vtab() like xCre
e450: 61 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ate...        //
e460: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  /..        /// T
e470: 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
e480: 20 74 68 61 74 20 78 43 6f 6e 6e 65 63 74 20 69   that xConnect i
e490: 73 20 63 61 6c 6c 65 64 20 74 6f 20 65 73 74 61  s called to esta
e4a0: 62 6c 69 73 68 20 61 20 6e 65 77 0d 0a 20 20 20  blish a new..   
e4b0: 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74       /// connect
e4c0: 69 6f 6e 20 74 6f 20 61 6e 20 65 78 69 73 74 69  ion to an existi
e4d0: 6e 67 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ng virtual table
e4e0: 20 77 68 65 72 65 61 73 20 78 43 72 65 61 74 65   whereas xCreate
e4f0: 20 69 73 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20   is called..    
e500: 20 20 20 20 2f 2f 2f 20 74 6f 20 63 72 65 61 74      /// to creat
e510: 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
e520: 74 61 62 6c 65 20 66 72 6f 6d 20 73 63 72 61 74  table from scrat
e530: 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ch...        ///
e540: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
e550: 65 20 78 43 72 65 61 74 65 20 61 6e 64 20 78 43  e xCreate and xC
e560: 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 73 20 61  onnect methods a
e570: 72 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e  re only differen
e580: 74 20 77 68 65 6e 20 74 68 65 0d 0a 20 20 20 20  t when the..    
e590: 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
e5a0: 74 61 62 6c 65 20 68 61 73 20 73 6f 6d 65 20 6b  table has some k
e5b0: 69 6e 64 20 6f 66 20 62 61 63 6b 69 6e 67 20 73  ind of backing s
e5c0: 74 6f 72 65 20 74 68 61 74 20 6d 75 73 74 20 62  tore that must b
e5d0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
e5e0: 6e 69 74 69 61 6c 69 7a 65 64 20 74 68 65 20 66  nitialized the f
e5f0: 69 72 73 74 20 74 69 6d 65 20 74 68 65 20 76 69  irst time the vi
e600: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 63  rtual table is c
e610: 72 65 61 74 65 64 2e 20 54 68 65 0d 0a 20 20 20  reated. The..   
e620: 20 20 20 20 20 2f 2f 2f 20 78 43 72 65 61 74 65       /// xCreate
e630: 20 6d 65 74 68 6f 64 20 63 72 65 61 74 65 73 20   method creates 
e640: 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  and initializes 
e650: 74 68 65 20 62 61 63 6b 69 6e 67 20 73 74 6f 72  the backing stor
e660: 65 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  e. The..        
e670: 2f 2f 2f 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74  /// xConnect met
e680: 68 6f 64 20 6a 75 73 74 20 63 6f 6e 6e 65 63 74  hod just connect
e690: 73 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67  s to an existing
e6a0: 20 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 2e 0d   backing store..
e6b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
e6c0: 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 61 6e 20        /// As an 
e6d0: 65 78 61 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65  example, conside
e6e0: 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  r a virtual tabl
e6f0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
e700: 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f   that..        /
e710: 2f 2f 20 70 72 6f 76 69 64 65 73 20 72 65 61 64  // provides read
e720: 2d 6f 6e 6c 79 20 61 63 63 65 73 73 20 74 6f 20  -only access to 
e730: 65 78 69 73 74 69 6e 67 20 63 6f 6d 6d 61 2d 73  existing comma-s
e740: 65 70 61 72 61 74 65 64 2d 76 61 6c 75 65 20 28  eparated-value (
e750: 43 53 56 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  CSV)..        //
e760: 2f 20 66 69 6c 65 73 20 6f 6e 20 64 69 73 6b 2e  / files on disk.
e770: 20 54 68 65 72 65 20 69 73 20 6e 6f 20 62 61 63   There is no bac
e780: 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61 74 20  king store that 
e790: 6e 65 65 64 73 20 74 6f 20 62 65 20 63 72 65 61  needs to be crea
e7a0: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
e7b0: 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   or initialized 
e7c0: 66 6f 72 20 73 75 63 68 20 61 20 76 69 72 74 75  for such a virtu
e7d0: 61 6c 20 74 61 62 6c 65 20 28 73 69 6e 63 65 20  al table (since 
e7e0: 74 68 65 20 43 53 56 20 66 69 6c 65 73 0d 0a 20  the CSV files.. 
e7f0: 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 72 65 61         /// alrea
e800: 64 79 20 65 78 69 73 74 20 6f 6e 20 64 69 73 6b  dy exist on disk
e810: 29 20 73 6f 20 74 68 65 20 78 43 72 65 61 74 65  ) so the xCreate
e820: 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20 6d 65   and xConnect me
e830: 74 68 6f 64 73 20 77 69 6c 6c 20 62 65 0d 0a 20  thods will be.. 
e840: 20 20 20 20 20 20 20 2f 2f 2f 20 69 64 65 6e 74         /// ident
e850: 69 63 61 6c 20 66 6f 72 20 74 68 61 74 20 6d 6f  ical for that mo
e860: 64 75 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  dule...        /
e870: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  //..        /// 
e880: 41 6e 6f 74 68 65 72 20 65 78 61 6d 70 6c 65 20  Another example 
e890: 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
e8a0: 6c 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  le that implemen
e8b0: 74 73 20 61 20 66 75 6c 6c 2d 74 65 78 74 0d 0a  ts a full-text..
e8c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 65          /// inde
e8d0: 78 2e 20 54 68 65 20 78 43 72 65 61 74 65 20 6d  x. The xCreate m
e8e0: 65 74 68 6f 64 20 6d 75 73 74 20 63 72 65 61 74  ethod must creat
e8f0: 65 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  e and initialize
e900: 20 64 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f   data..        /
e910: 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  // structures to
e920: 20 68 6f 6c 64 20 74 68 65 20 64 69 63 74 69 6f   hold the dictio
e930: 6e 61 72 79 20 61 6e 64 20 70 6f 73 74 69 6e 67  nary and posting
e940: 20 6c 69 73 74 73 20 66 6f 72 20 74 68 61 74 20   lists for that 
e950: 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
e960: 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74  /// The xConnect
e970: 20 6d 65 74 68 6f 64 2c 20 6f 6e 20 74 68 65 20   method, on the 
e980: 6f 74 68 65 72 20 68 61 6e 64 2c 20 6f 6e 6c 79  other hand, only
e990: 20 68 61 73 20 74 6f 20 6c 6f 63 61 74 65 20 61   has to locate a
e9a0: 6e 64 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20  nd use..        
e9b0: 2f 2f 2f 20 61 6e 20 65 78 69 73 74 69 6e 67 20  /// an existing 
e9c0: 64 69 63 74 69 6f 6e 61 72 79 20 61 6e 64 20 70  dictionary and p
e9d0: 6f 73 74 69 6e 67 20 6c 69 73 74 73 20 74 68 61  osting lists tha
e9e0: 74 20 77 65 72 65 20 63 72 65 61 74 65 64 20 62  t were created b
e9f0: 79 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  y a..        ///
ea00: 20 70 72 69 6f 72 20 78 43 72 65 61 74 65 20 63   prior xCreate c
ea10: 61 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  all...        //
ea20: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  /..        /// T
ea30: 68 65 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68  he xConnect meth
ea40: 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20 53  od must return S
ea50: 51 4c 49 54 45 5f 4f 4b 20 69 66 20 69 74 20 69  QLITE_OK if it i
ea60: 73 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 0d  s successful in.
ea70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65  .        /// cre
ea80: 61 74 69 6e 67 20 74 68 65 20 6e 65 77 20 76 69  ating the new vi
ea90: 72 74 75 61 6c 20 74 61 62 6c 65 2c 20 6f 72 20  rtual table, or 
eaa0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 69 66 20  SQLITE_ERROR if 
eab0: 69 74 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20  it is not..     
eac0: 20 20 20 2f 2f 2f 20 73 75 63 63 65 73 73 66 75     /// successfu
ead0: 6c 2e 20 49 66 20 6e 6f 74 20 73 75 63 63 65 73  l. If not succes
eae0: 73 66 75 6c 2c 20 74 68 65 20 73 71 6c 69 74 65  sful, the sqlite
eaf0: 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
eb00: 20 6d 75 73 74 20 6e 6f 74 0d 0a 20 20 20 20 20   must not..     
eb10: 20 20 20 2f 2f 2f 20 62 65 20 61 6c 6c 6f 63 61     /// be alloca
eb20: 74 65 64 2e 20 41 6e 20 65 72 72 6f 72 20 6d 65  ted. An error me
eb30: 73 73 61 67 65 20 6d 61 79 20 6f 70 74 69 6f 6e  ssage may option
eb40: 61 6c 6c 79 20 62 65 20 72 65 74 75 72 6e 65 64  ally be returned
eb50: 20 69 6e 20 2a 70 7a 45 72 72 0d 0a 20 20 20 20   in *pzErr..    
eb60: 20 20 20 20 2f 2f 2f 20 69 66 20 75 6e 73 75 63      /// if unsuc
eb70: 63 65 73 73 66 75 6c 2e 20 53 70 61 63 65 20 74  cessful. Space t
eb80: 6f 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72  o hold the error
eb90: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 20   message string 
eba0: 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20  must be..       
ebb0: 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 65 64 20 75   /// allocated u
ebc0: 73 69 6e 67 20 61 6e 20 53 51 4c 69 74 65 20 6d  sing an SQLite m
ebd0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
ebe0: 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 0d 0a   function like..
ebf0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
ec00: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 6f 72 20  te3_malloc() or 
ec10: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
ec20: 29 20 61 73 20 74 68 65 20 53 51 4c 69 74 65 20  ) as the SQLite 
ec30: 63 6f 72 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20  core will..     
ec40: 20 20 20 2f 2f 2f 20 61 74 74 65 6d 70 74 20 74     /// attempt t
ec50: 6f 20 66 72 65 65 20 74 68 65 20 73 70 61 63 65  o free the space
ec60: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 66   using sqlite3_f
ec70: 72 65 65 28 29 20 61 66 74 65 72 20 74 68 65 20  ree() after the 
ec80: 65 72 72 6f 72 20 68 61 73 0d 0a 20 20 20 20 20  error has..     
ec90: 20 20 20 2f 2f 2f 20 62 65 65 6e 20 72 65 70 6f     /// been repo
eca0: 72 74 65 64 20 75 70 20 74 6f 20 74 68 65 20 61  rted up to the a
ecb0: 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  pplication...   
ecc0: 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20       ///..      
ecd0: 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65    /// The xConne
ece0: 63 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71  ct method is req
ecf0: 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20  uired for every 
ed00: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
ed10: 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
ed20: 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75 67  mentation, thoug
ed30: 68 20 74 68 65 20 78 43 72 65 61 74 65 20 61 6e  h the xCreate an
ed40: 64 20 78 43 6f 6e 6e 65 63 74 20 70 6f 69 6e 74  d xConnect point
ed50: 65 72 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ers of the..    
ed60: 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
ed70: 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 6d 61  module object ma
ed80: 79 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 73  y point to the s
ed90: 61 6d 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 65  ame function the
eda0: 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20   virtual..      
edb0: 20 20 2f 2f 2f 20 74 61 62 6c 65 20 64 6f 65 73    /// table does
edc0: 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 69 6e 69   not need to ini
edd0: 74 69 61 6c 69 7a 65 20 62 61 63 6b 69 6e 67 20  tialize backing 
ede0: 73 74 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  store...        
edf0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
ee00: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
ee10: 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a  am name="pDb">..
ee20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
ee30: 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65 20  native database 
ee40: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
ee50: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
ee60: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
ee70: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
ee80: 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20  e="pAux">..     
ee90: 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69     /// The origi
eea0: 6e 61 6c 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  nal native point
eeb0: 65 72 20 76 61 6c 75 65 20 74 68 61 74 20 77 61  er value that wa
eec0: 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68  s provided to th
eed0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
eee0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
eef0: 64 75 6c 65 28 29 2c 20 73 71 6c 69 74 65 33 5f  dule(), sqlite3_
ef00: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32  create_module_v2
ef10: 28 29 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  () or..        /
ef20: 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  // sqlite3_creat
ef30: 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64  e_disposable_mod
ef40: 75 6c 65 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e  ule() functions.
ef50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
ef60: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
ef70: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
ef80: 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20  "argc">..       
ef90: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
efa0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  of arguments fro
efb0: 6d 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  m the CREATE VIR
efc0: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
efd0: 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ment...        /
efe0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
eff0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
f000: 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20  name="argv">..  
f010: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
f020: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 20 61 72  ray of string ar
f030: 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65  guments from the
f040: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
f050: 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f  TABLE..        /
f060: 2f 2f 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  // statement... 
f070: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
f080: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
f090: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
f0a0: 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tab">..        /
f0b0: 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
f0c0: 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
f0d0: 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64  must be modified
f0e0: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
f0f0: 20 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20   newly..        
f100: 2f 2f 2f 20 63 72 65 61 74 65 64 20 6e 61 74 69  /// created nati
f110: 76 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  ve sqlite3_vtab 
f120: 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
f130: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
f140: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
f150: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
f160: 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20  e="pError">..   
f170: 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61       /// Upon fa
f180: 69 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72 61  ilure, this para
f190: 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
f1a0: 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20  dified to point 
f1b0: 74 6f 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20  to the error..  
f1c0: 20 20 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67        /// messag
f1d0: 65 2c 20 77 69 74 68 20 74 68 65 20 75 6e 64 65  e, with the unde
f1e0: 72 6c 79 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61  rlying memory ha
f1f0: 76 69 6e 67 20 62 65 65 6e 20 6f 62 74 61 69 6e  ving been obtain
f200: 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20  ed from the..   
f210: 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
f220: 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69  _malloc() functi
f230: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
f240: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
f250: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
f260: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
f270: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
f280: 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
f290: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
f2a0: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
f2b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43  LiteErrorCode xC
f2c0: 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
f2d0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62 2c       IntPtr pDb,
f2e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
f2f0: 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20 20  tPtr pAux,..    
f300: 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63          int argc
f310: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
f320: 6e 74 50 74 72 5b 5d 20 61 72 67 76 2c 0d 0a 20  ntPtr[] argv,.. 
f330: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
f340: 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
f350: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
f360: 74 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20  tPtr pError..   
f370: 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
f380: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
f3d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
f3e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
f3f0: 20 2f 2f 2f 20 53 51 4c 69 74 65 20 75 73 65 73   /// SQLite uses
f400: 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   the xBestIndex 
f410: 6d 65 74 68 6f 64 20 6f 66 20 61 20 76 69 72 74  method of a virt
f420: 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
f430: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
f440: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62   determine the b
f450: 65 73 74 20 77 61 79 20 74 6f 20 61 63 63 65 73  est way to acces
f460: 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
f470: 62 6c 65 2e 20 54 68 65 20 78 42 65 73 74 49 6e  ble. The xBestIn
f480: 64 65 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  dex..        ///
f490: 20 6d 65 74 68 6f 64 20 68 61 73 20 61 20 70 72   method has a pr
f4a0: 6f 74 6f 74 79 70 65 20 6c 69 6b 65 20 74 68 69  ototype like thi
f4b0: 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d  s:..        ///.
f4c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 69 6e  .        ///  in
f4d0: 74 20 28 2a 78 42 65 73 74 49 6e 64 65 78 29 28  t (*xBestIndex)(
f4e0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
f4f0: 54 61 62 2c 20 73 71 6c 69 74 65 33 5f 69 6e 64  Tab, sqlite3_ind
f500: 65 78 5f 69 6e 66 6f 2a 29 3b 0d 0a 20 20 20 20  ex_info*);..    
f510: 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20      ///..       
f520: 20 2f 2f 2f 20 54 68 65 20 53 51 4c 69 74 65 20   /// The SQLite 
f530: 63 6f 72 65 20 63 6f 6d 6d 75 6e 69 63 61 74 65  core communicate
f540: 73 20 77 69 74 68 20 74 68 65 20 78 42 65 73 74  s with the xBest
f550: 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 62 79 20  Index method by 
f560: 66 69 6c 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  filling..       
f570: 20 2f 2f 2f 20 69 6e 20 63 65 72 74 61 69 6e 20   /// in certain 
f580: 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 73 71  fields of the sq
f590: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
f5a0: 20 73 74 72 75 63 74 75 72 65 20 61 6e 64 20 70   structure and p
f5b0: 61 73 73 69 6e 67 20 61 0d 0a 20 20 20 20 20 20  assing a..      
f5c0: 20 20 2f 2f 2f 20 70 6f 69 6e 74 65 72 20 74 6f    /// pointer to
f5d0: 20 74 68 61 74 20 73 74 72 75 63 74 75 72 65 20   that structure 
f5e0: 69 6e 74 6f 20 78 42 65 73 74 49 6e 64 65 78 20  into xBestIndex 
f5f0: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
f600: 72 61 6d 65 74 65 72 2e 0d 0a 20 20 20 20 20 20  rameter...      
f610: 20 20 2f 2f 2f 20 54 68 65 20 78 42 65 73 74 49    /// The xBestI
f620: 6e 64 65 78 20 6d 65 74 68 6f 64 20 66 69 6c 6c  ndex method fill
f630: 73 20 6f 75 74 20 6f 74 68 65 72 20 66 69 65 6c  s out other fiel
f640: 64 73 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ds of this struc
f650: 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ture..        //
f660: 2f 20 77 68 69 63 68 20 66 6f 72 6d 73 20 74 68  / which forms th
f670: 65 20 72 65 70 6c 79 2e 20 54 68 65 20 73 71 6c  e reply. The sql
f680: 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20  ite3_index_info 
f690: 73 74 72 75 63 74 75 72 65 20 6c 6f 6f 6b 73 20  structure looks 
f6a0: 6c 69 6b 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  like..        //
f6b0: 2f 20 74 68 69 73 3a 0d 0a 20 20 20 20 20 20 20  / this:..       
f6c0: 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f   ///..        //
f6d0: 2f 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  /  struct sqlite
f6e0: 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 7b 0d 0a  3_index_info {..
f6f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 2f          ///    /
f700: 2a 20 49 6e 70 75 74 73 20 2a 2f 0d 0a 20 20 20  * Inputs */..   
f710: 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73       ///    cons
f720: 74 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e  t int nConstrain
f730: 74 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  t;   /* Number o
f740: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
f750: 6e 73 74 72 61 69 6e 74 20 2a 2f 0d 0a 20 20 20  nstraint */..   
f760: 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73       ///    cons
f770: 74 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  t struct sqlite3
f780: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
f790: 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t {..        ///
f7a0: 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 75         int iColu
f7b0: 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
f7c0: 43 6f 6c 75 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68  Column on left-h
f7d0: 61 6e 64 20 73 69 64 65 20 6f 66 0d 0a 20 20 20  and side of..   
f7e0: 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f800: 20 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61 69        * constrai
f810: 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  nt */..        /
f820: 2f 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65  //       unsigne
f830: 64 20 63 68 61 72 20 6f 70 3b 20 20 20 20 20 2f  d char op;     /
f840: 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70 65  * Constraint ope
f850: 72 61 74 6f 72 20 2a 2f 0d 0a 20 20 20 20 20 20  rator */..      
f860: 20 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73 69    ///       unsi
f870: 67 6e 65 64 20 63 68 61 72 20 75 73 61 62 6c 65  gned char usable
f880: 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69  ; /* True if thi
f890: 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  s constraint is 
f8a0: 75 73 61 62 6c 65 20 2a 2f 0d 0a 20 20 20 20 20  usable */..     
f8b0: 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74     ///       int
f8c0: 20 69 54 65 72 6d 4f 66 66 73 65 74 3b 20 20 20   iTermOffset;   
f8d0: 20 20 20 2f 2a 20 55 73 65 64 20 69 6e 74 65 72     /* Used inter
f8e0: 6e 61 6c 6c 79 20 2d 20 78 42 65 73 74 49 6e 64  nally - xBestInd
f8f0: 65 78 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20  ex should..     
f900: 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f920: 20 20 20 20 2a 20 69 67 6e 6f 72 65 20 2a 2f 0d      * ignore */.
f930: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
f940: 7d 20 2a 63 6f 6e 73 74 20 61 43 6f 6e 73 74 72  } *const aConstr
f950: 61 69 6e 74 3b 20 20 20 20 2f 2a 20 54 61 62 6c  aint;    /* Tabl
f960: 65 20 6f 66 20 57 48 45 52 45 20 63 6c 61 75 73  e of WHERE claus
f970: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
f980: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
f990: 20 63 6f 6e 73 74 20 69 6e 74 20 6e 4f 72 64 65   const int nOrde
f9a0: 72 42 79 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rBy;      /* Num
f9b0: 62 65 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20  ber of terms in 
f9c0: 74 68 65 20 4f 52 44 45 52 20 42 59 0d 0a 20 20  the ORDER BY..  
f9d0: 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9f0: 20 20 20 20 20 20 20 2a 20 63 6c 61 75 73 65 20         * clause 
fa00: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
fa10: 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20     const struct 
fa20: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72  sqlite3_index_or
fa30: 64 65 72 62 79 20 7b 0d 0a 20 20 20 20 20 20 20  derby {..       
fa40: 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74 20 69   ///       int i
fa50: 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
fa60: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
fa70: 72 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  r */..        //
fa80: 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /       unsigned
fa90: 20 63 68 61 72 20 64 65 73 63 3b 20 20 20 2f 2a   char desc;   /*
faa0: 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 2e 20   True for DESC. 
fab0: 20 46 61 6c 73 65 20 66 6f 72 20 41 53 43 2e 20   False for ASC. 
fac0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
fad0: 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 4f 72 64     } *const aOrd
fae0: 65 72 42 79 3b 20 20 20 20 20 20 20 2f 2a 20 54  erBy;       /* T
faf0: 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
fb00: 73 65 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  se */..        /
fb10: 2f 2f 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 73  //    /* Outputs
fb20: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
fb30: 20 20 20 20 73 74 72 75 63 74 20 73 71 6c 69 74      struct sqlit
fb40: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
fb50: 69 6e 74 5f 75 73 61 67 65 20 7b 0d 0a 20 20 20  int_usage {..   
fb60: 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 69 6e       ///      in
fb70: 74 20 61 72 67 76 49 6e 64 65 78 3b 20 20 20 20  t argvIndex;    
fb80: 20 20 20 20 20 2f 2a 20 69 66 20 67 72 65 61 74       /* if great
fb90: 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 63 6f  er than zero, co
fba0: 6e 73 74 72 61 69 6e 74 20 69 73 0d 0a 20 20 20  nstraint is..   
fbb0: 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbd0: 20 20 20 20 20 20 2a 20 70 61 72 74 20 6f 66 20        * part of 
fbe0: 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72 20  argv to xFilter 
fbf0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
fc00: 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68       unsigned ch
fc10: 61 72 20 6f 6d 69 74 3b 20 20 20 20 2f 2a 20 44  ar omit;    /* D
fc20: 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20 74 65 73  o not code a tes
fc30: 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20  t for this..    
fc40: 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc60: 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61 69 6e       * constrain
fc70: 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t */..        //
fc80: 2f 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 43  /    } *const aC
fc90: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 3b 0d  onstraintUsage;.
fca0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
fcb0: 69 6e 74 20 69 64 78 4e 75 6d 3b 20 20 20 20 20  int idxNum;     
fcc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
fcd0: 65 72 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74  er used to ident
fce0: 69 66 79 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  ify the index */
fcf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
fd00: 20 63 68 61 72 20 2a 69 64 78 53 74 72 3b 20 20   char *idxStr;  
fd10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
fd20: 69 6e 67 2c 20 70 6f 73 73 69 62 6c 79 20 6f 62  ing, possibly ob
fd30: 74 61 69 6e 65 64 20 66 72 6f 6d 0d 0a 20 20 20  tained from..   
fd40: 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd60: 20 20 20 20 20 20 2a 20 73 71 6c 69 74 65 33 5f        * sqlite3_
fd70: 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0d 0a 20 20 20  malloc() */..   
fd80: 20 20 20 20 20 2f 2f 2f 20 20 20 20 69 6e 74 20       ///    int 
fd90: 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53 74 72  needToFreeIdxStr
fda0: 3b 20 20 20 20 2f 2a 20 46 72 65 65 20 69 64 78  ;    /* Free idx
fdb0: 53 74 72 20 75 73 69 6e 67 20 73 71 6c 69 74 65  Str using sqlite
fdc0: 33 5f 66 72 65 65 28 29 20 69 66 0d 0a 20 20 20  3_free() if..   
fdd0: 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
fde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdf0: 20 20 20 20 20 20 2a 20 74 72 75 65 20 2a 2f 0d        * true */.
fe00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
fe10: 69 6e 74 20 6f 72 64 65 72 42 79 43 6f 6e 73 75  int orderByConsu
fe20: 6d 65 64 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  med;     /* True
fe30: 20 69 66 20 6f 75 74 70 75 74 20 69 73 20 61 6c   if output is al
fe40: 72 65 61 64 79 20 6f 72 64 65 72 65 64 20 2a 2f  ready ordered */
fe50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
fe60: 20 64 6f 75 62 6c 65 20 65 73 74 69 6d 61 74 65   double estimate
fe70: 64 43 6f 73 74 3b 20 20 20 20 2f 2a 20 45 73 74  dCost;    /* Est
fe80: 69 6d 61 74 65 64 20 63 6f 73 74 20 6f 66 20 75  imated cost of u
fe90: 73 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  sing this index 
fea0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
feb0: 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   };..        ///
fec0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 6e  ..        /// In
fed0: 20 61 64 64 69 74 69 6f 6e 2c 20 74 68 65 72 65   addition, there
fee0: 20 61 72 65 20 73 6f 6d 65 20 64 65 66 69 6e 65   are some define
fef0: 64 20 63 6f 6e 73 74 61 6e 74 73 3a 0d 0a 20 20  d constants:..  
ff00: 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20        ///..     
ff10: 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20     ///  #define 
ff20: 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e  SQLITE_INDEX_CON
ff30: 53 54 52 41 49 4e 54 5f 45 51 20 20 20 20 32 0d  STRAINT_EQ    2.
ff40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64  .        ///  #d
ff50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44  efine SQLITE_IND
ff60: 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 47 54  EX_CONSTRAINT_GT
ff70: 20 20 20 20 34 0d 0a 20 20 20 20 20 20 20 20 2f      4..        /
ff80: 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  //  #define SQLI
ff90: 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41  TE_INDEX_CONSTRA
ffa0: 49 4e 54 5f 4c 45 20 20 20 20 38 0d 0a 20 20 20  INT_LE    8..   
ffb0: 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e       ///  #defin
ffc0: 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43  e SQLITE_INDEX_C
ffd0: 4f 4e 53 54 52 41 49 4e 54 5f 4c 54 20 20 20 20  ONSTRAINT_LT    
ffe0: 31 36 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  16..        /// 
fff0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
10000 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54  INDEX_CONSTRAINT
10010 5f 47 45 20 20 20 20 33 32 0d 0a 20 20 20 20 20  _GE    32..     
10020 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20     ///  #define 
10030 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e  SQLITE_INDEX_CON
10040 53 54 52 41 49 4e 54 5f 4d 41 54 43 48 20 36 34  STRAINT_MATCH 64
10050 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20  ..        ///.. 
10060 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 53         /// The S
10070 51 4c 69 74 65 20 63 6f 72 65 20 63 61 6c 6c 73  QLite core calls
10080 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   the xBestIndex 
10090 6d 65 74 68 6f 64 20 77 68 65 6e 20 69 74 20 69  method when it i
100a0 73 20 63 6f 6d 70 69 6c 69 6e 67 20 61 0d 0a 20  s compiling a.. 
100b0 20 20 20 20 20 20 20 2f 2f 2f 20 71 75 65 72 79         /// query
100c0 20 74 68 61 74 20 69 6e 76 6f 6c 76 65 73 20 61   that involves a
100d0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
100e0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
100f0 53 51 4c 69 74 65 20 63 61 6c 6c 73 0d 0a 20 20  SQLite calls..  
10100 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d        /// this m
10110 65 74 68 6f 64 20 77 68 65 6e 20 69 74 20 69 73  ethod when it is
10120 20 72 75 6e 6e 69 6e 67 20 73 71 6c 69 74 65 33   running sqlite3
10130 5f 70 72 65 70 61 72 65 28 29 20 6f 72 20 74 68  _prepare() or th
10140 65 20 65 71 75 69 76 61 6c 65 6e 74 2e 0d 0a 20  e equivalent... 
10150 20 20 20 20 20 20 20 2f 2f 2f 20 42 79 20 63 61         /// By ca
10160 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65 74 68 6f  lling this metho
10170 64 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  d, the SQLite co
10180 72 65 20 69 73 20 73 61 79 69 6e 67 20 74 6f 20  re is saying to 
10190 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20  the virtual..   
101a0 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 74       /// table t
101b0 68 61 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20  hat it needs to 
101c0 61 63 63 65 73 73 20 73 6f 6d 65 20 73 75 62 73  access some subs
101d0 65 74 20 6f 66 20 74 68 65 20 72 6f 77 73 20 69  et of the rows i
101e0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
101f0 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
10200 20 61 6e 64 20 69 74 20 77 61 6e 74 73 20 74 6f   and it wants to
10210 20 6b 6e 6f 77 20 74 68 65 20 6d 6f 73 74 20 65   know the most e
10220 66 66 69 63 69 65 6e 74 20 77 61 79 20 74 6f 20  fficient way to 
10230 64 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  do..        /// 
10240 74 68 61 74 20 61 63 63 65 73 73 2e 20 54 68 65  that access. The
10250 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68   xBestIndex meth
10260 6f 64 20 72 65 70 6c 69 65 73 20 77 69 74 68 20  od replies with 
10270 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
10280 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
10290 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 63 61  e SQLite core ca
102a0 6e 20 74 68 65 6e 20 75 73 65 20 74 6f 20 63 6f  n then use to co
102b0 6e 64 75 63 74 20 61 6e 20 65 66 66 69 63 69 65  nduct an efficie
102c0 6e 74 20 73 65 61 72 63 68 20 6f 66 20 74 68 65  nt search of the
102d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
102e0 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
102f0 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20        ///..     
10300 20 20 20 2f 2f 2f 20 57 68 69 6c 65 20 63 6f 6d     /// While com
10310 70 69 6c 69 6e 67 20 61 20 73 69 6e 67 6c 65 20  piling a single 
10320 53 51 4c 20 71 75 65 72 79 2c 20 74 68 65 20 53  SQL query, the S
10330 51 4c 69 74 65 20 63 6f 72 65 20 6d 69 67 68 74  QLite core might
10340 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   call..        /
10350 2f 2f 20 78 42 65 73 74 49 6e 64 65 78 20 6d 75  // xBestIndex mu
10360 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 77 69 74  ltiple times wit
10370 68 20 64 69 66 66 65 72 65 6e 74 20 73 65 74 74  h different sett
10380 69 6e 67 73 20 69 6e 0d 0a 20 20 20 20 20 20 20  ings in..       
10390 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64   /// sqlite3_ind
103a0 65 78 5f 69 6e 66 6f 2e 20 54 68 65 20 53 51 4c  ex_info. The SQL
103b0 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 74 68  ite core will th
103c0 65 6e 20 73 65 6c 65 63 74 20 74 68 65 0d 0a 20  en select the.. 
103d0 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 62 69         /// combi
103e0 6e 61 74 69 6f 6e 20 74 68 61 74 20 61 70 70 65  nation that appe
103f0 61 72 73 20 74 6f 20 67 69 76 65 20 74 68 65 20  ars to give the 
10400 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
10410 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a  ...        ///..
10420 20 20 20 20 20 20 20 20 2f 2f 2f 20 42 65 66 6f          /// Befo
10430 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 69 73 20  re calling this 
10440 6d 65 74 68 6f 64 2c 20 74 68 65 20 53 51 4c 69  method, the SQLi
10450 74 65 20 63 6f 72 65 20 69 6e 69 74 69 61 6c 69  te core initiali
10460 7a 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0d  zes an instance.
10470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20  .        /// of 
10480 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  the sqlite3_inde
10490 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  x_info structure
104a0 20 77 69 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f   with informatio
104b0 6e 20 61 62 6f 75 74 20 74 68 65 0d 0a 20 20 20  n about the..   
104c0 20 20 20 20 20 2f 2f 2f 20 71 75 65 72 79 20 74       /// query t
104d0 68 61 74 20 69 74 20 69 73 20 63 75 72 72 65 6e  hat it is curren
104e0 74 6c 79 20 74 72 79 69 6e 67 20 74 6f 20 70 72  tly trying to pr
104f0 6f 63 65 73 73 2e 20 54 68 69 73 20 69 6e 66 6f  ocess. This info
10500 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  rmation..       
10510 20 2f 2f 2f 20 64 65 72 69 76 65 73 20 6d 61 69   /// derives mai
10520 6e 6c 79 20 66 72 6f 6d 20 74 68 65 20 57 48 45  nly from the WHE
10530 52 45 20 63 6c 61 75 73 65 20 61 6e 64 20 4f 52  RE clause and OR
10540 44 45 52 20 42 59 20 6f 72 20 47 52 4f 55 50 20  DER BY or GROUP 
10550 42 59 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  BY..        /// 
10560 63 6c 61 75 73 65 73 20 6f 66 20 74 68 65 20 71  clauses of the q
10570 75 65 72 79 2c 20 62 75 74 20 61 6c 73 6f 20 66  uery, but also f
10580 72 6f 6d 20 61 6e 79 20 4f 4e 20 6f 72 20 55 53  rom any ON or US
10590 49 4e 47 20 63 6c 61 75 73 65 73 20 69 66 20 74  ING clauses if t
105a0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
105b0 71 75 65 72 79 20 69 73 20 61 20 6a 6f 69 6e 2e  query is a join.
105c0 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   The information
105d0 20 74 68 61 74 20 74 68 65 20 53 51 4c 69 74 65   that the SQLite
105e0 20 63 6f 72 65 20 70 72 6f 76 69 64 65 73 20 74   core provides t
105f0 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  o..        /// t
10600 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
10610 74 68 6f 64 20 69 73 20 68 65 6c 64 20 69 6e 20  thod is held in 
10620 74 68 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  the part of the 
10630 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 69  structure that i
10640 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  s..        /// m
10650 61 72 6b 65 64 20 61 73 20 22 49 6e 70 75 74 73  arked as "Inputs
10660 22 2e 20 54 68 65 20 22 4f 75 74 70 75 74 73 22  ". The "Outputs"
10670 20 73 65 63 74 69 6f 6e 20 69 73 20 69 6e 69 74   section is init
10680 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e  ialized to zero.
10690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20  ..        ///.. 
106a0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69         /// The i
106b0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68  nformation in th
106c0 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
106d0 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 69  info structure i
106e0 73 20 65 70 68 65 6d 65 72 61 6c 0d 0a 20 20 20  s ephemeral..   
106f0 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20 6d 61 79       /// and may
10700 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
10710 6f 72 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 61  or deallocated a
10720 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 78 42  s soon as the xB
10730 65 73 74 49 6e 64 65 78 0d 0a 20 20 20 20 20 20  estIndex..      
10740 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 72 65 74    /// method ret
10750 75 72 6e 73 2e 20 49 66 20 74 68 65 20 78 42 65  urns. If the xBe
10760 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 6e  stIndex method n
10770 65 65 64 73 20 74 6f 20 72 65 6d 65 6d 62 65 72  eeds to remember
10780 20 61 6e 79 20 70 61 72 74 0d 0a 20 20 20 20 20   any part..     
10790 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20 73 71     /// of the sq
107a0 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
107b0 20 73 74 72 75 63 74 75 72 65 2c 20 69 74 20 73   structure, it s
107c0 68 6f 75 6c 64 20 6d 61 6b 65 20 61 20 63 6f 70  hould make a cop
107d0 79 2e 20 43 61 72 65 0d 0a 20 20 20 20 20 20 20  y. Care..       
107e0 20 2f 2f 2f 20 6d 75 73 74 20 62 65 20 74 61 6b   /// must be tak
107f0 65 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  e to store the c
10800 6f 70 79 20 69 6e 20 61 20 70 6c 61 63 65 20 77  opy in a place w
10810 68 65 72 65 20 69 74 20 77 69 6c 6c 20 62 65 0d  here it will be.
10820 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 61  .        /// dea
10830 6c 6c 6f 63 61 74 65 64 2c 20 73 75 63 68 20 61  llocated, such a
10840 73 20 69 6e 20 74 68 65 20 69 64 78 53 74 72 20  s in the idxStr 
10850 66 69 65 6c 64 20 77 69 74 68 20 6e 65 65 64 54  field with needT
10860 6f 46 72 65 65 49 64 78 53 74 72 20 73 65 74 0d  oFreeIdxStr set.
10870 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
10880 31 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d  1...        ///.
10890 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 74  .        /// Not
108a0 65 20 74 68 61 74 20 78 42 65 73 74 49 6e 64 65  e that xBestInde
108b0 78 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 62 65  x will always be
108c0 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 78   called before x
108d0 46 69 6c 74 65 72 2c 20 73 69 6e 63 65 0d 0a 20  Filter, since.. 
108e0 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 69         /// the i
108f0 64 78 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72  dxNum and idxStr
10900 20 6f 75 74 70 75 74 73 20 66 72 6f 6d 20 78 42   outputs from xB
10910 65 73 74 49 6e 64 65 78 20 61 72 65 20 72 65 71  estIndex are req
10920 75 69 72 65 64 20 69 6e 70 75 74 73 0d 0a 20 20  uired inputs..  
10930 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78 46 69        /// to xFi
10940 6c 74 65 72 2e 20 48 6f 77 65 76 65 72 2c 20 74  lter. However, t
10950 68 65 72 65 20 69 73 20 6e 6f 20 67 75 61 72 61  here is no guara
10960 6e 74 65 65 20 74 68 61 74 20 78 46 69 6c 74 65  ntee that xFilte
10970 72 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  r will be..     
10980 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 20 66 6f     /// called fo
10990 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
109a0 73 66 75 6c 20 78 42 65 73 74 49 6e 64 65 78 2e  sful xBestIndex.
109b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20  ..        ///.. 
109c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
109d0 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
109e0 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
109f0 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
10a00 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
10a10 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
10a20 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 0d  ...        /// .
10a30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 32 2e 33  .        /// 2.3
10a40 2e 31 20 49 6e 70 75 74 73 0d 0a 20 20 20 20 20  .1 Inputs..     
10a50 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20     ///..        
10a60 2f 2f 2f 20 54 68 65 20 6d 61 69 6e 20 74 68 69  /// The main thi
10a70 6e 67 20 74 68 61 74 20 74 68 65 20 53 51 4c 69  ng that the SQLi
10a80 74 65 20 63 6f 72 65 20 69 73 20 74 72 79 69 6e  te core is tryin
10a90 67 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  g to communicate
10aa0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
10ab0 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62   /// virtual tab
10ac0 6c 65 20 69 73 20 74 68 65 20 63 6f 6e 73 74 72  le is the constr
10ad0 61 69 6e 74 73 20 74 68 61 74 20 61 72 65 20 61  aints that are a
10ae0 76 61 69 6c 61 62 6c 65 20 74 6f 20 6c 69 6d 69  vailable to limi
10af0 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  t the..        /
10b00 2f 2f 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  // number of row
10b10 73 20 74 68 61 74 20 6e 65 65 64 20 74 6f 20 62  s that need to b
10b20 65 20 73 65 61 72 63 68 65 64 2e 20 54 68 65 20  e searched. The 
10b30 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 61 72  aConstraint[] ar
10b40 72 61 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ray..        ///
10b50 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 65 6e   contains one en
10b60 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6e  try for each con
10b70 73 74 72 61 69 6e 74 2e 20 54 68 65 72 65 20 77  straint. There w
10b80 69 6c 6c 20 62 65 20 65 78 61 63 74 6c 79 0d 0a  ill be exactly..
10b90 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 43 6f 6e          /// nCon
10ba0 73 74 72 61 69 6e 74 20 65 6e 74 72 69 65 73 20  straint entries 
10bb0 69 6e 20 74 68 61 74 20 61 72 72 61 79 2e 0d 0a  in that array...
10bc0 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20          ///..   
10bd0 20 20 20 20 20 2f 2f 2f 20 45 61 63 68 20 63 6f       /// Each co
10be0 6e 73 74 72 61 69 6e 74 20 77 69 6c 6c 20 63 6f  nstraint will co
10bf0 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 74 65  rrespond to a te
10c00 72 6d 20 69 6e 20 74 68 65 20 57 48 45 52 45 20  rm in the WHERE 
10c10 63 6c 61 75 73 65 20 6f 72 20 69 6e 0d 0a 20 20  clause or in..  
10c20 20 20 20 20 20 20 2f 2f 2f 20 61 20 55 53 49 4e        /// a USIN
10c30 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 74  G or ON clause t
10c40 68 61 74 20 69 73 20 6f 66 20 74 68 65 20 66 6f  hat is of the fo
10c50 72 6d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d  rm..        ///.
10c60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
10c70 20 63 6f 6c 75 6d 6e 20 4f 50 20 45 58 50 52 0d   column OP EXPR.
10c80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
10c90 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 72 65 20        /// Where 
10ca0 22 63 6f 6c 75 6d 6e 22 20 69 73 20 61 20 63 6f  "column" is a co
10cb0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 76 69 72 74  lumn in the virt
10cc0 75 61 6c 20 74 61 62 6c 65 2c 20 4f 50 20 69 73  ual table, OP is
10cd0 20 61 6e 20 6f 70 65 72 61 74 6f 72 0d 0a 20 20   an operator..  
10ce0 20 20 20 20 20 20 2f 2f 2f 20 6c 69 6b 65 20 22        /// like "
10cf0 3d 22 20 6f 72 20 22 26 6c 74 3b 22 2c 20 61 6e  =" or "&lt;", an
10d00 64 20 45 58 50 52 20 69 73 20 61 6e 20 61 72 62  d EXPR is an arb
10d10 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f  itrary expressio
10d20 6e 2e 20 53 6f 2c 20 66 6f 72 0d 0a 20 20 20 20  n. So, for..    
10d30 20 20 20 20 2f 2f 2f 20 65 78 61 6d 70 6c 65 2c      /// example,
10d40 20 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c   if the WHERE cl
10d50 61 75 73 65 20 63 6f 6e 74 61 69 6e 65 64 20 61  ause contained a
10d60 20 74 65 72 6d 20 6c 69 6b 65 20 74 68 69 73 3a   term like this:
10d70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20  ..        ///.. 
10d80 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
10d90 20 20 20 20 61 20 3d 20 35 0d 0a 20 20 20 20 20      a = 5..     
10da0 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20     ///..        
10db0 2f 2f 2f 20 54 68 65 6e 20 6f 6e 65 20 6f 66 20  /// Then one of 
10dc0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  the constraints 
10dd0 77 6f 75 6c 64 20 62 65 20 6f 6e 20 74 68 65 20  would be on the 
10de0 22 61 22 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0d  "a" column with.
10df0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 65  .        /// ope
10e00 72 61 74 6f 72 20 22 3d 22 20 61 6e 64 20 61 6e  rator "=" and an
10e10 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 22   expression of "
10e20 35 22 2e 20 43 6f 6e 73 74 72 61 69 6e 74 73 20  5". Constraints 
10e30 6e 65 65 64 20 6e 6f 74 20 68 61 76 65 20 61 0d  need not have a.
10e40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 74  .        /// lit
10e50 65 72 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  eral representat
10e60 69 6f 6e 20 6f 66 20 74 68 65 20 57 48 45 52 45  ion of the WHERE
10e70 20 63 6c 61 75 73 65 2e 20 54 68 65 20 71 75 65   clause. The que
10e80 72 79 20 6f 70 74 69 6d 69 7a 65 72 0d 0a 20 20  ry optimizer..  
10e90 20 20 20 20 20 20 2f 2f 2f 20 6d 69 67 68 74 20        /// might 
10ea0 6d 61 6b 65 20 74 72 61 6e 73 66 6f 72 6d 61 74  make transformat
10eb0 69 6f 6e 73 20 74 6f 20 74 68 65 20 57 48 45 52  ions to the WHER
10ec0 45 20 63 6c 61 75 73 65 20 69 6e 20 6f 72 64 65  E clause in orde
10ed0 72 20 74 6f 20 65 78 74 72 61 63 74 0d 0a 20 20  r to extract..  
10ee0 20 20 20 20 20 20 2f 2f 2f 20 61 73 20 6d 61 6e        /// as man
10ef0 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 73  y constraints as
10f00 20 69 74 20 63 61 6e 2e 20 53 6f 2c 20 66 6f 72   it can. So, for
10f10 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74 68 65   example, if the
10f20 20 57 48 45 52 45 20 63 6c 61 75 73 65 0d 0a 20   WHERE clause.. 
10f30 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 61         /// conta
10f40 69 6e 65 64 20 73 6f 6d 65 74 68 69 6e 67 20 6c  ined something l
10f50 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20 20 20 20  ike this:..     
10f60 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20     ///..        
10f70 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20 42  ///          x B
10f80 45 54 57 45 45 4e 20 31 30 20 41 4e 44 20 31 30  ETWEEN 10 AND 10
10f90 30 20 41 4e 44 20 39 39 39 26 67 74 3b 79 0d 0a  0 AND 999&gt;y..
10fa0 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20          ///..   
10fb0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 71 75 65       /// The que
10fc0 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 6d 69 67  ry optimizer mig
10fd0 68 74 20 74 72 61 6e 73 6c 61 74 65 20 74 68 69  ht translate thi
10fe0 73 20 69 6e 74 6f 20 74 68 72 65 65 20 73 65 70  s into three sep
10ff0 61 72 61 74 65 0d 0a 20 20 20 20 20 20 20 20 2f  arate..        /
11000 2f 2f 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 0d  // constraints:.
11010 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
11020 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
11030 20 20 20 78 20 26 67 74 3b 3d 20 31 30 0d 0a 20     x &gt;= 10.. 
11040 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
11050 20 20 20 20 78 20 26 6c 74 3b 3d 20 31 30 30 0d      x &lt;= 100.
11060 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11070 20 20 20 20 20 20 79 20 26 6c 74 3b 20 39 39 39        y &lt; 999
11080 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20  ..        ///.. 
11090 20 20 20 20 20 20 20 2f 2f 2f 20 46 6f 72 20 65         /// For e
110a0 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  ach constraint, 
110b0 74 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b  the aConstraint[
110c0 5d 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20  ].iColumn field 
110d0 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20  indicates..     
110e0 20 20 20 2f 2f 2f 20 77 68 69 63 68 20 63 6f 6c     /// which col
110f0 75 6d 6e 20 61 70 70 65 61 72 73 20 6f 6e 20 74  umn appears on t
11100 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64  he left-hand sid
11110 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
11120 69 6e 74 2e 20 54 68 65 0d 0a 20 20 20 20 20 20  int. The..      
11130 20 20 2f 2f 2f 20 66 69 72 73 74 20 63 6f 6c 75    /// first colu
11140 6d 6e 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  mn of the virtua
11150 6c 20 74 61 62 6c 65 20 69 73 20 63 6f 6c 75 6d  l table is colum
11160 6e 20 30 2e 20 54 68 65 20 72 6f 77 69 64 20 6f  n 0. The rowid o
11170 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
11180 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  // virtual table
11190 20 69 73 20 63 6f 6c 75 6d 6e 20 2d 31 2e 20 54   is column -1. T
111a0 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d  he aConstraint[]
111b0 2e 6f 70 20 66 69 65 6c 64 20 69 6e 64 69 63 61  .op field indica
111c0 74 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  tes..        ///
111d0 20 77 68 69 63 68 20 6f 70 65 72 61 74 6f 72 20   which operator 
111e0 69 73 20 75 73 65 64 2e 20 54 68 65 20 53 51 4c  is used. The SQL
111f0 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52  ITE_INDEX_CONSTR
11200 41 49 4e 54 5f 2a 20 63 6f 6e 73 74 61 6e 74 73  AINT_* constants
11210 20 6d 61 70 0d 0a 20 20 20 20 20 20 20 20 2f 2f   map..        //
11220 2f 20 69 6e 74 65 67 65 72 20 63 6f 6e 73 74 61  / integer consta
11230 6e 74 73 20 69 6e 74 6f 20 6f 70 65 72 61 74 6f  nts into operato
11240 72 20 76 61 6c 75 65 73 2e 20 43 6f 6c 75 6d 6e  r values. Column
11250 73 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 6f  s occur in the o
11260 72 64 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rder..        //
11270 2f 20 74 68 65 79 20 77 65 72 65 20 64 65 66 69  / they were defi
11280 6e 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c 20  ned by the call 
11290 74 6f 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  to sqlite3_decla
112a0 72 65 5f 76 74 61 62 28 29 20 69 6e 20 74 68 65  re_vtab() in the
112b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43  ..        /// xC
112c0 72 65 61 74 65 20 6f 72 20 78 43 6f 6e 6e 65 63  reate or xConnec
112d0 74 20 6d 65 74 68 6f 64 2e 20 48 69 64 64 65 6e  t method. Hidden
112e0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f 75   columns are cou
112f0 6e 74 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20  nted when..     
11300 20 20 20 2f 2f 2f 20 64 65 74 65 72 6d 69 6e 69     /// determini
11310 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  ng the column in
11320 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
11330 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  /..        /// T
11340 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d  he aConstraint[]
11350 20 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 73 20   array contains 
11360 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11370 74 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e 74  t all constraint
11380 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  s..        /// t
11390 68 61 74 20 61 70 70 6c 79 20 74 6f 20 74 68 65  hat apply to the
113a0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
113b0 42 75 74 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  But some of the 
113c0 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 69 67 68  constraints migh
113d0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  t..        /// n
113e0 6f 74 20 62 65 20 75 73 61 62 6c 65 20 62 65 63  ot be usable bec
113f0 61 75 73 65 20 6f 66 20 74 68 65 20 77 61 79 20  ause of the way 
11400 74 61 62 6c 65 73 20 61 72 65 20 6f 72 64 65 72  tables are order
11410 65 64 20 69 6e 20 61 20 6a 6f 69 6e 2e 20 54 68  ed in a join. Th
11420 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
11430 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
11440 20 6d 75 73 74 20 74 68 65 72 65 66 6f 72 65 20   must therefore 
11450 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 20 63 6f  only consider co
11460 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74 0d 0a  nstraints that..
11470 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 76 65          /// have
11480 20 61 6e 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b   an aConstraint[
11490 5d 2e 75 73 61 62 6c 65 20 66 6c 61 67 20 77 68  ].usable flag wh
114a0 69 63 68 20 69 73 20 74 72 75 65 2e 0d 0a 20 20  ich is true...  
114b0 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20        ///..     
114c0 20 20 20 2f 2f 2f 20 49 6e 20 61 64 64 69 74 69     /// In additi
114d0 6f 6e 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75  on to WHERE clau
114e0 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  se constraints, 
114f0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
11500 61 6c 73 6f 20 74 65 6c 6c 73 0d 0a 20 20 20 20  also tells..    
11510 20 20 20 20 2f 2f 2f 20 74 68 65 20 78 42 65 73      /// the xBes
11520 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 61 62  tIndex method ab
11530 6f 75 74 20 74 68 65 20 4f 52 44 45 52 20 42 59  out the ORDER BY
11540 20 63 6c 61 75 73 65 2e 20 28 49 6e 20 61 6e 20   clause. (In an 
11550 61 67 67 72 65 67 61 74 65 0d 0a 20 20 20 20 20  aggregate..     
11560 20 20 20 2f 2f 2f 20 71 75 65 72 79 2c 20 74 68     /// query, th
11570 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6d 69  e SQLite core mi
11580 67 68 74 20 70 75 74 20 69 6e 20 47 52 4f 55 50  ght put in GROUP
11590 20 42 59 20 63 6c 61 75 73 65 20 69 6e 66 6f 72   BY clause infor
115a0 6d 61 74 69 6f 6e 20 69 6e 0d 0a 20 20 20 20 20  mation in..     
115b0 20 20 20 2f 2f 2f 20 70 6c 61 63 65 20 6f 66 20     /// place of 
115c0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
115d0 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  use information,
115e0 20 62 75 74 20 74 68 69 73 20 66 61 63 74 20 73   but this fact s
115f0 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20  hould not..     
11600 20 20 20 2f 2f 2f 20 6d 61 6b 65 20 61 6e 79 20     /// make any 
11610 64 69 66 66 65 72 65 6e 63 65 20 74 6f 20 74 68  difference to th
11620 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74  e xBestIndex met
11630 68 6f 64 2e 29 20 49 66 20 61 6c 6c 20 74 65 72  hod.) If all ter
11640 6d 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  ms of the..     
11650 20 20 20 2f 2f 2f 20 4f 52 44 45 52 20 42 59 20     /// ORDER BY 
11660 63 6c 61 75 73 65 20 61 72 65 20 63 6f 6c 75 6d  clause are colum
11670 6e 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61  ns in the virtua
11680 6c 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 6e 4f  l table, then nO
11690 72 64 65 72 42 79 0d 0a 20 20 20 20 20 20 20 20  rderBy..        
116a0 2f 2f 2f 20 77 69 6c 6c 20 62 65 20 74 68 65 20  /// will be the 
116b0 6e 75 6d 62 65 72 20 6f 66 20 74 65 72 6d 73 20  number of terms 
116c0 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  in the ORDER BY 
116d0 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 0d 0a  clause and the..
116e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 4f 72 64          /// aOrd
116f0 65 72 42 79 5b 5d 20 61 72 72 61 79 20 77 69 6c  erBy[] array wil
11700 6c 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 63  l identify the c
11710 6f 6c 75 6d 6e 20 66 6f 72 20 65 61 63 68 20 74  olumn for each t
11720 65 72 6d 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  erm in the..    
11730 20 20 20 20 2f 2f 2f 20 6f 72 64 65 72 20 62 79      /// order by
11740 20 63 6c 61 75 73 65 20 61 6e 64 20 77 68 65 74   clause and whet
11750 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
11760 63 6f 6c 75 6d 6e 20 69 73 20 41 53 43 20 6f 72  column is ASC or
11770 20 44 45 53 43 2e 0d 0a 20 20 20 20 20 20 20 20   DESC...        
11780 2f 2f 2f 20 0d 0a 20 20 20 20 20 20 20 20 2f 2f  /// ..        //
11790 2f 20 32 2e 33 2e 32 20 4f 75 74 70 75 74 73 0d  / 2.3.2 Outputs.
117a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
117b0 20 20 20 20 20 20 2f 2f 2f 20 47 69 76 65 6e 20        /// Given 
117c0 61 6c 6c 20 6f 66 20 74 68 65 20 69 6e 66 6f 72  all of the infor
117d0 6d 61 74 69 6f 6e 20 61 62 6f 76 65 2c 20 74 68  mation above, th
117e0 65 20 6a 6f 62 20 6f 66 20 74 68 65 20 78 42 65  e job of the xBe
117f0 73 74 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20  stIndex..       
11800 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 69 74 20 74   /// method it t
11810 6f 20 66 69 67 75 72 65 20 6f 75 74 20 74 68 65  o figure out the
11820 20 62 65 73 74 20 77 61 79 20 74 6f 20 73 65 61   best way to sea
11830 72 63 68 20 74 68 65 20 76 69 72 74 75 61 6c 20  rch the virtual 
11840 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
11850 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ///..        ///
11860 20 54 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   The xBestIndex 
11870 6d 65 74 68 6f 64 20 66 69 6c 6c 73 20 74 68 65  method fills the
11880 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64 78 53   idxNum and idxS
11890 74 72 20 66 69 65 6c 64 73 20 77 69 74 68 0d 0a  tr fields with..
118a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 66 6f          /// info
118b0 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 63 6f 6d  rmation that com
118c0 6d 75 6e 69 63 61 74 65 73 20 61 6e 20 69 6e 64  municates an ind
118d0 65 78 69 6e 67 20 73 74 72 61 74 65 67 79 20 74  exing strategy t
118e0 6f 20 74 68 65 20 78 46 69 6c 74 65 72 0d 0a 20  o the xFilter.. 
118f0 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
11900 64 2e 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69  d. The informati
11910 6f 6e 20 69 6e 20 69 64 78 4e 75 6d 20 61 6e 64  on in idxNum and
11920 20 69 64 78 53 74 72 20 69 73 20 61 72 62 69 74   idxStr is arbit
11930 72 61 72 79 20 61 73 20 66 61 72 20 61 73 0d 0a  rary as far as..
11940 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
11950 53 51 4c 69 74 65 20 63 6f 72 65 20 69 73 20 63  SQLite core is c
11960 6f 6e 63 65 72 6e 65 64 2e 20 54 68 65 20 53 51  oncerned. The SQ
11970 4c 69 74 65 20 63 6f 72 65 20 6a 75 73 74 20 63  Lite core just c
11980 6f 70 69 65 73 20 74 68 65 0d 0a 20 20 20 20 20  opies the..     
11990 20 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61 74 69     /// informati
119a0 6f 6e 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  on through to th
119b0 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
119c0 2e 20 41 6e 79 20 64 65 73 69 72 65 64 20 6d 65  . Any desired me
119d0 61 6e 69 6e 67 20 63 61 6e 0d 0a 20 20 20 20 20  aning can..     
119e0 20 20 20 2f 2f 2f 20 62 65 20 61 73 73 69 67 6e     /// be assign
119f0 65 64 20 74 6f 20 69 64 78 4e 75 6d 20 61 6e 64  ed to idxNum and
11a00 20 69 64 78 53 74 72 20 61 73 20 6c 6f 6e 67 20   idxStr as long 
11a10 61 73 20 78 42 65 73 74 49 6e 64 65 78 20 61 6e  as xBestIndex an
11a20 64 20 78 46 69 6c 74 65 72 0d 0a 20 20 20 20 20  d xFilter..     
11a30 20 20 20 2f 2f 2f 20 61 67 72 65 65 20 6f 6e 20     /// agree on 
11a40 77 68 61 74 20 74 68 61 74 20 6d 65 61 6e 69 6e  what that meanin
11a50 67 20 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  g is...        /
11a60 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  //..        /// 
11a70 54 68 65 20 69 64 78 53 74 72 20 76 61 6c 75 65  The idxStr value
11a80 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
11a90 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 61   obtained from a
11aa0 6e 20 53 51 4c 69 74 65 20 6d 65 6d 6f 72 79 0d  n SQLite memory.
11ab0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 6c  .        /// all
11ac0 6f 63 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ocation function
11ad0 20 73 75 63 68 20 61 73 20 73 71 6c 69 74 65 33   such as sqlite3
11ae0 5f 6d 70 72 69 6e 74 66 28 29 2e 20 49 66 20 74  _mprintf(). If t
11af0 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2c  his is the case,
11b00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
11b10 65 6e 20 74 68 65 20 6e 65 65 64 54 6f 46 72 65  en the needToFre
11b20 65 49 64 78 53 74 72 20 66 6c 61 67 20 6d 75 73  eIdxStr flag mus
11b30 74 20 62 65 20 73 65 74 20 74 6f 20 74 72 75 65  t be set to true
11b40 20 73 6f 20 74 68 61 74 20 74 68 65 0d 0a 20 20   so that the..  
11b50 20 20 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65        /// SQLite
11b60 20 63 6f 72 65 20 77 69 6c 6c 20 6b 6e 6f 77 20   core will know 
11b70 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  to call sqlite3_
11b80 66 72 65 65 28 29 20 6f 6e 20 74 68 61 74 20 73  free() on that s
11b90 74 72 69 6e 67 20 77 68 65 6e 20 69 74 0d 0a 20  tring when it.. 
11ba0 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 73 20 66         /// has f
11bb0 69 6e 69 73 68 65 64 20 77 69 74 68 20 69 74 2c  inished with it,
11bc0 20 61 6e 64 20 74 68 75 73 20 61 76 6f 69 64 20   and thus avoid 
11bd0 61 20 6d 65 6d 6f 72 79 20 6c 65 61 6b 2e 0d 0a  a memory leak...
11be0 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20          ///..   
11bf0 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20       /// If the 
11c00 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 69  virtual table wi
11c10 6c 6c 20 6f 75 74 70 75 74 20 72 6f 77 73 20 69  ll output rows i
11c20 6e 20 74 68 65 20 6f 72 64 65 72 20 73 70 65 63  n the order spec
11c30 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20  ified by the..  
11c40 20 20 20 20 20 20 2f 2f 2f 20 4f 52 44 45 52 20        /// ORDER 
11c50 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
11c60 74 68 65 20 6f 72 64 65 72 42 79 43 6f 6e 73 75  the orderByConsu
11c70 6d 65 64 20 66 6c 61 67 20 6d 61 79 20 62 65 20  med flag may be 
11c80 73 65 74 20 74 6f 20 74 72 75 65 2e 0d 0a 20 20  set to true...  
11c90 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65        /// If the
11ca0 20 6f 75 74 70 75 74 20 69 73 20 6e 6f 74 20 61   output is not a
11cb0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e 20  utomatically in 
11cc0 74 68 65 20 63 6f 72 72 65 63 74 20 6f 72 64 65  the correct orde
11cd0 72 20 74 68 65 6e 0d 0a 20 20 20 20 20 20 20 20  r then..        
11ce0 2f 2f 2f 20 6f 72 64 65 72 42 79 43 6f 6e 73 75  /// orderByConsu
11cf0 6d 65 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74  med must be left
11d00 20 69 6e 20 69 74 73 20 64 65 66 61 75 6c 74 20   in its default 
11d10 66 61 6c 73 65 20 73 65 74 74 69 6e 67 2e 20 54  false setting. T
11d20 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
11d30 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 74   will indicate t
11d40 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  o the SQLite cor
11d50 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 6e  e that it will n
11d60 65 65 64 20 74 6f 20 64 6f 20 61 20 73 65 70 61  eed to do a sepa
11d70 72 61 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rate..        //
11d80 2f 20 73 6f 72 74 69 6e 67 20 70 61 73 73 20 6f  / sorting pass o
11d90 76 65 72 20 74 68 65 20 64 61 74 61 20 61 66 74  ver the data aft
11da0 65 72 20 69 74 20 63 6f 6d 65 73 20 6f 75 74 20  er it comes out 
11db0 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  of the virtual t
11dc0 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
11dd0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  //..        /// 
11de0 54 68 65 20 65 73 74 69 6d 61 74 65 64 43 6f 73  The estimatedCos
11df0 74 20 66 69 65 6c 64 20 73 68 6f 75 6c 64 20 62  t field should b
11e00 65 20 73 65 74 20 74 6f 20 74 68 65 20 65 73 74  e set to the est
11e10 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
11e20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 69  ..        /// di
11e30 73 6b 20 61 63 63 65 73 73 20 6f 70 65 72 61 74  sk access operat
11e40 69 6f 6e 73 20 72 65 71 75 69 72 65 64 20 74 6f  ions required to
11e50 20 65 78 65 63 75 74 65 20 74 68 69 73 20 71 75   execute this qu
11e60 65 72 79 20 61 67 61 69 6e 73 74 20 74 68 65 0d  ery against the.
11e70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72  .        /// vir
11e80 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 65 20  tual table. The 
11e90 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c  SQLite core will
11ea0 20 6f 66 74 65 6e 20 63 61 6c 6c 20 78 42 65 73   often call xBes
11eb0 74 49 6e 64 65 78 20 6d 75 6c 74 69 70 6c 65 0d  tIndex multiple.
11ec0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 69 6d  .        /// tim
11ed0 65 73 20 77 69 74 68 20 64 69 66 66 65 72 65 6e  es with differen
11ee0 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 6f  t constraints, o
11ef0 62 74 61 69 6e 20 6d 75 6c 74 69 70 6c 65 20 63  btain multiple c
11f00 6f 73 74 20 65 73 74 69 6d 61 74 65 73 2c 0d 0a  ost estimates,..
11f10 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 6e          /// then
11f20 20 63 68 6f 6f 73 65 20 74 68 65 20 71 75 65 72   choose the quer
11f30 79 20 70 6c 61 6e 20 74 68 61 74 20 67 69 76 65  y plan that give
11f40 73 20 74 68 65 20 6c 6f 77 65 73 74 20 65 73 74  s the lowest est
11f50 69 6d 61 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  imate...        
11f60 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ///..        ///
11f70 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74   The aConstraint
11f80 55 73 61 67 65 5b 5d 20 61 72 72 61 79 20 63 6f  Usage[] array co
11f90 6e 74 61 69 6e 73 20 6f 6e 65 20 65 6c 65 6d 65  ntains one eleme
11fa0 6e 74 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  nt for each of t
11fb0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
11fc0 6e 43 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73  nConstraint cons
11fd0 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 69  traints in the i
11fe0 6e 70 75 74 73 20 73 65 63 74 69 6f 6e 20 6f 66  nputs section of
11ff0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
12000 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  / sqlite3_index_
12010 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 20  info structure. 
12020 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 55  The aConstraintU
12030 73 61 67 65 5b 5d 20 61 72 72 61 79 20 69 73 20  sage[] array is 
12040 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  used..        //
12050 2f 20 62 79 20 78 42 65 73 74 49 6e 64 65 78 20  / by xBestIndex 
12060 74 6f 20 74 65 6c 6c 20 74 68 65 20 63 6f 72 65  to tell the core
12070 20 68 6f 77 20 69 74 20 69 73 20 75 73 69 6e 67   how it is using
12080 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73   the constraints
12090 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a  ...        ///..
120a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
120b0 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f  xBestIndex metho
120c0 64 20 6d 61 79 20 73 65 74 20 61 43 6f 6e 73 74  d may set aConst
120d0 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e 61 72 67  raintUsage[].arg
120e0 76 49 6e 64 65 78 20 65 6e 74 72 69 65 73 0d 0a  vIndex entries..
120f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 76          /// to v
12100 61 6c 75 65 73 20 67 72 65 61 74 65 72 20 74 68  alues greater th
12110 61 6e 20 6f 6e 65 2e 20 45 78 61 63 74 6c 79 20  an one. Exactly 
12120 6f 6e 65 20 65 6e 74 72 79 20 73 68 6f 75 6c 64  one entry should
12130 20 62 65 20 73 65 74 20 74 6f 20 31 2c 0d 0a 20   be set to 1,.. 
12140 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 6f 74 68         /// anoth
12150 65 72 20 74 6f 20 32 2c 20 61 6e 6f 74 68 65 72  er to 2, another
12160 20 74 6f 20 33 2c 20 61 6e 64 20 73 6f 20 66 6f   to 3, and so fo
12170 72 74 68 20 75 70 20 74 6f 20 61 73 20 6d 61 6e  rth up to as man
12180 79 20 6f 72 20 61 73 20 66 65 77 20 61 73 0d 0a  y or as few as..
12190 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
121a0 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f  xBestIndex metho
121b0 64 20 77 61 6e 74 73 2e 20 54 68 65 20 45 58 50  d wants. The EXP
121c0 52 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  R of the corresp
121d0 6f 6e 64 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  onding..        
121e0 2f 2f 2f 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  /// constraints 
121f0 77 69 6c 6c 20 74 68 65 6e 20 62 65 20 70 61 73  will then be pas
12200 73 65 64 20 69 6e 20 61 73 20 74 68 65 20 61 72  sed in as the ar
12210 67 76 5b 5d 20 70 61 72 61 6d 65 74 65 72 73 20  gv[] parameters 
12220 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
12230 78 46 69 6c 74 65 72 2e 0d 0a 20 20 20 20 20 20  xFilter...      
12240 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f    ///..        /
12250 2f 2f 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  // For example, 
12260 69 66 20 74 68 65 20 61 43 6f 6e 73 74 72 61 69  if the aConstrai
12270 6e 74 5b 33 5d 2e 61 72 67 76 49 6e 64 65 78 20  nt[3].argvIndex 
12280 69 73 20 73 65 74 20 74 6f 20 31 2c 20 74 68 65  is set to 1, the
12290 6e 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20  n when..        
122a0 2f 2f 2f 20 78 46 69 6c 74 65 72 20 69 73 20 63  /// xFilter is c
122b0 61 6c 6c 65 64 2c 20 74 68 65 20 61 72 67 76 5b  alled, the argv[
122c0 30 5d 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  0] passed to xFi
122d0 6c 74 65 72 20 77 69 6c 6c 20 68 61 76 65 20 74  lter will have t
122e0 68 65 20 45 58 50 52 0d 0a 20 20 20 20 20 20 20  he EXPR..       
122f0 20 2f 2f 2f 20 76 61 6c 75 65 20 6f 66 20 74 68   /// value of th
12300 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 33 5d  e aConstraint[3]
12310 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20   constraint...  
12320 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20        ///..     
12330 20 20 20 2f 2f 2f 20 42 79 20 64 65 66 61 75 6c     /// By defaul
12340 74 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  t, the SQLite co
12350 72 65 20 64 6f 75 62 6c 65 20 63 68 65 63 6b 73  re double checks
12360 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e 74 73   all constraints
12370 20 6f 6e 20 65 61 63 68 0d 0a 20 20 20 20 20 20   on each..      
12380 20 20 2f 2f 2f 20 72 6f 77 20 6f 66 20 74 68 65    /// row of the
12390 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74   virtual table t
123a0 68 61 74 20 69 74 20 72 65 63 65 69 76 65 73 2e  hat it receives.
123b0 20 49 66 20 73 75 63 68 20 61 20 63 68 65 63 6b   If such a check
123c0 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   is..        ///
123d0 20 72 65 64 75 6e 64 61 6e 74 2c 20 74 68 65 20   redundant, the 
123e0 78 42 65 73 74 46 69 6c 74 65 72 20 6d 65 74 68  xBestFilter meth
123f0 6f 64 20 63 61 6e 20 73 75 70 70 72 65 73 73 20  od can suppress 
12400 74 68 61 74 20 64 6f 75 62 6c 65 2d 63 68 65 63  that double-chec
12410 6b 20 62 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  k by..        //
12420 2f 20 73 65 74 74 69 6e 67 20 61 43 6f 6e 73 74  / setting aConst
12430 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e 6f 6d 69  raintUsage[].omi
12440 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
12450 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
12460 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
12470 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
12480 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
12490 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
124a0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
124b0 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
124c0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
124d0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
124e0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
124f0 6d 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20  me="pIndex">..  
12500 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
12510 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
12520 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  the sqlite3_inde
12530 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  x_info structure
12540 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
12550 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
12560 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
12570 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
12580 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
12590 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
125a0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
125b0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
125c0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42 65 73  teErrorCode xBes
125d0 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20  tIndex(..       
125e0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
125f0 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
12600 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a 20  IntPtr pIndex.. 
12610 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
12620 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
12630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
12680 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
12690 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
126a0 6f 64 20 72 65 6c 65 61 73 65 73 20 61 20 63 6f  od releases a co
126b0 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 76 69  nnection to a vi
126c0 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 4f 6e 6c  rtual table. Onl
126d0 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  y the..        /
126e0 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  // sqlite3_vtab 
126f0 6f 62 6a 65 63 74 20 69 73 20 64 65 73 74 72 6f  object is destro
12700 79 65 64 2e 20 54 68 65 20 76 69 72 74 75 61 6c  yed. The virtual
12710 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 0d 0a 20   table is not.. 
12720 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 73 74 72         /// destr
12730 6f 79 65 64 20 61 6e 64 20 61 6e 79 20 62 61 63  oyed and any bac
12740 6b 69 6e 67 20 73 74 6f 72 65 20 61 73 73 6f 63  king store assoc
12750 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 76  iated with the v
12760 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
12770 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73        /// persis
12780 74 73 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20  ts. This method 
12790 75 6e 64 6f 65 73 20 74 68 65 20 77 6f 72 6b 20  undoes the work 
127a0 6f 66 20 78 43 6f 6e 6e 65 63 74 2e 0d 0a 20 20  of xConnect...  
127b0 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20        ///..     
127c0 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
127d0 6f 64 20 69 73 20 61 20 64 65 73 74 72 75 63 74  od is a destruct
127e0 6f 72 20 66 6f 72 20 61 20 63 6f 6e 6e 65 63 74  or for a connect
127f0 69 6f 6e 20 74 6f 20 74 68 65 20 76 69 72 74 75  ion to the virtu
12800 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
12810 20 20 20 2f 2f 2f 20 43 6f 6e 74 72 61 73 74 20     /// Contrast 
12820 74 68 69 73 20 6d 65 74 68 6f 64 20 77 69 74 68  this method with
12830 20 78 44 65 73 74 72 6f 79 2e 20 54 68 65 20 78   xDestroy. The x
12840 44 65 73 74 72 6f 79 20 69 73 20 61 20 64 65 73  Destroy is a des
12850 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20  tructor..       
12860 20 2f 2f 2f 20 66 6f 72 20 74 68 65 20 65 6e 74   /// for the ent
12870 69 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ire virtual tabl
12880 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d  e...        ///.
12890 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
128a0 20 78 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 74   xDisconnect met
128b0 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
128c0 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
128d0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
128e0 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
128f0 69 6f 6e 2c 20 74 68 6f 75 67 68 20 69 74 20 69  ion, though it i
12900 73 20 61 63 63 65 70 74 61 62 6c 65 20 66 6f 72  s acceptable for
12910 20 74 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74   the xDisconnect
12920 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f   and..        //
12930 2f 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f  / xDestroy metho
12940 64 73 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  ds to be the sam
12950 65 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 74 68  e function if th
12960 61 74 20 6d 61 6b 65 73 20 73 65 6e 73 65 20 66  at makes sense f
12970 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
12980 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
12990 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
129a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
129b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
129c0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
129d0 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
129e0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
129f0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
12a00 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
12a10 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
12a20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
12a30 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
12a40 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
12a50 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
12a60 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
12a70 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
12a80 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
12a90 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
12aa0 72 72 6f 72 43 6f 64 65 20 78 44 69 73 63 6f 6e  rrorCode xDiscon
12ab0 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
12ac0 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
12ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
12ae0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
12af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b30 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
12b40 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
12b50 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
12b60 74 68 6f 64 20 72 65 6c 65 61 73 65 73 20 61 20  thod releases a 
12b70 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20  connection to a 
12b80 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20 6a  virtual table, j
12b90 75 73 74 20 6c 69 6b 65 20 74 68 65 0d 0a 20 20  ust like the..  
12ba0 20 20 20 20 20 20 2f 2f 2f 20 78 44 69 73 63 6f        /// xDisco
12bb0 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2c 20 61 6e  nnect method, an
12bc0 64 20 69 74 20 61 6c 73 6f 20 64 65 73 74 72 6f  d it also destro
12bd0 79 73 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  ys the underlyin
12be0 67 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  g table..       
12bf0 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
12c00 69 6f 6e 2e 20 54 68 69 73 20 6d 65 74 68 6f 64  ion. This method
12c10 20 75 6e 64 6f 65 73 20 74 68 65 20 77 6f 72 6b   undoes the work
12c20 20 6f 66 20 78 43 72 65 61 74 65 2e 0d 0a 20 20   of xCreate...  
12c30 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20        ///..     
12c40 20 20 20 2f 2f 2f 20 54 68 65 20 78 44 69 73 63     /// The xDisc
12c50 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 69 73  onnect method is
12c60 20 63 61 6c 6c 65 64 20 77 68 65 6e 65 76 65 72   called whenever
12c70 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e   a database conn
12c80 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ection..        
12c90 2f 2f 2f 20 74 68 61 74 20 75 73 65 73 20 61 20  /// that uses a 
12ca0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
12cb0 20 63 6c 6f 73 65 64 2e 20 54 68 65 20 78 44 65   closed. The xDe
12cc0 73 74 72 6f 79 20 6d 65 74 68 6f 64 20 69 73 20  stroy method is 
12cd0 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  only..        //
12ce0 2f 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 61 20  / called when a 
12cf0 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
12d00 6d 65 6e 74 20 69 73 20 65 78 65 63 75 74 65 64  ment is executed
12d10 20 61 67 61 69 6e 73 74 20 74 68 65 20 76 69 72   against the vir
12d20 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tual..        //
12d30 2f 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  / table...      
12d40 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f    ///..        /
12d50 2f 2f 20 54 68 65 20 78 44 65 73 74 72 6f 79 20  // The xDestroy 
12d60 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72  method is requir
12d70 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72  ed for every vir
12d80 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
12d90 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e      /// implemen
12da0 74 61 74 69 6f 6e 2c 20 74 68 6f 75 67 68 20 69  tation, though i
12db0 74 20 69 73 20 61 63 63 65 70 74 61 62 6c 65 20  t is acceptable 
12dc0 66 6f 72 20 74 68 65 20 78 44 69 73 63 6f 6e 6e  for the xDisconn
12dd0 65 63 74 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  ect and..       
12de0 20 2f 2f 2f 20 78 44 65 73 74 72 6f 79 20 6d 65   /// xDestroy me
12df0 74 68 6f 64 73 20 74 6f 20 62 65 20 74 68 65 20  thods to be the 
12e00 73 61 6d 65 20 66 75 6e 63 74 69 6f 6e 20 69 66  same function if
12e10 20 74 68 61 74 20 6d 61 6b 65 73 20 73 65 6e 73   that makes sens
12e20 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  e for..        /
12e30 2f 2f 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  // the particula
12e40 72 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  r virtual table.
12e50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
12e60 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
12e70 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
12e80 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
12e90 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
12ea0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
12eb0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
12ec0 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
12ed0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
12ee0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
12ef0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
12f00 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
12f10 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
12f20 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
12f30 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
12f40 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
12f50 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44 65 73  teErrorCode xDes
12f60 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20  troy(..         
12f70 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
12f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
12f90 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
12fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12fe0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
12ff0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
13000 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4f 70       /// The xOp
13010 65 6e 20 6d 65 74 68 6f 64 20 63 72 65 61 74 65  en method create
13020 73 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 75  s a new cursor u
13030 73 65 64 20 66 6f 72 20 61 63 63 65 73 73 69 6e  sed for accessin
13040 67 20 28 72 65 61 64 0d 0a 20 20 20 20 20 20 20  g (read..       
13050 20 2f 2f 2f 20 61 6e 64 2f 6f 72 20 77 72 69 74   /// and/or writ
13060 69 6e 67 29 20 61 20 76 69 72 74 75 61 6c 20 74  ing) a virtual t
13070 61 62 6c 65 2e 20 41 20 73 75 63 63 65 73 73 66  able. A successf
13080 75 6c 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ul invocation of
13090 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
130a0 2f 2f 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 61  // method will a
130b0 6c 6c 6f 63 61 74 65 20 74 68 65 20 6d 65 6d 6f  llocate the memo
130c0 72 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  ry for the sqlit
130d0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 28  e3_vtab_cursor (
130e0 6f 72 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or a..        //
130f0 2f 20 73 75 62 63 6c 61 73 73 29 2c 20 69 6e 69  / subclass), ini
13100 74 69 61 6c 69 7a 65 20 74 68 65 20 6e 65 77 20  tialize the new 
13110 6f 62 6a 65 63 74 2c 20 61 6e 64 20 6d 61 6b 65  object, and make
13120 20 2a 70 70 43 75 72 73 6f 72 20 70 6f 69 6e 74   *ppCursor point
13130 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
13140 20 74 68 65 20 6e 65 77 20 6f 62 6a 65 63 74 2e   the new object.
13150 20 54 68 65 20 73 75 63 63 65 73 73 66 75 6c 20   The successful 
13160 63 61 6c 6c 20 74 68 65 6e 20 72 65 74 75 72 6e  call then return
13170 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 0d 0a 20 20  s SQLITE_OK...  
13180 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20        ///..     
13190 20 20 20 2f 2f 2f 20 46 6f 72 20 65 76 65 72 79     /// For every
131a0 20 73 75 63 63 65 73 73 66 75 6c 20 63 61 6c 6c   successful call
131b0 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f 64 2c   to this method,
131c0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
131d0 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   will..        /
131e0 2f 2f 20 6c 61 74 65 72 20 69 6e 76 6f 6b 65 20  // later invoke 
131f0 74 68 65 20 78 43 6c 6f 73 65 20 6d 65 74 68 6f  the xClose metho
13200 64 20 74 6f 20 64 65 73 74 72 6f 79 20 74 68 65  d to destroy the
13210 20 61 6c 6c 6f 63 61 74 65 64 20 63 75 72 73 6f   allocated curso
13220 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d  r...        ///.
13230 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
13240 20 78 4f 70 65 6e 20 6d 65 74 68 6f 64 20 6e 65   xOpen method ne
13250 65 64 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  ed not initializ
13260 65 20 74 68 65 20 70 56 74 61 62 20 66 69 65 6c  e the pVtab fiel
13270 64 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  d of the..      
13280 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74    /// sqlite3_vt
13290 61 62 5f 63 75 72 73 6f 72 20 73 74 72 75 63 74  ab_cursor struct
132a0 75 72 65 2e 20 54 68 65 20 53 51 4c 69 74 65 20  ure. The SQLite 
132b0 63 6f 72 65 20 77 69 6c 6c 20 74 61 6b 65 20 63  core will take c
132c0 61 72 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  are of..        
132d0 2f 2f 2f 20 74 68 61 74 20 63 68 6f 72 65 20 61  /// that chore a
132e0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0d 0a 20  utomatically... 
132f0 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20         ///..    
13300 20 20 20 20 2f 2f 2f 20 41 20 76 69 72 74 75 61      /// A virtua
13310 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
13320 74 61 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 61  tation must be a
13330 62 6c 65 20 74 6f 20 73 75 70 70 6f 72 74 20 61  ble to support a
13340 6e 20 61 72 62 69 74 72 61 72 79 0d 0a 20 20 20  n arbitrary..   
13350 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72 20       /// number 
13360 6f 66 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c  of simultaneousl
13370 79 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2e 0d  y open cursors..
13380 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
13390 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 69        /// When i
133a0 6e 69 74 69 61 6c 6c 79 20 6f 70 65 6e 65 64 2c  nitially opened,
133b0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
133c0 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73  n an undefined s
133d0 74 61 74 65 2e 20 54 68 65 0d 0a 20 20 20 20 20  tate. The..     
133e0 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f     /// SQLite co
133f0 72 65 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74  re will invoke t
13400 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
13410 64 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  d on the cursor 
13420 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20  prior to..      
13430 20 20 2f 2f 2f 20 61 6e 79 20 61 74 74 65 6d 70    /// any attemp
13440 74 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 6f 72  t to position or
13450 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 63   read from the c
13460 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  ursor...        
13470 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ///..        ///
13480 20 54 68 65 20 78 4f 70 65 6e 20 6d 65 74 68 6f   The xOpen metho
13490 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  d is required fo
134a0 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20  r every virtual 
134b0 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
134c0 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
134d0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
134e0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
134f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13500 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
13510 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
13520 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
13530 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
13540 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
13550 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
13560 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
13570 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
13580 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
13590 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
135a0 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
135b0 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
135c0 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e  modified to poin
135d0 74 20 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a  t to the newly..
135e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61          /// crea
135f0 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74  ted native sqlit
13600 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
13610 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
13620 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
13630 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
13640 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
13650 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
13660 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
13670 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
13680 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
13690 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
136a0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4f 70 65  teErrorCode xOpe
136b0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
136c0 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
136d0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
136e0 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
136f0 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
13700 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
13710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
13760 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
13770 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6c 6f 73     /// The xClos
13780 65 20 6d 65 74 68 6f 64 20 63 6c 6f 73 65 73 20  e method closes 
13790 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75  a cursor previou
137a0 73 6c 79 20 6f 70 65 6e 65 64 20 62 79 20 78 4f  sly opened by xO
137b0 70 65 6e 2e 20 54 68 65 0d 0a 20 20 20 20 20 20  pen. The..      
137c0 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72    /// SQLite cor
137d0 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 63 61  e will always ca
137e0 6c 6c 20 78 43 6c 6f 73 65 20 6f 6e 63 65 20 66  ll xClose once f
137f0 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 6f  or each cursor o
13800 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  pened..        /
13810 2f 2f 20 75 73 69 6e 67 20 78 4f 70 65 6e 2e 0d  // using xOpen..
13820 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
13830 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
13840 65 74 68 6f 64 20 6d 75 73 74 20 72 65 6c 65 61  ethod must relea
13850 73 65 20 61 6c 6c 20 72 65 73 6f 75 72 63 65 73  se all resources
13860 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 68   allocated by th
13870 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
13880 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 4f 70  orresponding xOp
13890 65 6e 20 63 61 6c 6c 2e 20 54 68 65 20 72 6f 75  en call. The rou
138a0 74 69 6e 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  tine will not be
138b0 20 63 61 6c 6c 65 64 20 61 67 61 69 6e 20 65 76   called again ev
138c0 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  en..        /// 
138d0 69 66 20 69 74 20 72 65 74 75 72 6e 73 20 61 6e  if it returns an
138e0 20 65 72 72 6f 72 2e 20 54 68 65 20 53 51 4c 69   error. The SQLi
138f0 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 6e 6f 74  te core will not
13900 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20   use the..      
13910 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74    /// sqlite3_vt
13920 61 62 5f 63 75 72 73 6f 72 20 61 67 61 69 6e 20  ab_cursor again 
13930 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
13940 6e 20 63 6c 6f 73 65 64 2e 0d 0a 20 20 20 20 20  n closed...     
13950 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20     ///..        
13960 2f 2f 2f 20 54 68 65 20 78 43 6c 6f 73 65 20 6d  /// The xClose m
13970 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65  ethod is require
13980 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74  d for every virt
13990 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ual table..     
139a0 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74     /// implement
139b0 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
139c0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
139d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
139e0 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
139f0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
13a00 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
13a10 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
13a20 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65  3_vtab_cursor de
13a30 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
13a40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
13a50 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
13a60 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
13a70 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
13a80 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
13a90 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
13aa0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
13ab0 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
13ac0 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73  eErrorCode xClos
13ad0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
13ae0 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
13af0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
13b00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
13b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
13b60 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
13b70 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
13b80 68 6f 64 20 62 65 67 69 6e 73 20 61 20 73 65 61  hod begins a sea
13b90 72 63 68 20 6f 66 20 61 20 76 69 72 74 75 61 6c  rch of a virtual
13ba0 20 74 61 62 6c 65 2e 20 54 68 65 20 66 69 72 73   table. The firs
13bb0 74 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20 20  t argument..    
13bc0 20 20 20 20 2f 2f 2f 20 69 73 20 61 20 63 75 72      /// is a cur
13bd0 73 6f 72 20 6f 70 65 6e 65 64 20 62 79 20 78 4f  sor opened by xO
13be0 70 65 6e 2e 20 54 68 65 20 6e 65 78 74 20 74 77  pen. The next tw
13bf0 6f 20 61 72 67 75 6d 65 6e 74 20 64 65 66 69 6e  o argument defin
13c00 65 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e a..        ///
13c10 20 70 61 72 74 69 63 75 6c 61 72 20 73 65 61 72   particular sear
13c20 63 68 20 69 6e 64 65 78 20 70 72 65 76 69 6f 75  ch index previou
13c30 73 6c 79 20 63 68 6f 73 65 6e 20 62 79 20 78 42  sly chosen by xB
13c40 65 73 74 49 6e 64 65 78 2e 20 54 68 65 0d 0a 20  estIndex. The.. 
13c50 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63 69         /// speci
13c60 66 69 63 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  fic meanings of 
13c70 69 64 78 4e 75 6d 20 61 6e 64 20 69 64 78 53 74  idxNum and idxSt
13c80 72 20 61 72 65 20 75 6e 69 6d 70 6f 72 74 61 6e  r are unimportan
13c90 74 20 61 73 20 6c 6f 6e 67 20 61 73 0d 0a 20 20  t as long as..  
13ca0 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74 65        /// xFilte
13cb0 72 20 61 6e 64 20 78 42 65 73 74 49 6e 64 65 78  r and xBestIndex
13cc0 20 61 67 72 65 65 20 6f 6e 20 77 68 61 74 20 74   agree on what t
13cd0 68 61 74 20 6d 65 61 6e 69 6e 67 20 69 73 2e 0d  hat meaning is..
13ce0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
13cf0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42        /// The xB
13d00 65 73 74 49 6e 64 65 78 20 66 75 6e 63 74 69 6f  estIndex functio
13d10 6e 20 6d 61 79 20 68 61 76 65 20 72 65 71 75 65  n may have reque
13d20 73 74 65 64 20 74 68 65 20 76 61 6c 75 65 73 20  sted the values 
13d30 6f 66 20 63 65 72 74 61 69 6e 0d 0a 20 20 20 20  of certain..    
13d40 20 20 20 20 2f 2f 2f 20 65 78 70 72 65 73 73 69      /// expressi
13d50 6f 6e 73 20 75 73 69 6e 67 20 74 68 65 20 61 43  ons using the aC
13d60 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d  onstraintUsage[]
13d70 2e 61 72 67 76 49 6e 64 65 78 20 76 61 6c 75 65  .argvIndex value
13d80 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  s of the..      
13d90 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e    /// sqlite3_in
13da0 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75  dex_info structu
13db0 72 65 2e 20 54 68 6f 73 65 20 76 61 6c 75 65 73  re. Those values
13dc0 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 20 78   are passed to x
13dd0 46 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20 20  Filter..        
13de0 2f 2f 2f 20 75 73 69 6e 67 20 74 68 65 20 61 72  /// using the ar
13df0 67 63 20 61 6e 64 20 61 72 67 76 20 70 61 72 61  gc and argv para
13e00 6d 65 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  meters...       
13e10 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f   ///..        //
13e20 2f 20 49 66 20 74 68 65 20 76 69 72 74 75 61 6c  / If the virtual
13e30 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20   table contains 
13e40 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  one or more rows
13e50 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 0d   that match the.
13e60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 65 61  .        /// sea
13e70 72 63 68 20 63 72 69 74 65 72 69 61 2c 20 74 68  rch criteria, th
13e80 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
13e90 73 74 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74  st be left point
13ea0 20 61 74 20 74 68 65 20 66 69 72 73 74 0d 0a 20   at the first.. 
13eb0 20 20 20 20 20 20 20 2f 2f 2f 20 72 6f 77 2e 20         /// row. 
13ec0 53 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  Subsequent calls
13ed0 20 74 6f 20 78 45 6f 66 20 6d 75 73 74 20 72 65   to xEof must re
13ee0 74 75 72 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f  turn false (zero
13ef0 29 2e 20 49 66 20 74 68 65 72 65 0d 0a 20 20 20  ). If there..   
13f00 20 20 20 20 20 2f 2f 2f 20 61 72 65 20 6e 6f 20       /// are no 
13f10 72 6f 77 73 20 6d 61 74 63 68 2c 20 74 68 65 6e  rows match, then
13f20 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74   the cursor must
13f30 20 62 65 20 6c 65 66 74 20 69 6e 20 61 20 73 74   be left in a st
13f40 61 74 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20  ate that..      
13f50 20 20 2f 2f 2f 20 77 69 6c 6c 20 63 61 75 73 65    /// will cause
13f60 20 74 68 65 20 78 45 6f 66 20 74 6f 20 72 65 74   the xEof to ret
13f70 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65  urn true (non-ze
13f80 72 6f 29 2e 20 54 68 65 20 53 51 4c 69 74 65 20  ro). The SQLite 
13f90 65 6e 67 69 6e 65 0d 0a 20 20 20 20 20 20 20 20  engine..        
13fa0 2f 2f 2f 20 77 69 6c 6c 20 75 73 65 20 74 68 65  /// will use the
13fb0 20 78 43 6f 6c 75 6d 6e 20 61 6e 64 20 78 52 6f   xColumn and xRo
13fc0 77 69 64 20 6d 65 74 68 6f 64 73 20 74 6f 20 61  wid methods to a
13fd0 63 63 65 73 73 20 74 68 61 74 20 72 6f 77 20 63  ccess that row c
13fe0 6f 6e 74 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  ontent...       
13ff0 20 2f 2f 2f 20 54 68 65 20 78 4e 65 78 74 20 6d   /// The xNext m
14000 65 74 68 6f 64 20 77 69 6c 6c 20 62 65 20 75 73  ethod will be us
14010 65 64 20 74 6f 20 61 64 76 61 6e 63 65 20 74 6f  ed to advance to
14020 20 74 68 65 20 6e 65 78 74 20 72 6f 77 2e 0d 0a   the next row...
14030 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20          ///..   
14040 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
14050 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e  thod must return
14060 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 73 75   SQLITE_OK if su
14070 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 61 6e 20  ccessful, or an 
14080 73 71 6c 69 74 65 20 65 72 72 6f 72 0d 0a 20 20  sqlite error..  
14090 20 20 20 20 20 20 2f 2f 2f 20 63 6f 64 65 20 69        /// code i
140a0 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
140b0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d  s...        ///.
140c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
140d0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
140e0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
140f0 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
14100 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
14110 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
14120 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
14130 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
14140 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
14150 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20  e="pCursor">..  
14160 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
14170 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
14180 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
14190 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20  _cursor derived 
141a0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
141b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
141c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
141d0 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78 4e 75  aram name="idxNu
141e0 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  m">..        ///
141f0 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   Number used to 
14200 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
14210 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
14220 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
14230 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
14240 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
14250 3d 22 69 64 78 53 74 72 22 3e 0d 0a 20 20 20 20  ="idxStr">..    
14260 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
14270 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
14280 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  e UTF-8 encoded 
14290 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
142a0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
142b0 2f 2f 20 73 74 72 69 6e 67 20 75 73 65 64 20 74  // string used t
142c0 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
142d0 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
142e0 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ex...        ///
142f0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
14300 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
14310 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20  me="argc">..    
14320 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
14330 65 72 20 6f 66 20 6e 61 74 69 76 65 20 70 6f 69  er of native poi
14340 6e 74 65 72 73 20 74 6f 20 73 71 6c 69 74 65 33  nters to sqlite3
14350 5f 76 61 6c 75 65 20 73 74 72 75 63 74 75 72 65  _value structure
14360 73 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20  s specified..   
14370 20 20 20 20 20 2f 2f 2f 20 69 6e 20 3c 70 61 72       /// in <par
14380 61 6d 72 65 66 20 6e 61 6d 65 3d 22 61 72 67 76  amref name="argv
14390 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  " />...        /
143a0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
143b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
143c0 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20  name="argv">..  
143d0 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72        /// An arr
143e0 61 79 20 6f 66 20 6e 61 74 69 76 65 20 70 6f 69  ay of native poi
143f0 6e 74 65 72 73 20 74 6f 20 73 71 6c 69 74 65 33  nters to sqlite3
14400 5f 76 61 6c 75 65 20 73 74 72 75 63 74 75 72 65  _value structure
14410 73 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20  s containing..  
14420 20 20 20 20 20 20 2f 2f 2f 20 66 69 6c 74 65 72        /// filter
14430 69 6e 67 20 63 72 69 74 65 72 69 61 20 66 6f 72  ing criteria for
14440 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e   the selected in
14450 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
14460 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
14470 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
14480 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
14490 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
144a0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
144b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
144c0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
144d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
144e0 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20  Filter(..       
144f0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
14500 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
14510 20 20 69 6e 74 20 69 64 78 4e 75 6d 2c 0d 0a 20    int idxNum,.. 
14520 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
14530 72 20 69 64 78 53 74 72 2c 0d 0a 20 20 20 20 20  r idxStr,..     
14540 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c         int argc,
14550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
14560 74 50 74 72 5b 5d 20 61 72 67 76 0d 0a 20 20 20  tPtr[] argv..   
14570 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
14580 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
14590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
145a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
145b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
145c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
145d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
145e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
145f0 20 2f 2f 2f 20 0d 0a 20 20 20 20 20 20 20 20 2f   /// ..        /
14600 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
14610 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
14620 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
14630 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
14640 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
14650 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
14660 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
14670 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
14680 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
14690 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
146a0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
146b0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
146c0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
146d0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
146e0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
146f0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
14700 45 72 72 6f 72 43 6f 64 65 20 78 4e 65 78 74 28  ErrorCode xNext(
14710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
14720 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20  tPtr pCursor..  
14730 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
14740 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
14750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
14790 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
147a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
147b0 20 20 2f 2f 2f 20 0d 0a 20 20 20 20 20 20 20 20    /// ..        
147c0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
147d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
147e0 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
147f0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
14800 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
14810 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
14820 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65  3_vtab_cursor de
14830 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
14840 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
14850 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
14860 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
14870 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
14880 65 72 6f 20 69 66 20 6e 6f 20 6d 6f 72 65 20 72  ero if no more r
14890 6f 77 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ows are availabl
148a0 65 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73  e; zero otherwis
148b0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
148c0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
148d0 20 20 20 20 69 6e 74 20 78 45 6f 66 28 0d 0a 20      int xEof(.. 
148e0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
148f0 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
14900 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
14910 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
14920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
14960 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
14970 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
14980 2f 2f 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f  // The SQLite co
14990 72 65 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20  re invokes this 
149a0 6d 65 74 68 6f 64 20 69 6e 20 6f 72 64 65 72 20  method in order 
149b0 74 6f 20 66 69 6e 64 20 74 68 65 20 76 61 6c 75  to find the valu
149c0 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  e for..        /
149d0 2f 2f 20 74 68 65 20 4e 2d 74 68 20 63 6f 6c 75  // the N-th colu
149e0 6d 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  mn of the curren
149f0 74 20 72 6f 77 2e 20 4e 20 69 73 20 7a 65 72 6f  t row. N is zero
14a00 2d 62 61 73 65 64 20 73 6f 20 74 68 65 20 66 69  -based so the fi
14a10 72 73 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rst..        ///
14a20 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 75 6d 62 65   column is numbe
14a30 72 65 64 20 30 2e 20 54 68 65 20 78 43 6f 6c 75  red 0. The xColu
14a40 6d 6e 20 6d 65 74 68 6f 64 20 6d 61 79 20 72 65  mn method may re
14a50 74 75 72 6e 20 69 74 73 20 72 65 73 75 6c 74 20  turn its result 
14a60 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  back..        //
14a70 2f 20 74 6f 20 53 51 4c 69 74 65 20 75 73 69 6e  / to SQLite usin
14a80 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  g one of the fol
14a90 6c 6f 77 69 6e 67 20 69 6e 74 65 72 66 61 63 65  lowing interface
14aa0 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a  :..        ///..
14ab0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 2a 20          ///   * 
14ac0 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62  sqlite3_result_b
14ad0 6c 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  lob()..        /
14ae0 2f 2f 20 20 20 2a 20 73 71 6c 69 74 65 33 5f 72  //   * sqlite3_r
14af0 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 29 0d 0a  esult_double()..
14b00 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 2a 20          ///   * 
14b10 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
14b20 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nt()..        //
14b30 2f 20 20 20 2a 20 73 71 6c 69 74 65 33 5f 72 65  /   * sqlite3_re
14b40 73 75 6c 74 5f 69 6e 74 36 34 28 29 0d 0a 20 20  sult_int64()..  
14b50 20 20 20 20 20 20 2f 2f 2f 20 20 20 2a 20 73 71        ///   * sq
14b60 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c  lite3_result_nul
14b70 6c 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  l()..        ///
14b80 20 20 20 2a 20 73 71 6c 69 74 65 33 5f 72 65 73     * sqlite3_res
14b90 75 6c 74 5f 74 65 78 74 28 29 0d 0a 20 20 20 20  ult_text()..    
14ba0 20 20 20 20 2f 2f 2f 20 20 20 2a 20 73 71 6c 69      ///   * sqli
14bb0 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31  te3_result_text1
14bc0 36 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  6()..        ///
14bd0 20 20 20 2a 20 73 71 6c 69 74 65 33 5f 72 65 73     * sqlite3_res
14be0 75 6c 74 5f 74 65 78 74 31 36 6c 65 28 29 0d 0a  ult_text16le()..
14bf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 2a 20          ///   * 
14c00 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
14c10 65 78 74 31 36 62 65 28 29 0d 0a 20 20 20 20 20  ext16be()..     
14c20 20 20 20 2f 2f 2f 20 20 20 2a 20 73 71 6c 69 74     ///   * sqlit
14c30 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c  e3_result_zerobl
14c40 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ob()..        //
14c50 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  /..        /// I
14c60 66 20 74 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65  f the xColumn me
14c70 74 68 6f 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74  thod implementat
14c80 69 6f 6e 20 63 61 6c 6c 73 20 6e 6f 6e 65 20 6f  ion calls none o
14c90 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 0d  f the functions.
14ca0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 62 6f  .        /// abo
14cb0 76 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ve, then the val
14cc0 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ue of the column
14cd0 20 64 65 66 61 75 6c 74 73 20 74 6f 20 61 6e 20   defaults to an 
14ce0 53 51 4c 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20  SQL NULL...     
14cf0 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20     ///..        
14d00 2f 2f 2f 20 54 6f 20 72 61 69 73 65 20 61 6e 20  /// To raise an 
14d10 65 72 72 6f 72 2c 20 74 68 65 20 78 43 6f 6c 75  error, the xColu
14d20 6d 6e 20 6d 65 74 68 6f 64 20 73 68 6f 75 6c 64  mn method should
14d30 20 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 0d   use one of the.
14d40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 73  .        /// res
14d50 75 6c 74 5f 74 65 78 74 28 29 20 6d 65 74 68 6f  ult_text() metho
14d60 64 73 20 74 6f 20 73 65 74 20 74 68 65 20 65 72  ds to set the er
14d70 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65 78 74  ror message text
14d80 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20 61 6e  , then return an
14d90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 70  ..        /// ap
14da0 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20  propriate error 
14db0 63 6f 64 65 2e 20 54 68 65 20 78 43 6f 6c 75 6d  code. The xColum
14dc0 6e 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65  n method must re
14dd0 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 6f  turn SQLITE_OK o
14de0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  n..        /// s
14df0 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  uccess...       
14e00 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f   ///..        //
14e10 2f 20 54 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65  / The xColumn me
14e20 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
14e30 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
14e40 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  al table..      
14e50 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
14e60 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
14e70 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
14e80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
14e90 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
14ea0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
14eb0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
14ec0 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
14ed0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
14ee0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
14ef0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
14f00 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
14f10 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
14f20 70 43 6f 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20  pContext">..    
14f30 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
14f40 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
14f50 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
14f60 74 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 62  t structure to b
14f70 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20  e used..        
14f80 2f 2f 2f 20 66 6f 72 20 72 65 74 75 72 6e 69 6e  /// for returnin
14f90 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
14fa0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20  column value to 
14fb0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d  the SQLite core.
14fc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62  .        /// lib
14fd0 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
14fe0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
14ff0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
15000 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
15010 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 7a         /// The z
15020 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20  ero-based index 
15030 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
15040 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
15050 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  aining the..    
15060 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 74 6f      /// value to
15070 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20   be returned... 
15080 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
15090 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
150a0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
150b0 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
150c0 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
150d0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
150e0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
150f0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
15100 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75 6d 6e 28  rorCode xColumn(
15110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
15120 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20  tPtr pCursor,.. 
15130 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
15140 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  r pContext,..   
15150 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
15160 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
15170 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
15180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
151d0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
151e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 75          /// A su
151f0 63 63 65 73 73 66 75 6c 20 69 6e 76 6f 63 61 74  ccessful invocat
15200 69 6f 6e 20 6f 66 20 74 68 69 73 20 6d 65 74 68  ion of this meth
15210 6f 64 20 77 69 6c 6c 20 63 61 75 73 65 20 2a 70  od will cause *p
15220 52 6f 77 69 64 20 74 6f 20 62 65 0d 0a 20 20 20  Rowid to be..   
15230 20 20 20 20 20 2f 2f 2f 20 66 69 6c 6c 65 64 20       /// filled 
15240 77 69 74 68 20 74 68 65 20 72 6f 77 69 64 20 6f  with the rowid o
15250 66 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 76  f row that the v
15260 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
15270 73 6f 72 20 70 43 75 72 20 69 73 0d 0a 20 20 20  sor pCur is..   
15280 20 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74       /// current
15290 6c 79 20 70 6f 69 6e 74 69 6e 67 20 61 74 2e 20  ly pointing at. 
152a0 54 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75  This method retu
152b0 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 20 6f 6e  rns SQLITE_OK on
152c0 20 73 75 63 63 65 73 73 2e 20 49 74 0d 0a 20 20   success. It..  
152d0 20 20 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e        /// return
152e0 73 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  s an appropriate
152f0 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 6e 20 66   error code on f
15300 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ailure...       
15310 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f   ///..        //
15320 2f 20 54 68 65 20 78 52 6f 77 69 64 20 6d 65 74  / The xRowid met
15330 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
15340 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
15350 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
15360 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
15370 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
15380 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
15390 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
153a0 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e   name="pCursor">
153b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
153c0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
153d0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
153e0 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69  vtab_cursor deri
153f0 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
15400 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
15410 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
15420 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
15430 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20  owId">..        
15440 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
15450 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
15460 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
15470 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65  d to contain the
15480 20 75 6e 69 71 75 65 0d 0a 20 20 20 20 20 20 20   unique..       
15490 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 72 6f 77   /// integer row
154a0 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20   identifier for 
154b0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
154c0 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65  for the specifie
154d0 64 20 63 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20  d cursor...     
154e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
154f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
15500 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
15510 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
15520 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
15530 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
15540 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
15550 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
15560 6f 64 65 20 78 52 6f 77 49 64 28 0d 0a 20 20 20  ode xRowId(..   
15570 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
15580 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20  pCursor,..      
15590 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72        ref long r
155a0 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  owId..          
155b0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
155c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15600 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
15610 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
15620 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6c  ..        /// Al
15630 6c 20 63 68 61 6e 67 65 73 20 74 6f 20 61 20 76  l changes to a v
15640 69 72 74 75 61 6c 20 74 61 62 6c 65 20 61 72 65  irtual table are
15650 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 20   made using the 
15660 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 0d  xUpdate method..
15670 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
15680 73 20 6f 6e 65 20 6d 65 74 68 6f 64 20 63 61 6e  s one method can
15690 20 62 65 20 75 73 65 64 20 74 6f 20 69 6e 73 65   be used to inse
156a0 72 74 2c 20 64 65 6c 65 74 65 2c 20 6f 72 20 75  rt, delete, or u
156b0 70 64 61 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  pdate...        
156c0 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ///..        ///
156d0 20 54 68 65 20 61 72 67 63 20 70 61 72 61 6d 65   The argc parame
156e0 74 65 72 20 73 70 65 63 69 66 69 65 73 20 74 68  ter specifies th
156f0 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
15700 69 65 73 20 69 6e 20 74 68 65 20 61 72 67 76 0d  ies in the argv.
15710 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 72  .        /// arr
15720 61 79 2e 20 54 68 65 20 76 61 6c 75 65 20 6f 66  ay. The value of
15730 20 61 72 67 63 20 77 69 6c 6c 20 62 65 20 31 20   argc will be 1 
15740 66 6f 72 20 61 20 70 75 72 65 20 64 65 6c 65 74  for a pure delet
15750 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72 0d 0a  e operation or..
15760 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 2b 32 20          /// N+2 
15770 66 6f 72 20 61 6e 20 69 6e 73 65 72 74 20 6f 72  for an insert or
15780 20 72 65 70 6c 61 63 65 20 6f 72 20 75 70 64 61   replace or upda
15790 74 65 20 77 68 65 72 65 20 4e 20 69 73 20 74 68  te where N is th
157a0 65 20 6e 75 6d 62 65 72 20 6f 66 0d 0a 20 20 20  e number of..   
157b0 20 20 20 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 73       /// columns
157c0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49   in the table. I
157d0 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  n the previous s
157e0 65 6e 74 65 6e 63 65 2c 20 4e 20 69 6e 63 6c 75  entence, N inclu
157f0 64 65 73 20 61 6e 79 0d 0a 20 20 20 20 20 20 20  des any..       
15800 20 2f 2f 2f 20 68 69 64 64 65 6e 20 63 6f 6c 75   /// hidden colu
15810 6d 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  mns...        //
15820 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 45  /..        /// E
15830 76 65 72 79 20 61 72 67 76 20 65 6e 74 72 79 20  very argv entry 
15840 77 69 6c 6c 20 68 61 76 65 20 61 20 6e 6f 6e 2d  will have a non-
15850 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 43 20  NULL value in C 
15860 62 75 74 20 6d 61 79 20 63 6f 6e 74 61 69 6e 0d  but may contain.
15870 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
15880 20 53 51 4c 20 76 61 6c 75 65 20 4e 55 4c 4c 2e   SQL value NULL.
15890 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
158a0 20 69 74 20 69 73 20 61 6c 77 61 79 73 20 74 72   it is always tr
158b0 75 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20  ue that..       
158c0 20 2f 2f 2f 20 61 72 67 76 5b 69 5d 21 3d 30 20   /// argv[i]!=0 
158d0 66 6f 72 20 69 20 62 65 74 77 65 65 6e 20 30 20  for i between 0 
158e0 61 6e 64 20 61 72 67 63 2d 31 2e 20 48 6f 77 65  and argc-1. Howe
158f0 76 65 72 2c 20 69 74 20 6d 69 67 68 74 20 62 65  ver, it might be
15900 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
15910 2f 20 63 61 73 65 20 74 68 61 74 20 73 71 6c 69  / case that sqli
15920 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 61  te3_value_type(a
15930 72 67 76 5b 69 5d 29 3d 3d 53 51 4c 49 54 45 5f  rgv[i])==SQLITE_
15940 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f  NULL...        /
15950 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  //..        /// 
15960 54 68 65 20 61 72 67 76 5b 30 5d 20 70 61 72 61  The argv[0] para
15970 6d 65 74 65 72 20 69 73 20 74 68 65 20 72 6f 77  meter is the row
15980 69 64 20 6f 66 20 61 20 72 6f 77 20 69 6e 20 74  id of a row in t
15990 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
159a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f  ..        /// to
159b0 20 62 65 20 64 65 6c 65 74 65 64 2e 20 49 66 20   be deleted. If 
159c0 61 72 67 76 5b 30 5d 20 69 73 20 61 6e 20 53 51  argv[0] is an SQ
159d0 4c 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 6e 6f 20  L NULL, then no 
159e0 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e  deletion occurs.
159f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20  ..        ///.. 
15a00 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61         /// The a
15a10 72 67 76 5b 31 5d 20 70 61 72 61 6d 65 74 65 72  rgv[1] parameter
15a20 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
15a30 20 61 20 6e 65 77 20 72 6f 77 20 74 6f 20 62 65   a new row to be
15a40 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 0d 0a   inserted into..
15a50 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
15a60 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 49  virtual table. I
15a70 66 20 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20  f argv[1] is an 
15a80 53 51 4c 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  SQL NULL, then t
15a90 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
15aa0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
15ab0 75 73 74 20 63 68 6f 6f 73 65 20 61 20 72 6f 77  ust choose a row
15ac0 69 64 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79  id for the newly
15ad0 20 69 6e 73 65 72 74 65 64 20 72 6f 77 2e 0d 0a   inserted row...
15ae0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 75 62 73          /// Subs
15af0 65 71 75 65 6e 74 20 61 72 67 76 5b 5d 20 65 6e  equent argv[] en
15b00 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 76 61  tries contain va
15b10 6c 75 65 73 20 6f 66 20 74 68 65 20 63 6f 6c 75  lues of the colu
15b20 6d 6e 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  mns of the..    
15b30 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
15b40 74 61 62 6c 65 2c 20 69 6e 20 74 68 65 20 6f 72  table, in the or
15b50 64 65 72 20 74 68 61 74 20 74 68 65 20 63 6f 6c  der that the col
15b60 75 6d 6e 73 20 77 65 72 65 20 64 65 63 6c 61 72  umns were declar
15b70 65 64 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20  ed. The..       
15b80 20 2f 2f 2f 20 6e 75 6d 62 65 72 20 6f 66 20 63   /// number of c
15b90 6f 6c 75 6d 6e 73 20 77 69 6c 6c 20 6d 61 74 63  olumns will matc
15ba0 68 20 74 68 65 20 74 61 62 6c 65 20 64 65 63 6c  h the table decl
15bb0 61 72 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65  aration that the
15bc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 43  ..        /// xC
15bd0 6f 6e 6e 65 63 74 20 6f 72 20 78 43 72 65 61 74  onnect or xCreat
15be0 65 20 6d 65 74 68 6f 64 20 6d 61 64 65 20 75 73  e method made us
15bf0 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
15c00 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 0d 0a  declare_vtab()..
15c10 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c          /// call
15c20 2e 20 41 6c 6c 20 68 69 64 64 65 6e 20 63 6f 6c  . All hidden col
15c30 75 6d 6e 73 20 61 72 65 20 69 6e 63 6c 75 64 65  umns are include
15c40 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d  d...        ///.
15c50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65  .        /// Whe
15c60 6e 20 64 6f 69 6e 67 20 61 6e 20 69 6e 73 65 72  n doing an inser
15c70 74 20 77 69 74 68 6f 75 74 20 61 20 72 6f 77 69  t without a rowi
15c80 64 20 28 61 72 67 63 3e 31 2c 20 61 72 67 76 5b  d (argc>1, argv[
15c90 31 5d 20 69 73 20 61 6e 20 53 51 4c 0d 0a 20 20  1] is an SQL..  
15ca0 20 20 20 20 20 20 2f 2f 2f 20 4e 55 4c 4c 29 2c        /// NULL),
15cb0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
15cc0 69 6f 6e 20 6d 75 73 74 20 73 65 74 20 2a 70 52  ion must set *pR
15cd0 6f 77 69 64 20 74 6f 20 74 68 65 20 72 6f 77 69  owid to the rowi
15ce0 64 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  d of the..      
15cf0 20 20 2f 2f 2f 20 6e 65 77 6c 79 20 69 6e 73 65    /// newly inse
15d00 72 74 65 64 20 72 6f 77 3b 20 74 68 69 73 20 77  rted row; this w
15d10 69 6c 6c 20 62 65 63 6f 6d 65 20 74 68 65 20 76  ill become the v
15d20 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
15d30 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
15d40 2f 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  / sqlite3_last_i
15d50 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
15d60 6e 63 74 69 6f 6e 2e 20 53 65 74 74 69 6e 67 20  nction. Setting 
15d70 74 68 69 73 20 76 61 6c 75 65 20 69 6e 20 61 6c  this value in al
15d80 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  l the..        /
15d90 2f 2f 20 6f 74 68 65 72 20 63 61 73 65 73 20 69  // other cases i
15da0 73 20 61 20 68 61 72 6d 6c 65 73 73 20 6e 6f 2d  s a harmless no-
15db0 6f 70 3b 20 74 68 65 20 53 51 4c 69 74 65 20 65  op; the SQLite e
15dc0 6e 67 69 6e 65 20 69 67 6e 6f 72 65 73 20 74 68  ngine ignores th
15dd0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 2a  e..        /// *
15de0 70 52 6f 77 69 64 20 72 65 74 75 72 6e 20 76 61  pRowid return va
15df0 6c 75 65 20 69 66 20 61 72 67 63 3d 3d 31 20 6f  lue if argc==1 o
15e00 72 20 61 72 67 76 5b 31 5d 20 69 73 20 6e 6f 74  r argv[1] is not
15e10 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e 0d 0a 20   an SQL NULL... 
15e20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20         ///..    
15e30 20 20 20 20 2f 2f 2f 20 45 61 63 68 20 63 61 6c      /// Each cal
15e40 6c 20 74 6f 20 78 55 70 64 61 74 65 20 77 69 6c  l to xUpdate wil
15e50 6c 20 66 61 6c 6c 20 69 6e 74 6f 20 6f 6e 65 20  l fall into one 
15e60 6f 66 20 63 61 73 65 73 20 73 68 6f 77 6e 20 62  of cases shown b
15e70 65 6c 6f 77 2e 20 4e 6f 74 65 0d 0a 20 20 20 20  elow. Note..    
15e80 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 72 65 66      /// that ref
15e90 65 72 65 6e 63 65 73 20 74 6f 20 61 72 67 76 5b  erences to argv[
15ea0 69 5d 20 6d 65 61 6e 20 74 68 65 20 53 51 4c 20  i] mean the SQL 
15eb0 76 61 6c 75 65 20 68 65 6c 64 20 77 69 74 68 69  value held withi
15ec0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
15ed0 2f 2f 20 61 72 67 76 5b 69 5d 20 6f 62 6a 65 63  // argv[i] objec
15ee0 74 2c 20 6e 6f 74 20 74 68 65 20 61 72 67 76 5b  t, not the argv[
15ef0 69 5d 20 6f 62 6a 65 63 74 20 69 74 73 65 6c 66  i] object itself
15f00 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a  ...        ///..
15f10 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
15f20 61 72 67 63 20 3d 20 31 0d 0a 20 20 20 20 20 20  argc = 1..      
15f30 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f    ///..        /
15f40 2f 2f 20 20 20 20 20 20 20 20 20 54 68 65 20 73  //         The s
15f50 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20 72  ingle row with r
15f60 6f 77 69 64 20 65 71 75 61 6c 20 74 6f 20 61 72  owid equal to ar
15f70 67 76 5b 30 5d 20 69 73 20 64 65 6c 65 74 65 64  gv[0] is deleted
15f80 2e 20 4e 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  . No..        //
15f90 2f 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74  /         insert
15fa0 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20   occurs...      
15fb0 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f    ///..        /
15fc0 2f 2f 20 20 20 20 20 61 72 67 63 20 3e 20 31 0d  //     argc > 1.
15fd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
15fe0 20 61 72 67 76 5b 30 5d 20 3d 20 4e 55 4c 4c 0d   argv[0] = NULL.
15ff0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
16000 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
16010 20 20 41 20 6e 65 77 20 72 6f 77 20 69 73 20 69    A new row is i
16020 6e 73 65 72 74 65 64 20 77 69 74 68 20 61 20 72  nserted with a r
16030 6f 77 69 64 20 61 72 67 76 5b 31 5d 20 61 6e 64  owid argv[1] and
16040 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20   column..       
16050 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 76 61 6c   ///         val
16060 75 65 73 20 69 6e 20 61 72 67 76 5b 32 5d 20 61  ues in argv[2] a
16070 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20 49 66  nd following. If
16080 20 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20 53   argv[1] is an S
16090 51 4c 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20 20  QL NULL,..      
160a0 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 74 68    ///         th
160b0 65 20 61 20 6e 65 77 20 75 6e 69 71 75 65 20 72  e a new unique r
160c0 6f 77 69 64 20 69 73 20 67 65 6e 65 72 61 74 65  owid is generate
160d0 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
160e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20  ..        ///.. 
160f0 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61         ///     a
16100 72 67 63 20 3e 20 31 0d 0a 20 20 20 20 20 20 20  rgc > 1..       
16110 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30 5d   ///     argv[0]
16120 20 3f 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20   ? NULL..       
16130 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30 5d   ///     argv[0]
16140 20 3d 20 61 72 67 76 5b 31 5d 0d 0a 20 20 20 20   = argv[1]..    
16150 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20      ///..       
16160 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 54 68 65   ///         The
16170 20 72 6f 77 20 77 69 74 68 20 72 6f 77 69 64 20   row with rowid 
16180 61 72 67 76 5b 30 5d 20 69 73 20 75 70 64 61 74  argv[0] is updat
16190 65 64 20 77 69 74 68 20 6e 65 77 20 76 61 6c 75  ed with new valu
161a0 65 73 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f  es in..        /
161b0 2f 2f 20 20 20 20 20 20 20 20 20 61 72 67 76 5b  //         argv[
161c0 32 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67  2] and following
161d0 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...  
161e0 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20        ///..     
161f0 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63 20     ///     argc 
16200 3e 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  > 1..        ///
16210 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3f 20 4e       argv[0] ? N
16220 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ULL..        ///
16230 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3f 20 61       argv[0] ? a
16240 72 67 76 5b 31 5d 0d 0a 20 20 20 20 20 20 20 20  rgv[1]..        
16250 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ///..        ///
16260 20 20 20 20 20 20 20 20 20 54 68 65 20 72 6f 77           The row
16270 20 77 69 74 68 20 72 6f 77 69 64 20 61 72 67 76   with rowid argv
16280 5b 30 5d 20 69 73 20 75 70 64 61 74 65 64 20 77  [0] is updated w
16290 69 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b 31  ith rowid argv[1
162a0 5d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  ]..        ///  
162b0 20 20 20 20 20 20 20 61 6e 64 20 6e 65 77 20 76         and new v
162c0 61 6c 75 65 73 20 69 6e 20 61 72 67 76 5b 32 5d  alues in argv[2]
162d0 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 70   and following p
162e0 61 72 61 6d 65 74 65 72 73 2e 20 54 68 69 73 0d  arameters. This.
162f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
16300 20 20 20 20 20 77 69 6c 6c 20 6f 63 63 75 72 20       will occur 
16310 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74  when an SQL stat
16320 65 6d 65 6e 74 20 75 70 64 61 74 65 73 20 61 20  ement updates a 
16330 72 6f 77 69 64 2c 20 61 73 20 69 6e 0d 0a 20 20  rowid, as in..  
16340 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
16350 20 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a    the statement:
16360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20  ..        ///.. 
16370 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
16380 20 20 20 20 20 20 20 55 50 44 41 54 45 20 74 61         UPDATE ta
16390 62 6c 65 20 53 45 54 20 72 6f 77 69 64 3d 72 6f  ble SET rowid=ro
163a0 77 69 64 2b 31 20 57 48 45 52 45 20 2e 2e 2e 3b  wid+1 WHERE ...;
163b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20  ..        ///.. 
163c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
163d0 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 6d 75  Update method mu
163e0 73 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  st return SQLITE
163f0 5f 4f 4b 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  _OK if and only 
16400 69 66 20 69 74 20 69 73 0d 0a 20 20 20 20 20 20  if it is..      
16410 20 20 2f 2f 2f 20 73 75 63 63 65 73 73 66 75 6c    /// successful
16420 2e 20 49 66 20 61 20 66 61 69 6c 75 72 65 20 6f  . If a failure o
16430 63 63 75 72 73 2c 20 74 68 65 20 78 55 70 64 61  ccurs, the xUpda
16440 74 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61  te must return a
16450 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  n..        /// a
16460 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
16470 20 63 6f 64 65 2e 20 4f 6e 20 61 20 66 61 69 6c   code. On a fail
16480 75 72 65 2c 20 74 68 65 20 70 56 54 61 62 2d 3e  ure, the pVTab->
16490 7a 45 72 72 4d 73 67 20 65 6c 65 6d 65 6e 74 0d  zErrMsg element.
164a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 61 79  .        /// may
164b0 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 72   optionally be r
164c0 65 70 6c 61 63 65 64 20 77 69 74 68 20 65 72 72  eplaced with err
164d0 6f 72 20 6d 65 73 73 61 67 65 20 74 65 78 74 20  or message text 
164e0 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79  stored in memory
164f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c  ..        /// al
16500 6c 6f 63 61 74 65 64 20 66 72 6f 6d 20 53 51 4c  located from SQL
16510 69 74 65 20 75 73 69 6e 67 20 66 75 6e 63 74 69  ite using functi
16520 6f 6e 73 20 73 75 63 68 20 61 73 20 73 71 6c 69  ons such as sqli
16530 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 20 6f 72  te3_mprintf() or
16540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
16550 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 0d  lite3_malloc()..
16560 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
16570 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65        /// If the
16580 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
16590 76 69 6f 6c 61 74 65 73 20 73 6f 6d 65 20 63 6f  violates some co
165a0 6e 73 74 72 61 69 6e 74 20 6f 66 20 74 68 65 20  nstraint of the 
165b0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
165c0 20 20 20 20 20 20 20 2f 2f 2f 20 28 69 6e 63 6c         /// (incl
165d0 75 64 69 6e 67 2c 20 62 75 74 20 6e 6f 74 20 6c  uding, but not l
165e0 69 6d 69 74 65 64 20 74 6f 2c 20 61 74 74 65 6d  imited to, attem
165f0 70 74 69 6e 67 20 74 6f 20 73 74 6f 72 65 20 61  pting to store a
16600 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20   value of the.. 
16610 20 20 20 20 20 20 20 2f 2f 2f 20 77 72 6f 6e 67         /// wrong
16620 20 64 61 74 61 74 79 70 65 2c 20 61 74 74 65 6d   datatype, attem
16630 70 74 69 6e 67 20 74 6f 20 73 74 6f 72 65 20 61  pting to store a
16640 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 74   value that is t
16650 6f 6f 20 6c 61 72 67 65 20 6f 72 0d 0a 20 20 20  oo large or..   
16660 20 20 20 20 20 2f 2f 2f 20 74 6f 6f 20 73 6d 61       /// too sma
16670 6c 6c 2c 20 6f 72 20 61 74 74 65 6d 70 74 69 6e  ll, or attemptin
16680 67 20 74 6f 20 63 68 61 6e 67 65 20 61 20 72 65  g to change a re
16690 61 64 2d 6f 6e 6c 79 20 76 61 6c 75 65 29 20 74  ad-only value) t
166a0 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  hen the..       
166b0 20 2f 2f 2f 20 78 55 70 64 61 74 65 20 6d 75 73   /// xUpdate mus
166c0 74 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 61  t fail with an a
166d0 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
166e0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
166f0 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ///..        ///
16700 20 54 68 65 72 65 20 6d 69 67 68 74 20 62 65 20   There might be 
16710 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 71 6c 69  one or more sqli
16720 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
16730 6f 62 6a 65 63 74 73 20 6f 70 65 6e 20 61 6e 64  objects open and
16740 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   in..        ///
16750 20 75 73 65 20 6f 6e 20 74 68 65 20 76 69 72 74   use on the virt
16760 75 61 6c 20 74 61 62 6c 65 20 69 6e 73 74 61 6e  ual table instan
16770 63 65 20 61 6e 64 20 70 65 72 68 61 70 73 20 65  ce and perhaps e
16780 76 65 6e 20 6f 6e 20 74 68 65 20 72 6f 77 20 6f  ven on the row o
16790 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  f..        /// t
167a0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
167b0 20 77 68 65 6e 20 74 68 65 20 78 55 70 64 61 74   when the xUpdat
167c0 65 20 6d 65 74 68 6f 64 20 69 73 20 69 6e 76 6f  e method is invo
167d0 6b 65 64 2e 20 54 68 65 0d 0a 20 20 20 20 20 20  ked. The..      
167e0 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61    /// implementa
167f0 74 69 6f 6e 20 6f 66 20 78 55 70 64 61 74 65 20  tion of xUpdate 
16800 6d 75 73 74 20 62 65 20 70 72 65 70 61 72 65 64  must be prepared
16810 20 66 6f 72 20 61 74 74 65 6d 70 74 73 20 74 6f   for attempts to
16820 20 64 65 6c 65 74 65 0d 0a 20 20 20 20 20 20 20   delete..       
16830 20 2f 2f 2f 20 6f 72 20 6d 6f 64 69 66 79 20 72   /// or modify r
16840 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ows of the table
16850 20 6f 75 74 20 66 72 6f 6d 20 6f 74 68 65 72 20   out from other 
16860 65 78 69 73 74 69 6e 67 20 63 75 72 73 6f 72 73  existing cursors
16870 2e 20 49 66 20 74 68 65 0d 0a 20 20 20 20 20 20  . If the..      
16880 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61    /// virtual ta
16890 62 6c 65 20 63 61 6e 6e 6f 74 20 61 63 63 6f 6d  ble cannot accom
168a0 6d 6f 64 61 74 65 20 73 75 63 68 20 63 68 61 6e  modate such chan
168b0 67 65 73 2c 20 74 68 65 20 78 55 70 64 61 74 65  ges, the xUpdate
168c0 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20   method..       
168d0 20 2f 2f 2f 20 6d 75 73 74 20 72 65 74 75 72 6e   /// must return
168e0 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 0d   an error code..
168f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
16900 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 55        /// The xU
16910 70 64 61 74 65 20 6d 65 74 68 6f 64 20 69 73 20  pdate method is 
16920 6f 70 74 69 6f 6e 61 6c 2e 20 49 66 20 74 68 65  optional. If the
16930 20 78 55 70 64 61 74 65 20 70 6f 69 6e 74 65 72   xUpdate pointer
16940 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20   in the..       
16950 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 6f 64   /// sqlite3_mod
16960 75 6c 65 20 66 6f 72 20 61 20 76 69 72 74 75 61  ule for a virtua
16970 6c 20 74 61 62 6c 65 20 69 73 20 61 20 4e 55 4c  l table is a NUL
16980 4c 20 70 6f 69 6e 74 65 72 2c 20 74 68 65 6e 20  L pointer, then 
16990 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
169a0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
169b0 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20  s read-only...  
169c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
169d0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
169e0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
169f0 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
16a00 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
16a10 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
16a20 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
16a30 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
16a40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
16a50 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
16a60 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 44   <param name="nD
16a70 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ata">..        /
16a80 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
16a90 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66 69 65 64   new or modified
16aa0 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 63   column values c
16ab0 6f 6e 74 61 69 6e 65 64 20 69 6e 0d 0a 20 20 20  ontained in..   
16ac0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 72       /// <paramr
16ad0 65 66 20 6e 61 6d 65 3d 22 61 70 44 61 74 61 22  ef name="apData"
16ae0 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f   />...        //
16af0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16b00 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16b10 61 6d 65 3d 22 61 70 44 61 74 61 22 3e 0d 0a 20  ame="apData">.. 
16b20 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a 20 20 20         /// ..   
16b30 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
16b40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16b50 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49  param name="rowI
16b60 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  d">..        ///
16b70 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
16b80 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
16b90 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
16ba0 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 75 6e  o contain the un
16bb0 69 71 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ique..        //
16bc0 2f 20 69 6e 74 65 67 65 72 20 72 6f 77 20 69 64  / integer row id
16bd0 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68 65  entifier for the
16be0 20 72 6f 77 20 74 68 61 74 20 77 61 73 20 69 6e   row that was in
16bf0 73 65 72 74 65 64 2c 20 69 66 20 61 6e 79 2e 0d  serted, if any..
16c00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
16c10 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
16c20 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
16c30 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
16c40 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
16c50 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
16c60 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
16c70 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
16c80 45 72 72 6f 72 43 6f 64 65 20 78 55 70 64 61 74  ErrorCode xUpdat
16c90 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
16ca0 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
16cb0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
16cc0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
16cd0 20 20 20 49 6e 74 50 74 72 20 61 70 44 61 74 61     IntPtr apData
16ce0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
16cf0 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20  ef long rowId.. 
16d00 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
16d10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
16d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
16d70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
16d80 20 20 20 2f 2f 2f 20 0d 0a 20 20 20 20 20 20 20     /// ..       
16d90 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
16da0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
16db0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
16dc0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
16dd0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
16de0 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
16df0 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
16e00 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
16e10 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
16e20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
16e30 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
16e40 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
16e50 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
16e60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16e70 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
16e80 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
16e90 64 65 20 78 42 65 67 69 6e 28 0d 0a 20 20 20 20  de xBegin(..    
16ea0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
16eb0 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
16ec0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
16ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
16f20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
16f30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a  ..        /// ..
16f40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
16f50 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
16f60 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
16f70 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
16f80 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
16f90 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
16fa0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
16fb0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
16fc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
16fd0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
16fe0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
16ff0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
17000 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
17010 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
17020 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
17030 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
17040 45 72 72 6f 72 43 6f 64 65 20 78 53 79 6e 63 28  ErrorCode xSync(
17050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
17060 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
17070 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
17080 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
170d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
170e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
170f0 2f 2f 2f 20 0d 0a 20 20 20 20 20 20 20 20 2f 2f  /// ..        //
17100 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
17110 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
17120 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
17130 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
17140 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
17150 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
17160 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
17170 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
17180 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
17190 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
171a0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
171b0 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
171c0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
171d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
171e0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
171f0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
17200 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20  xCommit(..      
17210 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
17220 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
17230 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
17240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17250 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17290 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
172a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a 20 20          /// ..  
172b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
172c0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
172d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
172e0 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
172f0 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
17300 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
17310 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
17320 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
17330 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17340 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
17350 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
17360 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
17370 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
17380 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
17390 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
173a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
173b0 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63  rorCode xRollbac
173c0 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
173d0 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
173e0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
173f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
17400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
17440 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17450 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
17460 20 20 2f 2f 2f 20 0d 0a 20 20 20 20 20 20 20 20    /// ..        
17470 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
17480 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
17490 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
174a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
174b0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
174c0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
174d0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
174e0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
174f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17500 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
17510 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 22 3e 0d 0a  m name="nArg">..
17520 20 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a 20 20          /// ..  
17530 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
17540 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
17550 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61  <param name="zNa
17560 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  me">..        //
17570 2f 20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  / ..        /// 
17580 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
17590 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
175a0 65 3d 22 63 61 6c 6c 62 61 63 6b 22 3e 0d 0a 20  e="callback">.. 
175b0 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a 20 20 20         /// ..   
175c0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
175d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
175e0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69  param name="pCli
175f0 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20  entData">..     
17600 20 20 20 2f 2f 2f 20 0d 0a 20 20 20 20 20 20 20     /// ..       
17610 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17620 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
17630 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
17640 2f 20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  / ..        /// 
17650 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
17660 20 20 20 20 69 6e 74 20 78 46 69 6e 64 46 75 6e      int xFindFun
17670 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
17680 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
17690 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
176a0 6e 74 20 6e 41 72 67 2c 0d 0a 20 20 20 20 20 20  nt nArg,..      
176b0 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 61        IntPtr zNa
176c0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
176d0 20 72 65 66 20 53 51 4c 69 74 65 43 61 6c 6c 62   ref SQLiteCallb
176e0 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
176f0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
17700 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74  ntPtr pClientDat
17710 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  a..            )
17720 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
17730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17770 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
17780 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
17790 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a 20 20 20         /// ..   
177a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
177b0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
177c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
177d0 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tab">..        /
177e0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
177f0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
17800 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
17810 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
17820 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
17830 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
17840 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 65  <param name="zNe
17850 77 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  w">..        ///
17860 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
17870 74 65 72 20 74 6f 20 74 68 65 20 55 54 46 2d 38  ter to the UTF-8
17880 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 20   encoded string 
17890 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6e  containing the n
178a0 65 77 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ew..        /// 
178b0 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 76 69 72  name for the vir
178c0 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
178d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
178e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
178f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
17900 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
17910 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
17920 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
17930 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
17940 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
17950 72 43 6f 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a  rCode xRename(..
17960 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
17970 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
17980 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 4e         IntPtr zN
17990 65 77 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ew..            
179a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
179b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17a00 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
17a10 20 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a 20 20          /// ..  
17a20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
17a30 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
17a40 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
17a50 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
17a60 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
17a70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
17a80 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
17a90 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
17aa0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17ab0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
17ac0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 53   <param name="iS
17ad0 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20  avepoint">..    
17ae0 20 20 20 20 2f 2f 2f 20 0d 0a 20 20 20 20 20 20      /// ..      
17af0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
17b00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
17b10 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
17b20 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
17b30 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
17b40 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17b50 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
17b60 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
17b70 64 65 20 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a  de xSavepoint(..
17b80 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
17b90 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
17ba0 20 20 20 20 20 20 20 69 6e 74 20 69 53 61 76 65         int iSave
17bb0 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  point..         
17bc0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
17bd0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
17be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
17c20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
17c30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 0d  >..        /// .
17c40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
17c50 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
17c60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
17c70 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
17c80 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
17c90 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
17ca0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
17cb0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
17cc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17cd0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
17ce0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
17cf0 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20  "iSavepoint">.. 
17d00 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a 20 20 20         /// ..   
17d10 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
17d20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17d30 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
17d40 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
17d50 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
17d60 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
17d70 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
17d80 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
17d90 72 43 6f 64 65 20 78 52 65 6c 65 61 73 65 28 0d  rCode xRelease(.
17da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
17db0 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
17dc0 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61 76          int iSav
17dd0 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20  epoint..        
17de0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
17df0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
17e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17e40 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
17e50 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
17e60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17e70 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
17e80 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
17e90 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
17ea0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
17eb0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
17ec0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
17ed0 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
17ee0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17ef0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
17f00 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
17f10 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a  ="iSavepoint">..
17f20 20 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a 20 20          /// ..  
17f30 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
17f40 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
17f50 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
17f60 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
17f70 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
17f80 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
17f90 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
17fa0 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
17fb0 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b  orCode xRollback
17fc0 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  To(..           
17fd0 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
17ff0 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20  iSavepoint..    
18000 20 20 20 20 20 20 20 20 29 3b 0d 0a 20 20 20 20          );..    
18010 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
18020 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
18030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18070 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
18080 69 6f 6e 20 49 53 51 4c 69 74 65 4d 61 6e 61 67  ion ISQLiteManag
18090 65 64 4d 6f 64 75 6c 65 20 49 6e 74 65 72 66 61  edModule Interfa
180a0 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ce..    /// <sum
180b0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
180c0 68 69 73 20 69 6e 74 65 72 66 61 63 65 20 72 65  his interface re
180d0 70 72 65 73 65 6e 74 73 20 61 20 76 69 72 74 75  presents a virtu
180e0 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
180f0 6e 74 61 74 69 6f 6e 20 77 72 69 74 74 65 6e 20  ntation written 
18100 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 61 6e 61  in..    /// mana
18110 67 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f  ged code...    /
18120 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
18130 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66     public interf
18140 61 63 65 20 49 53 51 4c 69 74 65 4d 61 6e 61 67  ace ISQLiteManag
18150 65 64 4d 6f 64 75 6c 65 0d 0a 20 20 20 20 7b 0d  edModule..    {.
18160 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 44 65  .        bool De
18170 63 6c 61 72 65 64 20 7b 20 67 65 74 3b 20 7d 0d  clared { get; }.
18180 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
18190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  //....        st
181e0 72 69 6e 67 20 4e 61 6d 65 20 7b 20 67 65 74 3b  ring Name { get;
181f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
18200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18240 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18250 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18260 20 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20   Create(..      
18270 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
18280 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
18290 6e 2c 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  n,  /* in */..  
182a0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
182b0 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 20 20 20   pClientData,   
182c0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
182d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
182e0 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73  ring[] arguments
182f0 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ,           /* i
18300 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
18310 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74    ref SQLiteVirt
18320 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20  ualTable table, 
18330 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  /* out */..     
18340 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
18350 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
18360 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
18370 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
18380 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
18390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  /....        SQL
183e0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6e  iteErrorCode Con
183f0 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
18400 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
18410 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20  ion connection, 
18420 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
18430 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
18440 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20  lientData,      
18450 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
18460 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
18470 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 2c 20 20  g[] arguments,  
18480 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
18490 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
184a0 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ef SQLiteVirtual
184b0 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20  Table table, /* 
184c0 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
184d0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
184e0 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 20 20  rror            
184f0 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20    /* out */..   
18500 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
18510 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
18520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18560 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
18570 45 72 72 6f 72 43 6f 64 65 20 42 65 73 74 49 6e  ErrorCode BestIn
18580 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20  dex(..          
18590 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
185a0 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69  able table, /* i
185b0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
185c0 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e    SQLiteIndex in
185d0 64 65 78 20 20 20 20 20 20 20 20 20 2f 2a 20 69  dex         /* i
185e0 6e 2c 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  n, out */..     
185f0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
18600 20 20 20 20 20 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 2f 2f 2f  ////////////////
18630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18650 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
18660 72 6f 72 43 6f 64 65 20 44 69 73 63 6f 6e 6e 65  rorCode Disconne
18670 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
18680 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
18690 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20  ble table /* in 
186a0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
186b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
186c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18700 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18710 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18720 20 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20   Destroy(..     
18730 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
18740 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20  tualTable table 
18750 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
18760 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
18770 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
18780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
187a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
187b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
187c0 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
187d0 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20 20  orCode Open(..  
187e0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
187f0 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
18800 6c 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le,           /*
18810 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
18820 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69      ref SQLiteVi
18830 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
18840 20 63 75 72 73 6f 72 20 2f 2a 20 6f 75 74 20 2a   cursor /* out *
18850 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
18860 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
18870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
188a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
188b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
188c0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
188d0 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20  Close(..        
188e0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
188f0 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
18900 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  sor /* in */..  
18910 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
18920 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
18930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
18970 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
18980 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 74 65  eErrorCode Filte
18990 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
189a0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
189b0 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c  leCursor cursor,
189c0 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
189d0 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
189e0 4e 75 6d 62 65 72 2c 20 20 20 20 20 20 20 20 20  Number,         
189f0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
18a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
18a10 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67  ring indexString
18a20 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
18a30 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
18a40 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65       SQLiteValue
18a50 5b 5d 20 76 61 6c 75 65 73 20 20 20 20 20 20 20  [] values       
18a60 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
18a70 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
18a80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
18a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ad0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  /....        SQL
18ae0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4e 65 78  iteErrorCode Nex
18af0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
18b00 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
18b10 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20  leCursor cursor 
18b20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
18b30 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
18b40 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
18b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
18b90 20 20 20 20 20 20 20 62 6f 6f 6c 20 45 6f 66 28         bool Eof(
18ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
18bb0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
18bc0 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a  Cursor cursor /*
18bd0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
18be0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
18bf0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
18c40 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
18c50 43 6f 64 65 20 43 6f 6c 75 6d 6e 28 0d 0a 20 20  Code Column(..  
18c60 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
18c70 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
18c80 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a 20 69 6e  or cursor, /* in
18c90 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
18ca0 20 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 20 63   SQLiteContext c
18cb0 6f 6e 74 65 78 74 2c 20 20 20 20 20 20 20 20 20  ontext,         
18cc0 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
18cd0 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
18ce0 78 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x               
18cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
18d00 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
18d10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
18d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18d70 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
18d80 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20  RowId(..        
18d90 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
18da0 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
18db0 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  sor, /* in */.. 
18dc0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c             ref l
18dd0 6f 6e 67 20 72 6f 77 49 64 20 20 20 20 20 20 20  ong rowId       
18de0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
18df0 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
18e00 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
18e10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e50 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18e60 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
18e70 6f 64 65 20 55 70 64 61 74 65 28 0d 0a 20 20 20  ode Update(..   
18e80 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
18e90 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
18ea0 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  e, /* in */..   
18eb0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
18ec0 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73 2c 20 20  alue[] values,  
18ed0 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
18ee0 20 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e           ref lon
18ef0 67 20 72 6f 77 49 64 20 20 20 20 20 20 20 20 20  g rowId         
18f00 20 20 20 2f 2a 20 69 6e 2c 20 6f 75 74 20 2a 2f     /* in, out */
18f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
18f20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
18f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f70 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ///....        S
18f80 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 42  QLiteErrorCode B
18f90 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  egin(..         
18fa0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
18fb0 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69  Table table /* i
18fc0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
18fd0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
18fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19020 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19030 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
19040 64 65 20 53 79 6e 63 28 0d 0a 20 20 20 20 20 20  de Sync(..      
19050 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
19060 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f  ualTable table /
19070 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
19080 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
19090 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
190a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
190e0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
190f0 72 43 6f 64 65 20 43 6f 6d 6d 69 74 28 0d 0a 20  rCode Commit(.. 
19100 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
19110 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
19120 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  ble /* in */..  
19130 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
19140 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19190 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
191a0 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c 6c 62  eErrorCode Rollb
191b0 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
191c0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
191d0 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e  able table /* in
191e0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
191f0 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
19200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19240 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
19250 20 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63 74    bool FindFunct
19260 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
19270 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
19280 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20 20 2f  able table,    /
19290 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
192a0 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e       int argumen
192b0 74 43 6f 75 6e 74 2c 20 20 20 20 20 20 20 20 20  tCount,         
192c0 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
192d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
192e0 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  ame,            
192f0 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
19300 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53             ref S
19310 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
19320 6e 63 74 69 6f 6e 2c 20 2f 2a 20 6f 75 74 20 2a  nction, /* out *
19330 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
19340 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e  ef IntPtr pClien
19350 74 44 61 74 61 20 20 20 20 20 20 20 2f 2a 20 6f  tData       /* o
19360 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
19370 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
19380 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
193d0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
193e0 6f 64 65 20 52 65 6e 61 6d 65 28 0d 0a 20 20 20  ode Rename(..   
193f0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
19400 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
19410 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  e, /* in */..   
19420 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
19430 6e 65 77 4e 61 6d 65 20 20 20 20 20 20 20 20 20  newName         
19440 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
19450 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
19460 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
194a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
194b0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
194c0 45 72 72 6f 72 43 6f 64 65 20 53 61 76 65 70 6f  ErrorCode Savepo
194d0 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  int(..          
194e0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
194f0 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69  able table, /* i
19500 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
19510 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e 74 20    int savepoint 
19520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
19530 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
19540 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
19550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19590 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
195a0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
195b0 64 65 20 52 65 6c 65 61 73 65 28 0d 0a 20 20 20  de Release(..   
195c0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
195d0 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
195e0 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  e, /* in */..   
195f0 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 61 76           int sav
19600 65 70 6f 69 6e 74 20 20 20 20 20 20 20 20 20 20  epoint          
19610 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
19620 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
19630 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19680 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
19690 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c 6c 62 61  ErrorCode Rollba
196a0 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20  ckTo(..         
196b0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
196c0 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20  Table table, /* 
196d0 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
196e0 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e 74     int savepoint
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19700 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
19710 20 20 20 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20     );..    }..  
19720 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
19730 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
19740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19780 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
19790 51 4c 69 74 65 4d 65 6d 6f 72 79 20 53 74 61 74  QLiteMemory Stat
197a0 69 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 69 6e  ic Class..    in
197b0 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c  ternal static cl
197c0 61 73 73 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79  ass SQLiteMemory
197d0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
197e0 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
197f0 20 44 61 74 61 0d 0a 23 69 66 20 54 52 41 43 4b   Data..#if TRACK
19800 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20  _MEMORY_BYTES.. 
19810 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
19820 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79 6e  tatic object syn
19830 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65  cRoot = new obje
19840 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ct();....       
19850 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19890 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
198a0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
198b0 69 63 20 69 6e 74 20 62 79 74 65 73 41 6c 6c 6f  ic int bytesAllo
198c0 63 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  cated;..        
198d0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
198e0 6e 74 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41  nt maximumBytesA
198f0 6c 6c 6f 63 61 74 65 64 3b 0d 0a 23 65 6e 64 69  llocated;..#endi
19900 66 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  f..        #endr
19910 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
19920 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19960 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
19970 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 65 6d 6f      #region Memo
19980 72 79 20 41 6c 6c 6f 63 61 74 69 6f 6e 20 48 65  ry Allocation He
19990 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
199a0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
199b0 74 69 63 20 49 6e 74 50 74 72 20 41 6c 6c 6f 63  tic IntPtr Alloc
199c0 61 74 65 28 69 6e 74 20 73 69 7a 65 29 0d 0a 20  ate(int size).. 
199d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
199e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4d 65        IntPtr pMe
199f0 6d 6f 72 79 20 3d 20 55 6e 73 61 66 65 4e 61 74  mory = UnsafeNat
19a00 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
19a10 65 33 5f 6d 61 6c 6c 6f 63 28 73 69 7a 65 29 3b  e3_malloc(size);
19a20 0d 0a 0d 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45  ....#if TRACK_ME
19a30 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20 20 20  MORY_BYTES..    
19a40 20 20 20 20 20 20 20 20 69 66 20 28 70 4d 65 6d          if (pMem
19a50 6f 72 79 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ory != IntPtr.Ze
19a60 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
19a70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19a80 20 20 20 20 69 6e 74 20 62 6c 6f 63 6b 53 69 7a      int blockSiz
19a90 65 20 3d 20 53 69 7a 65 28 70 4d 65 6d 6f 72 79  e = Size(pMemory
19aa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19ab0 20 20 20 20 20 20 69 66 20 28 62 6c 6f 63 6b 53        if (blockS
19ac0 69 7a 65 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ize > 0)..      
19ad0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
19b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19b10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b30 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20   bytesAllocated 
19b40 2b 3d 20 62 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 0d  += blockSize;...
19b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b60 20 20 20 20 20 20 20 20 20 69 66 20 28 62 79 74           if (byt
19b70 65 73 41 6c 6c 6f 63 61 74 65 64 20 3e 20 6d 61  esAllocated > ma
19b80 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61  ximumBytesAlloca
19b90 74 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ted)..          
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c    maximumBytesAl
19bc0 6c 6f 63 61 74 65 64 20 3d 20 62 79 74 65 73 41  located = bytesA
19bd0 6c 6c 6f 63 61 74 65 64 3b 0d 0a 20 20 20 20 20  llocated;..     
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19c10 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
19c20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
19c30 20 70 4d 65 6d 6f 72 79 3b 0d 0a 20 20 20 20 20   pMemory;..     
19c40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
19c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19ca0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
19cb0 20 69 6e 74 20 53 69 7a 65 28 49 6e 74 50 74 72   int Size(IntPtr
19cc0 20 70 4d 65 6d 6f 72 79 29 0d 0a 20 20 20 20 20   pMemory)..     
19cd0 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
19ce0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
19cf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
19d00 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
19d10 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  ds.sqlite3_mallo
19d20 63 5f 73 69 7a 65 5f 69 6e 74 65 72 6f 70 28 70  c_size_interop(p
19d30 4d 65 6d 6f 72 79 29 3b 0d 0a 23 65 6c 73 65 0d  Memory);..#else.
19d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
19d50 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a  urn 0;..#endif..
19d60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19d70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
19d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19dc0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
19dd0 74 61 74 69 63 20 76 6f 69 64 20 46 72 65 65 28  tatic void Free(
19de0 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79 29 0d  IntPtr pMemory).
19df0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
19e00 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54  TRACK_MEMORY_BYT
19e10 45 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ES..            
19e20 69 66 20 28 70 4d 65 6d 6f 72 79 20 21 3d 20 49  if (pMemory != I
19e30 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
19e40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19e50 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
19e60 62 6c 6f 63 6b 53 69 7a 65 20 3d 20 53 69 7a 65  blockSize = Size
19e70 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d 0a 20 20  (pMemory);....  
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19e90 20 28 62 6c 6f 63 6b 53 69 7a 65 20 3e 20 30 29   (blockSize > 0)
19ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19eb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19ec0 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73           lock (s
19ed0 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f00 20 20 20 20 20 20 20 20 20 62 79 74 65 73 41 6c           bytesAl
19f10 6c 6f 63 61 74 65 64 20 2d 3d 20 62 6c 6f 63 6b  located -= block
19f20 53 69 7a 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Size;..         
19f30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
19f60 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
19f70 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
19f80 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
19f90 33 5f 66 72 65 65 28 70 4d 65 6d 6f 72 79 29 3b  3_free(pMemory);
19fa0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
19fb0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
19fc0 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
19fd0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
19fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a020 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1a030 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 53   #region SQLiteS
1a040 74 72 69 6e 67 20 53 74 61 74 69 63 20 43 6c 61  tring Static Cla
1a050 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ss..    internal
1a060 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53 51   static class SQ
1a070 4c 69 74 65 53 74 72 69 6e 67 0d 0a 20 20 20 20  LiteString..    
1a080 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
1a090 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
1a0a0 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 70 72  ants..        pr
1a0b0 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
1a0c0 20 54 68 69 72 74 79 42 69 74 73 20 3d 20 30 78   ThirtyBits = 0x
1a0d0 33 66 66 66 66 66 66 66 3b 0d 0a 20 20 20 20 20  3fffffff;..     
1a0e0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1a0f0 63 20 72 65 61 64 6f 6e 6c 79 20 45 6e 63 6f 64  c readonly Encod
1a100 69 6e 67 20 55 74 66 38 45 6e 63 6f 64 69 6e 67  ing Utf8Encoding
1a110 20 3d 20 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38   = Encoding.UTF8
1a120 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
1a130 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1a140 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a180 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1a190 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54 46 2d      #region UTF-
1a1a0 38 20 45 6e 63 6f 64 69 6e 67 20 48 65 6c 70 65  8 Encoding Helpe
1a1b0 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
1a1c0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1a1d0 20 62 79 74 65 5b 5d 20 47 65 74 55 74 66 38 42   byte[] GetUtf8B
1a1e0 79 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 0d  ytesFromString(.
1a1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1a200 69 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  ing value..     
1a210 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1a220 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a230 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
1a240 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1a250 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
1a260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a270 20 72 65 74 75 72 6e 20 55 74 66 38 45 6e 63 6f   return Utf8Enco
1a280 64 69 6e 67 2e 47 65 74 42 79 74 65 73 28 76 61  ding.GetBytes(va
1a290 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
1a2a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1a2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1a300 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
1a310 69 6e 67 20 47 65 74 53 74 72 69 6e 67 46 72 6f  ing GetStringFro
1a320 6d 55 74 66 38 42 79 74 65 73 28 0d 0a 20 20 20  mUtf8Bytes(..   
1a330 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
1a340 62 79 74 65 73 0d 0a 20 20 20 20 20 20 20 20 20  bytes..         
1a350 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1a360 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1a370 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  (bytes == null).
1a380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a390 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
1a3a0 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
1a3b0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
1a3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1a3d0 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e 67  urn Utf8Encoding
1a3e0 2e 47 65 74 53 74 72 69 6e 67 28 62 79 74 65 73  .GetString(bytes
1a3f0 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
1a400 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 74         return Ut
1a410 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 53 74  f8Encoding.GetSt
1a420 72 69 6e 67 28 62 79 74 65 73 2c 20 30 2c 20 62  ring(bytes, 0, b
1a430 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  ytes.Length);..#
1a440 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
1a450 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1a460 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1a470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1a4c0 20 20 20 23 72 65 67 69 6f 6e 20 55 54 46 2d 38     #region UTF-8
1a4d0 20 53 74 72 69 6e 67 20 48 65 6c 70 65 72 20 4d   String Helper M
1a4e0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
1a4f0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
1a500 74 20 50 72 6f 62 65 46 6f 72 55 74 66 38 42 79  t ProbeForUtf8By
1a510 74 65 4c 65 6e 67 74 68 28 0d 0a 20 20 20 20 20  teLength(..     
1a520 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
1a530 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alue,..         
1a540 20 20 20 69 6e 74 20 6c 69 6d 69 74 0d 0a 20 20     int limit..  
1a550 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1a560 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a570 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d      int length =
1a580 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
1a590 20 20 20 69 66 20 28 70 56 61 6c 75 65 20 21 3d     if (pValue !=
1a5a0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
1a5b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
1a5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a5e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a5f0 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61 72           if (Mar
1a600 73 68 61 6c 2e 52 65 61 64 42 79 74 65 28 70 56  shal.ReadByte(pV
1a610 61 6c 75 65 2c 20 6c 65 6e 67 74 68 29 20 3d 3d  alue, length) ==
1a620 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
1a640 61 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ak;....         
1a650 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c             if (l
1a660 65 6e 67 74 68 20 3e 3d 20 6c 69 6d 69 74 29 0d  ength >= limit).
1a670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a680 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
1a690 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a6a0 20 20 20 20 20 20 20 6c 65 6e 67 74 68 2b 2b 3b         length++;
1a6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a6c0 20 20 7d 20 77 68 69 6c 65 20 28 74 72 75 65 29    } while (true)
1a6d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1a6e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a6f0 72 65 74 75 72 6e 20 6c 65 6e 67 74 68 3b 0d 0a  return length;..
1a700 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1a710 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a760 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1a770 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 74 72  tatic string Str
1a780 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74  ingFromUtf8IntPt
1a790 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
1a7a0 49 6e 74 50 74 72 20 70 56 61 6c 75 65 0d 0a 20  IntPtr pValue.. 
1a7b0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1a7c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a7d0 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
1a7e0 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72  ngFromUtf8IntPtr
1a7f0 28 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20  (pValue,..      
1a800 20 20 20 20 20 20 20 20 20 20 50 72 6f 62 65 46            ProbeF
1a810 6f 72 55 74 66 38 42 79 74 65 4c 65 6e 67 74 68  orUtf8ByteLength
1a820 28 70 56 61 6c 75 65 2c 20 54 68 69 72 74 79 42  (pValue, ThirtyB
1a830 69 74 73 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  its));..        
1a840 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1a850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a890 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1a8a0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
1a8b0 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f 6d 55  ring StringFromU
1a8c0 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  tf8IntPtr(..    
1a8d0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1a8e0 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  Value,..        
1a8f0 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 0d 0a      int length..
1a900 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1a910 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a920 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65        if (pValue
1a930 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1a940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a950 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
1a960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1a970 20 28 6c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20   (length > 0).. 
1a980 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
1a9a0 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e 65 77  te[] bytes = new
1a9b0 20 62 79 74 65 5b 6c 65 6e 67 74 68 5d 3b 0d 0a   byte[length];..
1a9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a9d0 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 70    Marshal.Copy(p
1a9e0 56 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 30 2c  Value, bytes, 0,
1a9f0 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20   length);....   
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1aa10 75 72 6e 20 47 65 74 53 74 72 69 6e 67 46 72 6f  urn GetStringFro
1aa20 6d 55 74 66 38 42 79 74 65 73 28 62 79 74 65 73  mUtf8Bytes(bytes
1aa30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1aa40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1aa50 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45   return String.E
1aa60 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 7d  mpty;..        }
1aa70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1aa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aaa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aac0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1aad0 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74  ublic static Int
1aae0 50 74 72 20 55 74 66 38 49 6e 74 50 74 72 46 72  Ptr Utf8IntPtrFr
1aaf0 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20  omString(..     
1ab00 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
1ab10 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
1ab20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
1ab30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1ab40 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ab60 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72  eturn IntPtr.Zer
1ab70 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
1ab80 20 20 49 6e 74 50 74 72 20 72 65 73 75 6c 74 20    IntPtr result 
1ab90 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
1abb0 5b 5d 20 62 79 74 65 73 20 3d 20 47 65 74 55 74  [] bytes = GetUt
1abc0 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72 69 6e  f8BytesFromStrin
1abd0 67 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20  g(value);....   
1abe0 20 20 20 20 20 20 20 20 20 69 66 20 28 62 79 74           if (byt
1abf0 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ac10 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  urn IntPtr.Zero;
1ac20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ac30 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 62 79 74  int length = byt
1ac40 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  es.Length;....  
1ac50 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1ac60 20 3d 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e   = SQLiteMemory.
1ac70 41 6c 6c 6f 63 61 74 65 28 6c 65 6e 67 74 68 20  Allocate(length 
1ac80 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  + 1);....       
1ac90 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 20       if (result 
1aca0 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
1acb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1acc0 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a   return IntPtr.Z
1acd0 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
1ace0 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
1acf0 28 62 79 74 65 73 2c 20 30 2c 20 72 65 73 75 6c  (bytes, 0, resul
1ad00 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  t, length);..   
1ad10 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
1ad20 2e 57 72 69 74 65 42 79 74 65 28 72 65 73 75 6c  .WriteByte(resul
1ad30 74 2c 20 6c 65 6e 67 74 68 2c 20 30 29 3b 0d 0a  t, length, 0);..
1ad40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1ad50 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
1ad60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1ad70 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1ad80 20 20 20 20 20 20 20 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 2f  ////////////////
1adc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1add0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1ade0 6e 20 55 54 46 2d 38 20 53 74 72 69 6e 67 20 41  n UTF-8 String A
1adf0 72 72 61 79 20 48 65 6c 70 65 72 20 4d 65 74 68  rray Helper Meth
1ae00 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ods..        pub
1ae10 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
1ae20 67 5b 5d 20 53 74 72 69 6e 67 41 72 72 61 79 46  g[] StringArrayF
1ae30 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 41 72 72  romUtf8IntPtrArr
1ae40 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
1ae50 20 49 6e 74 50 74 72 5b 5d 20 70 56 61 6c 75 65   IntPtr[] pValue
1ae60 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  s..            )
1ae70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1ae80 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61           if (pVa
1ae90 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  lues == null).. 
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1aeb0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
1aec0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1aed0 67 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  g[] result = new
1aee0 20 73 74 72 69 6e 67 5b 70 56 61 6c 75 65 73 2e   string[pValues.
1aef0 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20  Length];....    
1af00 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
1af10 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
1af20 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74  x < result.Lengt
1af30 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
1af50 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20 53 74 72  ult[index] = Str
1af60 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74  ingFromUtf8IntPt
1af70 72 28 70 56 61 6c 75 65 73 5b 69 6e 64 65 78 5d  r(pValues[index]
1af80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1af90 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
1afa0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
1afb0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1afc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1b000 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
1b010 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 5b 5d   static IntPtr[]
1b020 20 55 74 66 38 49 6e 74 50 74 72 41 72 72 61 79   Utf8IntPtrArray
1b030 46 72 6f 6d 53 74 72 69 6e 67 41 72 72 61 79 28  FromStringArray(
1b040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1b050 72 69 6e 67 5b 5d 20 76 61 6c 75 65 73 0d 0a 20  ring[] values.. 
1b060 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1b070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b080 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 73 20       if (values 
1b090 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1b0a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b0b0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
1b0c0 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d 20 72        IntPtr[] r
1b0d0 65 73 75 6c 74 20 3d 20 6e 65 77 20 49 6e 74 50  esult = new IntP
1b0e0 74 72 5b 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68  tr[values.Length
1b0f0 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
1b100 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
1b110 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 72 65   = 0; index < re
1b120 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 20 69 6e 64  sult.Length; ind
1b130 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
1b140 20 20 20 20 20 20 20 72 65 73 75 6c 74 5b 69 6e         result[in
1b150 64 65 78 5d 20 3d 20 55 74 66 38 49 6e 74 50 74  dex] = Utf8IntPt
1b160 72 46 72 6f 6d 53 74 72 69 6e 67 28 76 61 6c 75  rFromString(valu
1b170 65 73 5b 69 6e 64 65 78 5d 29 3b 0d 0a 0d 0a 20  es[index]);.... 
1b180 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b190 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
1b1a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
1b1b0 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d  ndregion..    }.
1b1c0 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
1b1d0 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1b1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1f0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
1b230 6e 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 20  n SQLiteMarshal 
1b240 53 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20 20  Static Class..  
1b250 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
1b260 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 61  c class SQLiteMa
1b270 72 73 68 61 6c 0d 0a 20 20 20 20 7b 0d 0a 20 20  rshal..    {..  
1b280 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e        #region In
1b290 74 50 74 72 20 48 65 6c 70 65 72 20 4d 65 74 68  tPtr Helper Meth
1b2a0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ods..        pub
1b2b0 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74  lic static IntPt
1b2c0 72 20 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  r IntPtrForOffse
1b2d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1b2e0 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d  IntPtr pointer,.
1b2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
1b300 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20 20 20   offset..       
1b310 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1b320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1b330 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 50 74 72  eturn new IntPtr
1b340 28 70 6f 69 6e 74 65 72 2e 54 6f 49 6e 74 36 34  (pointer.ToInt64
1b350 28 29 20 2b 20 6f 66 66 73 65 74 29 3b 0d 0a 20  () + offset);.. 
1b360 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1b370 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1b380 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1b390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1b3d0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1b3e0 6f 6e 20 4d 61 72 73 68 61 6c 20 52 65 61 64 20  on Marshal Read 
1b3f0 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
1b400 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1b410 74 61 74 69 63 20 69 6e 74 20 52 65 61 64 49 6e  tatic int ReadIn
1b420 74 33 32 28 0d 0a 20 20 20 20 20 20 20 20 20 20  t32(..          
1b430 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72    IntPtr pointer
1b440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
1b450 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20  nt offset..     
1b460 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1b470 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
1b480 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
1b490 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
1b4a0 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
1b4b0 52 65 61 64 49 6e 74 33 32 28 70 6f 69 6e 74 65  ReadInt32(pointe
1b4c0 72 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 23 65 6c  r, offset);..#el
1b4d0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
1b4e0 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52  return Marshal.R
1b4f0 65 61 64 49 6e 74 33 32 28 49 6e 74 50 74 72 46  eadInt32(IntPtrF
1b500 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72  orOffset(pointer
1b510 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65 6e  , offset));..#en
1b520 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
1b530 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1b540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b580 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
1b590 6c 69 63 20 73 74 61 74 69 63 20 64 6f 75 62 6c  lic static doubl
1b5a0 65 20 52 65 61 64 44 6f 75 62 6c 65 28 0d 0a 20  e ReadDouble(.. 
1b5b0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1b5c0 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20  r pointer,..    
1b5d0 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
1b5e0 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
1b5f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  )..        {..#i
1b600 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
1b610 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
1b620 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b630 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 49 6e   BitConverter.In
1b640 74 36 34 42 69 74 73 54 6f 44 6f 75 62 6c 65 28  t64BitsToDouble(
1b650 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 36  Marshal.ReadInt6
1b660 34 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4(..            
1b670 20 20 20 20 70 6f 69 6e 74 65 72 2c 20 6f 66 66      pointer, off
1b680 73 65 74 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  set));..#else.. 
1b690 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b6a0 6e 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 54  n BitConverter.T
1b6b0 6f 44 6f 75 62 6c 65 28 42 69 74 43 6f 6e 76 65  oDouble(BitConve
1b6c0 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 0d 0a  rter.GetBytes(..
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 36  Marshal.ReadInt6
1b6f0 34 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  4(IntPtrForOffse
1b700 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
1b710 74 29 29 29 2c 20 30 29 3b 0d 0a 23 65 6e 64 69  t))), 0);..#endi
1b720 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
1b730 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1b740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1b780 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
1b790 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20  c static IntPtr 
1b7a0 52 65 61 64 49 6e 74 50 74 72 28 0d 0a 20 20 20  ReadIntPtr(..   
1b7b0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1b7c0 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20  pointer,..      
1b7d0 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
1b7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1b7f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
1b800 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
1b810 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
1b820 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
1b830 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
1b840 72 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  r(pointer, offse
1b850 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  t);..#else..    
1b860 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
1b870 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
1b880 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  r(IntPtrForOffse
1b890 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
1b8a0 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  t));..#endif..  
1b8b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1b8c0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1b8d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1b920 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1b930 6e 20 4d 61 72 73 68 61 6c 20 57 72 69 74 65 20  n Marshal Write 
1b940 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
1b950 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1b960 74 61 74 69 63 20 76 6f 69 64 20 57 72 69 74 65  tatic void Write
1b970 49 6e 74 33 32 28 0d 0a 20 20 20 20 20 20 20 20  Int32(..        
1b980 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74      IntPtr point
1b990 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
1b9a0 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20   int offset,..  
1b9b0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 76 61            int va
1b9c0 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
1b9d0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23   )..        {..#
1b9e0 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
1b9f0 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
1ba00 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
1ba10 61 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 70 6f  al.WriteInt32(po
1ba20 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 2c 20 76  inter, offset, v
1ba30 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
1ba40 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
1ba50 61 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 49 6e  al.WriteInt32(In
1ba60 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f  tPtrForOffset(po
1ba70 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c 20  inter, offset), 
1ba80 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
1ba90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1baa0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1bab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1baf0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
1bb00 73 74 61 74 69 63 20 76 6f 69 64 20 57 72 69 74  static void Writ
1bb10 65 44 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20 20  eDouble(..      
1bb20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69        IntPtr poi
1bb30 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  nter,..         
1bb40 20 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a     int offset,..
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62              doub
1bb60 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  le value..      
1bb70 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1bb80 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
1bb90 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
1bba0 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
1bbb0 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74  Marshal.WriteInt
1bbc0 36 34 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  64(pointer, offs
1bbd0 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et,..           
1bbe0 20 20 20 20 20 42 69 74 43 6f 6e 76 65 72 74 65       BitConverte
1bbf0 72 2e 44 6f 75 62 6c 65 54 6f 49 6e 74 36 34 42  r.DoubleToInt64B
1bc00 69 74 73 28 76 61 6c 75 65 29 29 3b 0d 0a 23 65  its(value));..#e
1bc10 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
1bc20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e   Marshal.WriteIn
1bc30 74 36 34 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  t64(IntPtrForOff
1bc40 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
1bc50 73 65 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  set),..         
1bc60 20 20 20 20 20 20 20 42 69 74 43 6f 6e 76 65 72         BitConver
1bc70 74 65 72 2e 54 6f 49 6e 74 36 34 28 42 69 74 43  ter.ToInt64(BitC
1bc80 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
1bc90 73 28 76 61 6c 75 65 29 2c 20 30 29 29 3b 0d 0a  s(value), 0));..
1bca0 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
1bcb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1bcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1bd10 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
1bd20 69 64 20 57 72 69 74 65 49 6e 74 50 74 72 28 0d  id WriteIntPtr(.
1bd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
1bd40 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20  Ptr pointer,..  
1bd50 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66            int of
1bd60 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  fset,..         
1bd70 20 20 20 49 6e 74 50 74 72 20 76 61 6c 75 65 0d     IntPtr value.
1bd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1bd90 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
1bda0 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
1bdb0 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
1bdc0 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57         Marshal.W
1bdd0 72 69 74 65 49 6e 74 50 74 72 28 70 6f 69 6e 74  riteIntPtr(point
1bde0 65 72 2c 20 6f 66 66 73 65 74 2c 20 76 61 6c 75  er, offset, valu
1bdf0 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
1be00 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
1be10 57 72 69 74 65 49 6e 74 50 74 72 28 49 6e 74 50  WriteIntPtr(IntP
1be20 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e  trForOffset(poin
1be30 74 65 72 2c 20 6f 66 66 73 65 74 29 2c 20 76 61  ter, offset), va
1be40 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
1be50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1be60 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1be70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1be80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1beb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1bec0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1bed0 6f 6e 20 42 79 74 65 20 41 72 72 61 79 20 48 65  on Byte Array He
1bee0 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
1bef0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
1bf00 74 69 63 20 62 79 74 65 5b 5d 20 42 79 74 65 73  tic byte[] Bytes
1bf10 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20  FromIntPtr(..   
1bf20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1bf30 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20  pValue,..       
1bf40 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 0d       int length.
1bf50 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1bf60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1bf70 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75         if (pValu
1bf80 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e == IntPtr.Zero
1bf90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1bfa0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
1bfb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1bfc0 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29 0d  f (length == 0).
1bfd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bfe0 20 72 65 74 75 72 6e 20 6e 65 77 20 62 79 74 65   return new byte
1bff0 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [0];....        
1c000 20 20 20 20 62 79 74 65 5b 5d 20 72 65 73 75 6c      byte[] resul
1c010 74 20 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65 6e  t = new byte[len
1c020 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth];....       
1c030 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
1c040 79 28 70 56 61 6c 75 65 2c 20 72 65 73 75 6c 74  y(pValue, result
1c050 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d  , 0, length);...
1c060 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1c070 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
1c080 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1c090 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1c0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c0e0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1c0f0 69 63 20 49 6e 74 50 74 72 20 42 79 74 65 73 54  ic IntPtr BytesT
1c100 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20  oIntPtr(..      
1c110 20 20 20 20 20 20 62 79 74 65 5b 5d 20 76 61 6c        byte[] val
1c120 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
1c130 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1c140 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1c150 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c170 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f  turn IntPtr.Zero
1c180 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c190 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 76 61   int length = va
1c1a0 6c 75 65 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  lue.Length;.... 
1c1b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c             if (l
1c1c0 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20  ength == 0)..   
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1c1e0 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  urn IntPtr.Zero;
1c1f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c200 49 6e 74 50 74 72 20 72 65 73 75 6c 74 20 3d 20  IntPtr result = 
1c210 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c  SQLiteMemory.All
1c220 6f 63 61 74 65 28 6c 65 6e 67 74 68 29 3b 0d 0a  ocate(length);..
1c230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1c240 20 28 72 65 73 75 6c 74 20 3d 3d 20 49 6e 74 50   (result == IntP
1c250 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1c260 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1c270 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
1c280 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72  .            Mar
1c290 73 68 61 6c 2e 43 6f 70 79 28 76 61 6c 75 65 2c  shal.Copy(value,
1c2a0 20 30 2c 20 72 65 73 75 6c 74 2c 20 6c 65 6e 67   0, result, leng
1c2b0 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  th);....        
1c2c0 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
1c2d0 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
1c2e0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1c2f0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
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 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1c350 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 56 61  #region SQLiteVa
1c360 6c 75 65 20 48 65 6c 70 65 72 20 4d 65 74 68 6f  lue Helper Metho
1c370 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ds..        publ
1c380 69 63 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  ic static SQLite
1c390 56 61 6c 75 65 5b 5d 20 56 61 6c 75 65 41 72 72  Value[] ValueArr
1c3a0 61 79 46 72 6f 6d 53 69 7a 65 41 6e 64 49 6e 74  ayFromSizeAndInt
1c3b0 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
1c3c0 20 20 69 6e 74 20 6e 44 61 74 61 2c 0d 0a 20 20    int nData,..  
1c3d0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1c3e0 20 61 70 44 61 74 61 0d 0a 20 20 20 20 20 20 20   apData..       
1c3f0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1c400 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1c410 66 20 28 6e 44 61 74 61 20 3c 20 30 29 0d 0a 20  f (nData < 0).. 
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1c430 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
1c440 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
1c450 70 44 61 74 61 20 3d 3d 20 49 6e 74 50 74 72 2e  pData == IntPtr.
1c460 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
1c470 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
1c480 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
1c490 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d     SQLiteValue[]
1c4a0 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 51   result = new SQ
1c4b0 4c 69 74 65 56 61 6c 75 65 5b 6e 44 61 74 61 5d  LiteValue[nData]
1c4c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c4d0 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
1c4e0 3d 20 30 2c 20 6f 66 66 73 65 74 20 3d 20 30 3b  = 0, offset = 0;
1c4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c500 20 20 20 20 20 20 69 6e 64 65 78 20 3c 20 72 65        index < re
1c510 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20  sult.Length;..  
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c530 20 20 69 6e 64 65 78 2b 2b 2c 20 6f 66 66 73 65    index++, offse
1c540 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65  t += IntPtr.Size
1c550 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1c560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c570 20 20 49 6e 74 50 74 72 20 70 44 61 74 61 20 3d    IntPtr pData =
1c580 20 52 65 61 64 49 6e 74 50 74 72 28 61 70 44 61   ReadIntPtr(apDa
1c590 74 61 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ta, offset);....
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5b0 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20  result[index] = 
1c5c0 28 70 44 61 74 61 20 21 3d 20 49 6e 74 50 74 72  (pData != IntPtr
1c5d0 2e 5a 65 72 6f 29 20 3f 0d 0a 20 20 20 20 20 20  .Zero) ?..      
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
1c5f0 77 20 53 51 4c 69 74 65 56 61 6c 75 65 28 70 44  w SQLiteValue(pD
1c600 61 74 61 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20  ata) : null;..  
1c610 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1c620 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1c630 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
1c640 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c690 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1c6a0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1c6b0 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 56   SQLiteValue[] V
1c6c0 61 6c 75 65 41 72 72 61 79 46 72 6f 6d 49 6e 74  alueArrayFromInt
1c6d0 50 74 72 41 72 72 61 79 28 0d 0a 20 20 20 20 20  PtrArray(..     
1c6e0 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d 20         IntPtr[] 
1c6f0 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20  values..        
1c700 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1c710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1c720 20 28 76 61 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c   (values == null
1c730 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c740 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
1c750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
1c760 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 72 65 73  QLiteValue[] res
1c770 75 6c 74 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ult = new SQLite
1c780 56 61 6c 75 65 5b 76 61 6c 75 65 73 2e 4c 65 6e  Value[values.Len
1c790 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth];....       
1c7a0 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
1c7b0 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
1c7c0 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 20   result.Length; 
1c7d0 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
1c7e0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1c7f0 5b 69 6e 64 65 78 5d 20 3d 20 6e 65 77 20 53 51  [index] = new SQ
1c800 4c 69 74 65 56 61 6c 75 65 28 76 61 6c 75 65 73  LiteValue(values
1c810 5b 69 6e 64 65 78 5d 29 3b 0d 0a 0d 0a 20 20 20  [index]);....   
1c820 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1c830 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
1c840 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1c850 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1c860 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1c870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c8b0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c       #region SQL
1c8c0 69 74 65 49 6e 64 65 78 20 48 65 6c 70 65 72 20  iteIndex Helper 
1c8d0 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
1c8e0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
1c8f0 6f 69 64 20 49 6e 64 65 78 46 72 6f 6d 49 6e 74  oid IndexFromInt
1c900 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
1c910 20 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78 2c    IntPtr pIndex,
1c920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1c930 66 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e  f SQLiteIndex in
1c940 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dex..           
1c950 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
1c960 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
1c970 49 6e 64 65 78 20 3d 3d 20 49 6e 74 50 74 72 2e  Index == IntPtr.
1c980 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
1c990 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
1c9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
1c9b0 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d  t offset = 0;...
1c9c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
1c9d0 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 52   nConstraint = R
1c9e0 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c  eadInt32(pIndex,
1c9f0 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
1ca00 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
1ca10 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d  += sizeof(int);.
1ca20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
1ca30 6e 74 50 74 72 20 70 43 6f 6e 73 74 72 61 69 6e  ntPtr pConstrain
1ca40 74 20 3d 20 52 65 61 64 49 6e 74 50 74 72 28 70  t = ReadIntPtr(p
1ca50 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d  Index, offset);.
1ca60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ...            o
1ca70 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e  ffset += IntPtr.
1ca80 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Size;....       
1ca90 20 20 20 20 20 69 6e 74 20 6e 4f 72 64 65 72 42       int nOrderB
1caa0 79 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49  y = ReadInt32(pI
1cab0 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
1cac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
1cad0 64 65 78 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  dex = new SQLite
1cae0 49 6e 64 65 78 28 6e 43 6f 6e 73 74 72 61 69 6e  Index(nConstrain
1caf0 74 2c 20 6e 4f 72 64 65 72 42 79 29 3b 0d 0a 0d  t, nOrderBy);...
1cb00 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66  .            off
1cb10 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e  set += sizeof(in
1cb20 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1cb30 20 20 20 49 6e 74 50 74 72 20 70 4f 72 64 65 72     IntPtr pOrder
1cb40 42 79 20 3d 20 52 65 61 64 49 6e 74 50 74 72 28  By = ReadIntPtr(
1cb50 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b  pIndex, offset);
1cb60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cb70 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72  offset += IntPtr
1cb80 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Size;....      
1cb90 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f        IntPtr pCo
1cba0 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20 3d 20  nstraintUsage = 
1cbb0 52 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64 65  ReadIntPtr(pInde
1cbc0 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20  x, offset);.... 
1cbd0 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65             offse
1cbe0 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65  t += IntPtr.Size
1cbf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1cc00 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 49   index.Outputs.I
1cc10 6e 64 65 78 4e 75 6d 62 65 72 20 3d 20 52 65 61  ndexNumber = Rea
1cc20 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f  dInt32(pIndex, o
1cc30 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
1cc40 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
1cc50 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d   sizeof(int);...
1cc60 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64  .            ind
1cc70 65 78 2e 4f 75 74 70 75 74 73 2e 49 6e 64 65 78  ex.Outputs.Index
1cc80 53 74 72 69 6e 67 20 3d 20 53 51 4c 69 74 65 53  String = SQLiteS
1cc90 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d  tring.StringFrom
1cca0 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20  Utf8IntPtr(..   
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
1ccc0 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 49 6e  PtrForOffset(pIn
1ccd0 64 65 78 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a  dex, offset));..
1cce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
1ccf0 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53  fset += IntPtr.S
1cd00 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ize;....        
1cd10 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74      index.Output
1cd20 73 2e 4e 65 65 64 54 6f 46 72 65 65 49 6e 64 65  s.NeedToFreeInde
1cd30 78 53 74 72 69 6e 67 20 3d 20 52 65 61 64 49 6e  xString = ReadIn
1cd40 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  t32(pIndex, offs
1cd50 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
1cd60 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69      offset += si
1cd70 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20  zeof(int);....  
1cd80 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e            index.
1cd90 4f 75 74 70 75 74 73 2e 4f 72 64 65 72 42 79 43  Outputs.OrderByC
1cda0 6f 6e 73 75 6d 65 64 20 3d 20 52 65 61 64 49 6e  onsumed = ReadIn
1cdb0 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  t32(pIndex, offs
1cdc0 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
1cdd0 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69      offset += si
1cde0 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20  zeof(int);....  
1cdf0 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e            index.
1ce00 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65  Outputs.Estimate
1ce10 64 43 6f 73 74 20 3d 20 52 65 61 64 44 6f 75 62  dCost = ReadDoub
1ce20 6c 65 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65  le(pIndex, offse
1ce30 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1ce40 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f 6e     int sizeOfCon
1ce50 73 74 72 61 69 6e 74 54 79 70 65 20 3d 20 4d 61  straintType = Ma
1ce60 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70  rshal.SizeOf(typ
1ce70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20  eof(..          
1ce80 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
1ce90 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1cea0 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69  3_index_constrai
1ceb0 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt));....       
1cec0 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 43       for (int iC
1ced0 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b 20 69  onstraint = 0; i
1cee0 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43 6f  Constraint < nCo
1cef0 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73 74  nstraint; iConst
1cf00 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20 20  raint++)..      
1cf10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1cf20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
1cf30 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1cf40 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
1cf50 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  raint constraint
1cf60 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
1cf70 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73 61          new Unsa
1cf80 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1cf90 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
1cfa0 6e 73 74 72 61 69 6e 74 28 29 3b 0d 0a 0d 0a 20  nstraint();.... 
1cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
1cfc0 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 75  arshal.PtrToStru
1cfd0 63 74 75 72 65 28 49 6e 74 50 74 72 46 6f 72 4f  cture(IntPtrForO
1cfe0 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61 69 6e  ffset(pConstrain
1cff0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1d000 20 20 20 20 20 20 20 20 69 43 6f 6e 73 74 72 61          iConstra
1d010 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73  int * sizeOfCons
1d020 74 72 61 69 6e 74 54 79 70 65 29 2c 20 63 6f 6e  traintType), con
1d030 73 74 72 61 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20  straint);....   
1d040 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1d050 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72  ex.Inputs.Constr
1d060 61 69 6e 74 73 5b 69 43 6f 6e 73 74 72 61 69 6e  aints[iConstrain
1d070 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  t] =..          
1d080 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
1d090 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
1d0a0 69 6e 74 28 63 6f 6e 73 74 72 61 69 6e 74 29 3b  int(constraint);
1d0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d0c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1d0d0 6e 74 20 73 69 7a 65 4f 66 4f 72 64 65 72 42 79  nt sizeOfOrderBy
1d0e0 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53  Type = Marshal.S
1d0f0 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20  izeOf(typeof(.. 
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
1d110 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1d120 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
1d130 5f 6f 72 64 65 72 62 79 29 29 3b 0d 0a 0d 0a 20  _orderby));.... 
1d140 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
1d150 69 6e 74 20 69 4f 72 64 65 72 42 79 20 3d 20 30  int iOrderBy = 0
1d160 3b 20 69 4f 72 64 65 72 42 79 20 3c 20 6e 4f 72  ; iOrderBy < nOr
1d170 64 65 72 42 79 3b 20 69 4f 72 64 65 72 42 79 2b  derBy; iOrderBy+
1d180 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
1d190 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d1a0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
1d1b0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
1d1c0 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f 72 64  ndex_orderby ord
1d1d0 65 72 42 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  erBy =..        
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1d1f0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1d200 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
1d210 78 5f 6f 72 64 65 72 62 79 28 29 3b 0d 0a 0d 0a  x_orderby();....
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d230 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72  Marshal.PtrToStr
1d240 75 63 74 75 72 65 28 49 6e 74 50 74 72 46 6f 72  ucture(IntPtrFor
1d250 4f 66 66 73 65 74 28 70 4f 72 64 65 72 42 79 2c  Offset(pOrderBy,
1d260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d270 20 20 20 20 20 20 69 4f 72 64 65 72 42 79 20 2a        iOrderBy *
1d280 20 73 69 7a 65 4f 66 4f 72 64 65 72 42 79 54 79   sizeOfOrderByTy
1d290 70 65 29 2c 20 6f 72 64 65 72 42 79 29 3b 0d 0a  pe), orderBy);..
1d2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d2b0 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 4f    index.Inputs.O
1d2c0 72 64 65 72 42 79 73 5b 69 4f 72 64 65 72 42 79  rderBys[iOrderBy
1d2d0 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] =..           
1d2e0 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
1d2f0 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 28  iteIndexOrderBy(
1d300 6f 72 64 65 72 42 79 29 3b 0d 0a 20 20 20 20 20  orderBy);..     
1d310 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1d320 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65          int size
1d330 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  OfConstraintUsag
1d340 65 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e  eType = Marshal.
1d350 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a  SizeOf(typeof(..
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1d380 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
1d390 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61  x_constraint_usa
1d3a0 67 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ge));....       
1d3b0 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 43       for (int iC
1d3c0 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b 20 69  onstraint = 0; i
1d3d0 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43 6f  Constraint < nCo
1d3e0 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73 74  nstraint; iConst
1d3f0 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20 20  raint++)..      
1d400 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d410 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
1d420 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1d430 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
1d440 72 61 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e 73  raint_usage cons
1d450 74 72 61 69 6e 74 55 73 61 67 65 20 3d 0d 0a 20  traintUsage =.. 
1d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d470 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74     new UnsafeNat
1d480 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1d490 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
1d4a0 69 6e 74 5f 75 73 61 67 65 28 29 3b 0d 0a 0d 0a  int_usage();....
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4c0 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72  Marshal.PtrToStr
1d4d0 75 63 74 75 72 65 28 49 6e 74 50 74 72 46 6f 72  ucture(IntPtrFor
1d4e0 4f 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61 69  Offset(pConstrai
1d4f0 6e 74 55 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  ntUsage,..      
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43                iC
1d510 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a 65  onstraint * size
1d520 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  OfConstraintUsag
1d530 65 54 79 70 65 29 2c 20 63 6f 6e 73 74 72 61 69  eType), constrai
1d540 6e 74 55 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20  ntUsage);....   
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1d560 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74  ex.Outputs.Const
1d570 72 61 69 6e 74 55 73 61 67 65 73 5b 69 43 6f 6e  raintUsages[iCon
1d580 73 74 72 61 69 6e 74 5d 20 3d 0d 0a 20 20 20 20  straint] =..    
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5a0 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 43  new SQLiteIndexC
1d5b0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 63  onstraintUsage(c
1d5c0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 29 3b  onstraintUsage);
1d5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d5e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1d5f0 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d640 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
1d650 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 64 65  static void Inde
1d660 78 54 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  xToIntPtr(..    
1d670 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e          SQLiteIn
1d680 64 65 78 20 69 6e 64 65 78 2c 0d 0a 20 20 20 20  dex index,..    
1d690 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1d6a0 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20  Index..         
1d6b0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1d6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1d6d0 28 28 69 6e 64 65 78 20 3d 3d 20 6e 75 6c 6c 29  ((index == null)
1d6e0 20 7c 7c 20 28 69 6e 64 65 78 2e 49 6e 70 75 74   || (index.Input
1d6f0 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20  s == null) ||.. 
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1d710 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e  index.Inputs.Con
1d720 73 74 72 61 69 6e 74 73 20 3d 3d 20 6e 75 6c 6c  straints == null
1d730 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
1d740 20 20 20 20 20 20 28 69 6e 64 65 78 2e 49 6e 70        (index.Inp
1d750 75 74 73 2e 4f 72 64 65 72 42 79 73 20 3d 3d 20  uts.OrderBys == 
1d760 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e 64 65 78 2e  null) || (index.
1d770 4f 75 74 70 75 74 73 20 3d 3d 20 6e 75 6c 6c 29  Outputs == null)
1d780 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
1d790 20 20 20 20 20 28 69 6e 64 65 78 2e 4f 75 74 70       (index.Outp
1d7a0 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73  uts.ConstraintUs
1d7b0 61 67 65 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  ages == null))..
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1d7e0 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20  eturn;..        
1d7f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1d800 20 20 20 20 20 69 66 20 28 70 49 6e 64 65 78 20       if (pIndex 
1d810 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
1d820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d830 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
1d840 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
1d850 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  et = 0;....     
1d860 20 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e 73         int nCons
1d870 74 72 61 69 6e 74 20 3d 20 52 65 61 64 49 6e 74  traint = ReadInt
1d880 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65  32(pIndex, offse
1d890 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1d8a0 20 20 20 69 66 20 28 6e 43 6f 6e 73 74 72 61 69     if (nConstrai
1d8b0 6e 74 20 21 3d 20 69 6e 64 65 78 2e 49 6e 70 75  nt != index.Inpu
1d8c0 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e 4c  ts.Constraints.L
1d8d0 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20  ength)..        
1d8e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
1d8f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1d900 66 20 28 6e 43 6f 6e 73 74 72 61 69 6e 74 20 21  f (nConstraint !
1d910 3d 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e  = index.Outputs.
1d920 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
1d930 2e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20  .Length)..      
1d940 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1d950 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d960 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f   offset += sizeo
1d970 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  f(int);....     
1d980 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
1d990 6f 6e 73 74 72 61 69 6e 74 20 3d 20 52 65 61 64  onstraint = Read
1d9a0 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f  IntPtr(pIndex, o
1d9b0 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
1d9c0 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
1d9d0 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d   IntPtr.Size;...
1d9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
1d9f0 20 6e 4f 72 64 65 72 42 79 20 3d 20 52 65 61 64   nOrderBy = Read
1da00 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66  Int32(pIndex, of
1da10 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
1da20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
1da30 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a  sizeof(int);....
1da40 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
1da50 74 72 20 70 4f 72 64 65 72 42 79 20 3d 20 52 65  tr pOrderBy = Re
1da60 61 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c  adIntPtr(pIndex,
1da70 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
1da80 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
1da90 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d  += IntPtr.Size;.
1daa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
1dab0 6e 74 50 74 72 20 70 43 6f 6e 73 74 72 61 69 6e  ntPtr pConstrain
1dac0 74 55 73 61 67 65 20 3d 20 52 65 61 64 49 6e 74  tUsage = ReadInt
1dad0 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  Ptr(pIndex, offs
1dae0 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
1daf0 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f      int sizeOfCo
1db00 6e 73 74 72 61 69 6e 74 54 79 70 65 20 3d 20 4d  nstraintType = M
1db10 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79  arshal.SizeOf(ty
1db20 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20  peof(..         
1db30 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
1db40 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1db50 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
1db60 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  int));....      
1db70 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
1db80 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b 20  Constraint = 0; 
1db90 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43  iConstraint < nC
1dba0 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73  onstraint; iCons
1dbb0 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20  traint++)..     
1dbc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1dbd0 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
1dbe0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1dbf0 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
1dc00 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69 6e  traint constrain
1dc10 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
1dc20 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73           new Uns
1dc30 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1dc40 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
1dc50 6f 6e 73 74 72 61 69 6e 74 28 0d 0a 20 20 20 20  onstraint(..    
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc70 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73      index.Inputs
1dc80 2e 43 6f 6e 73 74 72 61 69 6e 74 73 5b 69 43 6f  .Constraints[iCo
1dc90 6e 73 74 72 61 69 6e 74 5d 29 3b 0d 0a 0d 0a 20  nstraint]);.... 
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
1dcb0 61 72 73 68 61 6c 2e 53 74 72 75 63 74 75 72 65  arshal.Structure
1dcc0 54 6f 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ToPtr(..        
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
1dce0 74 72 61 69 6e 74 2c 20 49 6e 74 50 74 72 46 6f  traint, IntPtrFo
1dcf0 72 4f 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61  rOffset(pConstra
1dd00 69 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  int,..          
1dd10 20 20 20 20 20 20 20 20 20 20 69 43 6f 6e 73 74            iConst
1dd20 72 61 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f  raint * sizeOfCo
1dd30 6e 73 74 72 61 69 6e 74 54 79 70 65 29 2c 20 66  nstraintType), f
1dd40 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alse);....      
1dd50 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e            index.
1dd60 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  Inputs.Constrain
1dd70 74 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20  ts[iConstraint] 
1dd80 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
1dd90 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
1dda0 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
1ddb0 28 63 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 20  (constraint);.. 
1ddc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
1dde0 73 69 7a 65 4f 66 4f 72 64 65 72 42 79 54 79 70  sizeOfOrderByTyp
1ddf0 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65  e = Marshal.Size
1de00 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20  Of(typeof(..    
1de10 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
1de20 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1de30 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72  sqlite3_index_or
1de40 64 65 72 62 79 29 29 3b 0d 0a 0d 0a 20 20 20 20  derby));....    
1de50 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
1de60 20 69 4f 72 64 65 72 42 79 20 3d 20 30 3b 20 69   iOrderBy = 0; i
1de70 4f 72 64 65 72 42 79 20 3c 20 6e 4f 72 64 65 72  OrderBy < nOrder
1de80 42 79 3b 20 69 4f 72 64 65 72 42 79 2b 2b 29 0d  By; iOrderBy++).
1de90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1deb0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1dec0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
1ded0 78 5f 6f 72 64 65 72 62 79 20 6f 72 64 65 72 42  x_orderby orderB
1dee0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
1def0 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73           new Uns
1df00 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1df10 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f  .sqlite3_index_o
1df20 72 64 65 72 62 79 28 0d 0a 20 20 20 20 20 20 20  rderby(..       
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df40 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 4f 72   index.Inputs.Or
1df50 64 65 72 42 79 73 5b 69 4f 72 64 65 72 42 79 5d  derBys[iOrderBy]
1df60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1df70 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 53 74        Marshal.St
1df80 72 75 63 74 75 72 65 54 6f 50 74 72 28 0d 0a 20  ructureToPtr(.. 
1df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfa0 20 20 20 6f 72 64 65 72 42 79 2c 20 49 6e 74 50     orderBy, IntP
1dfb0 74 72 46 6f 72 4f 66 66 73 65 74 28 70 4f 72 64  trForOffset(pOrd
1dfc0 65 72 42 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  erBy,..         
1dfd0 20 20 20 20 20 20 20 20 20 20 20 69 4f 72 64 65             iOrde
1dfe0 72 42 79 20 2a 20 73 69 7a 65 4f 66 4f 72 64 65  rBy * sizeOfOrde
1dff0 72 42 79 54 79 70 65 29 2c 20 66 61 6c 73 65 29  rByType), false)
1e000 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e010 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74       index.Input
1e020 73 2e 4f 72 64 65 72 42 79 73 5b 69 4f 72 64 65  s.OrderBys[iOrde
1e030 72 42 79 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20  rBy] =..        
1e040 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1e050 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72  SQLiteIndexOrder
1e060 42 79 28 6f 72 64 65 72 42 79 29 3b 0d 0a 20 20  By(orderBy);..  
1e070 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e080 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73             int s
1e090 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55  izeOfConstraintU
1e0a0 73 61 67 65 54 79 70 65 20 3d 20 4d 61 72 73 68  sageType = Marsh
1e0b0 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66  al.SizeOf(typeof
1e0c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1e0d0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
1e0e0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
1e0f0 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f  ndex_constraint_
1e100 75 73 61 67 65 29 29 3b 0d 0a 0d 0a 20 20 20 20  usage));....    
1e110 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
1e120 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30   iConstraint = 0
1e130 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20  ; iConstraint < 
1e140 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f  nConstraint; iCo
1e150 6e 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20  nstraint++)..   
1e160 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e170 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
1e180 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1e190 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
1e1a0 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20 63  nstraint_usage c
1e1b0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20 3d  onstraintUsage =
1e1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e1d0 20 20 20 20 20 20 6e 65 77 20 55 6e 73 61 66 65        new Unsafe
1e1e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1e1f0 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
1e200 74 72 61 69 6e 74 5f 75 73 61 67 65 28 0d 0a 20  traint_usage(.. 
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e220 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74         index.Out
1e230 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
1e240 73 61 67 65 73 5b 69 43 6f 6e 73 74 72 61 69 6e  sages[iConstrain
1e250 74 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t]);....        
1e260 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
1e270 53 74 72 75 63 74 75 72 65 54 6f 50 74 72 28 0d  StructureToPtr(.
1e280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e290 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 55       constraintU
1e2a0 73 61 67 65 2c 20 49 6e 74 50 74 72 46 6f 72 4f  sage, IntPtrForO
1e2b0 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61 69 6e  ffset(pConstrain
1e2c0 74 55 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  tUsage,..       
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43 6f               iCo
1e2e0 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a 65 4f  nstraint * sizeO
1e2f0 66 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  fConstraintUsage
1e300 54 79 70 65 29 2c 20 66 61 6c 73 65 29 3b 0d 0a  Type), false);..
1e310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e320 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e    index.Outputs.
1e330 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
1e340 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20 3d 0d  [iConstraint] =.
1e350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e360 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 49       new SQLiteI
1e370 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73  ndexConstraintUs
1e380 61 67 65 28 63 6f 6e 73 74 72 61 69 6e 74 55 73  age(constraintUs
1e390 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  age);..         
1e3a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1e3b0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1e3c0 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
1e3d0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1e3e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e430 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
1e440 69 74 65 4d 6f 64 75 6c 65 20 42 61 73 65 20 43  iteModule Base C
1e450 6c 61 73 73 0d 0a 20 20 20 20 2f 2a 20 4e 4f 54  lass..    /* NOT
1e460 20 53 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20   SEALED */..    
1e470 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20  public abstract 
1e480 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 6f 64 75  class SQLiteModu
1e490 6c 65 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  le :..          
1e4a0 20 20 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64    ISQLiteManaged
1e4b0 4d 6f 64 75 6c 65 2c 20 2f 2a 49 53 51 4c 69 74  Module, /*ISQLit
1e4c0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2c 2a 2f  eNativeModule,*/
1e4d0 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20   IDisposable..  
1e4e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
1e4f0 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
1e500 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
1e510 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 64 6f  private const do
1e520 75 62 6c 65 20 44 65 66 61 75 6c 74 43 6f 73 74  uble DefaultCost
1e530 20 3d 20 64 6f 75 62 6c 65 2e 4d 61 78 56 61 6c   = double.MaxVal
1e540 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ue;..        #en
1e550 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1e560 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e5b0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
1e5c0 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20  ivate Data..    
1e5d0 20 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61      private Unsa
1e5e0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1e5f0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6e  sqlite3_module n
1e600 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a 20 20  ativeModule;..  
1e610 20 20 20 20 20 20 70 72 69 76 61 74 65 20 44 69        private Di
1e620 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c  ctionary<IntPtr,
1e630 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
1e640 62 6c 65 3e 20 74 61 62 6c 65 73 3b 0d 0a 20 20  ble> tables;..  
1e650 20 20 20 20 20 20 70 72 69 76 61 74 65 20 44 69        private Di
1e660 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c  ctionary<IntPtr,
1e670 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
1e680 62 6c 65 43 75 72 73 6f 72 3e 20 63 75 72 73 6f  bleCursor> curso
1e690 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  rs;..        #en
1e6a0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1e6b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e700 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e        #region In
1e710 74 65 72 6e 61 6c 20 4d 65 74 68 6f 64 73 0d 0a  ternal Methods..
1e720 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
1e730 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1e740 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64  hods.sqlite3_mod
1e750 75 6c 65 20 43 72 65 61 74 65 4e 61 74 69 76 65  ule CreateNative
1e760 4d 6f 64 75 6c 65 28 29 0d 0a 20 20 20 20 20 20  Module()..      
1e770 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e780 20 72 65 74 75 72 6e 20 43 72 65 61 74 65 4e 61   return CreateNa
1e790 74 69 76 65 4d 6f 64 75 6c 65 28 43 72 65 61 74  tiveModule(Creat
1e7a0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6d 70  eNativeModuleImp
1e7b0 6c 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  l());..        }
1e7c0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1e7d0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1e7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e820 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1e830 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
1e840 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
1e850 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
1e860 51 4c 69 74 65 4d 6f 64 75 6c 65 28 73 74 72 69  QLiteModule(stri
1e870 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  ng name)..      
1e880 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e890 20 69 66 20 28 6e 61 6d 65 20 3d 3d 20 6e 75 6c   if (name == nul
1e8a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1e8b0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
1e8c0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
1e8d0 69 6f 6e 28 22 6e 61 6d 65 22 29 3b 0d 0a 0d 0a  ion("name");....
1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1e8f0 2e 6e 61 6d 65 20 3d 20 6e 61 6d 65 3b 0d 0a 20  .name = name;.. 
1e900 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
1e910 74 61 62 6c 65 73 20 3d 20 6e 65 77 20 44 69 63  tables = new Dic
1e920 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20  tionary<IntPtr, 
1e930 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1e940 6c 65 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  le>();..        
1e950 20 20 20 20 74 68 69 73 2e 63 75 72 73 6f 72 73      this.cursors
1e960 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
1e970 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65  y<IntPtr, SQLite
1e980 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1e990 6f 72 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  or>();..        
1e9a0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
1e9b0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1e9c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1e9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ea10 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
1ea20 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ate Methods..   
1ea30 20 20 20 20 20 70 72 69 76 61 74 65 20 55 6e 73       private Uns
1ea40 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1ea50 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  .sqlite3_module 
1ea60 43 72 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75  CreateNativeModu
1ea70 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
1ea80 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   ISQLiteNativeMo
1ea90 64 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20 20 20  dule module..   
1eaa0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1eab0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1eac0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 20     nativeModule 
1ead0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
1eae0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1eaf0 33 5f 6d 6f 64 75 6c 65 28 29 3b 0d 0a 20 20 20  3_module();..   
1eb00 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
1eb10 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f 6e 20 3d  odule.iVersion =
1eb20 20 32 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   2;....         
1eb30 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 21 3d     if (module !=
1eb40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1eb50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1eb60 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
1eb70 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20 6e 65  ule.xCreate = ne
1eb80 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
1eb90 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28 0d 0a  thods.xCreate(..
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 72 65 61      module.xCrea
1ebc0 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
1ebd0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
1ebe0 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20  dule.xConnect = 
1ebf0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
1ec00 4d 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74  Methods.xConnect
1ec10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1ec20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43         module.xC
1ec30 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20  onnect);....    
1ec40 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
1ec50 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e  veModule.xBestIn
1ec60 64 65 78 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  dex = new Unsafe
1ec70 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42  NativeMethods.xB
1ec80 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20  estIndex(..     
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
1eca0 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
1ecb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1ecc0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
1ecd0 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d  le.xDisconnect =
1ece0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
1ecf0 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e  eMethods.xDiscon
1ed00 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
1ed10 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
1ed20 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d  e.xDisconnect);.
1ed30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ed40 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
1ed50 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20 55  xDestroy = new U
1ed60 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1ed70 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20 20  ds.xDestroy(..  
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed90 20 20 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f    module.xDestro
1eda0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1edb0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
1edc0 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65 77 20  ule.xOpen = new 
1edd0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1ede0 6f 64 73 2e 78 4f 70 65 6e 28 0d 0a 20 20 20 20  ods.xOpen(..    
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee00 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 29 3b 0d 0a  module.xOpen);..
1ee10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ee20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
1ee30 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55 6e 73 61  Close = new Unsa
1ee40 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1ee50 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20  xClose(..       
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
1ee70 75 6c 65 2e 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a  ule.xClose);....
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee90 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  nativeModule.xFi
1eea0 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61 66  lter = new Unsaf
1eeb0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
1eec0 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20  Filter(..       
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
1eee0 75 6c 65 2e 78 46 69 6c 74 65 72 29 3b 0d 0a 0d  ule.xFilter);...
1eef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ef00 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e   nativeModule.xN
1ef10 65 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ext = new Unsafe
1ef20 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e  NativeMethods.xN
1ef30 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ext(..          
1ef40 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
1ef50 2e 78 4e 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  .xNext);....    
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
1ef70 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20  veModule.xEof = 
1ef80 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
1ef90 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 6d 6f 64  Methods.xEof(mod
1efa0 75 6c 65 2e 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20  ule.xEof);....  
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
1efc0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
1efd0 6d 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  mn = new UnsafeN
1efe0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
1eff0 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  lumn(..         
1f000 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
1f010 65 2e 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20  e.xColumn);.... 
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
1f030 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77  ativeModule.xRow
1f040 49 64 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  Id = new UnsafeN
1f050 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f  ativeMethods.xRo
1f060 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  wId(..          
1f070 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
1f080 2e 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20  .xRowId);....   
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
1f0a0 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74  iveModule.xUpdat
1f0b0 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
1f0c0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 55 70 64  tiveMethods.xUpd
1f0d0 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
1f0e0 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
1f0f0 2e 78 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20  .xUpdate);....  
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
1f110 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69  tiveModule.xBegi
1f120 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
1f130 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 67  tiveMethods.xBeg
1f140 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in(..           
1f150 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
1f160 78 42 65 67 69 6e 29 3b 0d 0a 0d 0a 20 20 20 20  xBegin);....    
1f170 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
1f180 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d  veModule.xSync =
1f190 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
1f1a0 65 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 0d  eMethods.xSync(.
1f1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f1c0 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53 79 6e       module.xSyn
1f1d0 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  c);....         
1f1e0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
1f1f0 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e 65  ule.xCommit = ne
1f200 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
1f210 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a  thods.xCommit(..
1f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f230 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d      module.xComm
1f240 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  it);....        
1f250 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
1f260 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d  dule.xRollback =
1f270 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
1f280 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61  eMethods.xRollba
1f290 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
1f2a0 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
1f2b0 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  xRollback);.... 
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
1f2d0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
1f2e0 64 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20  dFunction = new 
1f2f0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1f300 6f 64 73 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ods.xFindFunctio
1f310 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1f320 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
1f330 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a  FindFunction);..
1f340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f350 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
1f360 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73  Rename = new Uns
1f370 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1f380 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20  .xRename(..     
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
1f3a0 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 29 3b 0d  odule.xRename);.
1f3b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f3c0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
1f3d0 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 6e 65 77  xSavepoint = new
1f3e0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1f3f0 68 6f 64 73 2e 78 53 61 76 65 70 6f 69 6e 74 28  hods.xSavepoint(
1f400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f410 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53 61        module.xSa
1f420 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20  vepoint);....   
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
1f440 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61  iveModule.xRelea
1f450 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  se = new UnsafeN
1f460 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65  ativeMethods.xRe
1f470 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20  lease(..        
1f480 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
1f490 6c 65 2e 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d  le.xRelease);...
1f4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f4b0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
1f4c0 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20  ollbackTo = new 
1f4d0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1f4e0 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28  ods.xRollbackTo(
1f4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f500 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 6f        module.xRo
1f510 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20 20 20  llbackTo);..    
1f520 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f530 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1f540 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f550 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
1f560 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
1f570 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
1f580 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 72 65 61  iveMethods.xCrea
1f590 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
1f5a0 20 20 20 20 20 20 20 20 20 78 43 72 65 61 74 65           xCreate
1f5b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f5c0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
1f5d0 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20 6e 65  le.xConnect = ne
1f5e0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
1f5f0 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74 28 0d  thods.xConnect(.
1f600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f610 20 20 20 20 20 78 43 6f 6e 6e 65 63 74 29 3b 0d       xConnect);.
1f620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f630 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
1f640 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65 77  xBestIndex = new
1f650 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1f660 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78 28  hods.xBestIndex(
1f670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f680 20 20 20 20 20 20 78 42 65 73 74 49 6e 64 65 78        xBestIndex
1f690 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f6a0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
1f6b0 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d  le.xDisconnect =
1f6c0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
1f6d0 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e  eMethods.xDiscon
1f6e0 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  nect(..         
1f6f0 20 20 20 20 20 20 20 20 20 20 20 78 44 69 73 63             xDisc
1f700 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20  onnect);....    
1f710 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
1f720 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f  veModule.xDestro
1f730 79 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  y = new UnsafeNa
1f740 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 65 73  tiveMethods.xDes
1f750 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20  troy(..         
1f760 20 20 20 20 20 20 20 20 20 20 20 78 44 65 73 74             xDest
1f770 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  roy);....       
1f780 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
1f790 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65  odule.xOpen = ne
1f7a0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
1f7b0 74 68 6f 64 73 2e 78 4f 70 65 6e 28 78 4f 70 65  thods.xOpen(xOpe
1f7c0 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
1f7d0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
1f7e0 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55  e.xClose = new U
1f7f0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1f800 64 73 2e 78 43 6c 6f 73 65 28 78 43 6c 6f 73 65  ds.xClose(xClose
1f810 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f820 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
1f830 6c 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65 77  le.xFilter = new
1f840 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1f850 68 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a 20  hods.xFilter(.. 
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f870 20 20 20 78 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a     xFilter);....
1f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f890 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65  nativeModule.xNe
1f8a0 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  xt = new UnsafeN
1f8b0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e 65  ativeMethods.xNe
1f8c0 78 74 28 78 4e 65 78 74 29 3b 0d 0a 20 20 20 20  xt(xNext);..    
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
1f8e0 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d 20  veModule.xEof = 
1f8f0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
1f900 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 78 45 6f  Methods.xEof(xEo
1f910 66 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  f);....         
1f920 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
1f930 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65  ule.xColumn = ne
1f940 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
1f950 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a  thods.xColumn(..
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f970 20 20 20 20 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d      xColumn);...
1f980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f990 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
1f9a0 6f 77 49 64 20 3d 20 6e 65 77 20 55 6e 73 61 66  owId = new Unsaf
1f9b0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
1f9c0 52 6f 77 49 64 28 78 52 6f 77 49 64 29 3b 0d 0a  RowId(xRowId);..
1f9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f9e0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
1f9f0 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55 6e 73  Update = new Uns
1fa00 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1fa10 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20  .xUpdate(..     
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
1fa30 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  Update);....    
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
1fa50 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20  veModule.xBegin 
1fa60 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
1fa70 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 67 69 6e  veMethods.xBegin
1fa80 28 78 42 65 67 69 6e 29 3b 0d 0a 20 20 20 20 20  (xBegin);..     
1fa90 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
1faa0 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d 20  eModule.xSync = 
1fab0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
1fac0 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 78 53  Methods.xSync(xS
1fad0 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ync);....       
1fae0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
1faf0 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20  odule.xCommit = 
1fb00 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
1fb10 4d 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28  Methods.xCommit(
1fb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fb30 20 20 20 20 20 20 78 43 6f 6d 6d 69 74 29 3b 0d        xCommit);.
1fb40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1fb50 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
1fb60 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20  xRollback = new 
1fb70 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1fb80 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a  ods.xRollback(..
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fba0 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d      xRollback);.
1fbb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1fbc0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
1fbd0 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20  xFindFunction = 
1fbe0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
1fbf0 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64 46 75 6e  Methods.xFindFun
1fc00 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 78 46 69 6e              xFin
1fc20 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20  dFunction);.... 
1fc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
1fc40 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e  ativeModule.xRen
1fc50 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ame = new Unsafe
1fc60 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52  NativeMethods.xR
1fc70 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  ename(..        
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 78 52 65 6e              xRen
1fc90 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
1fca0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
1fcb0 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74  odule.xSavepoint
1fcc0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
1fcd0 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61 76 65  iveMethods.xSave
1fce0 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  point(..        
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 78 53 61 76              xSav
1fd00 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  epoint);....    
1fd10 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
1fd20 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73  veModule.xReleas
1fd30 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
1fd40 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6c  tiveMethods.xRel
1fd50 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  ease(..         
1fd60 20 20 20 20 20 20 20 20 20 20 20 78 52 65 6c 65             xRele
1fd70 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ase);....       
1fd80 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
1fd90 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54  odule.xRollbackT
1fda0 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  o = new UnsafeNa
1fdb0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c  tiveMethods.xRol
1fdc0 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 52                xR
1fde0 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20 20  ollbackTo);..   
1fdf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1fe00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1fe10 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a   nativeModule;..
1fe20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1fe30 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1fe40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1fea0 69 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d 65  ion Protected Me
1feb0 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 23  mbers..        #
1fec0 72 65 67 69 6f 6e 20 4d 6f 64 75 6c 65 20 48 65  region Module He
1fed0 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
1fee0 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
1fef0 76 69 72 74 75 61 6c 20 49 53 51 4c 69 74 65 4e  virtual ISQLiteN
1ff00 61 74 69 76 65 4d 6f 64 75 6c 65 20 43 72 65 61  ativeModule Crea
1ff10 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6d  teNativeModuleIm
1ff20 70 6c 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  pl()..        {.
1ff30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1ff40 75 72 6e 20 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f 54  urn null; /* NOT
1ff50 45 3a 20 55 73 65 20 62 75 69 6c 74 2d 69 6e 20  E: Use built-in 
1ff60 64 65 66 61 75 6c 74 73 2e 20 2a 2f 0d 0a 20 20  defaults. */..  
1ff70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1ff80 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1ff90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ffe0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1fff0 6e 20 4e 61 74 69 76 65 20 54 61 62 6c 65 20 48  n Native Table H
20000 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
20010 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
20020 20 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20   virtual IntPtr 
20030 41 6c 6c 6f 63 61 74 65 54 61 62 6c 65 28 29 0d  AllocateTable().
20040 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
20050 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65          int size
20060 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f   = Marshal.SizeO
20070 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20  f(typeof(..     
20080 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
20090 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
200a0 71 6c 69 74 65 33 5f 76 74 61 62 29 29 3b 0d 0a  qlite3_vtab));..
200b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
200c0 74 75 72 6e 20 53 51 4c 69 74 65 4d 65 6d 6f 72  turn SQLiteMemor
200d0 79 2e 41 6c 6c 6f 63 61 74 65 28 73 69 7a 65 29  y.Allocate(size)
200e0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
200f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20140 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  ...        prote
20150 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69  cted virtual voi
20160 64 20 5a 65 72 6f 54 61 62 6c 65 28 0d 0a 20 20  d ZeroTable(..  
20170 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
20180 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
20190 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
201a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
201b0 20 28 70 56 74 61 62 20 3d 3d 20 49 6e 74 50 74   (pVtab == IntPt
201c0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
201d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
201e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
201f0 69 6e 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d  int offset = 0;.
20200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
20210 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69  QLiteMarshal.Wri
20220 74 65 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20  teIntPtr(pVtab, 
20230 6f 66 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 5a  offset, IntPtr.Z
20240 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ero);....       
20250 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49       offset += I
20260 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20  ntPtr.Size;.... 
20270 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
20280 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e  eMarshal.WriteIn
20290 74 33 32 28 70 56 74 61 62 2c 20 6f 66 66 73 65  t32(pVtab, offse
202a0 74 2c 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  t, 0);....      
202b0 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
202c0 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a  sizeof(int);....
202d0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
202e0 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49  teMarshal.WriteI
202f0 6e 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66  ntPtr(pVtab, off
20300 73 65 74 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  set, IntPtr.Zero
20310 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
20320 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
20330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  ....        prot
20380 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f  ected virtual vo
20390 69 64 20 46 72 65 65 54 61 62 6c 65 28 0d 0a 20  id FreeTable(.. 
203a0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
203b0 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
203c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
203d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
203e0 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  etTableError(pVt
203f0 61 62 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  ab, null);..    
20400 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65          SQLiteMe
20410 6d 6f 72 79 2e 46 72 65 65 28 70 56 74 61 62 29  mory.Free(pVtab)
20420 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
20430 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
20440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
20450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20490 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
204a0 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 43 75  region Native Cu
204b0 72 73 6f 72 20 48 65 6c 70 65 72 20 4d 65 74 68  rsor Helper Meth
204c0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  ods..        pro
204d0 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 49  tected virtual I
204e0 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 43 75  ntPtr AllocateCu
204f0 72 73 6f 72 28 29 0d 0a 20 20 20 20 20 20 20 20  rsor()..        
20500 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
20510 6e 74 20 73 69 7a 65 20 3d 20 4d 61 72 73 68 61  nt size = Marsha
20520 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28  l.SizeOf(typeof(
20530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20540 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
20550 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 74  thods.sqlite3_vt
20560 61 62 5f 63 75 72 73 6f 72 29 29 3b 0d 0a 0d 0a  ab_cursor));....
20570 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20580 72 6e 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e  rn SQLiteMemory.
20590 41 6c 6c 6f 63 61 74 65 28 73 69 7a 65 29 3b 0d  Allocate(size);.
205a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
205b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
205c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20600 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
20610 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20  ed virtual void 
20620 46 72 65 65 43 75 72 73 6f 72 28 0d 0a 20 20 20  FreeCursor(..   
20630 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
20640 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
20650 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
20660 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
20670 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
20680 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20  (pCursor);..    
20690 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
206a0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
206b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
206c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20700 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
20710 54 61 62 6c 65 20 4c 6f 6f 6b 75 70 20 4d 65 74  Table Lookup Met
20720 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72  hods..        pr
20730 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
20740 49 6e 74 50 74 72 20 54 61 62 6c 65 46 72 6f 6d  IntPtr TableFrom
20750 43 75 72 73 6f 72 28 0d 0a 20 20 20 20 20 20 20  Cursor(..       
20760 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
20770 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
20780 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
20790 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
207a0 43 75 72 73 6f 72 20 3d 3d 20 49 6e 74 50 74 72  Cursor == IntPtr
207b0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
207c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
207d0 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
207e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
207f0 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  n Marshal.ReadIn
20800 74 50 74 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a  tPtr(pCursor);..
20810 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
20820 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20870 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
20880 64 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74 65  d virtual SQLite
20890 56 69 72 74 75 61 6c 54 61 62 6c 65 20 54 61 62  VirtualTable Tab
208a0 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20  leFromIntPtr(.. 
208b0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
208c0 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
208d0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
208e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
208f0 66 20 28 70 56 74 61 62 20 3d 3d 20 49 6e 74 50  f (pVtab == IntP
20900 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
20910 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20920 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c           SetTabl
20930 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 22 69  eError(pVtab, "i
20940 6e 76 61 6c 69 64 20 6e 61 74 69 76 65 20 74 61  nvalid native ta
20950 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ble");..        
20960 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
20970 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
20980 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20990 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
209a0 54 61 62 6c 65 20 74 61 62 6c 65 3b 0d 0a 0d 0a  Table table;....
209b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
209c0 28 74 61 62 6c 65 73 20 21 3d 20 6e 75 6c 6c 29  (tables != null)
209d0 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
209e0 20 20 20 20 20 74 61 62 6c 65 73 2e 54 72 79 47       tables.TryG
209f0 65 74 56 61 6c 75 65 28 70 56 74 61 62 2c 20 6f  etValue(pVtab, o
20a00 75 74 20 74 61 62 6c 65 29 29 0d 0a 20 20 20 20  ut table))..    
20a10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20a20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20a30 6e 20 74 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20  n table;..      
20a40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20a50 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
20a60 72 72 6f 72 28 70 56 74 61 62 2c 20 53 74 72 69  rror(pVtab, Stri
20a70 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
20a80 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
20a90 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
20aa0 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
20ab0 20 20 20 20 20 20 20 20 20 22 6d 61 6e 61 67 65           "manage
20ac0 64 20 74 61 62 6c 65 20 66 6f 72 20 7b 30 7d 20  d table for {0} 
20ad0 6e 6f 74 20 66 6f 75 6e 64 22 2c 20 70 56 74 61  not found", pVta
20ae0 62 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  b));....        
20af0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
20b00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
20b10 20 20 20 20 20 20 20 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 2f 2f 2f 2f 0d 0a  //////////////..
20b60 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
20b70 74 65 64 20 76 69 72 74 75 61 6c 20 49 6e 74 50  ted virtual IntP
20b80 74 72 20 54 61 62 6c 65 54 6f 49 6e 74 50 74 72  tr TableToIntPtr
20b90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
20ba0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
20bb0 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  e table..       
20bc0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
20bd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
20be0 66 20 28 28 74 61 62 6c 65 20 3d 3d 20 6e 75 6c  f ((table == nul
20bf0 6c 29 20 7c 7c 20 28 74 61 62 6c 65 73 20 3d 3d  l) || (tables ==
20c00 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
20c10 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
20c20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
20c30 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
20c40 74 72 20 70 56 74 61 62 20 3d 20 49 6e 74 50 74  tr pVtab = IntPt
20c50 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
20c60 20 20 20 20 20 62 6f 6f 6c 20 73 75 63 63 65 73       bool succes
20c70 73 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  s = false;....  
20c80 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
20c90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56                pV
20cb0 74 61 62 20 3d 20 41 6c 6c 6f 63 61 74 65 54 61  tab = AllocateTa
20cc0 62 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ble();....      
20cd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56            if (pV
20ce0 74 61 62 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  tab != IntPtr.Ze
20cf0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
20d00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20d10 20 20 20 20 20 20 20 20 20 20 20 20 5a 65 72 6f              Zero
20d20 54 61 62 6c 65 28 70 56 74 61 62 29 3b 0d 0a 20  Table(pVtab);.. 
20d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d40 20 20 20 74 61 62 6c 65 2e 4e 61 74 69 76 65 48     table.NativeH
20d50 61 6e 64 6c 65 20 3d 20 70 56 74 61 62 3b 0d 0a  andle = pVtab;..
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d70 20 20 20 20 74 61 62 6c 65 73 2e 41 64 64 28 70      tables.Add(p
20d80 56 74 61 62 2c 20 74 61 62 6c 65 29 3b 0d 0a 20  Vtab, table);.. 
20d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20da0 20 20 20 73 75 63 63 65 73 73 20 3d 20 74 72 75     success = tru
20db0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
20dc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
20dd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20de0 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
20df0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20e00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73            if (!s
20e10 75 63 63 65 73 73 20 26 26 20 28 70 56 74 61 62  uccess && (pVtab
20e20 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
20e30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
20e40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20e50 20 20 20 20 20 20 20 20 20 20 46 72 65 65 54 61            FreeTa
20e60 62 6c 65 28 70 56 74 61 62 29 3b 0d 0a 20 20 20  ble(pVtab);..   
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e80 20 70 56 74 61 62 20 3d 20 49 6e 74 50 74 72 2e   pVtab = IntPtr.
20e90 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
20ea0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
20eb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20ec0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 56         return pV
20ed0 74 61 62 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  tab;..        }.
20ee0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
20ef0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
20f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20f50 20 20 23 72 65 67 69 6f 6e 20 43 75 72 73 6f 72    #region Cursor
20f60 20 4c 6f 6f 6b 75 70 20 4d 65 74 68 6f 64 73 0d   Lookup Methods.
20f70 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
20f80 65 64 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74  ed virtual SQLit
20f90 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
20fa0 73 6f 72 20 43 75 72 73 6f 72 46 72 6f 6d 49 6e  sor CursorFromIn
20fb0 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
20fc0 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c     IntPtr pVtab,
20fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
20fe0 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20  tPtr pCursor..  
20ff0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
21000 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21010 20 20 20 20 69 66 20 28 70 43 75 72 73 6f 72 20      if (pCursor 
21020 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
21030 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21050 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56  SetTableError(pV
21060 74 61 62 2c 20 22 69 6e 76 61 6c 69 64 20 6e 61  tab, "invalid na
21070 74 69 76 65 20 63 75 72 73 6f 72 22 29 3b 0d 0a  tive cursor");..
21080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21090 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
210a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
210b0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
210c0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
210d0 73 6f 72 20 63 75 72 73 6f 72 3b 0d 0a 0d 0a 20  sor cursor;.... 
210e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
210f0 63 75 72 73 6f 72 73 20 21 3d 20 6e 75 6c 6c 29  cursors != null)
21100 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
21110 20 20 20 20 20 63 75 72 73 6f 72 73 2e 54 72 79       cursors.Try
21120 47 65 74 56 61 6c 75 65 28 70 43 75 72 73 6f 72  GetValue(pCursor
21130 2c 20 6f 75 74 20 63 75 72 73 6f 72 29 29 0d 0a  , out cursor))..
21140 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21160 65 74 75 72 6e 20 63 75 72 73 6f 72 3b 0d 0a 20  eturn cursor;.. 
21170 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21180 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54              SetT
21190 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c  ableError(pVtab,
211a0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
211b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
211c0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
211d0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
211e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
211f0 61 6e 61 67 65 64 20 63 75 72 73 6f 72 20 66 6f  anaged cursor fo
21200 72 20 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e 64 22  r {0} not found"
21210 2c 20 70 43 75 72 73 6f 72 29 29 3b 0d 0a 0d 0a  , pCursor));....
21220 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21230 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
21240 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
21250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21290 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
212a0 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74    protected virt
212b0 75 61 6c 20 49 6e 74 50 74 72 20 43 75 72 73 6f  ual IntPtr Curso
212c0 72 54 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  rToIntPtr(..    
212d0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
212e0 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
212f0 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20   cursor..       
21300 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
21310 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
21320 66 20 28 28 63 75 72 73 6f 72 20 3d 3d 20 6e 75  f ((cursor == nu
21330 6c 6c 29 20 7c 7c 20 28 63 75 72 73 6f 72 73 20  ll) || (cursors 
21340 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
21350 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21360 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  n IntPtr.Zero;..
21370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
21380 74 50 74 72 20 70 43 75 72 73 6f 72 20 3d 20 49  tPtr pCursor = I
21390 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
213a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 75           bool su
213b0 63 63 65 73 73 20 3d 20 66 61 6c 73 65 3b 0d 0a  ccess = false;..
213c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
213d0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
213e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
213f0 20 20 70 43 75 72 73 6f 72 20 3d 20 41 6c 6c 6f    pCursor = Allo
21400 63 61 74 65 43 75 72 73 6f 72 28 29 3b 0d 0a 0d  cateCursor();...
21410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21420 20 69 66 20 28 70 43 75 72 73 6f 72 20 21 3d 20   if (pCursor != 
21430 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
21440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
21450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21460 20 20 20 20 20 63 75 72 73 6f 72 2e 4e 61 74 69       cursor.Nati
21470 76 65 48 61 6e 64 6c 65 20 3d 20 70 43 75 72 73  veHandle = pCurs
21480 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or;..           
21490 20 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 73           cursors
214a0 2e 41 64 64 28 70 43 75 72 73 6f 72 2c 20 63 75  .Add(pCursor, cu
214b0 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rsor);..        
214c0 20 20 20 20 20 20 20 20 20 20 20 20 73 75 63 63              succ
214d0 65 73 73 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ess = true;..   
214e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
214f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
21500 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
21510 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
21520 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21530 20 20 20 69 66 20 28 21 73 75 63 63 65 73 73 20     if (!success 
21540 26 26 20 28 70 43 75 72 73 6f 72 20 21 3d 20 49  && (pCursor != I
21550 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20  ntPtr.Zero))..  
21560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
21570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21580 20 20 20 20 20 46 72 65 65 43 75 72 73 6f 72 28       FreeCursor(
21590 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20  pCursor);..     
215a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
215b0 43 75 72 73 6f 72 20 3d 20 49 6e 74 50 74 72 2e  Cursor = IntPtr.
215c0 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
215d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
215e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
215f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 43         return pC
21600 75 72 73 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  ursor;..        
21610 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
21620 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
21630 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21670 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21680 20 20 20 20 23 72 65 67 69 6f 6e 20 54 61 62 6c      #region Tabl
21690 65 20 44 65 63 6c 61 72 61 74 69 6f 6e 20 48 65  e Declaration He
216a0 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
216b0 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
216c0 76 69 72 74 75 61 6c 20 53 51 4c 69 74 65 45 72  virtual SQLiteEr
216d0 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 54  rorCode DeclareT
216e0 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  able(..         
216f0 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
21700 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d  ion connection,.
21710 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
21720 69 6e 67 20 73 71 6c 2c 0d 0a 20 20 20 20 20 20  ing sql,..      
21730 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
21740 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
21750 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
21760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
21770 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 3d 20   (connection == 
21780 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
21790 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
217a0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
217b0 6e 76 61 6c 69 64 20 63 6f 6e 6e 65 63 74 69 6f  nvalid connectio
217c0 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
217d0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
217e0 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
217f0 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
21800 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
21810 20 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c 69   SQLiteBase sqli
21820 74 65 42 61 73 65 20 3d 20 63 6f 6e 6e 65 63 74  teBase = connect
21830 69 6f 6e 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20  ion._sql;....   
21840 20 20 20 20 20 20 20 20 20 69 66 20 28 73 71 6c           if (sql
21850 69 74 65 42 61 73 65 20 3d 3d 20 6e 75 6c 6c 29  iteBase == null)
21860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21880 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63   error = "connec
21890 74 69 6f 6e 20 68 61 73 20 69 6e 76 61 6c 69 64  tion has invalid
218a0 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20   handle";..     
218b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
218c0 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
218d0 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
218e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
218f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 71         return sq
21900 6c 69 74 65 42 61 73 65 2e 44 65 63 6c 61 72 65  liteBase.Declare
21910 56 69 72 74 75 61 6c 54 61 62 6c 65 28 74 68 69  VirtualTable(thi
21920 73 2c 20 73 71 6c 2c 20 72 65 66 20 65 72 72 6f  s, sql, ref erro
21930 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  r);..        }..
21940 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
21950 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
21960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
219b0 20 23 72 65 67 69 6f 6e 20 45 72 72 6f 72 20 48   #region Error H
219c0 61 6e 64 6c 69 6e 67 20 48 65 6c 70 65 72 20 4d  andling Helper M
219d0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
219e0 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
219f0 6c 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c 65 45  l bool SetTableE
21a00 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20  rror(..         
21a10 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c     IntPtr pVtab,
21a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
21a30 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
21a40 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
21a50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21a60 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
21a70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21a80 20 20 20 20 20 20 69 66 20 28 4c 6f 67 45 72 72        if (LogErr
21a90 6f 72 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ors)..          
21aa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
21ac0 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
21ad0 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e(SQLiteErrorCod
21ae0 65 2e 45 72 72 6f 72 2c 0d 0a 20 20 20 20 20 20  e.Error,..      
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b00 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
21b10 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
21b20 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
21b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b40 20 20 20 20 20 22 56 69 72 74 75 61 6c 20 74 61       "Virtual ta
21b50 62 6c 65 20 65 72 72 6f 72 3a 20 7b 30 7d 22 2c  ble error: {0}",
21b60 20 65 72 72 6f 72 29 29 3b 20 2f 2a 20 74 68 72   error)); /* thr
21b70 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
21b80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
21b90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21ba0 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
21bb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
21bd0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
21be0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21bf0 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61          if (pVta
21c00 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b == IntPtr.Zero
21c10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21c20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21c40 69 6e 74 20 6f 66 66 73 65 74 20 3d 20 49 6e 74  int offset = Int
21c50 50 74 72 2e 53 69 7a 65 20 2b 20 73 69 7a 65 6f  Ptr.Size + sizeo
21c60 66 28 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  f(int);..       
21c70 20 20 20 20 20 49 6e 74 50 74 72 20 70 45 72 72       IntPtr pErr
21c80 6f 72 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68  or = SQLiteMarsh
21c90 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 70 56  al.ReadIntPtr(pV
21ca0 74 61 62 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d  tab, offset);...
21cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
21cc0 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74  (pError != IntPt
21cd0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
21ce0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21cf0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65          SQLiteMe
21d00 6d 6f 72 79 2e 46 72 65 65 28 70 45 72 72 6f 72  mory.Free(pError
21d10 29 3b 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50  ); pError = IntP
21d20 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
21d30 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
21d40 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74  Marshal.WriteInt
21d50 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65  Ptr(pVtab, offse
21d60 74 2c 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20  t, pError);..   
21d70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21d80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 72            if (er
21d90 72 6f 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ror == null)..  
21da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21db0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  turn true;....  
21dc0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
21dd0 75 63 63 65 73 73 20 3d 20 66 61 6c 73 65 3b 0d  uccess = false;.
21de0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
21df0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
21e00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21e10 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69     pError = SQLi
21e20 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
21e30 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 65 72  PtrFromString(er
21e40 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
21e50 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72         SQLiteMar
21e60 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72  shal.WriteIntPtr
21e70 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c 20  (pVtab, offset, 
21e80 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20  pError);..      
21e90 20 20 20 20 20 20 20 20 20 20 73 75 63 63 65 73            succes
21ea0 73 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  s = true;..     
21eb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
21ec0 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
21ed0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
21ef0 20 28 21 73 75 63 63 65 73 73 20 26 26 20 28 70   (!success && (p
21f00 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e  Error != IntPtr.
21f10 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20  Zero))..        
21f20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
21f40 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
21f50 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  (pError);..     
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
21f70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a  Error = IntPtr.Z
21f80 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
21f90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21fa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21fb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 75 63        return suc
21fc0 63 65 73 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d  cess;..        }
21fd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
21fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22020 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
22030 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
22040 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c 65 45 72   bool SetTableEr
22050 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ror(..          
22060 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
22070 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20  able table,..   
22080 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
22090 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
220a0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
220b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
220c0 28 74 61 62 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (table == null).
220d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
220e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
220f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
22100 74 50 74 72 20 70 56 74 61 62 20 3d 20 74 61 62  tPtr pVtab = tab
22110 6c 65 2e 4e 61 74 69 76 65 48 61 6e 64 6c 65 3b  le.NativeHandle;
22120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22130 69 66 20 28 70 56 74 61 62 20 3d 3d 20 49 6e 74  if (pVtab == Int
22140 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
22150 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
22160 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
22170 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
22180 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  etTableError(pVt
22190 61 62 2c 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ab, error);..   
221a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
221b0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
221c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22200 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76       protected v
22210 69 72 74 75 61 6c 20 62 6f 6f 6c 20 53 65 74 43  irtual bool SetC
22220 75 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20 20 20  ursorError(..   
22230 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
22240 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
22250 72 20 63 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20  r cursor,..     
22260 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72         string er
22270 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
22280 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
22290 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
222a0 75 72 73 6f 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ursor == null)..
222b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
222d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
222e0 50 74 72 20 70 43 75 72 73 6f 72 20 3d 20 63 75  Ptr pCursor = cu
222f0 72 73 6f 72 2e 4e 61 74 69 76 65 48 61 6e 64 6c  rsor.NativeHandl
22300 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
22310 20 20 69 66 20 28 70 43 75 72 73 6f 72 20 3d 3d    if (pCursor ==
22320 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22340 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
22350 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
22360 74 72 20 70 56 74 61 62 20 3d 20 54 61 62 6c 65  tr pVtab = Table
22370 46 72 6f 6d 43 75 72 73 6f 72 28 70 43 75 72 73  FromCursor(pCurs
22380 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
22390 20 20 20 20 69 66 20 28 70 56 74 61 62 20 3d 3d      if (pVtab ==
223a0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
223b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
223c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
223d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
223e0 72 6e 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72  rn SetTableError
223f0 28 70 56 74 61 62 2c 20 65 72 72 6f 72 29 3b 0d  (pVtab, error);.
22400 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
22410 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
22420 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
22430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
22480 67 69 6f 6e 20 49 6e 64 65 78 20 48 61 6e 64 6c  gion Index Handl
22490 69 6e 67 20 48 65 6c 70 65 72 20 4d 65 74 68 6f  ing Helper Metho
224a0 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  ds..        prot
224b0 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 62 6f  ected virtual bo
224c0 6f 6c 20 53 65 74 45 73 74 69 6d 61 74 65 64 43  ol SetEstimatedC
224d0 6f 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ost(..          
224e0 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e    SQLiteIndex in
224f0 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  dex,..          
22500 20 20 64 6f 75 62 6c 65 20 65 73 74 69 6d 61 74    double estimat
22510 65 64 43 6f 73 74 0d 0a 20 20 20 20 20 20 20 20  edCost..        
22520 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
22530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
22540 20 28 28 69 6e 64 65 78 20 3d 3d 20 6e 75 6c 6c   ((index == null
22550 29 20 7c 7c 20 28 69 6e 64 65 78 2e 4f 75 74 70  ) || (index.Outp
22560 75 74 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  uts == null)).. 
22570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22580 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
22590 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
225a0 78 2e 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61  x.Outputs.Estima
225b0 74 65 64 43 6f 73 74 20 3d 20 65 73 74 69 6d 61  tedCost = estima
225c0 74 65 64 43 6f 73 74 3b 0d 0a 20 20 20 20 20 20  tedCost;..      
225d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
225e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
225f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
22600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  ....        prot
22650 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 62 6f  ected virtual bo
22660 6f 6c 20 53 65 74 45 73 74 69 6d 61 74 65 64 43  ol SetEstimatedC
22670 6f 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ost(..          
22680 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e    SQLiteIndex in
22690 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dex..           
226a0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
226b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
226c0 6e 20 53 65 74 45 73 74 69 6d 61 74 65 64 43 6f  n SetEstimatedCo
226d0 73 74 28 69 6e 64 65 78 2c 20 44 65 66 61 75 6c  st(index, Defaul
226e0 74 43 6f 73 74 29 3b 0d 0a 20 20 20 20 20 20 20  tCost);..       
226f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
22700 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
22710 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
22720 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22770 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
22780 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
22790 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
227a0 61 74 65 20 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f  ate bool logErro
227b0 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62  rs;..        pub
227c0 6c 69 63 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c  lic virtual bool
227d0 20 4c 6f 67 45 72 72 6f 72 73 0d 0a 20 20 20 20   LogErrors..    
227e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
227f0 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
22800 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
22810 20 6c 6f 67 45 72 72 6f 72 73 3b 20 7d 0d 0a 20   logErrors; }.. 
22820 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
22830 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
22840 3b 20 6c 6f 67 45 72 72 6f 72 73 20 3d 20 76 61  ; logErrors = va
22850 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
22860 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
22870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
228c0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6c 6f 67  private bool log
228d0 45 78 63 65 70 74 69 6f 6e 73 3b 0d 0a 20 20 20  Exceptions;..   
228e0 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
228f0 75 61 6c 20 62 6f 6f 6c 20 4c 6f 67 45 78 63 65  ual bool LogExce
22900 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  ptions..        
22910 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
22920 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
22930 65 64 28 29 3b 20 72 65 74 75 72 6e 20 6c 6f 67  ed(); return log
22940 45 78 63 65 70 74 69 6f 6e 73 3b 20 7d 0d 0a 20  Exceptions; }.. 
22950 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
22960 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
22970 3b 20 6c 6f 67 45 78 63 65 70 74 69 6f 6e 73 20  ; logExceptions 
22980 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
22990 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
229a0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
229b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
229c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22a00 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
22a10 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
22a20 75 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  ule Members..   
22a30 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
22a40 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 72  iteErrorCode xCr
22a50 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
22a60 20 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a     IntPtr pDb,..
22a70 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
22a80 74 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20  tr pAux,..      
22a90 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d        int argc,.
22aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
22ab0 50 74 72 5b 5d 20 61 72 67 76 2c 0d 0a 20 20 20  Ptr[] argv,..   
22ac0 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
22ad0 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
22ae0 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
22af0 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20 20  tr pError..     
22b00 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
22b10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22b20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
22b30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22b40 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
22b50 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72  Name = SQLiteStr
22b60 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55 74  ing.StringFromUt
22b70 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  f8IntPtr(..     
22b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
22b90 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
22ba0 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 66 69  ds.sqlite3_db_fi
22bb0 6c 65 6e 61 6d 65 28 70 44 62 2c 20 49 6e 74 50  lename(pDb, IntP
22bc0 74 72 2e 5a 65 72 6f 29 29 3b 0d 0a 0d 0a 20 20  tr.Zero));....  
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
22be0 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65  ing (SQLiteConne
22bf0 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ction connection
22c00 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
22c10 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nection(..      
22c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c30 20 20 70 44 62 2c 20 66 69 6c 65 4e 61 6d 65 2c    pDb, fileName,
22c40 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20   false))..      
22c50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c70 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
22c80 62 6c 65 20 74 61 62 6c 65 20 3d 20 6e 75 6c 6c  ble table = null
22c90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
22ca0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72         string er
22cb0 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ror = null;.... 
22cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cd0 20 20 20 69 66 20 28 43 72 65 61 74 65 28 63 6f     if (Create(co
22ce0 6e 6e 65 63 74 69 6f 6e 2c 20 70 41 75 78 2c 0d  nnection, pAux,.
22cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
22d10 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67  iteString.String
22d20 41 72 72 61 79 46 72 6f 6d 55 74 66 38 49 6e 74  ArrayFromUtf8Int
22d30 50 74 72 41 72 72 61 79 28 61 72 67 76 29 2c 0d  PtrArray(argv),.
22d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
22d60 20 74 61 62 6c 65 2c 20 72 65 66 20 65 72 72 6f   table, ref erro
22d70 72 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  r) == SQLiteErro
22d80 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
22da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22db0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 61            if (ta
22dc0 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ble != null)..  
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22de0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e00 20 20 20 20 20 70 56 74 61 62 20 3d 20 54 61 62       pVtab = Tab
22e10 6c 65 54 6f 49 6e 74 50 74 72 28 74 61 62 6c 65  leToIntPtr(table
22e20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e40 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
22e50 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20  orCode.Ok;..    
22e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
22e90 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ec0 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72              pErr
22ed0 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  or = SQLiteStrin
22ee0 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
22ef0 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
22f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f10 20 20 20 20 20 20 20 20 20 22 6e 6f 20 74 61 62           "no tab
22f20 6c 65 20 77 61 73 20 63 72 65 61 74 65 64 22 29  le was created")
22f30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
22f40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
22f70 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
22fb0 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72  rror = SQLiteStr
22fc0 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
22fd0 6f 6d 53 74 72 69 6e 67 28 65 72 72 6f 72 29 3b  omString(error);
22fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22ff0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23000 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
23010 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23020 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
23030 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f  ception e) /* NO
23040 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41  TE: Must catch A
23050 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  LL. */..        
23060 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23070 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
23080 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
23090 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
230a0 67 28 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  g(e.ToString());
230b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
230c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
230d0 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
230e0 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
230f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23100 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23150 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
23160 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43  LiteErrorCode xC
23170 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
23180 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62 2c       IntPtr pDb,
23190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
231a0 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20 20  tPtr pAux,..    
231b0 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63          int argc
231c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
231d0 6e 74 50 74 72 5b 5d 20 61 72 67 76 2c 0d 0a 20  ntPtr[] argv,.. 
231e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
231f0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
23200 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
23210 74 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20  tPtr pError..   
23220 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
23230 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23240 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
23250 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23260 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
23270 6c 65 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53  leName = SQLiteS
23280 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d  tring.StringFrom
23290 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20  Utf8IntPtr(..   
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
232c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f  hods.sqlite3_db_
232d0 66 69 6c 65 6e 61 6d 65 28 70 44 62 2c 20 49 6e  filename(pDb, In
232e0 74 50 74 72 2e 5a 65 72 6f 29 29 3b 0d 0a 0d 0a  tPtr.Zero));....
232f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23300 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e  using (SQLiteCon
23310 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
23320 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
23330 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
23340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23350 20 20 20 20 70 44 62 2c 20 66 69 6c 65 4e 61 6d      pDb, fileNam
23360 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  e, false))..    
23370 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23390 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
233a0 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 6e 75  Table table = nu
233b0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
233c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
233d0 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  error = null;...
233e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
233f0 20 20 20 20 20 69 66 20 28 43 6f 6e 6e 65 63 74       if (Connect
23400 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 70 41 75  (connection, pAu
23410 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74 72  SQLiteString.Str
23440 69 6e 67 41 72 72 61 79 46 72 6f 6d 55 74 66 38  ingArrayFromUtf8
23450 49 6e 74 50 74 72 41 72 72 61 79 28 61 72 67 76  IntPtrArray(argv
23460 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
23470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23480 72 65 66 20 74 61 62 6c 65 2c 20 72 65 66 20 65  ref table, ref e
23490 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 45  rror) == SQLiteE
234a0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
234b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
234e0 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d  (table != null).
234f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23500 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23520 20 20 20 20 20 20 20 20 70 56 74 61 62 20 3d 20          pVtab = 
23530 54 61 62 6c 65 54 6f 49 6e 74 50 74 72 28 74 61  TableToIntPtr(ta
23540 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble);..         
23550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23560 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
23570 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23590 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
235a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235b0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
235f0 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74  Error = SQLiteSt
23600 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
23610 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20  romString(..    
23620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23630 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20              "no 
23640 74 61 62 6c 65 20 77 61 73 20 63 72 65 61 74 65  table was create
23650 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d");..          
23660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23680 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23690 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
236a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
236b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236d0 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65   pError = SQLite
236e0 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
236f0 72 46 72 6f 6d 53 74 72 69 6e 67 28 65 72 72 6f  rFromString(erro
23700 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
23710 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
23720 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
23730 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
23740 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
23750 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
23760 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
23770 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
23780 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23790 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72            pError
237a0 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
237b0 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
237c0 72 69 6e 67 28 65 2e 54 6f 53 74 72 69 6e 67 28  ring(e.ToString(
237d0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
237e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
237f0 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
23800 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
23810 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
23820 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23870 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23880 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
23890 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20   xBestIndex(..  
238a0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
238b0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
238c0 20 20 20 20 20 49 6e 74 50 74 72 20 70 49 6e 64       IntPtr pInd
238d0 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
238e0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
238f0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
23900 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
23920 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
23930 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72   table = TableFr
23940 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b  omIntPtr(pVtab);
23950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23960 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d      if (table !=
23970 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23980 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
239a0 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78  QLiteIndex index
239b0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239d0 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49 6e  SQLiteMarshal.In
239e0 64 65 78 46 72 6f 6d 49 6e 74 50 74 72 28 70 49  dexFromIntPtr(pI
239f0 6e 64 65 78 2c 20 72 65 66 20 69 6e 64 65 78 29  ndex, ref index)
23a00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23a10 20 20 20 20 20 20 20 20 20 69 66 20 28 42 65 73           if (Bes
23a20 74 49 6e 64 65 78 28 74 61 62 6c 65 2c 20 69 6e  tIndex(table, in
23a30 64 65 78 29 20 3d 3d 20 53 51 4c 69 74 65 45 72  dex) == SQLiteEr
23a40 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23a70 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
23a80 74 65 4d 61 72 73 68 61 6c 2e 49 6e 64 65 78 54  teMarshal.IndexT
23a90 6f 49 6e 74 50 74 72 28 69 6e 64 65 78 2c 20 70  oIntPtr(index, p
23aa0 49 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  Index);..       
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ac0 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
23ad0 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23b00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
23b10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
23b20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
23b30 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d  on e) /* NOTE: M
23b40 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a  ust catch ALL. *
23b50 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
23b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23b70 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
23b80 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e  pVtab, e.ToStrin
23b90 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
23ba0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23bb0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
23bc0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
23bd0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
23be0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23c30 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
23c40 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  te SQLiteErrorCo
23c50 64 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d  de xDisconnect(.
23c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
23c70 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
23c80 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
23c90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23ca0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
23cb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23cc0 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
23cd0 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20  alTable table = 
23ce0 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28  TableFromIntPtr(
23cf0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
23d00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
23d10 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  able != null).. 
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23d40 20 20 20 20 20 20 69 66 20 28 44 69 73 63 6f 6e        if (Discon
23d50 6e 65 63 74 28 74 61 62 6c 65 29 20 3d 3d 20 53  nect(table) == S
23d60 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
23d70 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
23d80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23da0 20 20 20 69 66 20 28 74 61 62 6c 65 73 20 21 3d     if (tables !=
23db0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dd0 20 20 20 20 74 61 62 6c 65 73 2e 52 65 6d 6f 76      tables.Remov
23de0 65 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  e(pVtab);....   
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e00 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
23e10 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
23e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23e30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23e40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23e50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23e60 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
23e70 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54  eption e) /* NOT
23e80 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c  E: Must catch AL
23e90 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  L. */..         
23ea0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23eb0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
23ec0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
23ed0 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74  E: At this point
23ee0 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 77 61  , there is no wa
23ef0 79 20 74 6f 20 72 65 70 6f 72 74 20 74 68 65 20  y to report the 
23f00 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
23f10 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
23f20 63 6f 6e 64 69 74 69 6f 6e 20 62 61 63 6b 20 74  condition back t
23f30 6f 20 74 68 65 20 63 61 6c 6c 65 72 3b 20 74 68  o the caller; th
23f40 65 72 65 66 6f 72 65 2c 20 75 73 65 20 74 68 65  erefore, use the
23f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23f60 20 20 2f 2f 20 20 20 20 20 20 20 6c 6f 67 67 69    //       loggi
23f70 6e 67 20 66 61 63 69 6c 69 74 79 20 69 6e 73 74  ng facility inst
23f80 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ead...          
23f90 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
23fa0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23fd0 20 20 20 20 20 20 69 66 20 28 4c 6f 67 45 78 63        if (LogExc
23fe0 65 70 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  eptions)..      
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
24000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24010 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
24020 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  og.LogMessage(SQ
24030 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45  LiteBase.COR_E_E
24040 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20  XCEPTION,..     
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
24070 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
24080 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
24090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
240b0 61 75 67 68 74 20 65 78 63 65 70 74 69 6f 6e 20  aught exception 
240c0 69 6e 20 5c 22 78 44 69 73 63 6f 6e 6e 65 63 74  in \"xDisconnect
240d0 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22 2c  \" method: {0}",
240e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
240f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29                e)
24100 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
24110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24120 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
24130 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
24140 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
24150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24160 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24170 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
24180 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
24190 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
241a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
241b0 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
241c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 72                Fr
241e0 65 65 54 61 62 6c 65 28 70 56 74 61 62 29 3b 0d  eeTable(pVtab);.
241f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
24210 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
24220 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
24230 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24240 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
24250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24280 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
24290 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
242a0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44 65  iteErrorCode xDe
242b0 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20  stroy(..        
242c0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
242d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
242e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
242f0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
24300 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24310 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
24320 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
24330 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d  able = TableFrom
24340 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a  IntPtr(pVtab);..
24350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24360 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e    if (table != n
24370 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
24380 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
243a0 28 44 65 73 74 72 6f 79 28 74 61 62 6c 65 29 20  (Destroy(table) 
243b0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
243c0 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
243d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243f0 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65         if (table
24400 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24420 20 20 20 20 20 20 20 20 74 61 62 6c 65 73 2e 52          tables.R
24430 65 6d 6f 76 65 28 70 56 74 61 62 29 3b 0d 0a 0d  emove(pVtab);...
24440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24450 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24460 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
24470 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok;..           
24480 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24490 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
244a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
244b0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
244c0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
244d0 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
244e0 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
244f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24500 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
24520 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70   NOTE: At this p
24530 6f 69 6e 74 2c 20 74 68 65 72 65 20 69 73 20 6e  oint, there is n
24540 6f 20 77 61 79 20 74 6f 20 72 65 70 6f 72 74 20  o way to report 
24550 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  the error..     
24560 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
24570 20 20 20 20 63 6f 6e 64 69 74 69 6f 6e 20 62 61      condition ba
24580 63 6b 20 74 6f 20 74 68 65 20 63 61 6c 6c 65 72  ck to the caller
24590 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65  ; therefore, use
245a0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
245b0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
245c0 6f 67 67 69 6e 67 20 66 61 63 69 6c 69 74 79 20  ogging facility 
245d0 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20  instead...      
245e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24600 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
24610 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24620 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4c 6f            if (Lo
24630 67 45 78 63 65 70 74 69 6f 6e 73 29 0d 0a 20 20  gExceptions)..  
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
24670 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
24680 65 28 53 51 4c 69 74 65 42 61 73 65 2e 43 4f 52  e(SQLiteBase.COR
24690 5f 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20  _E_EXCEPTION,.. 
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246b0 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
246c0 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65  g.Format(Culture
246d0 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
246e0 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
246f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24700 20 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74    "Caught except
24710 69 6f 6e 20 69 6e 20 5c 22 78 44 65 73 74 72 6f  ion in \"xDestro
24720 79 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22  y\" method: {0}"
24730 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
24750 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  )); /* throw */.
24760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24770 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24780 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24790 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
247a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
247b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
247c0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
247d0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
247e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
247f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24800 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
24810 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
24830 72 65 65 54 61 62 6c 65 28 70 56 74 61 62 29 3b  reeTable(pVtab);
24840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24850 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
24860 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
24870 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
24880 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24890 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
248a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
248e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
248f0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4f  LiteErrorCode xO
24900 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  pen(..          
24910 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
24920 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
24930 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
24940 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
24950 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24960 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
24970 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24980 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
24990 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
249a0 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49  ble = TableFromI
249b0 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d  ntPtr(pVtab);...
249c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
249d0 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75   if (table != nu
249e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
249f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24a00 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
24a10 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
24a20 72 73 6f 72 20 63 75 72 73 6f 72 20 3d 20 6e 75  rsor cursor = nu
24a30 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
24a40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4f             if (O
24a50 70 65 6e 28 74 61 62 6c 65 2c 20 72 65 66 20 63  pen(table, ref c
24a60 75 72 73 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65  ursor) == SQLite
24a70 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24ab0 20 28 63 75 72 73 6f 72 20 21 3d 20 6e 75 6c 6c   (cursor != null
24ac0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24ad0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24af0 20 20 20 20 20 20 20 20 20 20 70 43 75 72 73 6f            pCurso
24b00 72 20 3d 20 43 75 72 73 6f 72 54 6f 49 6e 74 50  r = CursorToIntP
24b10 74 72 28 63 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  tr(cursor);.... 
24b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
24b40 43 75 72 73 6f 72 20 21 3d 20 49 6e 74 50 74 72  Cursor != IntPtr
24b50 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
24b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
24ba0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
24bb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
24bf0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c30 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72     SetTableError
24c40 28 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20  (pVtab,..       
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f               "no
24c70 20 6e 61 74 69 76 65 20 63 75 72 73 6f 72 20 77   native cursor w
24c80 61 73 20 63 72 65 61 74 65 64 22 29 3b 0d 0a 20  as created");.. 
24c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ca0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ce0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
24cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
24d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
24d20 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  tTableError(pVta
24d30 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d50 20 20 20 20 22 6e 6f 20 6d 61 6e 61 67 65 64 20      "no managed 
24d60 63 75 72 73 6f 72 20 77 61 73 20 63 72 65 61 74  cursor was creat
24d70 65 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed");..         
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24da0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
24db0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24dc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24dd0 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
24de0 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f  ception e) /* NO
24df0 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41  TE: Must catch A
24e00 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  LL. */..        
24e10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24e20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
24e30 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f  rror(pVtab, e.To
24e40 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
24e50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24e60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24e70 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
24e80 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
24e90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ee0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24ef0 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 45 72  private SQLiteEr
24f00 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73 65 28 0d  rorCode xClose(.
24f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
24f20 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
24f30 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
24f40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24f50 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 20     IntPtr pVtab 
24f60 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
24f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
24f80 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
24f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24fa0 20 20 70 56 74 61 62 20 3d 20 54 61 62 6c 65 46    pVtab = TableF
24fb0 72 6f 6d 43 75 72 73 6f 72 28 70 43 75 72 73 6f  romCursor(pCurso
24fc0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
24fd0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
24fe0 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
24ff0 63 75 72 73 6f 72 20 3d 20 43 75 72 73 6f 72 46  cursor = CursorF
25000 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  romIntPtr(..    
25010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25020 70 56 74 61 62 2c 20 70 43 75 72 73 6f 72 29 3b  pVtab, pCursor);
25030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25040 20 20 20 20 69 66 20 28 63 75 72 73 6f 72 20 21      if (cursor !
25050 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
25060 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25080 69 66 20 28 43 6c 6f 73 65 28 63 75 72 73 6f 72  if (Close(cursor
25090 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  ) == SQLiteError
250a0 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
250c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
250d0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72           if (cur
250e0 73 6f 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  sors != null).. 
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25100 20 20 20 20 20 20 20 20 20 20 20 63 75 72 73 6f             curso
25110 72 73 2e 52 65 6d 6f 76 65 28 70 43 75 72 73 6f  rs.Remove(pCurso
25120 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
25130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25140 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
25150 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20  rCode.Ok;..     
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25180 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
25190 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
251a0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
251b0 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73   e) /* NOTE: Mus
251c0 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d  t catch ALL. */.
251d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56  SetTableError(pV
25200 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28  tab, e.ToString(
25210 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
25220 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25230 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
25240 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25250 20 20 20 20 20 20 20 20 46 72 65 65 43 75 72 73          FreeCurs
25260 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20  or(pCursor);..  
25270 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25280 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25290 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
252a0 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
252b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
252c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25310 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
25320 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c 74 65  ErrorCode xFilte
25330 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
25340 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d  IntPtr pCursor,.
25350 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
25360 20 69 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20   idxNum,..      
25370 20 20 20 20 20 20 49 6e 74 50 74 72 20 69 64 78        IntPtr idx
25380 53 74 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Str,..          
25390 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
253a0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b           IntPtr[
253b0 5d 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20  ] argv..        
253c0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
253d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
253e0 74 50 74 72 20 70 56 74 61 62 20 3d 20 49 6e 74  tPtr pVtab = Int
253f0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
25400 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
25410 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74               pVt
25430 61 62 20 3d 20 54 61 62 6c 65 46 72 6f 6d 43 75  ab = TableFromCu
25440 72 73 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a  rsor(pCursor);..
25450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25460 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
25470 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
25480 72 20 3d 20 43 75 72 73 6f 72 46 72 6f 6d 49 6e  r = CursorFromIn
25490 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
254a0 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61 62             pVtab
254b0 2c 20 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  , pCursor);.... 
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
254d0 66 20 28 63 75 72 73 6f 72 20 21 3d 20 6e 75 6c  f (cursor != nul
254e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
254f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25500 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 46             if (F
25510 69 6c 74 65 72 28 63 75 72 73 6f 72 2c 20 69 64  ilter(cursor, id
25520 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  xNum,..         
25530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25540 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e     SQLiteString.
25550 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
25560 74 50 74 72 28 69 64 78 53 74 72 29 2c 0d 0a 20  tPtr(idxStr),.. 
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
25590 65 4d 61 72 73 68 61 6c 2e 56 61 6c 75 65 41 72  eMarshal.ValueAr
255a0 72 61 79 46 72 6f 6d 49 6e 74 50 74 72 41 72 72  rayFromIntPtrArr
255b0 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
255c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255d0 20 20 20 20 20 61 72 67 76 29 29 20 3d 3d 20 53       argv)) == S
255e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
255f0 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
25600 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
25630 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
25640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25650 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25660 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25670 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25680 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
25690 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a  tion e) /* NOTE:
256a0 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e   Must catch ALL.
256b0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
256c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
256d0 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
256e0 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72  r(pVtab, e.ToStr
256f0 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
25700 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25710 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
25720 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
25730 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  or;..        }..
25740 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
25750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25790 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
257a0 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72  vate SQLiteError
257b0 43 6f 64 65 20 78 4e 65 78 74 28 0d 0a 20 20 20  Code xNext(..   
257c0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
257d0 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
257e0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
257f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
25800 6e 74 50 74 72 20 70 56 74 61 62 20 3d 20 49 6e  ntPtr pVtab = In
25810 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
25820 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
25830 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56                pV
25850 74 61 62 20 3d 20 54 61 62 6c 65 46 72 6f 6d 43  tab = TableFromC
25860 75 72 73 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d  ursor(pCursor);.
25870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25880 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
25890 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
258a0 6f 72 20 3d 20 43 75 72 73 6f 72 46 72 6f 6d 49  or = CursorFromI
258b0 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
258c0 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61              pVta
258d0 62 2c 20 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  b, pCursor);....
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258f0 69 66 20 28 63 75 72 73 6f 72 20 21 3d 20 6e 75  if (cursor != nu
25900 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
25910 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25920 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25930 4e 65 78 74 28 63 75 72 73 6f 72 29 20 3d 3d 20  Next(cursor) == 
25940 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
25950 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25970 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
25980 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20  ode.Ok;..       
25990 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
259a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
259b0 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
259c0 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f  ception e) /* NO
259d0 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41  TE: Must catch A
259e0 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  LL. */..        
259f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25a00 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
25a10 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f  rror(pVtab, e.To
25a20 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
25a30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25a40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25a50 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
25a60 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
25a70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
25a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ac0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25ad0 70 72 69 76 61 74 65 20 69 6e 74 20 78 45 6f 66  private int xEof
25ae0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
25af0 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
25b00 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
25b10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25b20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
25b30 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  b = IntPtr.Zero;
25b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25b50 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
25b60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25b70 20 20 20 20 70 56 74 61 62 20 3d 20 54 61 62 6c      pVtab = Tabl
25b80 65 46 72 6f 6d 43 75 72 73 6f 72 28 70 43 75 72  eFromCursor(pCur
25b90 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sor);....       
25ba0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
25bb0 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
25bc0 72 20 63 75 72 73 6f 72 20 3d 20 43 75 72 73 6f  r cursor = Curso
25bd0 72 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20  rFromIntPtr(..  
25be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bf0 20 20 70 56 74 61 62 2c 20 70 43 75 72 73 6f 72    pVtab, pCursor
25c00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25c10 20 20 20 20 20 20 69 66 20 28 63 75 72 73 6f 72        if (cursor
25c20 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
25c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25c40 65 74 75 72 6e 20 45 6f 66 28 63 75 72 73 6f 72  eturn Eof(cursor
25c50 29 20 3f 20 31 20 3a 20 30 3b 0d 0a 20 20 20 20  ) ? 1 : 0;..    
25c60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25c70 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
25c80 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f  ception e) /* NO
25c90 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41  TE: Must catch A
25ca0 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  LL. */..        
25cb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25cc0 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
25cd0 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f  rror(pVtab, e.To
25ce0 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
25cf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25d00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25d10 31 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  1;..        }...
25d20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
25d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
25d80 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ate SQLiteErrorC
25d90 6f 64 65 20 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20  ode xColumn(..  
25da0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
25db0 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20   pCursor,..     
25dc0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
25dd0 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20  ontext,..       
25de0 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 0d 0a       int index..
25df0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
25e00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25e10 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
25e20 61 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ab = IntPtr.Zero
25e30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25e40 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
25e50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25e60 20 20 20 20 20 70 56 74 61 62 20 3d 20 54 61 62       pVtab = Tab
25e70 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 70 43 75  leFromCursor(pCu
25e80 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsor);....      
25e90 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
25ea0 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
25eb0 6f 72 20 63 75 72 73 6f 72 20 3d 20 43 75 72 73  or cursor = Curs
25ec0 6f 72 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20  orFromIntPtr(.. 
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ee0 20 20 20 70 56 74 61 62 2c 20 70 43 75 72 73 6f     pVtab, pCurso
25ef0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
25f00 20 20 20 20 20 20 20 69 66 20 28 63 75 72 73 6f         if (curso
25f10 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
25f20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f40 20 20 20 53 51 4c 69 74 65 43 6f 6e 74 65 78 74     SQLiteContext
25f50 20 63 6f 6e 74 65 78 74 20 3d 20 6e 65 77 20 53   context = new S
25f60 51 4c 69 74 65 43 6f 6e 74 65 78 74 28 70 43 6f  QLiteContext(pCo
25f70 6e 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ntext);....     
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25f90 65 74 75 72 6e 20 43 6f 6c 75 6d 6e 28 63 75 72  eturn Column(cur
25fa0 73 6f 72 2c 20 63 6f 6e 74 65 78 74 2c 20 69 6e  sor, context, in
25fb0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
25fc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25fd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25fe0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
25ff0 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
26000 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
26010 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
26020 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26030 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72       SetTableErr
26040 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74  or(pVtab, e.ToSt
26050 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
26060 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26070 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
26080 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
26090 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
260a0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
260b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
26100 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f  ivate SQLiteErro
26110 72 43 6f 64 65 20 78 52 6f 77 49 64 28 0d 0a 20  rCode xRowId(.. 
26120 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
26130 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20  r pCursor,..    
26140 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67          ref long
26150 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20   rowId..        
26160 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
26170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
26180 74 50 74 72 20 70 56 74 61 62 20 3d 20 49 6e 74  tPtr pVtab = Int
26190 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
261a0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
261b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74               pVt
261d0 61 62 20 3d 20 54 61 62 6c 65 46 72 6f 6d 43 75  ab = TableFromCu
261e0 72 73 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a  rsor(pCursor);..
261f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26200 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
26210 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
26220 72 20 3d 20 43 75 72 73 6f 72 46 72 6f 6d 49 6e  r = CursorFromIn
26230 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
26240 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61 62             pVtab
26250 2c 20 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  , pCursor);.... 
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26270 66 20 28 63 75 72 73 6f 72 20 21 3d 20 6e 75 6c  f (cursor != nul
26280 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
26290 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
262a0 6f 77 49 64 28 63 75 72 73 6f 72 2c 20 72 65 66  owId(cursor, ref
262b0 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20   rowId);..      
262c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
262d0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
262e0 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
262f0 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
26300 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
26310 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26320 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72       SetTableErr
26330 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74  or(pVtab, e.ToSt
26340 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
26350 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26360 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
26370 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
26380 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
26390 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
263a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
263f0 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f  ivate SQLiteErro
26400 72 43 6f 64 65 20 78 55 70 64 61 74 65 28 0d 0a  rCode xUpdate(..
26410 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
26420 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
26430 20 20 20 20 20 20 20 69 6e 74 20 6e 44 61 74 61         int nData
26440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
26450 6e 74 50 74 72 20 61 70 44 61 74 61 2c 0d 0a 20  ntPtr apData,.. 
26460 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c             ref l
26470 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20  ong rowId..     
26480 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
26490 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
264a0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
264b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
264c0 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
264d0 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20  alTable table = 
264e0 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28  TableFromIntPtr(
264f0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
26500 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
26510 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  able != null).. 
26520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
26530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26540 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75        SQLiteValu
26550 65 5b 5d 20 76 61 6c 75 65 73 20 3d 0d 0a 20 20  e[] values =..  
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26570 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73        SQLiteMars
26580 68 61 6c 2e 56 61 6c 75 65 41 72 72 61 79 46 72  hal.ValueArrayFr
26590 6f 6d 53 69 7a 65 41 6e 64 49 6e 74 50 74 72 28  omSizeAndIntPtr(
265a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 44                nD
265c0 61 74 61 2c 20 61 70 44 61 74 61 29 3b 0d 0a 0d  ata, apData);...
265d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
265e0 20 20 20 20 20 72 65 74 75 72 6e 20 55 70 64 61       return Upda
265f0 74 65 28 74 61 62 6c 65 2c 20 76 61 6c 75 65 73  te(table, values
26600 2c 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20  , ref rowId);.. 
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26630 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
26640 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
26650 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63   /* NOTE: Must c
26660 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20  atch ALL. */..  
26670 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26680 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74               Set
26690 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
266a0 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  , e.ToString());
266b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
266c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
266d0 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
266e0 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
266f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26700 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
26710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26750 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
26760 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42  LiteErrorCode xB
26770 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  egin(..         
26780 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
26790 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
267a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
267b0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
267c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
267d0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
267e0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
267f0 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49  ble = TableFromI
26800 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d  ntPtr(pVtab);...
26810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26820 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75   if (table != nu
26830 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
26840 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26850 42 65 67 69 6e 28 74 61 62 6c 65 29 3b 0d 0a 20  Begin(table);.. 
26860 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
26870 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
26880 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
26890 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
268a0 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
268b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
268c0 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62            SetTab
268d0 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65  leError(pVtab, e
268e0 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
268f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26900 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26910 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
26920 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
26930 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26980 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26990 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
269a0 65 45 72 72 6f 72 43 6f 64 65 20 78 53 79 6e 63  eErrorCode xSync
269b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
269c0 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
269d0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
269e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
269f0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
26a00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26a10 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
26a20 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20  tualTable table 
26a30 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74  = TableFromIntPt
26a40 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  r(pVtab);....   
26a50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26a60 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d  (table != null).
26a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26a80 20 20 20 20 20 72 65 74 75 72 6e 20 53 79 6e 63       return Sync
26a90 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20  (table);..      
26aa0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
26ab0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
26ac0 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
26ad0 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
26ae0 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
26af0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26b00 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72       SetTableErr
26b10 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74  or(pVtab, e.ToSt
26b20 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
26b30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26b40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
26b50 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
26b60 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
26b70 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
26b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bc0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
26bd0 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f  ivate SQLiteErro
26be0 72 43 6f 64 65 20 78 43 6f 6d 6d 69 74 28 0d 0a  rCode xCommit(..
26bf0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
26c00 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
26c10 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
26c20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26c30 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
26c40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26c50 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
26c60 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54  lTable table = T
26c70 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70  ableFromIntPtr(p
26c80 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
26c90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 61            if (ta
26ca0 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ble != null)..  
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cc0 20 20 72 65 74 75 72 6e 20 43 6f 6d 6d 69 74 28    return Commit(
26cd0 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20  table);..       
26ce0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26cf0 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
26d00 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a  tion e) /* NOTE:
26d10 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e   Must catch ALL.
26d20 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
26d30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26d40 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
26d50 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72  r(pVtab, e.ToStr
26d60 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
26d70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26d80 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
26d90 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
26da0 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  or;..        }..
26db0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
26e10 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72  vate SQLiteError
26e20 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b 28 0d  Code xRollback(.
26e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
26e40 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
26e50 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
26e60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26e70 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
26e80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26e90 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
26ea0 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20  alTable table = 
26eb0 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28  TableFromIntPtr(
26ec0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
26ed0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
26ee0 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  able != null).. 
26ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f00 20 20 20 72 65 74 75 72 6e 20 52 6f 6c 6c 62 61     return Rollba
26f10 63 6b 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20  ck(table);..    
26f20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
26f30 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
26f40 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f  ception e) /* NO
26f50 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41  TE: Must catch A
26f60 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  LL. */..        
26f70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26f80 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
26f90 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f  rror(pVtab, e.To
26fa0 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
26fb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26fc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26fd0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
26fe0 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
26ff0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
27000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27040 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
27050 70 72 69 76 61 74 65 20 69 6e 74 20 78 46 69 6e  private int xFin
27060 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
27070 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
27080 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
27090 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d 0a 20 20     int nArg,..  
270a0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
270b0 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20   zName,..       
270c0 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 43       ref SQLiteC
270d0 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
270e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
270f0 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e  ef IntPtr pClien
27100 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20  tData..         
27110 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
27120 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
27130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27150 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
27160 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61 62 6c  ble table = Tabl
27170 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 74 61  eFromIntPtr(pVta
27180 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
27190 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65         if (table
271a0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
271b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
271c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271d0 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
271e0 20 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 75 6c 6c   function = null
271f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27200 20 20 20 20 20 20 20 20 20 69 66 20 28 46 69 6e           if (Fin
27210 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
27220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27230 20 20 20 20 20 20 20 20 74 61 62 6c 65 2c 20 6e          table, n
27240 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Arg,..          
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27260 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53    SQLiteString.S
27270 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74  tringFromUtf8Int
27280 50 74 72 28 7a 4e 61 6d 65 29 2c 0d 0a 20 20 20  Ptr(zName),..   
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272a0 20 20 20 20 20 20 20 20 20 72 65 66 20 66 75 6e           ref fun
272b0 63 74 69 6f 6e 2c 20 72 65 66 20 70 43 6c 69 65  ction, ref pClie
272c0 6e 74 44 61 74 61 29 29 0d 0a 20 20 20 20 20 20  ntData))..      
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
272e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
272f0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e           if (fun
27300 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ction != null)..
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27320 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27340 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 20         callback 
27350 3d 20 66 75 6e 63 74 69 6f 6e 2e 53 63 61 6c 61  = function.Scala
27360 72 43 61 6c 6c 62 61 63 6b 3b 0d 0a 20 20 20 20  rCallback;..    
27370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27380 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
27390 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
273a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
273b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273c0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
273d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
273f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27400 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72     SetTableError
27410 28 70 56 74 61 62 2c 20 22 6e 6f 20 66 75 6e 63  (pVtab, "no func
27420 74 69 6f 6e 20 77 61 73 20 63 72 65 61 74 65 64  tion was created
27430 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
27440 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
27450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27460 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
27470 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
27480 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27490 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
274a0 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
274b0 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
274c0 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
274d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
274e0 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72       SetTableErr
274f0 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74  or(pVtab, e.ToSt
27500 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
27510 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27520 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
27530 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
27540 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27590 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
275a0 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
275b0 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20  e xRename(..    
275c0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
275d0 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
275e0 20 20 20 49 6e 74 50 74 72 20 7a 4e 65 77 0d 0a     IntPtr zNew..
275f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
27600 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27610 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
27620 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27630 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
27640 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
27650 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e  le = TableFromIn
27660 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a  tPtr(pVtab);....
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27680 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c  if (table != nul
27690 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
276a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
276b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
276c0 6e 20 52 65 6e 61 6d 65 28 74 61 62 6c 65 2c 0d  n Rename(table,.
276d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
276e0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53           SQLiteS
276f0 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d  tring.StringFrom
27700 55 74 66 38 49 6e 74 50 74 72 28 7a 4e 65 77 29  Utf8IntPtr(zNew)
27710 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
27720 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
27730 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27740 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
27750 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d  on e) /* NOTE: M
27760 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a  ust catch ALL. *
27770 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
27780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27790 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
277a0 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e  pVtab, e.ToStrin
277b0 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
277c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
277d0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
277e0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
277f0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
27800 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
27810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27850 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
27860 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  te SQLiteErrorCo
27870 64 65 20 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a  de xSavepoint(..
27880 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
27890 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
278a0 20 20 20 20 20 20 20 69 6e 74 20 69 53 61 76 65         int iSave
278b0 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  point..         
278c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
278d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
278e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
278f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27900 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
27910 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61 62 6c  ble table = Tabl
27920 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 74 61  eFromIntPtr(pVta
27930 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
27940 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65         if (table
27950 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27970 65 74 75 72 6e 20 53 61 76 65 70 6f 69 6e 74 28  eturn Savepoint(
27980 74 61 62 6c 65 2c 20 69 53 61 76 65 70 6f 69 6e  table, iSavepoin
27990 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
279a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
279b0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
279c0 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73   e) /* NOTE: Mus
279d0 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d  t catch ALL. */.
279e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
279f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a00 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56  SetTableError(pV
27a10 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28  tab, e.ToString(
27a20 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
27a30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27a40 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
27a50 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
27a60 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
27a70 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27ac0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
27ad0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
27ae0 20 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20   xRelease(..    
27af0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
27b00 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
27b10 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e     int iSavepoin
27b20 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
27b30 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
27b40 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
27b50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27b60 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
27b70 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
27b80 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f  table = TableFro
27b90 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d  mIntPtr(pVtab);.
27ba0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27bb0 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20     if (table != 
27bc0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
27bd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27be0 6e 20 52 65 6c 65 61 73 65 28 74 61 62 6c 65 2c  n Release(table,
27bf0 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20   iSavepoint);.. 
27c00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
27c10 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
27c20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
27c30 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
27c40 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
27c50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27c60 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62            SetTab
27c70 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65  leError(pVtab, e
27c80 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
27c90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27cb0 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
27cc0 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
27cd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27d30 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
27d40 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c  eErrorCode xRoll
27d50 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20  backTo(..       
27d60 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
27d70 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
27d80 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a  int iSavepoint..
27d90 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
27da0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27db0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
27dc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27dd0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
27de0 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
27df0 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e  le = TableFromIn
27e00 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a  tPtr(pVtab);....
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c  if (table != nul
27e30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
27e40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
27e50 6f 6c 6c 62 61 63 6b 54 6f 28 74 61 62 6c 65 2c  ollbackTo(table,
27e60 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20   iSavepoint);.. 
27e70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
27e80 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
27e90 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
27ea0 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
27eb0 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
27ec0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27ed0 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62            SetTab
27ee0 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65  leError(pVtab, e
27ef0 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
27f00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27f10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27f20 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
27f30 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
27f40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
27f50 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
27f60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
27fb0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
27fc0 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
27fd0 75 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  ule Members..   
27fe0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
27ff0 6c 20 64 65 63 6c 61 72 65 64 3b 0d 0a 20 20 20  l declared;..   
28000 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
28010 75 61 6c 20 62 6f 6f 6c 20 44 65 63 6c 61 72 65  ual bool Declare
28020 64 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  d..        {..  
28030 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
28040 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
28050 20 72 65 74 75 72 6e 20 64 65 63 6c 61 72 65 64   return declared
28060 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
28070 20 69 6e 74 65 72 6e 61 6c 20 73 65 74 20 7b 20   internal set { 
28080 64 65 63 6c 61 72 65 64 20 3d 20 76 61 6c 75 65  declared = value
28090 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
280a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
280b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
28100 76 61 74 65 20 73 74 72 69 6e 67 20 6e 61 6d 65  vate string name
28110 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ;..        publi
28120 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67  c virtual string
28130 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7b   Name..        {
28140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
28150 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
28160 64 28 29 3b 20 72 65 74 75 72 6e 20 6e 61 6d 65  d(); return name
28170 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
28180 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
28190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
281e0 6c 69 63 20 61 62 73 74 72 61 63 74 20 53 51 4c  lic abstract SQL
281f0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65  iteErrorCode Cre
28200 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
28210 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
28220 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a  on connection,..
28230 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
28240 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d  tr pClientData,.
28250 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
28260 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 2c  ing[] arguments,
28270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
28280 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  f SQLiteVirtualT
28290 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20  able table,..   
282a0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
282b0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
282c0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
282d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
282e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
282f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28320 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61          public a
28330 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72  bstract SQLiteEr
28340 72 6f 72 43 6f 64 65 20 43 6f 6e 6e 65 63 74 28  rorCode Connect(
28350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
28360 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
28370 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20  onnection,..    
28380 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
28390 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  ClientData,..   
283a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
283b0 5d 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a 20 20  ] arguments,..  
283c0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51            ref SQ
283d0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
283e0 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
283f0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
28400 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
28410 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
28420 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
28430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28460 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28470 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
28480 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43  act SQLiteErrorC
28490 6f 64 65 20 42 65 73 74 49 6e 64 65 78 28 0d 0a  ode BestIndex(..
284a0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
284b0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
284c0 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
284d0 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69     SQLiteIndex i
284e0 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ndex..          
284f0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
28500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28540 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28550 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61     public abstra
28560 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
28570 64 65 20 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a  de Disconnect(..
28580 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
28590 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
285a0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
285b0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
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 2f 2f 2f 2f 2f 2f 2f  ////////////////
28600 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28610 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61     public abstra
28620 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
28630 64 65 20 44 65 73 74 72 6f 79 28 0d 0a 20 20 20  de Destroy(..   
28640 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
28650 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
28660 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
28670 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
28680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
286d0 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20  public abstract 
286e0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
286f0 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  Open(..         
28700 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
28710 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
28720 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51            ref SQ
28730 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
28740 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d 0a 20  Cursor cursor.. 
28750 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
28760 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
28770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
287c0 69 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69  ic abstract SQLi
287d0 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6c 6f 73  teErrorCode Clos
287e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
287f0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
28800 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d  leCursor cursor.
28810 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
28820 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
28830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28870 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
28880 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 53 51  blic abstract SQ
28890 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69  LiteErrorCode Fi
288a0 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  lter(..         
288b0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
288c0 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
288d0 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or,..           
288e0 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72   int indexNumber
288f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
28900 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e  tring indexStrin
28910 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
28920 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61  SQLiteValue[] va
28930 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lues..          
28940 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
28950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28990 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
289a0 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61     public abstra
289b0 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
289c0 64 65 20 4e 65 78 74 28 0d 0a 20 20 20 20 20 20  de Next(..      
289d0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
289e0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
289f0 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
28a00 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
28a10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
28a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a50 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28a60 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
28a70 61 63 74 20 62 6f 6f 6c 20 45 6f 66 28 0d 0a 20  act bool Eof(.. 
28a80 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
28a90 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
28aa0 73 6f 72 20 63 75 72 73 6f 72 0d 0a 20 20 20 20  sor cursor..    
28ab0 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
28ac0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28b10 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
28b20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45  abstract SQLiteE
28b30 72 72 6f 72 43 6f 64 65 20 43 6f 6c 75 6d 6e 28  rrorCode Column(
28b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
28b50 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
28b60 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 0d 0a  Cursor cursor,..
28b70 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
28b80 74 65 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78  teContext contex
28b90 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
28ba0 69 6e 74 20 69 6e 64 65 78 0d 0a 20 20 20 20 20  int index..     
28bb0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
28bc0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28c10 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61          public a
28c20 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72  bstract SQLiteEr
28c30 72 6f 72 43 6f 64 65 20 52 6f 77 49 64 28 0d 0a  rorCode RowId(..
28c40 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
28c50 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
28c60 72 73 6f 72 20 63 75 72 73 6f 72 2c 0d 0a 20 20  rsor cursor,..  
28c70 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f            ref lo
28c80 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20  ng rowId..      
28c90 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
28ca0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28cf0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62         public ab
28d00 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72  stract SQLiteErr
28d10 6f 72 43 6f 64 65 20 55 70 64 61 74 65 28 0d 0a  orCode Update(..
28d20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
28d30 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
28d40 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
28d50 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d     SQLiteValue[]
28d60 20 76 61 6c 75 65 73 2c 0d 0a 20 20 20 20 20 20   values,..      
28d70 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72        ref long r
28d80 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  owId..          
28d90 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
28da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28de0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28df0 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61     public abstra
28e00 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
28e10 64 65 20 42 65 67 69 6e 28 0d 0a 20 20 20 20 20  de Begin(..     
28e20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
28e30 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 0d  tualTable table.
28e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
28e50 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
28e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ea0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
28eb0 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 53 51  blic abstract SQ
28ec0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 79  LiteErrorCode Sy
28ed0 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nc(..           
28ee0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
28ef0 62 6c 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ble table..     
28f00 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
28f10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28f60 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61          public a
28f70 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72  bstract SQLiteEr
28f80 72 6f 72 43 6f 64 65 20 43 6f 6d 6d 69 74 28 0d  rorCode Commit(.
28f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
28fa0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
28fb0 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  table..         
28fc0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
28fd0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
28fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29010 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29020 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
29030 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43  act SQLiteErrorC
29040 6f 64 65 20 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20  ode Rollback(.. 
29050 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
29060 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
29070 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ble..           
29080 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
29090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
290e0 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61 63    public abstrac
290f0 74 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63 74  t bool FindFunct
29100 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
29110 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
29120 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20  able table,..   
29130 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
29140 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20  umentCount,..   
29150 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
29160 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
29170 20 20 20 72 65 66 20 53 51 4c 69 74 65 46 75 6e     ref SQLiteFun
29180 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d  ction function,.
29190 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
291a0 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44   IntPtr pClientD
291b0 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
291c0 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
291d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29210 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
29220 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61 63    public abstrac
29230 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t SQLiteErrorCod
29240 65 20 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20  e Rename(..     
29250 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
29260 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
29270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
29280 72 69 6e 67 20 6e 65 77 4e 61 6d 65 0d 0a 20 20  ring newName..  
29290 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
292a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
292b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
292f0 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
29300 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  c abstract SQLit
29310 65 45 72 72 6f 72 43 6f 64 65 20 53 61 76 65 70  eErrorCode Savep
29320 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  oint(..         
29330 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
29340 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
29350 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 61            int sa
29360 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  vepoint..       
29370 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
29380 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
29390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
293d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73        public abs
293e0 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f  tract SQLiteErro
293f0 72 43 6f 64 65 20 52 65 6c 65 61 73 65 28 0d 0a  rCode Release(..
29400 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
29410 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
29420 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
29430 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e 74     int savepoint
29440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
29450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
29460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
294b0 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 53  ublic abstract S
294c0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52  QLiteErrorCode R
294d0 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20  ollbackTo(..    
294e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
294f0 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
29500 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
29510 6e 74 20 73 61 76 65 70 6f 69 6e 74 0d 0a 20 20  nt savepoint..  
29520 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 20 20            );..  
29530 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
29540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
29550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29590 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
295a0 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
295b0 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  le Members..    
295c0 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
295d0 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
295e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
295f0 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
29600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 43  ..            GC
29610 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a  .SuppressFinaliz
29620 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20  e(this);..      
29630 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
29640 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
29650 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
29660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
296a0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
296b0 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65  isposable "Patte
296c0 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  rn" Members..   
296d0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
296e0 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
296f0 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
29700 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
29710 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
29720 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48         {..#if TH
29730 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
29740 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
29750 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
29760 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29770 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
29780 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
29790 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
297a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297b0 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
297c0 4d 6f 64 75 6c 65 29 2e 4e 61 6d 65 29 3b 0d 0a  Module).Name);..
297d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
297e0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
297f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
29800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29840 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
29850 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
29860 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f   void Dispose(bo
29870 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  ol disposing).. 
29880 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29890 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f        if (!dispo
298a0 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
298b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
298c0 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f       //if (dispo
298d0 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
298e0 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20         //{..    
298f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
29900 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29920 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
29930 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
29940 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64   dispose managed
29950 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e   resources here.
29960 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29970 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
29980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
299a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299b0 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  //}....         
299c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
299d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
299e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
299f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29a00 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
29a10 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
29a20 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
29a30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
29a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a70 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
29a80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29a90 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
29aa0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
29ab0 2e 73 71 6c 69 74 65 33 5f 64 69 73 70 6f 73 65  .sqlite3_dispose
29ac0 5f 6d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20  _module(..      
29ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ae0 20 20 72 65 66 20 6e 61 74 69 76 65 4d 6f 64 75    ref nativeModu
29af0 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  le);..          
29b00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29b10 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
29b20 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
29b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b50 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
29b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b80 20 20 20 20 20 20 20 20 20 69 66 20 28 4c 6f 67           if (Log
29b90 45 78 63 65 70 74 69 6f 6e 73 29 0d 0a 20 20 20  Exceptions)..   
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bd0 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
29be0 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 42  gMessage(SQLiteB
29bf0 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54  ase.COR_E_EXCEPT
29c00 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ION,..          
29c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
29c30 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
29c40 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
29c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c70 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74 69   "Caught excepti
29c80 6f 6e 20 69 6e 20 5c 22 44 69 73 70 6f 73 65 5c  on in \"Dispose\
29c90 22 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22 2c 0d  " method: {0}",.
29ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cc0 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a   e)); /* throw *
29cd0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
29ce0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
29d10 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29d50 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
29d80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29d90 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
29da0 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
29db0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
29dc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
29dd0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29de0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29e30 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29e40 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
29e50 20 20 20 20 7e 53 51 4c 69 74 65 4d 6f 64 75 6c      ~SQLiteModul
29e60 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e()..        {..
29e70 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
29e80 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ose(false);..   
29e90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
29ea0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
29eb0 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
29ec0 6e 0d 0a 7d 0d 0a                                n..}..