System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 65f7be6a44fb2a1400fcc9a014b1464d520ffddb:


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 43 6f 6d 70 69 6c 65 72 53 65 72 76 69  me.CompilerServi
0180: 63 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74  ces;..using Syst
0190: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
01a0: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 75 73 69  opServices;..usi
01b0: 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b 0d  ng System.Text;.
01c0: 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73  ...namespace Sys
01d0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d  tem.Data.SQLite.
01e0: 0a 7b 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  .{..    #region 
01f0: 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 20 48 65  SQLiteContext He
0200: 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  lper Class..    
0210: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0220: 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73     /// This clas
0230: 73 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 63  s represents a c
0240: 6f 6e 74 65 78 74 20 66 72 6f 6d 20 74 68 65 20  ontext from the 
0250: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
0260: 61 72 79 20 74 68 61 74 20 63 61 6e 0d 0a 20 20  ary that can..  
0270: 20 20 2f 2f 2f 20 62 65 20 70 61 73 73 65 64 20    /// be passed 
0280: 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  to the sqlite3_r
0290: 65 73 75 6c 74 5f 2a 28 29 20 61 6e 64 20 61 73  esult_*() and as
02a0: 73 6f 63 69 61 74 65 64 20 66 75 6e 63 74 69 6f  sociated functio
02b0: 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ns...    /// </s
02c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62  ummary>..    pub
02d0: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
02e0: 20 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 20 3a   SQLiteContext :
02f0: 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61   ISQLiteNativeHa
0300: 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ndle..    {..   
0310: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
0320: 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20  vate Data..     
0330: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0340: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
0350: 65 20 6e 61 74 69 76 65 20 63 6f 6e 74 65 78 74  e native context
0360: 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...      
0370: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0380: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
0390: 65 20 49 6e 74 50 74 72 20 70 43 6f 6e 74 65 78  e IntPtr pContex
03a0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  t;..        #end
03b0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
03c0: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0410: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
0420: 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72  vate Constructor
0430: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
0440: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
0450: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
0460: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
0470: 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67  this class using
0480: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e   the specified n
0490: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f  ative..        /
04a0: 2f 2f 20 63 6f 6e 74 65 78 74 20 68 61 6e 64 6c  // context handl
04b0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
04c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
04d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
04e0: 61 6d 65 3d 22 70 43 6f 6e 74 65 78 74 22 3e 0d  ame="pContext">.
04f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
0500: 20 6e 61 74 69 76 65 20 63 6f 6e 74 65 78 74 20   native context 
0510: 68 61 6e 64 6c 65 20 74 6f 20 75 73 65 2e 0d 0a  handle to use...
0520: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
0530: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  ram>..        in
0540: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 43 6f 6e  ternal SQLiteCon
0550: 74 65 78 74 28 49 6e 74 50 74 72 20 70 43 6f 6e  text(IntPtr pCon
0560: 74 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  text)..        {
0570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
0580: 69 73 2e 70 43 6f 6e 74 65 78 74 20 3d 20 70 43  is.pContext = pC
0590: 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  ontext;..       
05a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
05b0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
05c0: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0610: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51       #region ISQ
0620: 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65  LiteNativeHandle
0630: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
0640: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0650: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74  .        /// Ret
0660: 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79  urns the underly
0670: 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76  ing SQLite nativ
0680: 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61  e handle associa
0690: 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20  ted with this.. 
06a0: 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63         /// objec
06b0: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
06c0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
06d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
06e0: 6c 69 63 20 49 6e 74 50 74 72 20 4e 61 74 69 76  lic IntPtr Nativ
06f0: 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20  eHandle..       
0700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0710: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 43 6f  get { return pCo
0720: 6e 74 65 78 74 3b 20 7d 0d 0a 20 20 20 20 20 20  ntext; }..      
0730: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
0740: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
0750: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
07a0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
07b0: 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  blic Methods..  
07c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
07d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
07e0: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
07f0: 74 20 72 65 73 75 6c 74 20 74 6f 20 4e 55 4c 4c  t result to NULL
0800: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
0810: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
0820: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
0830: 65 74 4e 75 6c 6c 28 29 0d 0a 20 20 20 20 20 20  etNull()..      
0840: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0850: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
0860: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
0870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0880: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
0890: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
08a0: 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  on();....       
08b0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
08c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
08d0: 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 70 43 6f  _result_null(pCo
08e0: 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 20 20 20  ntext);..       
08f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
0920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0940: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
0950: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0960: 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73          /// Sets
0970: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73   the context res
0980: 75 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69  ult to the speci
0990: 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  fied <see cref="
09a0: 44 6f 75 62 6c 65 22 20 2f 3e 0d 0a 20 20 20 20  Double" />..    
09b0: 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a      /// value...
09c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
09d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
09e0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
09f0: 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20  "value">..      
0a00: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
0a10: 72 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20  ref="Double" /> 
0a20: 76 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20  value to use... 
0a30: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
0a40: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
0a50: 6c 69 63 20 76 6f 69 64 20 53 65 74 44 6f 75 62  lic void SetDoub
0a60: 6c 65 28 64 6f 75 62 6c 65 20 76 61 6c 75 65 29  le(double value)
0a70: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
0a80: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
0a90: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
0aa0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
0ab0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
0ac0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
0ad0: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
0ae0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
0af0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
0b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
0b10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
0b20: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
0b30: 64 6f 75 62 6c 65 28 70 43 6f 6e 74 65 78 74 2c  double(pContext,
0b40: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20   value);..#elif 
0b50: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
0b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
0b70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
0b80: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
0b90: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
0ba0: 70 43 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61  pContext, ref va
0bb0: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
0bc0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
0bd0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
0be0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
0bf0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
0c00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
0c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
0c60: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0c70: 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20         /// Sets 
0c80: 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75  the context resu
0c90: 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  lt to the specif
0ca0: 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49  ied <see cref="I
0cb0: 6e 74 33 32 22 20 2f 3e 0d 0a 20 20 20 20 20 20  nt32" />..      
0cc0: 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20    /// value...  
0cd0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
0ce0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
0cf0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
0d00: 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  alue">..        
0d10: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
0d20: 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c  f="Int32" /> val
0d30: 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20  ue to use...    
0d40: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
0d50: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
0d60: 20 76 6f 69 64 20 53 65 74 49 6e 74 28 69 6e 74   void SetInt(int
0d70: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20   value)..       
0d80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0d90: 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20  if (pContext == 
0da0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
0dc0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
0dd0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
0de0: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
0df0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
0e00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
0e10: 72 65 73 75 6c 74 5f 69 6e 74 28 70 43 6f 6e 74  result_int(pCont
0e20: 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ext, value);..  
0e30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0e40: 20 20 20 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 2f 2f  ////////////////
0e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0e90: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
0ea0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
0eb0: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
0ec0: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
0ed0: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
0ee0: 72 65 66 3d 22 49 6e 74 36 34 22 20 2f 3e 0d 0a  ref="Int64" />..
0ef0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75          /// valu
0f00: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
0f10: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0f20: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0f30: 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20  ame="value">..  
0f40: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
0f50: 65 65 20 63 72 65 66 3d 22 49 6e 74 36 34 22 20  ee cref="Int64" 
0f60: 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75 73 65 2e  /> value to use.
0f70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
0f80: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
0f90: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 49  public void SetI
0fa0: 6e 74 36 34 28 6c 6f 6e 67 20 76 61 6c 75 65 29  nt64(long value)
0fb0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
0fc0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
0fd0: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
0fe0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
0ff0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1000: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
1010: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
1020: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
1030: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
1040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
1050: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1060: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
1070: 69 6e 74 36 34 28 70 43 6f 6e 74 65 78 74 2c 20  int64(pContext, 
1080: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
1090: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
10a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
10b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10c0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
10d0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 43  int64_interop(pC
10e0: 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75  ontext, ref valu
10f0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
1100: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1110: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
1120: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
1130: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
1140: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
11a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
11b0: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
11c0: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
11d0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
11e0: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72  d <see cref="Str
11f0: 69 6e 67 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20  ing" />..       
1200: 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20   /// value...   
1210: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
1220: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1230: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
1240: 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  lue">..        /
1250: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1260: 3d 22 53 74 72 69 6e 67 22 20 2f 3e 20 76 61 6c  ="String" /> val
1270: 75 65 20 74 6f 20 75 73 65 2e 20 20 54 68 69 73  ue to use.  This
1280: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 0d 0a   value will be..
1290: 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76          /// conv
12a0: 65 72 74 65 64 20 74 6f 20 74 68 65 20 55 54 46  erted to the UTF
12b0: 2d 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f  -8 encoding prio
12c0: 72 20 74 6f 20 62 65 69 6e 67 20 75 73 65 64 2e  r to being used.
12d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
12e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
12f0: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 53  public void SetS
1300: 74 72 69 6e 67 28 73 74 72 69 6e 67 20 76 61 6c  tring(string val
1310: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ue)..        {..
1320: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1330: 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50  pContext == IntP
1340: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1350: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1360: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
1370: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
1380: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1390: 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 53  byte[] bytes = S
13a0: 51 4c 69 74 65 53 74 72 69 6e 67 2e 47 65 74 55  QLiteString.GetU
13b0: 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72 69  tf8BytesFromStri
13c0: 6e 67 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20  ng(value);....  
13d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 79            if (by
13e0: 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  tes == null)..  
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1400: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
1410: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 76  NullException("v
1420: 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  alue");....     
1430: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
1440: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1450: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 0d  e3_result_text(.
1460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1470: 20 70 43 6f 6e 74 65 78 74 2c 20 62 79 74 65 73   pContext, bytes
1480: 2c 20 62 79 74 65 73 2e 4c 65 6e 67 74 68 2c 20  , bytes.Length, 
1490: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
14a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
14c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d0: 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
1500: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1510: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1520: 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74  // Sets the cont
1530: 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68  ext result to th
1540: 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65  e specified <see
1550: 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22 20 2f   cref="String" /
1560: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  >..        /// v
1570: 61 6c 75 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  alue containing 
1580: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
1590: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15a0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
15b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
15c0: 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20  me="value">..   
15d0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
15e0: 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22 20  e cref="String" 
15f0: 2f 3e 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  /> value contain
1600: 69 6e 67 20 74 68 65 20 65 72 72 6f 72 20 6d 65  ing the error me
1610: 73 73 61 67 65 20 74 65 78 74 2e 0d 0a 20 20 20  ssage text...   
1620: 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61       /// This va
1630: 6c 75 65 20 77 69 6c 6c 20 62 65 20 63 6f 6e 76  lue will be conv
1640: 65 72 74 65 64 20 74 6f 20 74 68 65 20 55 54 46  erted to the UTF
1650: 2d 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f  -8 encoding prio
1660: 72 20 74 6f 20 62 65 69 6e 67 0d 0a 20 20 20 20  r to being..    
1670: 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20      /// used... 
1680: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1690: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
16a0: 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72 72 6f  lic void SetErro
16b0: 72 28 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  r(string value).
16c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
16d0: 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e          if (pCon
16e0: 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  text == IntPtr.Z
16f0: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
1700: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1710: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
1720: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a  Exception();....
1730: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
1740: 5b 5d 20 62 79 74 65 73 20 3d 20 53 51 4c 69 74  [] bytes = SQLit
1750: 65 53 74 72 69 6e 67 2e 47 65 74 55 74 66 38 42  eString.GetUtf8B
1760: 79 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 76  ytesFromString(v
1770: 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue);....      
1780: 20 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20        if (bytes 
1790: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
17a0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
17b0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
17c0: 45 78 63 65 70 74 69 6f 6e 28 22 76 61 6c 75 65  Exception("value
17d0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
17e0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
17f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
1800: 65 73 75 6c 74 5f 65 72 72 6f 72 28 0d 0a 20 20  esult_error(..  
1810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
1820: 6f 6e 74 65 78 74 2c 20 62 79 74 65 73 2c 20 62  ontext, bytes, b
1830: 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  ytes.Length);.. 
1840: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1850: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
18a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
18b0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
18c0: 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65  / Sets the conte
18d0: 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65  xt result to the
18e0: 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20   specified <see 
18f0: 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f  cref="SQLiteErro
1900: 72 43 6f 64 65 22 20 2f 3e 0d 0a 20 20 20 20 20  rCode" />..     
1910: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20     /// value... 
1920: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1930: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1940: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1950: 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  value">..       
1960: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1970: 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72 43  ef="SQLiteErrorC
1980: 6f 64 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  ode" /> value to
1990: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
19a0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
19b0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
19c0: 20 53 65 74 45 72 72 6f 72 43 6f 64 65 28 53 51   SetErrorCode(SQ
19d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 76 61  LiteErrorCode va
19e0: 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  lue)..        {.
19f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1a00: 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74  (pContext == Int
1a10: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
1a20: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1a30: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
1a40: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
1a50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a60: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1a70: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
1a80: 75 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65 28 70  ult_error_code(p
1a90: 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  Context, value);
1aa0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
1ab0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad0: 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1b00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1b10: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1b20: 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f   /// Sets the co
1b30: 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20  ntext result to 
1b40: 63 6f 6e 74 61 69 6e 20 74 68 65 20 65 72 72 6f  contain the erro
1b50: 72 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 54 4f  r code SQLITE_TO
1b60: 4f 42 49 47 2e 0d 0a 20 20 20 20 20 20 20 20 2f  OBIG...        /
1b70: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1b80: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
1b90: 69 64 20 53 65 74 45 72 72 6f 72 54 6f 6f 42 69  id SetErrorTooBi
1ba0: 67 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  g()..        {..
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1bc0: 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50  pContext == IntP
1bd0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1be0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1bf0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
1c00: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
1c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c20: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1c30: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
1c40: 6c 74 5f 65 72 72 6f 72 5f 74 6f 6f 62 69 67 28  lt_error_toobig(
1c50: 70 43 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  pContext);..    
1c60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c70: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 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 0d 0a 0d 0a 20 20 20 20  ////////....    
1cc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1cd0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53  >..        /// S
1ce0: 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78 74 20  ets the context 
1cf0: 72 65 73 75 6c 74 20 74 6f 20 63 6f 6e 74 61 69  result to contai
1d00: 6e 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  n the error code
1d10: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 0d 0a   SQLITE_NOMEM...
1d20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1d30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1d40: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 45  public void SetE
1d50: 72 72 6f 72 4e 6f 4d 65 6d 6f 72 79 28 29 0d 0a  rrorNoMemory()..
1d60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d70: 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74         if (pCont
1d80: 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ext == IntPtr.Ze
1d90: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
1da0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
1db0: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
1dc0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20  xception();.... 
1dd0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
1de0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1df0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
1e00: 72 6f 72 5f 6e 6f 6d 65 6d 28 70 43 6f 6e 74 65  ror_nomem(pConte
1e10: 78 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  xt);..        }.
1e20: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1e80: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1e90: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
1ea0: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
1eb0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
1ec0: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 42 79 74  d <see cref="Byt
1ed0: 65 22 20 2f 3e 20 61 72 72 61 79 0d 0a 20 20 20  e" /> array..   
1ee0: 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d       /// value..
1ef0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
1f00: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1f10: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1f20: 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20  ="value">..     
1f30: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
1f40: 63 72 65 66 3d 22 42 79 74 65 22 20 2f 3e 20 61  cref="Byte" /> a
1f50: 72 72 61 79 20 76 61 6c 75 65 20 74 6f 20 75 73  rray value to us
1f60: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1f70: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1f80: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
1f90: 74 42 6c 6f 62 28 62 79 74 65 5b 5d 20 76 61 6c  tBlob(byte[] val
1fa0: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ue)..        {..
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1fc0: 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50  pContext == IntP
1fd0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1fe0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1ff0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2000: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
2010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2020: 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
2030: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2040: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
2050: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
2060: 69 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d  ion("value");...
2070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
2080: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2090: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
20a0: 62 6c 6f 62 28 0d 0a 20 20 20 20 20 20 20 20 20  blob(..         
20b0: 20 20 20 20 20 20 20 70 43 6f 6e 74 65 78 74 2c         pContext,
20c0: 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65   value, value.Le
20d0: 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d  ngth, (IntPtr)(-
20e0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  1));..        }.
20f0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2120: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
2150: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2160: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
2170: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
2180: 20 74 6f 20 61 20 42 4c 4f 42 20 6f 66 20 7a 65   to a BLOB of ze
2190: 72 6f 73 20 6f 66 20 74 68 65 20 73 70 65 63 69  ros of the speci
21a0: 66 69 65 64 20 73 69 7a 65 2e 0d 0a 20 20 20 20  fied size...    
21b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
21c0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
21d0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
21e0: 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ue">..        //
21f0: 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
2200: 7a 65 72 6f 20 62 79 74 65 73 20 74 6f 20 75 73  zero bytes to us
2210: 65 20 66 6f 72 20 74 68 65 20 42 4c 4f 42 20 63  e for the BLOB c
2220: 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 2e 0d 0a  ontext result...
2230: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2240: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
2250: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 5a 65 72  blic void SetZer
2260: 6f 42 6c 6f 62 28 69 6e 74 20 76 61 6c 75 65 29  oBlob(int value)
2270: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2280: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
2290: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
22a0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
22b0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
22c0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
22d0: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
22e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
22f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2300: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
2310: 7a 65 72 6f 62 6c 6f 62 28 70 43 6f 6e 74 65 78  zeroblob(pContex
2320: 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  t, value);..    
2330: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2340: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
2390: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
23a0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53  >..        /// S
23b0: 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78 74 20  ets the context 
23c0: 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20 73 70  result to the sp
23d0: 65 63 69 66 69 65 64 20 3c 73 65 65 20 63 72 65  ecified <see cre
23e0: 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22 20  f="SQLiteValue" 
23f0: 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  />...        ///
2400: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2410: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2420: 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20  name="value">.. 
2430: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
2440: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
2450: 56 61 6c 75 65 22 20 2f 3e 20 74 6f 20 75 73 65  Value" /> to use
2460: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2470: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2480: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74   public void Set
2490: 56 61 6c 75 65 28 53 51 4c 69 74 65 56 61 6c 75  Value(SQLiteValu
24a0: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  e value)..      
24b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24c0: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
24d0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
24e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24f0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
2500: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
2510: 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  on();....       
2520: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
2530: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2540: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
2550: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
2560: 78 63 65 70 74 69 6f 6e 28 22 76 61 6c 75 65 22  xception("value"
2570: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2580: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
2590: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
25a0: 73 75 6c 74 5f 76 61 6c 75 65 28 0d 0a 20 20 20  sult_value(..   
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f               pCo
25c0: 6e 74 65 78 74 2c 20 76 61 6c 75 65 2e 4e 61 74  ntext, value.Nat
25d0: 69 76 65 48 61 6e 64 6c 65 29 3b 0d 0a 20 20 20  iveHandle);..   
25e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25f0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
2600: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
2610: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
2620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2640: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
2670: 69 6f 6e 20 53 51 4c 69 74 65 56 61 6c 75 65 20  ion SQLiteValue 
2680: 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20  Helper Class..  
2690: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
26a0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
26b0: 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 61  ass represents a
26c0: 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
26d0: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
26e0: 61 72 79 20 74 68 61 74 20 63 61 6e 20 62 65 0d  ary that can be.
26f0: 0a 20 20 20 20 2f 2f 2f 20 70 61 73 73 65 64 20  .    /// passed 
2700: 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
2710: 61 6c 75 65 5f 2a 28 29 20 61 6e 64 20 61 73 73  alue_*() and ass
2720: 6f 63 69 61 74 65 64 20 66 75 6e 63 74 69 6f 6e  ociated function
2730: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
2740: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
2750: 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  ic sealed class 
2760: 53 51 4c 69 74 65 56 61 6c 75 65 20 3a 20 49 53  SQLiteValue : IS
2770: 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c  QLiteNativeHandl
2780: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
2790: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
27a0: 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  e Data..        
27b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
27c0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
27d0: 61 74 69 76 65 20 76 61 6c 75 65 20 68 61 6e 64  ative value hand
27e0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
27f0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2800: 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 74       private Int
2810: 50 74 72 20 70 56 61 6c 75 65 3b 0d 0a 20 20 20  Ptr pValue;..   
2820: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2830: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2880: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2890: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
28a0: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
28b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
28c0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
28d0: 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73  onstructs an ins
28e0: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c  tance of this cl
28f0: 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70  ass using the sp
2900: 65 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d 0a  ecified native..
2910: 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75          /// valu
2920: 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20  e handle...     
2930: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2940: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
2950: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c  param name="pVal
2960: 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ue">..        //
2970: 2f 20 54 68 65 20 6e 61 74 69 76 65 20 76 61 6c  / The native val
2980: 75 65 20 68 61 6e 64 6c 65 20 74 6f 20 75 73 65  ue handle to use
2990: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
29a0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
29b0: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 56   private SQLiteV
29c0: 61 6c 75 65 28 49 6e 74 50 74 72 20 70 56 61 6c  alue(IntPtr pVal
29d0: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ue)..        {..
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
29f0: 2e 70 56 61 6c 75 65 20 3d 20 70 56 61 6c 75 65  .pValue = pValue
2a00: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2a10: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2a20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a70: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2a80: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d  region Private M
2a90: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
2aa0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2ab0: 20 20 20 20 20 20 20 2f 2f 2f 20 49 6e 76 61 6c         /// Inval
2ac0: 69 64 61 74 65 73 20 74 68 65 20 6e 61 74 69 76  idates the nativ
2ad0: 65 20 76 61 6c 75 65 20 68 61 6e 64 6c 65 2c 20  e value handle, 
2ae0: 74 68 65 72 65 62 79 20 70 72 65 76 65 6e 74 69  thereby preventi
2af0: 6e 67 20 66 75 72 74 68 65 72 0d 0a 20 20 20 20  ng further..    
2b00: 20 20 20 20 2f 2f 2f 20 61 63 63 65 73 73 20 74      /// access t
2b10: 6f 20 69 74 20 66 72 6f 6d 20 74 68 69 73 20 6f  o it from this o
2b20: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
2b30: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
2b40: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2b50: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 50 72   private void Pr
2b60: 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73  eventNativeAcces
2b70: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s()..        {..
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 70 56 61 6c              pVal
2b90: 75 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ue = IntPtr.Zero
2ba0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2bb0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2bc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2c20: 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20  region Internal 
2c30: 4d 61 72 73 68 61 6c 20 48 65 6c 70 65 72 20 4d  Marshal Helper M
2c40: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
2c50: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2c60: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65         /// Conve
2c70: 72 74 73 20 61 20 6c 6f 67 69 63 61 6c 20 61 72  rts a logical ar
2c80: 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20 70 6f  ray of native po
2c90: 69 6e 74 65 72 73 20 74 6f 20 6e 61 74 69 76 65  inters to native
2ca0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 0d 0a   sqlite3_value..
2cb0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75          /// stru
2cc0: 63 74 75 72 65 73 20 69 6e 74 6f 20 61 20 6d 61  ctures into a ma
2cd0: 6e 61 67 65 64 20 61 72 72 61 79 20 6f 66 20 3c  naged array of <
2ce0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
2cf0: 56 61 6c 75 65 22 20 2f 3e 0d 0a 20 20 20 20 20  Value" />..     
2d00: 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e     /// object in
2d10: 73 74 61 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20  stances...      
2d20: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2d30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
2d40: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22  aram name="argc"
2d50: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
2d60: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65  he number of ele
2d70: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 6c 6f 67  ments in the log
2d80: 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20 6e 61  ical array of na
2d90: 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 61 6c  tive sqlite3_val
2da0: 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ue..        /// 
2db0: 73 74 72 75 63 74 75 72 65 73 2e 0d 0a 20 20 20  structures...   
2dc0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2dd0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
2de0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76  param name="argv
2df0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
2e00: 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
2e10: 65 72 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61  er to the logica
2e20: 6c 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76  l array of nativ
2e30: 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 0d  e sqlite3_value.
2e40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72  .        /// str
2e50: 75 63 74 75 72 65 73 20 74 6f 20 63 6f 6e 76 65  uctures to conve
2e60: 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rt...        ///
2e70: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2e80: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2e90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
2ea0: 65 20 6d 61 6e 61 67 65 64 20 61 72 72 61 79 20  e managed array 
2eb0: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
2ec0: 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62  LiteValue" /> ob
2ed0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20 6f  ject instances o
2ee0: 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  r..        /// n
2ef0: 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65  ull upon failure
2f00: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2f10: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2f20: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
2f30: 69 63 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d  ic SQLiteValue[]
2f40: 20 41 72 72 61 79 46 72 6f 6d 53 69 7a 65 41 6e   ArrayFromSizeAn
2f50: 64 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20  dIntPtr(..      
2f60: 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d        int argc,.
2f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
2f80: 50 74 72 20 61 72 67 76 0d 0a 20 20 20 20 20 20  Ptr argv..      
2f90: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2fa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2fb0: 69 66 20 28 61 72 67 63 20 3c 20 30 29 0d 0a 20  if (argc < 0).. 
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2fd0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
2fe0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
2ff0: 72 67 76 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  rgv == IntPtr.Ze
3000: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
3010: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
3020: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3030: 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 72   SQLiteValue[] r
3040: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 51 4c 69  esult = new SQLi
3050: 74 65 56 61 6c 75 65 5b 61 72 67 63 5d 3b 0d 0a  teValue[argc];..
3060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
3070: 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
3080: 2c 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 20  , offset = 0;.. 
3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a0: 20 20 20 69 6e 64 65 78 20 3c 20 72 65 73 75 6c     index < resul
30b0: 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20  t.Length;..     
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
30d0: 6e 64 65 78 2b 2b 2c 20 6f 66 66 73 65 74 20 2b  ndex++, offset +
30e0: 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 0d 0a  = IntPtr.Size)..
30f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
3110: 6e 74 50 74 72 20 70 41 72 67 20 3d 20 53 51 4c  ntPtr pArg = SQL
3120: 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  iteMarshal.ReadI
3130: 6e 74 50 74 72 28 61 72 67 76 2c 20 6f 66 66 73  ntPtr(argv, offs
3140: 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
3150: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 5b 69          result[i
3160: 6e 64 65 78 5d 20 3d 20 28 70 41 72 67 20 21 3d  ndex] = (pArg !=
3170: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 3f 0d   IntPtr.Zero) ?.
3180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3190: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 56       new SQLiteV
31a0: 61 6c 75 65 28 70 41 72 67 29 20 3a 20 6e 75 6c  alue(pArg) : nul
31b0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
31c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
31d0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
31e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
31f0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
3200: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
3230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3250: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
3260: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
3270: 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72 73  veHandle Members
3280: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
3290: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
32a0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
32b0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69   underlying SQLi
32c0: 74 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65  te native handle
32d0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
32e0: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
32f0: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
3300: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
3310: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3320: 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 74 50       public IntP
3330: 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d  tr NativeHandle.
3340: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
3350: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
3360: 74 75 72 6e 20 70 56 61 6c 75 65 3b 20 7d 0d 0a  turn pValue; }..
3370: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3380: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
3390: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
33a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
33f0: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
3400: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70  rties..        p
3410: 72 69 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 73  rivate bool pers
3420: 69 73 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  isted;..        
3430: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
3440: 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72         /// Retur
3450: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
3460: 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
3470: 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20   value has been 
3480: 73 75 63 63 65 73 73 66 75 6c 6c 79 0d 0a 20 20  successfully..  
3490: 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73        /// persis
34a0: 74 65 64 20 61 73 20 61 20 6d 61 6e 61 67 65 64  ted as a managed
34b0: 20 76 61 6c 75 65 20 77 69 74 68 69 6e 20 74 68   value within th
34c0: 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
34d0: 63 65 20 28 69 2e 65 2e 20 74 68 65 0d 0a 20 20  ce (i.e. the..  
34e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
34f0: 72 65 66 3d 22 56 61 6c 75 65 22 20 2f 3e 20 70  ref="Value" /> p
3500: 72 6f 70 65 72 74 79 20 6d 61 79 20 74 68 65 6e  roperty may then
3510: 20 62 65 20 72 65 61 64 20 73 75 63 63 65 73 73   be read success
3520: 66 75 6c 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20  fully)...       
3530: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
3540: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
3550: 62 6f 6f 6c 20 50 65 72 73 69 73 74 65 64 0d 0a  bool Persisted..
3560: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3570: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
3580: 75 72 6e 20 70 65 72 73 69 73 74 65 64 3b 20 7d  urn persisted; }
3590: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
35a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
35b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35f0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
3600: 65 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0d  e object value;.
3610: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
3620: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3630: 2f 2f 2f 20 49 66 20 74 68 65 20 6d 61 6e 61 67  /// If the manag
3640: 65 64 20 76 61 6c 75 65 20 66 6f 72 20 74 68 69  ed value for thi
3650: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
3660: 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  e is available (
3670: 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20 20 20  i.e. it..       
3680: 20 2f 2f 2f 20 68 61 73 20 62 65 65 6e 20 70 72   /// has been pr
3690: 65 76 69 6f 75 73 6c 79 20 70 65 72 73 69 73 74  eviously persist
36a0: 65 64 20 76 69 61 20 74 68 65 20 3c 73 65 65 20  ed via the <see 
36b0: 63 72 65 66 3d 22 50 65 72 73 69 73 74 22 20 2f  cref="Persist" /
36c0: 3e 29 20 6d 65 74 68 6f 64 2c 0d 0a 20 20 20 20  >) method,..    
36d0: 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 76 61 6c      /// that val
36e0: 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 3b 20  ue is returned; 
36f0: 6f 74 68 65 72 77 69 73 65 2c 20 61 6e 20 65 78  otherwise, an ex
3700: 63 65 70 74 69 6f 6e 20 69 73 20 74 68 72 6f 77  ception is throw
3710: 6e 2e 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20  n.  The..       
3720: 20 2f 2f 2f 20 72 65 74 75 72 6e 65 64 20 76 61   /// returned va
3730: 6c 75 65 20 6d 61 79 20 62 65 20 6e 75 6c 6c 2e  lue may be null.
3740: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
3750: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
3760: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
3770: 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7b  Value..        {
3780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
3790: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
37a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37b0: 20 20 69 66 20 28 21 70 65 72 73 69 73 74 65 64    if (!persisted
37c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37e0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
37f0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
3800: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
3810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3820: 20 20 20 20 20 20 20 20 22 76 61 6c 75 65 20 77          "value w
3830: 61 73 20 6e 6f 74 20 70 65 72 73 69 73 74 65 64  as not persisted
3840: 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
3850: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3860: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3870: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20   value;..       
3880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
3890: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
38a0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
38b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
3900: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
3910: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
3920: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3930: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47  >..        /// G
3940: 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ets and returns 
3950: 74 68 65 20 74 79 70 65 20 61 66 66 69 6e 69 74  the type affinit
3960: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
3970: 68 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20  h this value... 
3980: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
3990: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
39a0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
39b0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 79        /// The ty
39c0: 70 65 20 61 66 66 69 6e 69 74 79 20 61 73 73 6f  pe affinity asso
39d0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
39e0: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
39f0: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
3a00: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
3a10: 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74  TypeAffinity Get
3a20: 54 79 70 65 41 66 66 69 6e 69 74 79 28 29 0d 0a  TypeAffinity()..
3a30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3a40: 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75         if (pValu
3a50: 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e == IntPtr.Zero
3a60: 29 20 72 65 74 75 72 6e 20 54 79 70 65 41 66 66  ) return TypeAff
3a70: 69 6e 69 74 79 2e 4e 6f 6e 65 3b 0d 0a 20 20 20  inity.None;..   
3a80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3a90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
3aa0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
3ab0: 65 5f 74 79 70 65 28 70 56 61 6c 75 65 29 3b 0d  e_type(pValue);.
3ac0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
3ad0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3b20: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
3b30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3b40: 2f 2f 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74  /// Gets and ret
3b50: 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
3b60: 6f 66 20 62 79 74 65 73 20 61 73 73 6f 63 69 61  of bytes associa
3b70: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61  ted with this va
3b80: 6c 75 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 20  lue, if..       
3b90: 20 2f 2f 2f 20 69 74 20 72 65 66 65 72 73 20 74   /// it refers t
3ba0: 6f 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  o a UTF-8 encode
3bb0: 64 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20  d string...     
3bc0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3bd0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
3be0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
3bf0: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
3c00: 20 6f 66 20 62 79 74 65 73 20 61 73 73 6f 63 69   of bytes associ
3c10: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76  ated with this v
3c20: 61 6c 75 65 2e 20 20 54 68 65 20 72 65 74 75 72  alue.  The retur
3c30: 6e 65 64 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  ned value..     
3c40: 20 20 20 2f 2f 2f 20 6d 61 79 20 62 65 20 7a 65     /// may be ze
3c50: 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ro...        ///
3c60: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
3c70: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
3c80: 47 65 74 42 79 74 65 73 28 29 0d 0a 20 20 20 20  GetBytes()..    
3c90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3ca0: 20 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d     if (pValue ==
3cb0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65   IntPtr.Zero) re
3cc0: 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20  turn 0;..       
3cd0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
3ce0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
3cf0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
3d00: 74 65 73 28 70 56 61 6c 75 65 29 3b 0d 0a 20 20  tes(pValue);..  
3d10: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3d20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3d70: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
3d80: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
3d90: 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e   Gets and return
3da0: 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  s the <see cref=
3db0: 22 49 6e 74 33 32 22 20 2f 3e 20 61 73 73 6f 63  "Int32" /> assoc
3dc0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d  iated with this.
3dd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c  .        /// val
3de0: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
3df0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3e00: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
3e10: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
3e20: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
3e30: 6e 74 33 32 22 20 2f 3e 20 61 73 73 6f 63 69 61  nt32" /> associa
3e40: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61  ted with this va
3e50: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
3e60: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
3e70: 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74        public int
3e80: 20 47 65 74 49 6e 74 28 29 0d 0a 20 20 20 20 20   GetInt()..     
3e90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3ea0: 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20    if (pValue == 
3eb0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
3ec0: 75 72 6e 20 64 65 66 61 75 6c 74 28 69 6e 74 29  urn default(int)
3ed0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
3ee0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
3ef0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3f00: 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70 56 61 6c  3_value_int(pVal
3f10: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
3f20: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
3f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f70: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
3f80: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3f90: 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e       /// Gets an
3fa0: 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73  d returns the <s
3fb0: 65 65 20 63 72 65 66 3d 22 49 6e 74 36 34 22 20  ee cref="Int64" 
3fc0: 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  /> associated wi
3fd0: 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  th..        /// 
3fe0: 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20  this value...   
3ff0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
4000: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
4010: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
4020: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
4030: 20 63 72 65 66 3d 22 49 6e 74 36 34 22 20 2f 3e   cref="Int64" />
4040: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
4050: 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20   this value...  
4060: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
4070: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
4080: 62 6c 69 63 20 6c 6f 6e 67 20 47 65 74 49 6e 74  blic long GetInt
4090: 36 34 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  64()..        {.
40a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
40b0: 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74  (pValue == IntPt
40c0: 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 64  r.Zero) return d
40d0: 65 66 61 75 6c 74 28 6c 6f 6e 67 29 3b 0d 0a 0d  efault(long);...
40e0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
40f0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
4100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4110: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
4120: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4130: 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 56 61 6c  value_int64(pVal
4140: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
4150: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
4160: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
4170: 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20  alue = 0;..     
4180: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
4190: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
41a0: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69  e3_value_int64_i
41b0: 6e 74 65 72 6f 70 28 70 56 61 6c 75 65 2c 20 72  nterop(pValue, r
41c0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
41d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
41e0: 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
41f0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
4200: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
4210: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
4220: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4230: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
4240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4280: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4290: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
42a0: 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20         /// Gets 
42b0: 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
42c0: 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c  <see cref="Doubl
42d0: 65 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64  e" /> associated
42e0: 20 77 69 74 68 20 74 68 69 73 0d 0a 20 20 20 20   with this..    
42f0: 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a      /// value...
4300: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
4310: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
4320: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
4330: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
4340: 73 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65  see cref="Double
4350: 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20  " /> associated 
4360: 77 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e  with this value.
4370: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
4380: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
4390: 20 20 70 75 62 6c 69 63 20 64 6f 75 62 6c 65 20    public double 
43a0: 47 65 74 44 6f 75 62 6c 65 28 29 0d 0a 20 20 20  GetDouble()..   
43b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
43c0: 20 20 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d      if (pValue =
43d0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72  = IntPtr.Zero) r
43e0: 65 74 75 72 6e 20 64 65 66 61 75 6c 74 28 64 6f  eturn default(do
43f0: 75 62 6c 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  uble);....#if !P
4400: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
4410: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
4420: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
4430: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4440: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64  .sqlite3_value_d
4450: 6f 75 62 6c 65 28 70 56 61 6c 75 65 29 3b 0d 0a  ouble(pValue);..
4460: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
4470: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
4480: 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65      double value
4490: 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20 20   = 0.0;..       
44a0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
44b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
44c0: 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e  _value_double_in
44d0: 74 65 72 6f 70 28 70 56 61 6c 75 65 2c 20 72 65  terop(pValue, re
44e0: 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
44f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
4500: 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  lue;..#else..   
4510: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
4520: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
4530: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
4540: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
4550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
4560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
45b0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
45c0: 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61        /// Gets a
45d0: 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c  nd returns the <
45e0: 73 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67  see cref="String
45f0: 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20  " /> associated 
4600: 77 69 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20  with this..     
4610: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20     /// value... 
4620: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
4630: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
4640: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
4650: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
4660: 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22  ee cref="String"
4670: 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77   /> associated w
4680: 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e 20  ith this value. 
4690: 20 54 68 65 20 76 61 6c 75 65 20 69 73 0d 0a 20   The value is.. 
46a0: 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65         /// conve
46b0: 72 74 65 64 20 66 72 6f 6d 20 74 68 65 20 55 54  rted from the UT
46c0: 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69  F-8 encoding pri
46d0: 6f 72 20 74 6f 20 62 65 69 6e 67 20 72 65 74 75  or to being retu
46e0: 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rned...        /
46f0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
4700: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
4710: 72 69 6e 67 20 47 65 74 53 74 72 69 6e 67 28 29  ring GetString()
4720: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4730: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61           if (pVa
4740: 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  lue == IntPtr.Ze
4750: 72 6f 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b  ro) return null;
4760: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4770: 69 6e 74 20 6c 65 6e 67 74 68 3b 0d 0a 20 20 20  int length;..   
4780: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
4790: 70 53 74 72 69 6e 67 3b 0d 0a 0d 0a 23 69 66 20  pString;....#if 
47a0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
47b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e  .            len
47c0: 67 74 68 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  gth = UnsafeNati
47d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
47e0: 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56  3_value_bytes(pV
47f0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
4800: 20 20 20 20 70 53 74 72 69 6e 67 20 3d 20 55 6e      pString = Un
4810: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4820: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
4830: 74 65 78 74 28 70 56 61 6c 75 65 29 3b 0d 0a 23  text(pValue);..#
4840: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4850: 20 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0d 0a 0d    length = 0;...
4860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 53 74  .            pSt
4870: 72 69 6e 67 20 3d 20 55 6e 73 61 66 65 4e 61 74  ring = UnsafeNat
4880: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
4890: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e  e3_value_text_in
48a0: 74 65 72 6f 70 28 0d 0a 20 20 20 20 20 20 20 20  terop(..        
48b0: 20 20 20 20 20 20 20 20 70 56 61 6c 75 65 2c 20          pValue, 
48c0: 72 65 66 20 6c 65 6e 67 74 68 29 3b 0d 0a 23 65  ref length);..#e
48d0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
48e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
48f0: 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72  eString.StringFr
4900: 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 70 53 74  omUtf8IntPtr(pSt
4910: 72 69 6e 67 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  ring, length);..
4920: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4930: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4980: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
4990: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
49a0: 2f 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75  // Gets and retu
49b0: 72 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72 65  rns the <see cre
49c0: 66 3d 22 42 79 74 65 22 20 2f 3e 20 61 72 72 61  f="Byte" /> arra
49d0: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
49e0: 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  h this..        
49f0: 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  /// value...    
4a00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4a10: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
4a20: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
4a30: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
4a40: 63 72 65 66 3d 22 42 79 74 65 22 20 2f 3e 20 61  cref="Byte" /> a
4a50: 72 72 61 79 20 61 73 73 6f 63 69 61 74 65 64 20  rray associated 
4a60: 77 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e  with this value.
4a70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
4a80: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
4a90: 20 20 70 75 62 6c 69 63 20 62 79 74 65 5b 5d 20    public byte[] 
4aa0: 47 65 74 42 6c 6f 62 28 29 0d 0a 20 20 20 20 20  GetBlob()..     
4ab0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4ac0: 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20    if (pValue == 
4ad0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
4ae0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
4af0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4b00: 53 51 4c 69 74 65 42 79 74 65 73 2e 46 72 6f 6d  SQLiteBytes.From
4b10: 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20  IntPtr(..       
4b20: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
4b30: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4b40: 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28  ite3_value_blob(
4b50: 70 56 61 6c 75 65 29 2c 20 47 65 74 42 79 74 65  pValue), GetByte
4b60: 73 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  s());..        }
4b70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
4b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
4bd0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
4be0: 20 20 20 20 20 20 2f 2f 2f 20 55 73 65 73 20 74        /// Uses t
4bf0: 68 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20  he native value 
4c00: 68 61 6e 64 6c 65 20 74 6f 20 6f 62 74 61 69 6e  handle to obtain
4c10: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 6d   and store the m
4c20: 61 6e 61 67 65 64 20 76 61 6c 75 65 0d 0a 20 20  anaged value..  
4c30: 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 74 68        /// for th
4c40: 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
4c50: 63 65 2c 20 74 68 75 73 20 73 61 76 69 6e 67 20  ce, thus saving 
4c60: 69 74 20 66 6f 72 20 6c 61 74 65 72 20 75 73 65  it for later use
4c70: 2e 20 20 54 68 65 20 74 79 70 65 0d 0a 20 20 20  .  The type..   
4c80: 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20       /// of the 
4c90: 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 20 69 73  managed value is
4ca0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
4cb0: 68 65 20 74 79 70 65 20 61 66 66 69 6e 69 74 79  he type affinity
4cc0: 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
4cd0: 20 2f 2f 2f 20 6e 61 74 69 76 65 20 76 61 6c 75   /// native valu
4ce0: 65 2e 20 20 49 66 20 74 68 65 20 74 79 70 65 20  e.  If the type 
4cf0: 61 66 66 69 6e 69 74 79 20 69 73 20 6e 6f 74 20  affinity is not 
4d00: 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 74 68  recognized by th
4d10: 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
4d20: 6d 65 74 68 6f 64 2c 20 6e 6f 20 77 6f 72 6b 20  method, no work 
4d30: 69 73 20 64 6f 6e 65 20 61 6e 64 20 66 61 6c 73  is done and fals
4d40: 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0d 0a  e is returned...
4d50: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
4d60: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
4d70: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
4d80: 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
4d90: 65 72 6f 20 69 66 20 74 68 65 20 6e 61 74 69 76  ero if the nativ
4da0: 65 20 76 61 6c 75 65 20 77 61 73 20 70 65 72 73  e value was pers
4db0: 69 73 74 65 64 20 73 75 63 63 65 73 73 66 75 6c  isted successful
4dc0: 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ly...        ///
4dd0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
4de0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
4df0: 20 50 65 72 73 69 73 74 28 29 0d 0a 20 20 20 20   Persist()..    
4e00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4e10: 20 20 20 73 77 69 74 63 68 20 28 47 65 74 54 79     switch (GetTy
4e20: 70 65 41 66 66 69 6e 69 74 79 28 29 29 0d 0a 20  peAffinity()).. 
4e30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
4e50: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
4e60: 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3a 0d 0a  Uninitialized:..
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
4ea0: 61 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  alue = null;..  
4eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ec0: 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74        PreventNat
4ed0: 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20  iveAccess();..  
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ef0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65        return (pe
4f00: 72 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b  rsisted = true);
4f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4f20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4f30: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79           case Ty
4f40: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
4f50: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
4f60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f80: 20 20 76 61 6c 75 65 20 3d 20 47 65 74 49 6e 74    value = GetInt
4f90: 36 34 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  64();..         
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
4fb0: 72 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65  reventNativeAcce
4fc0: 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ss();..         
4fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4fe0: 65 74 75 72 6e 20 28 70 65 72 73 69 73 74 65 64  eturn (persisted
4ff0: 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20   = true);..     
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5020: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
5030: 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20  ity.Double:..   
5040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5050: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5060: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75              valu
5070: 65 20 3d 20 47 65 74 44 6f 75 62 6c 65 28 29 3b  e = GetDouble();
5080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5090: 20 20 20 20 20 20 20 20 20 20 50 72 65 76 65 6e            Preven
50a0: 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29 3b  tNativeAccess();
50b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
50c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
50d0: 20 28 70 65 72 73 69 73 74 65 64 20 3d 20 74 72   (persisted = tr
50e0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
50f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5100: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
5110: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  e TypeAffinity.T
5120: 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ext:..          
5130: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5150: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 47 65 74       value = Get
5160: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20  String();..     
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5180: 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76 65     PreventNative
5190: 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20 20  Access();..     
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51b0: 20 20 20 72 65 74 75 72 6e 20 28 70 65 72 73 69     return (persi
51c0: 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20  sted = true);.. 
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
51f0: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
5200: 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5220: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
5240: 6c 75 65 20 3d 20 47 65 74 42 79 74 65 73 28 29  lue = GetBytes()
5250: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5260: 20 20 20 20 20 20 20 20 20 20 20 50 72 65 76 65             Preve
5270: 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29  ntNativeAccess()
5280: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5290: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
52a0: 6e 20 28 70 65 72 73 69 73 74 65 64 20 3d 20 74  n (persisted = t
52b0: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
52c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
52e0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
52f0: 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20 20  Null:..         
5300: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5320: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 44 42        value = DB
5330: 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5350: 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69       PreventNati
5360: 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20  veAccess();..   
5370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5380: 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72       return (per
5390: 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d  sisted = true);.
53a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
53b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
53c0: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
53d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
53e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5400: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
5410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5420: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5430: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
5440: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
5450: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
5460: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5470: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
54c0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
54d0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
54e0: 6e 74 4f 70 20 45 6e 75 6d 65 72 61 74 69 6f 6e  ntOp Enumeration
54f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5500: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
5510: 73 65 20 61 72 65 20 74 68 65 20 61 6c 6c 6f 77  se are the allow
5520: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
5530: 65 20 6f 70 65 72 61 74 6f 72 73 20 74 68 61 74  e operators that
5540: 20 61 72 65 20 70 61 72 74 20 6f 66 20 61 0d 0a   are part of a..
5550: 20 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 61 69      /// constrai
5560: 6e 74 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57  nt term in the W
5570: 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61  HERE clause of a
5580: 20 71 75 65 72 79 20 74 68 61 74 20 75 73 65 73   query that uses
5590: 20 61 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20   a virtual..    
55a0: 2f 2f 2f 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  /// table...    
55b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
55c0: 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20      public enum 
55d0: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
55e0: 72 61 69 6e 74 4f 70 20 3a 20 62 79 74 65 0d 0a  raintOp : byte..
55f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
5600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
5610: 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76        /// This v
5620: 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20  alue represents 
5630: 74 68 65 20 65 71 75 61 6c 69 74 79 20 6f 70 65  the equality ope
5640: 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  rator...        
5650: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5660: 20 20 20 20 20 20 20 20 45 71 75 61 6c 54 6f 20          EqualTo 
5670: 3d 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 2,....        
5680: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5690: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
56a0: 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73  value represents
56b0: 20 74 68 65 20 67 72 65 61 74 65 72 20 74 68 61   the greater tha
56c0: 6e 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20  n operator...   
56d0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
56e0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72 65  ry>..        Gre
56f0: 61 74 65 72 54 68 61 6e 20 3d 20 34 2c 0d 0a 0d  aterThan = 4,...
5700: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
5710: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
5720: 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72  /// This value r
5730: 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 65  epresents the le
5740: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
5750: 20 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20   to operator... 
5760: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
5770: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 4c  mary>..        L
5780: 65 73 73 54 68 61 6e 4f 72 45 71 75 61 6c 54 6f  essThanOrEqualTo
5790: 20 3d 20 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 20   = 8,....       
57a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
57b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
57c0: 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74   value represent
57d0: 73 20 74 68 65 20 6c 65 73 73 20 74 68 61 6e 20  s the less than 
57e0: 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20  operator...     
57f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5800: 3e 0d 0a 20 20 20 20 20 20 20 20 4c 65 73 73 54  >..        LessT
5810: 68 61 6e 20 3d 20 31 36 2c 0d 0a 0d 0a 20 20 20  han = 16,....   
5820: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
5830: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
5840: 54 68 69 73 20 76 61 6c 75 65 20 72 65 70 72 65  This value repre
5850: 73 65 6e 74 73 20 74 68 65 20 67 72 65 61 74 65  sents the greate
5860: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
5870: 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20  to operator...  
5880: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
5890: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72  ary>..        Gr
58a0: 65 61 74 65 72 54 68 61 6e 4f 72 45 71 75 61 6c  eaterThanOrEqual
58b0: 54 6f 20 3d 20 33 32 2c 0d 0a 0d 0a 20 20 20 20  To = 32,....    
58c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
58d0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
58e0: 68 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73  his value repres
58f0: 65 6e 74 73 20 74 68 65 20 4d 41 54 43 48 20 6f  ents the MATCH o
5900: 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20  perator...      
5910: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5920: 0d 0a 20 20 20 20 20 20 20 20 4d 61 74 63 68 20  ..        Match 
5930: 3d 20 36 34 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  = 64..    }..   
5940: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
5950: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5970: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
59a0: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
59b0: 4c 69 74 65 49 6e 64 65 78 46 6c 61 67 73 20 45  LiteIndexFlags E
59c0: 6e 75 6d 65 72 61 74 69 6f 6e 0d 0a 20 20 20 20  numeration..    
59d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
59e0: 20 20 20 2f 2f 2f 20 54 68 65 73 65 20 61 72 65     /// These are
59f0: 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c   the allowed val
5a00: 75 65 73 20 66 6f 72 20 74 68 65 20 69 6e 64 65  ues for the inde
5a10: 78 20 66 6c 61 67 73 20 66 72 6f 6d 20 74 68 65  x flags from the
5a20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63  ..    /// <see c
5a30: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
5a40: 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e  gedModule.BestIn
5a50: 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  dex" /> method..
5a60: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
5a70: 72 79 3e 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28  ry>..    [Flags(
5a80: 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65  )]..    public e
5a90: 6e 75 6d 20 53 51 4c 69 74 65 49 6e 64 65 78 46  num SQLiteIndexF
5aa0: 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lags..    {..   
5ab0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
5ac0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
5ad0: 4e 6f 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  No special handl
5ae0: 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 74 68  ing.  This is th
5af0: 65 20 64 65 66 61 75 6c 74 2e 0d 0a 20 20 20 20  e default...    
5b00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5b10: 79 3e 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65  y>..        None
5b20: 20 3d 20 30 78 30 2c 0d 0a 0d 0a 20 20 20 20 20   = 0x0,....     
5b30: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5b40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
5b50: 69 73 20 76 61 6c 75 65 20 69 6e 64 69 63 61 74  is value indicat
5b60: 65 73 20 74 68 61 74 20 74 68 65 20 73 63 61 6e  es that the scan
5b70: 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 77 69   of the index wi
5b80: 6c 6c 20 76 69 73 69 74 20 61 74 0d 0a 20 20 20  ll visit at..   
5b90: 20 20 20 20 20 2f 2f 2f 20 6d 6f 73 74 20 6f 6e       /// most on
5ba0: 65 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  e row...        
5bb0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5bc0: 20 20 20 20 20 20 20 20 53 63 61 6e 55 6e 69 71          ScanUniq
5bd0: 75 65 20 3d 20 30 78 31 0d 0a 20 20 20 20 7d 0d  ue = 0x1..    }.
5be0: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
5bf0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
5c50: 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  n SQLiteIndexCon
5c60: 73 74 72 61 69 6e 74 20 48 65 6c 70 65 72 20 43  straint Helper C
5c70: 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
5c80: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5c90: 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72   This class repr
5ca0: 65 73 65 6e 74 73 20 74 68 65 20 6e 61 74 69 76  esents the nativ
5cb0: 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
5cc0: 63 6f 6e 73 74 72 61 69 6e 74 20 73 74 72 75 63  constraint struc
5cd0: 74 75 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 72  ture..    /// fr
5ce0: 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  om the SQLite co
5cf0: 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  re library...   
5d00: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5d10: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c  .    public seal
5d20: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49  ed class SQLiteI
5d30: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 0d 0a  ndexConstraint..
5d40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
5d50: 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20  region Internal 
5d60: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
5d70: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
5d80: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
5d90: 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
5da0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
5db0: 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20  class using the 
5dc0: 73 70 65 63 69 66 69 65 64 20 6e 61 74 69 76 65  specified native
5dd0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
5de0: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
5df0: 74 72 61 69 6e 74 20 73 74 72 75 63 74 75 72 65  traint structure
5e00: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
5e10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
5e20: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5e30: 6d 65 3d 22 63 6f 6e 73 74 72 61 69 6e 74 22 3e  me="constraint">
5e40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
5e50: 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  e native sqlite3
5e60: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
5e70: 74 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 75  t structure to u
5e80: 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
5e90: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
5ea0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69     internal SQLi
5eb0: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
5ec0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
5ed0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5ee0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
5ef0: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  x_constraint con
5f00: 73 74 72 61 69 6e 74 0d 0a 20 20 20 20 20 20 20  straint..       
5f10: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
5f20: 20 20 20 20 3a 20 74 68 69 73 28 63 6f 6e 73 74      : this(const
5f30: 72 61 69 6e 74 2e 69 43 6f 6c 75 6d 6e 2c 20 63  raint.iColumn, c
5f40: 6f 6e 73 74 72 61 69 6e 74 2e 6f 70 2c 20 63 6f  onstraint.op, co
5f50: 6e 73 74 72 61 69 6e 74 2e 75 73 61 62 6c 65 2c  nstraint.usable,
5f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f70: 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e       constraint.
5f80: 69 54 65 72 6d 4f 66 66 73 65 74 29 0d 0a 20 20  iTermOffset)..  
5f90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5fa0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
5fb0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
5fc0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5fd0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
5fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6020: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6030: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
6040: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
6050: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
6060: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
6070: 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
6080: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
6090: 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20  class using the 
60a0: 73 70 65 63 69 66 69 65 64 20 66 69 65 6c 64 0d  specified field.
60b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c  .        /// val
60c0: 75 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ues...        //
60d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
60e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
60f0: 20 6e 61 6d 65 3d 22 69 43 6f 6c 75 6d 6e 22 3e   name="iColumn">
6100: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
6110: 6c 75 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68 61 6e  lumn on left-han
6120: 64 20 73 69 64 65 20 6f 66 20 63 6f 6e 73 74 72  d side of constr
6130: 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  aint...        /
6140: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
6150: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
6160: 6e 61 6d 65 3d 22 6f 70 22 3e 0d 0a 20 20 20 20  name="op">..    
6170: 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 61 69      /// Constrai
6180: 6e 74 20 6f 70 65 72 61 74 6f 72 20 28 3c 73 65  nt operator (<se
6190: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
61a0: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 22  dexConstraintOp"
61b0: 20 2f 3e 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f   />)...        /
61c0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
61d0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
61e0: 6e 61 6d 65 3d 22 75 73 61 62 6c 65 22 3e 0d 0a  name="usable">..
61f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65          /// True
6200: 20 69 66 20 74 68 69 73 20 63 6f 6e 73 74 72 61   if this constra
6210: 69 6e 74 20 69 73 20 75 73 61 62 6c 65 2e 0d 0a  int is usable...
6220: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
6230: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
6240: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
6250: 54 65 72 6d 4f 66 66 73 65 74 22 3e 0d 0a 20 20  TermOffset">..  
6260: 20 20 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69        /// Used i
6270: 6e 74 65 72 6e 61 6c 6c 79 20 2d 20 3c 73 65 65  nternally - <see
6280: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
6290: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74  nagedModule.Best
62a0: 49 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20  Index" />..     
62b0: 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 69 67     /// should ig
62c0: 6e 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  nore...        /
62d0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
62e0: 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
62f0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
6300: 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
6310: 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 2c 0d 0a 20   int iColumn,.. 
6320: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
6330: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
6340: 4f 70 20 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20  Op op,..        
6350: 20 20 20 20 62 79 74 65 20 75 73 61 62 6c 65 2c      byte usable,
6360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
6370: 74 20 69 54 65 72 6d 4f 66 66 73 65 74 0d 0a 20  t iTermOffset.. 
6380: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
6390: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
63a0: 20 20 20 20 20 74 68 69 73 2e 69 43 6f 6c 75 6d       this.iColum
63b0: 6e 20 3d 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 20 20  n = iColumn;..  
63c0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f            this.o
63d0: 70 20 3d 20 6f 70 3b 0d 0a 20 20 20 20 20 20 20  p = op;..       
63e0: 20 20 20 20 20 74 68 69 73 2e 75 73 61 62 6c 65       this.usable
63f0: 20 3d 20 75 73 61 62 6c 65 3b 0d 0a 20 20 20 20   = usable;..    
6400: 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 54 65          this.iTe
6410: 72 6d 4f 66 66 73 65 74 20 3d 20 69 54 65 72 6d  rmOffset = iTerm
6420: 4f 66 66 73 65 74 3b 0d 0a 20 20 20 20 20 20 20  Offset;..       
6430: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
6440: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
6450: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
64a0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
64b0: 69 63 20 46 69 65 6c 64 73 0d 0a 20 20 20 20 20  ic Fields..     
64c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
64d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
64e0: 6c 75 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68 61 6e  lumn on left-han
64f0: 64 20 73 69 64 65 20 6f 66 20 63 6f 6e 73 74 72  d side of constr
6500: 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  aint...        /
6510: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6520: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e         public in
6530: 74 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20  t iColumn;....  
6540: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6560: 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
6590: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
65a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
65b0: 2f 2f 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70  // Constraint op
65c0: 65 72 61 74 6f 72 20 28 3c 73 65 65 20 63 72 65  erator (<see cre
65d0: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  f="SQLiteIndexCo
65e0: 6e 73 74 72 61 69 6e 74 4f 70 22 20 2f 3e 29 2e  nstraintOp" />).
65f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
6600: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
6610: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49    public SQLiteI
6620: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70  ndexConstraintOp
6630: 20 6f 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   op;....        
6640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6680: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6690: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
66a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75  .        /// Tru
66b0: 65 20 69 66 20 74 68 69 73 20 63 6f 6e 73 74 72  e if this constr
66c0: 61 69 6e 74 20 69 73 20 75 73 61 62 6c 65 2e 0d  aint is usable..
66d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
66e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
66f0: 20 70 75 62 6c 69 63 20 62 79 74 65 20 75 73 61   public byte usa
6700: 62 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ble;....        
6710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6750: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6760: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6770: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 73 65  .        /// Use
6780: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2d 20 3c  d internally - <
6790: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
67a0: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42  eManagedModule.B
67b0: 65 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a 20 20  estIndex" />..  
67c0: 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64        /// should
67d0: 20 69 67 6e 6f 72 65 2e 0d 0a 20 20 20 20 20 20   ignore...      
67e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
67f0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
6800: 20 69 6e 74 20 69 54 65 72 6d 4f 66 66 73 65 74   int iTermOffset
6810: 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
6820: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
6830: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6840: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6890: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
68a0: 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42  QLiteIndexOrderB
68b0: 79 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a  y Helper Class..
68c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
68d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
68e0: 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
68f0: 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   the native sqli
6900: 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62  te3_index_orderb
6910: 79 20 73 74 72 75 63 74 75 72 65 20 66 72 6f 6d  y structure from
6920: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 53 51  ..    /// the SQ
6930: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
6940: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  y...    /// </su
6950: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
6960: 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  ic sealed class 
6970: 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72  SQLiteIndexOrder
6980: 42 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  By..    {..     
6990: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72     #region Inter
69a0: 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  nal Constructors
69b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
69c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
69d0: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
69e0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
69f0: 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20  his class using 
6a00: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61  the specified na
6a10: 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tive..        //
6a20: 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  / sqlite3_index_
6a30: 6f 72 64 65 72 62 79 20 73 74 72 75 63 74 75 72  orderby structur
6a40: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
6a50: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6a60: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6a70: 61 6d 65 3d 22 6f 72 64 65 72 42 79 22 3e 0d 0a  ame="orderBy">..
6a80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
6a90: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
6aa0: 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 73 74 72  ndex_orderby str
6ab0: 75 63 74 75 72 65 20 74 6f 20 75 73 65 2e 0d 0a  ucture to use...
6ac0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
6ad0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  ram>..        in
6ae0: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64  ternal SQLiteInd
6af0: 65 78 4f 72 64 65 72 42 79 28 0d 0a 20 20 20 20  exOrderBy(..    
6b00: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
6b10: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6b20: 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62  te3_index_orderb
6b30: 79 20 6f 72 64 65 72 42 79 0d 0a 20 20 20 20 20  y orderBy..     
6b40: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
6b50: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6f 72 64        : this(ord
6b60: 65 72 42 79 2e 69 43 6f 6c 75 6d 6e 2c 20 6f 72  erBy.iColumn, or
6b70: 64 65 72 42 79 2e 64 65 73 63 29 0d 0a 20 20 20  derBy.desc)..   
6b80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6b90: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
6ba0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
6bb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
6bc0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
6bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c10: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
6c20: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
6c30: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
6c40: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
6c50: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6c60: 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e  Constructs an in
6c70: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
6c80: 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73  lass using the s
6c90: 70 65 63 69 66 69 65 64 20 66 69 65 6c 64 0d 0a  pecified field..
6ca0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75          /// valu
6cb0: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  es...        ///
6cc0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
6cd0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
6ce0: 6e 61 6d 65 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d  name="iColumn">.
6cf0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c  .        /// Col
6d00: 75 6d 6e 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20  umn number...   
6d10: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
6d20: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
6d30: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 63  param name="desc
6d40: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
6d50: 54 72 75 65 20 66 6f 72 20 44 45 53 43 2e 20 20  True for DESC.  
6d60: 46 61 6c 73 65 20 66 6f 72 20 41 53 43 2e 0d 0a  False for ASC...
6d70: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
6d80: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ram>..        pr
6d90: 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65  ivate SQLiteInde
6da0: 78 4f 72 64 65 72 42 79 28 0d 0a 20 20 20 20 20  xOrderBy(..     
6db0: 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 75         int iColu
6dc0: 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn,..           
6dd0: 20 62 79 74 65 20 64 65 73 63 0d 0a 20 20 20 20   byte desc..    
6de0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
6df0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6e00: 20 20 74 68 69 73 2e 69 43 6f 6c 75 6d 6e 20 3d    this.iColumn =
6e10: 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20 20   iColumn;..     
6e20: 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 73 63         this.desc
6e30: 20 3d 20 64 65 73 63 3b 0d 0a 20 20 20 20 20 20   = desc;..      
6e40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
6e50: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6e60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
6e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6eb0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
6ec0: 6c 69 63 20 46 69 65 6c 64 73 0d 0a 20 20 20 20  lic Fields..    
6ed0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
6ee0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
6ef0: 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 2e 0d 0a 20  olumn number... 
6f00: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
6f10: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
6f20: 75 62 6c 69 63 20 69 6e 74 20 69 43 6f 6c 75 6d  ublic int iColum
6f30: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n;....        //
6f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f80: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6f90: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6fa0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20         /// True 
6fb0: 66 6f 72 20 44 45 53 43 2e 20 20 46 61 6c 73 65  for DESC.  False
6fc0: 20 66 6f 72 20 41 53 43 2e 0d 0a 20 20 20 20 20   for ASC...     
6fd0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
6fe0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
6ff0: 63 20 62 79 74 65 20 64 65 73 63 3b 0d 0a 20 20  c byte desc;..  
7000: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7010: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
7020: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
7030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7080: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
7090: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
70a0: 73 61 67 65 20 48 65 6c 70 65 72 20 43 6c 61 73  sage Helper Clas
70b0: 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  s..    /// <summ
70c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
70d0: 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65  is class represe
70e0: 6e 74 73 20 74 68 65 20 6e 61 74 69 76 65 20 73  nts the native s
70f0: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
7100: 73 74 72 61 69 6e 74 5f 75 73 61 67 65 0d 0a 20  straint_usage.. 
7110: 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65     /// structure
7120: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65   from the SQLite
7130: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
7140: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7150: 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  y>..    public s
7160: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
7170: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
7180: 74 55 73 61 67 65 0d 0a 20 20 20 20 7b 0d 0a 20  tUsage..    {.. 
7190: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
71a0: 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63  nternal Construc
71b0: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tors..        //
71c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
71d0: 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75       /// Constru
71e0: 63 74 73 20 61 20 64 65 66 61 75 6c 74 20 69 6e  cts a default in
71f0: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
7200: 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lass...        /
7210: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7220: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
7230: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
7240: 72 61 69 6e 74 55 73 61 67 65 28 29 0d 0a 20 20  raintUsage()..  
7250: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7260: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
7270: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
7280: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
7290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
72e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
72f0: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
7300: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
7310: 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e   this class usin
7320: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
7330: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
7340: 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  /// sqlite3_inde
7350: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61  x_constraint_usa
7360: 67 65 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ge structure... 
7370: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
7380: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
7390: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
73a0: 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22  constraintUsage"
73b0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
73c0: 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
73d0: 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69  3_index_constrai
73e0: 6e 74 5f 75 73 61 67 65 20 73 74 72 75 63 74 75  nt_usage structu
73f0: 72 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20  re to use...    
7400: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
7410: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
7420: 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  al SQLiteIndexCo
7430: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 0d 0a  nstraintUsage(..
7440: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
7450: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7460: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
7470: 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20 63  nstraint_usage c
7480: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 0d 0a  onstraintUsage..
7490: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
74a0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
74b0: 73 28 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  s(constraintUsag
74c0: 65 2e 61 72 67 76 49 6e 64 65 78 2c 20 63 6f 6e  e.argvIndex, con
74d0: 73 74 72 61 69 6e 74 55 73 61 67 65 2e 6f 6d 69  straintUsage.omi
74e0: 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t)..        {.. 
74f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
7500: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
7510: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
7520: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
7530: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7580: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
7590: 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f  ivate Constructo
75a0: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
75b0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
75c0: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
75d0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
75e0: 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e   this class usin
75f0: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
7600: 66 69 65 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f  field..        /
7610: 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20  // values...    
7620: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7630: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
7640: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
7650: 76 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20  vIndex">..      
7660: 20 20 2f 2f 2f 20 49 66 20 67 72 65 61 74 65 72    /// If greater
7670: 20 74 68 61 6e 20 30 2c 20 63 6f 6e 73 74 72 61   than 0, constra
7680: 69 6e 74 20 69 73 20 70 61 72 74 20 6f 66 20 61  int is part of a
7690: 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72 2e 0d  rgv to xFilter..
76a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
76b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
76c0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
76d0: 6f 6d 69 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  omit">..        
76e0: 2f 2f 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20  /// Do not code 
76f0: 61 20 74 65 73 74 20 66 6f 72 20 74 68 69 73 20  a test for this 
7700: 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20  constraint...   
7710: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
7720: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
7730: 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  te SQLiteIndexCo
7740: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 0d 0a  nstraintUsage(..
7750: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
7760: 61 72 67 76 49 6e 64 65 78 2c 0d 0a 20 20 20 20  argvIndex,..    
7770: 20 20 20 20 20 20 20 20 62 79 74 65 20 6f 6d 69          byte omi
7780: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
7790: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
77a0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 72           this.ar
77b0: 67 76 49 6e 64 65 78 20 3d 20 61 72 67 76 49 6e  gvIndex = argvIn
77c0: 64 65 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  dex;..          
77d0: 20 20 74 68 69 73 2e 6f 6d 69 74 20 3d 20 6f 6d    this.omit = om
77e0: 69 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  it;..        }..
77f0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
7800: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
7810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7850: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7860: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
7870: 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20  Fields..        
7880: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
7890: 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 67 72         /// If gr
78a0: 65 61 74 65 72 20 74 68 61 6e 20 30 2c 20 63 6f  eater than 0, co
78b0: 6e 73 74 72 61 69 6e 74 20 69 73 20 70 61 72 74  nstraint is part
78c0: 20 6f 66 20 61 72 67 76 20 74 6f 20 78 46 69 6c   of argv to xFil
78d0: 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ter...        //
78e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
78f0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74        public int
7900: 20 61 72 67 76 49 6e 64 65 78 3b 0d 0a 0d 0a 20   argvIndex;.... 
7910: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7960: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
7970: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7980: 20 2f 2f 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65   /// Do not code
7990: 20 61 20 74 65 73 74 20 66 6f 72 20 74 68 69 73   a test for this
79a0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20   constraint...  
79b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
79c0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
79d0: 62 6c 69 63 20 62 79 74 65 20 6f 6d 69 74 3b 0d  blic byte omit;.
79e0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
79f0: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
7a00: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
7a10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7a60: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
7a70: 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20 48  iteIndexInputs H
7a80: 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20  elper Class..   
7a90: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
7aa0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
7ab0: 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  ss represents th
7ac0: 65 20 76 61 72 69 6f 75 73 20 69 6e 70 75 74 73  e various inputs
7ad0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
7ae0: 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20   SQLite core..  
7af0: 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 20 74 6f    /// library to
7b00: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
7b10: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
7b20: 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20  dule.BestIndex" 
7b30: 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
7b40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7b50: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
7b60: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e  d class SQLiteIn
7b70: 64 65 78 49 6e 70 75 74 73 0d 0a 20 20 20 20 7b  dexInputs..    {
7b80: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
7b90: 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74  n Internal Const
7ba0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
7bb0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
7bc0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
7bd0: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
7be0: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
7bf0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7c00: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7c10: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7c20: 6d 65 3d 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22  me="nConstraint"
7c30: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
7c40: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65  he number of <se
7c50: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
7c60: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f  dexConstraint" /
7c70: 3e 20 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a  > instances to..
7c80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d          /// pre-
7c90: 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20 66  allocate space f
7ca0: 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  or...        ///
7cb0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
7cc0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7cd0: 6d 65 3d 22 6e 4f 72 64 65 72 42 79 22 3e 0d 0a  me="nOrderBy">..
7ce0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
7cf0: 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20 63  number of <see c
7d00: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
7d10: 4f 72 64 65 72 42 79 22 20 2f 3e 20 69 6e 73 74  OrderBy" /> inst
7d20: 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20 20 20 20  ances to..      
7d30: 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61    /// pre-alloca
7d40: 74 65 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20  te space for... 
7d50: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
7d60: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  am>..        int
7d70: 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65  ernal SQLiteInde
7d80: 78 49 6e 70 75 74 73 28 69 6e 74 20 6e 43 6f 6e  xInputs(int nCon
7d90: 73 74 72 61 69 6e 74 2c 20 69 6e 74 20 6e 4f 72  straint, int nOr
7da0: 64 65 72 42 79 29 0d 0a 20 20 20 20 20 20 20 20  derBy)..        
7db0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
7dc0: 6f 6e 73 74 72 61 69 6e 74 73 20 3d 20 6e 65 77  onstraints = new
7dd0: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
7de0: 74 72 61 69 6e 74 5b 6e 43 6f 6e 73 74 72 61 69  traint[nConstrai
7df0: 6e 74 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt];..          
7e00: 20 20 6f 72 64 65 72 42 79 73 20 3d 20 6e 65 77    orderBys = new
7e10: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65   SQLiteIndexOrde
7e20: 72 42 79 5b 6e 4f 72 64 65 72 42 79 5d 3b 0d 0a  rBy[nOrderBy];..
7e30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7e40: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
7e50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
7e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ea0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
7eb0: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
7ec0: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70  rties..        p
7ed0: 72 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64  rivate SQLiteInd
7ee0: 65 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 63  exConstraint[] c
7ef0: 6f 6e 73 74 72 61 69 6e 74 73 3b 0d 0a 20 20 20  onstraints;..   
7f00: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
7f10: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
7f20: 41 6e 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65  An array of <see
7f30: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
7f40: 65 78 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e  exConstraint" />
7f50: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
7f60: 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s,..        /// 
7f70: 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20  each containing 
7f80: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70  information supp
7f90: 6c 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 69  lied by the SQLi
7fa0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
7fb0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
7fc0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
7fd0: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49    public SQLiteI
7fe0: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d  ndexConstraint[]
7ff0: 20 43 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20   Constraints..  
8000: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8010: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
8020: 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 3b 20 7d  n constraints; }
8030: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8040: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8090: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
80a0: 65 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  e SQLiteIndexOrd
80b0: 65 72 42 79 5b 5d 20 6f 72 64 65 72 42 79 73 3b  erBy[] orderBys;
80c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
80d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
80e0: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
80f0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
8100: 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 22 20  teIndexOrderBy" 
8110: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
8120: 63 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ces,..        //
8130: 2f 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e  / each containin
8140: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75  g information su
8150: 70 70 6c 69 65 64 20 62 79 20 74 68 65 20 53 51  pplied by the SQ
8160: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
8170: 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
8180: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8190: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
81a0: 65 49 6e 64 65 78 4f 72 64 65 72 42 79 5b 5d 20  eIndexOrderBy[] 
81b0: 4f 72 64 65 72 42 79 73 0d 0a 20 20 20 20 20 20  OrderBys..      
81c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
81d0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6f 72   get { return or
81e0: 64 65 72 42 79 73 3b 20 7d 0d 0a 20 20 20 20 20  derBys; }..     
81f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
8200: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d  ndregion..    }.
8210: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
8220: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
8230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8270: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
8280: 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74  n SQLiteIndexOut
8290: 70 75 74 73 20 48 65 6c 70 65 72 20 43 6c 61 73  puts Helper Clas
82a0: 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  s..    /// <summ
82b0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
82c0: 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65  is class represe
82d0: 6e 74 73 20 74 68 65 20 76 61 72 69 6f 75 73 20  nts the various 
82e0: 6f 75 74 70 75 74 73 20 70 72 6f 76 69 64 65 64  outputs provided
82f0: 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63   to the SQLite c
8300: 6f 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62  ore..    /// lib
8310: 72 61 72 79 20 62 79 20 74 68 65 20 3c 73 65 65  rary by the <see
8320: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
8330: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74  nagedModule.Best
8340: 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
8350: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
8360: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
8370: 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  c sealed class S
8380: 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74  QLiteIndexOutput
8390: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
83a0: 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e    #region Intern
83b0: 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  al Constructors.
83c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
83d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
83e0: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
83f0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
8400: 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  is class...     
8410: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8420: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
8430: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e  param name="nCon
8440: 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20  straint">..     
8450: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
8460: 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  r of <see cref="
8470: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
8480: 72 61 69 6e 74 55 73 61 67 65 22 20 2f 3e 20 69  raintUsage" /> i
8490: 6e 73 74 61 6e 63 65 73 0d 0a 20 20 20 20 20 20  nstances..      
84a0: 20 20 2f 2f 2f 20 74 6f 20 70 72 65 2d 61 6c 6c    /// to pre-all
84b0: 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e  ocate space for.
84c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
84d0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
84e0: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49  internal SQLiteI
84f0: 6e 64 65 78 4f 75 74 70 75 74 73 28 69 6e 74 20  ndexOutputs(int 
8500: 6e 43 6f 6e 73 74 72 61 69 6e 74 29 0d 0a 20 20  nConstraint)..  
8510: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8520: 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 55       constraintU
8530: 73 61 67 65 73 20 3d 20 6e 65 77 20 53 51 4c 69  sages = new SQLi
8540: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
8550: 74 55 73 61 67 65 5b 6e 43 6f 6e 73 74 72 61 69  tUsage[nConstrai
8560: 6e 74 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt];....        
8570: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
8580: 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 43      // BUGFIX: C
8590: 72 65 61 74 65 20 74 68 65 20 5b 65 6d 70 74 79  reate the [empty
85a0: 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 75 73 61  ] constraint usa
85b0: 67 65 73 20 6e 6f 77 20 73 6f 20 74 68 65 79 20  ges now so they 
85c0: 63 61 6e 20 62 65 0d 0a 20 20 20 20 20 20 20 20  can be..        
85d0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 75      //         u
85e0: 73 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74  sed by the xBest
85f0: 49 6e 64 65 78 20 63 61 6c 6c 62 61 63 6b 2e 0d  Index callback..
8600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
8610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
8620: 20 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e   (int iConstrain
8630: 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61 69  t = 0; iConstrai
8640: 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74  nt < nConstraint
8650: 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29  ; iConstraint++)
8660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8670: 20 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67    constraintUsag
8680: 65 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20  es[iConstraint] 
8690: 3d 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65  = new SQLiteInde
86a0: 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  xConstraintUsage
86b0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ();..        }..
86c0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
86d0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
86e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8720: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8730: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8740: 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 65 74 65          /// Dete
8750: 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 6e 61  rmines if the na
8760: 74 69 76 65 20 65 73 74 69 6d 61 74 65 64 52 6f  tive estimatedRo
8770: 77 73 20 66 69 65 6c 64 20 63 61 6e 20 62 65 20  ws field can be 
8780: 75 73 65 64 2c 20 62 61 73 65 64 20 6f 6e 0d 0a  used, based on..
8790: 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
87a0: 61 76 61 69 6c 61 62 6c 65 20 76 65 72 73 69 6f  available versio
87b0: 6e 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20  n of the SQLite 
87c0: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
87d0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
87e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
87f0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
8800: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
8810: 72 6f 20 69 66 20 74 68 65 20 3c 73 65 65 20 63  ro if the <see c
8820: 72 65 66 3d 22 45 73 74 69 6d 61 74 65 64 52 6f  ref="EstimatedRo
8830: 77 73 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20  ws" /> property 
8840: 69 73 20 73 75 70 70 6f 72 74 65 64 0d 0a 20 20  is supported..  
8850: 20 20 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 65        /// by the
8860: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
8870: 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
8880: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
8890: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
88a0: 6f 6c 20 43 61 6e 55 73 65 45 73 74 69 6d 61 74  ol CanUseEstimat
88b0: 65 64 52 6f 77 73 28 29 0d 0a 20 20 20 20 20 20  edRows()..      
88c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
88d0: 20 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76   if (UnsafeNativ
88e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
88f0: 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62  _libversion_numb
8900: 65 72 28 29 20 3e 3d 20 33 30 30 38 30 30 32 29  er() >= 3008002)
8910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8920: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
8930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8940: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
8950: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8960: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
89b0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
89c0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
89d0: 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68  Determines if th
89e0: 65 20 6e 61 74 69 76 65 20 66 6c 61 67 73 20 66  e native flags f
89f0: 69 65 6c 64 20 63 61 6e 20 62 65 20 75 73 65 64  ield can be used
8a00: 2c 20 62 61 73 65 64 20 6f 6e 20 74 68 65 0d 0a  , based on the..
8a10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 76 61 69          /// avai
8a20: 6c 61 62 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66  lable version of
8a30: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
8a40: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
8a50: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8a60: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
8a70: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
8a80: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
8a90: 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  f the <see cref=
8aa0: 22 46 6c 61 67 73 22 20 2f 3e 20 70 72 6f 70 65  "Flags" /> prope
8ab0: 72 74 79 20 69 73 20 73 75 70 70 6f 72 74 65 64  rty is supported
8ac0: 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20   by the..       
8ad0: 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72 65   /// SQLite core
8ae0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
8af0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
8b00: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
8b10: 63 20 62 6f 6f 6c 20 43 61 6e 55 73 65 46 6c 61  c bool CanUseFla
8b20: 67 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  gs()..        {.
8b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
8b40: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
8b50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
8b60: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
8b70: 20 3e 3d 20 33 30 30 38 30 31 32 29 0d 0a 20 20   >= 3008012)..  
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
8b90: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  turn true;....  
8ba0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8bb0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
8bc0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
8bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8c20: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
8c30: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
8c40: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
8c50: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
8c60: 74 55 73 61 67 65 5b 5d 20 63 6f 6e 73 74 72 61  tUsage[] constra
8c70: 69 6e 74 55 73 61 67 65 73 3b 0d 0a 20 20 20 20  intUsages;..    
8c80: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8c90: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
8ca0: 6e 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20  n array of <see 
8cb0: 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
8cc0: 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  xConstraintUsage
8cd0: 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20  " /> object..   
8ce0: 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63       /// instanc
8cf0: 65 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e  es, each contain
8d00: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
8d10: 74 6f 20 62 65 20 73 75 70 70 6c 69 65 64 20 74  to be supplied t
8d20: 6f 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20  o the SQLite..  
8d30: 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72 65 20 6c        /// core l
8d40: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
8d50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8d60: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
8d70: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
8d80: 72 61 69 6e 74 55 73 61 67 65 5b 5d 20 43 6f 6e  raintUsage[] Con
8d90: 73 74 72 61 69 6e 74 55 73 61 67 65 73 0d 0a 20  straintUsages.. 
8da0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8db0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
8dc0: 72 6e 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61  rn constraintUsa
8dd0: 67 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ges; }..        
8de0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
8df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e30: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8e40: 70 72 69 76 61 74 65 20 69 6e 74 20 69 6e 64 65  private int inde
8e50: 78 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20  xNumber;..      
8e60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8e70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d  .        /// Num
8e80: 62 65 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ber used to help
8e90: 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
8ea0: 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54  lected index.  T
8eb0: 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a  his value will..
8ec0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74 65          /// late
8ed0: 72 20 62 65 20 70 72 6f 76 69 64 65 64 20 74 6f  r be provided to
8ee0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
8ef0: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
8f00: 64 75 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e 0d  dule.Filter" />.
8f10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74  .        /// met
8f20: 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
8f30: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8f40: 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74        public int
8f50: 20 49 6e 64 65 78 4e 75 6d 62 65 72 0d 0a 20 20   IndexNumber..  
8f60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8f70: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
8f80: 6e 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b 20 7d  n indexNumber; }
8f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
8fa0: 74 20 7b 20 69 6e 64 65 78 4e 75 6d 62 65 72 20  t { indexNumber 
8fb0: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
8fc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8fd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9010: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9020: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
9030: 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d  ng indexString;.
9040: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
9050: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
9060: 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20  /// String used 
9070: 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79  to help identify
9080: 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e   the selected in
9090: 64 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65  dex.  This value
90a0: 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   will..        /
90b0: 2f 2f 20 6c 61 74 65 72 20 62 65 20 70 72 6f 76  // later be prov
90c0: 69 64 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65  ided to the <see
90d0: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
90e0: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74  nagedModule.Filt
90f0: 65 72 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  er" />..        
9100: 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  /// method...   
9110: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
9120: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
9130: 6c 69 63 20 73 74 72 69 6e 67 20 49 6e 64 65 78  lic string Index
9140: 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  String..        
9150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
9160: 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 64 65  et { return inde
9170: 78 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20  xString; }..    
9180: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e          set { in
9190: 64 65 78 53 74 72 69 6e 67 20 3d 20 76 61 6c 75  dexString = valu
91a0: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e; }..        }.
91b0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
91c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91e0: 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
9210: 69 76 61 74 65 20 69 6e 74 20 6e 65 65 64 54 6f  ivate int needTo
9220: 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 3b  FreeIndexString;
9230: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
9240: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
9250: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
9260: 20 74 68 65 20 69 6e 64 65 78 20 73 74 72 69 6e   the index strin
9270: 67 20 6d 75 73 74 20 62 65 20 66 72 65 65 64 20  g must be freed 
9280: 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  by the SQLite co
9290: 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  re..        /// 
92a0: 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20  library...      
92b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
92c0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
92d0: 20 69 6e 74 20 4e 65 65 64 54 6f 46 72 65 65 49   int NeedToFreeI
92e0: 6e 64 65 78 53 74 72 69 6e 67 0d 0a 20 20 20 20  ndexString..    
92f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9300: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
9310: 6e 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53  needToFreeIndexS
9320: 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20  tring; }..      
9330: 20 20 20 20 20 20 73 65 74 20 7b 20 6e 65 65 64        set { need
9340: 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e  ToFreeIndexStrin
9350: 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  g = value; }..  
9360: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9370: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20  //////////....  
93c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 69 6e        private in
93d0: 74 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65  t orderByConsume
93e0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d;..        /// 
93f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
9400: 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 6f     /// True if o
9410: 75 74 70 75 74 20 69 73 20 61 6c 72 65 61 64 79  utput is already
9420: 20 6f 72 64 65 72 65 64 2e 0d 0a 20 20 20 20 20   ordered...     
9430: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9440: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
9450: 63 20 69 6e 74 20 4f 72 64 65 72 42 79 43 6f 6e  c int OrderByCon
9460: 73 75 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 7b  sumed..        {
9470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
9480: 74 20 7b 20 72 65 74 75 72 6e 20 6f 72 64 65 72  t { return order
9490: 42 79 43 6f 6e 73 75 6d 65 64 3b 20 7d 0d 0a 20  ByConsumed; }.. 
94a0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
94b0: 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64   orderByConsumed
94c0: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
94d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
94e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9530: 20 20 20 20 20 70 72 69 76 61 74 65 20 64 6f 75       private dou
9540: 62 6c 65 3f 20 65 73 74 69 6d 61 74 65 64 43 6f  ble? estimatedCo
9550: 73 74 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  st;..        ///
9560: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9570: 20 20 20 20 2f 2f 2f 20 45 73 74 69 6d 61 74 65      /// Estimate
9580: 64 20 63 6f 73 74 20 6f 66 20 75 73 69 6e 67 20  d cost of using 
9590: 74 68 69 73 20 69 6e 64 65 78 2e 20 20 55 73 69  this index.  Usi
95a0: 6e 67 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20  ng a null value 
95b0: 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  here..        //
95c0: 2f 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  / indicates that
95d0: 20 61 20 64 65 66 61 75 6c 74 20 65 73 74 69 6d   a default estim
95e0: 61 74 65 64 20 63 6f 73 74 20 76 61 6c 75 65 20  ated cost value 
95f0: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 2e 0d  should be used..
9600: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
9610: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
9620: 20 70 75 62 6c 69 63 20 64 6f 75 62 6c 65 3f 20   public double? 
9630: 45 73 74 69 6d 61 74 65 64 43 6f 73 74 0d 0a 20  EstimatedCost.. 
9640: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9650: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
9660: 72 6e 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74  rn estimatedCost
9670: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
9680: 20 73 65 74 20 7b 20 65 73 74 69 6d 61 74 65 64   set { estimated
9690: 43 6f 73 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Cost = value; }.
96a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
96b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
96c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9700: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
9710: 20 6c 6f 6e 67 3f 20 65 73 74 69 6d 61 74 65 64   long? estimated
9720: 52 6f 77 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f  Rows;..        /
9730: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9740: 20 20 20 20 20 20 2f 2f 2f 20 45 73 74 69 6d 61        /// Estima
9750: 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  ted number of ro
9760: 77 73 20 72 65 74 75 72 6e 65 64 2e 20 20 55 73  ws returned.  Us
9770: 69 6e 67 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65  ing a null value
9780: 20 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 2f   here..        /
9790: 2f 2f 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  // indicates tha
97a0: 74 20 61 20 64 65 66 61 75 6c 74 20 65 73 74 69  t a default esti
97b0: 6d 61 74 65 64 20 72 6f 77 73 20 76 61 6c 75 65  mated rows value
97c0: 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 2e   should be used.
97d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
97e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
97f0: 20 20 70 75 62 6c 69 63 20 6c 6f 6e 67 3f 20 45    public long? E
9800: 73 74 69 6d 61 74 65 64 52 6f 77 73 0d 0a 20 20  stimatedRows..  
9810: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9820: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
9830: 6e 20 65 73 74 69 6d 61 74 65 64 52 6f 77 73 3b  n estimatedRows;
9840: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9850: 73 65 74 20 7b 20 65 73 74 69 6d 61 74 65 64 52  set { estimatedR
9860: 6f 77 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ows = value; }..
9870: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9880: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
98d0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
98e0: 53 51 4c 69 74 65 49 6e 64 65 78 46 6c 61 67 73  SQLiteIndexFlags
98f0: 3f 20 69 64 78 46 6c 61 67 73 3b 0d 0a 20 20 20  ? idxFlags;..   
9900: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
9910: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
9920: 54 68 65 20 66 6c 61 67 73 20 74 68 61 74 20 73  The flags that s
9930: 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 77 69  hould be used wi
9940: 74 68 20 74 68 69 73 20 69 6e 64 65 78 2e 0d 0a  th this index...
9950: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
9960: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
9970: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e 64  public SQLiteInd
9980: 65 78 46 6c 61 67 73 3f 20 49 64 78 46 6c 61 67  exFlags? IdxFlag
9990: 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  s..        {..  
99a0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
99b0: 72 65 74 75 72 6e 20 69 64 78 46 6c 61 67 73 3b  return idxFlags;
99c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
99d0: 73 65 74 20 7b 20 69 64 78 46 6c 61 67 73 20 3d  set { idxFlags =
99e0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
99f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
9a00: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d  ndregion..    }.
9a10: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
9a20: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
9a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a70: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
9a80: 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 20 48 65  n SQLiteIndex He
9a90: 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  lper Class..    
9aa0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9ab0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73     /// This clas
9ac0: 73 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  s represents the
9ad0: 20 76 61 72 69 6f 75 73 20 69 6e 70 75 74 73 20   various inputs 
9ae0: 61 6e 64 20 6f 75 74 70 75 74 73 20 75 73 65 64  and outputs used
9af0: 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 2f   with the..    /
9b00: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
9b10: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
9b20: 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e  le.BestIndex" />
9b30: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f   method...    //
9b40: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9b50: 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20    public sealed 
9b60: 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65  class SQLiteInde
9b70: 78 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  x..    {..      
9b80: 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e    #region Intern
9b90: 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  al Constructors.
9ba0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
9bb0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
9bc0: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
9bd0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9be0: 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  is class...     
9bf0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9c00: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
9c10: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e  param name="nCon
9c20: 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20  straint">..     
9c30: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
9c40: 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  r of <see cref="
9c50: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
9c60: 72 61 69 6e 74 22 20 2f 3e 20 28 61 6e 64 0d 0a  raint" /> (and..
9c70: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
9c80: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
9c90: 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  exConstraintUsag
9ca0: 65 22 20 2f 3e 29 20 69 6e 73 74 61 6e 63 65 73  e" />) instances
9cb0: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
9cc0: 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20 73 70   pre-allocate sp
9cd0: 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20 20 20  ace for...      
9ce0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
9cf0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
9d00: 61 6d 20 6e 61 6d 65 3d 22 6e 4f 72 64 65 72 42  am name="nOrderB
9d10: 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  y">..        ///
9d20: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c   The number of <
9d30: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
9d40: 49 6e 64 65 78 4f 72 64 65 72 42 79 22 20 2f 3e  IndexOrderBy" />
9d50: 20 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20   instances to.. 
9d60: 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61         /// pre-a
9d70: 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f  llocate space fo
9d80: 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
9d90: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
9da0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
9db0: 65 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20  eIndex(..       
9dc0: 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72       int nConstr
9dd0: 61 69 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  aint,..         
9de0: 20 20 20 69 6e 74 20 6e 4f 72 64 65 72 42 79 0d     int nOrderBy.
9df0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
9e00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9e10: 20 20 20 20 20 20 20 69 6e 70 75 74 73 20 3d 20         inputs = 
9e20: 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 49  new SQLiteIndexI
9e30: 6e 70 75 74 73 28 6e 43 6f 6e 73 74 72 61 69 6e  nputs(nConstrain
9e40: 74 2c 20 6e 4f 72 64 65 72 42 79 29 3b 0d 0a 20  t, nOrderBy);.. 
9e50: 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75             outpu
9e60: 74 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49  ts = new SQLiteI
9e70: 6e 64 65 78 4f 75 74 70 75 74 73 28 6e 43 6f 6e  ndexOutputs(nCon
9e80: 73 74 72 61 69 6e 74 29 3b 0d 0a 20 20 20 20 20  straint);..     
9e90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
9ea0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
9eb0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9f00: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
9f10: 6e 74 65 72 6e 61 6c 20 4d 61 72 73 68 61 6c 20  nternal Marshal 
9f20: 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
9f30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
9f40: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
9f50: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6e 61  // Converts a na
9f60: 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
9f70: 61 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  a native sqlite3
9f80: 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75  _index_info stru
9f90: 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 2f  cture..        /
9fa0: 2f 2f 20 69 6e 74 6f 20 61 20 6e 65 77 20 3c 73  // into a new <s
9fb0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
9fc0: 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20  ndex" /> object 
9fd0: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
9fe0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9ff0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
a000: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64  param name="pInd
a010: 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ex">..        //
a020: 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
a030: 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69  nter to the nati
a040: 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ve sqlite3_index
a050: 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  _info structure 
a060: 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  to..        /// 
a070: 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20  convert...      
a080: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
a090: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
a0a0: 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e  am name="index">
a0b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
a0c0: 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73  on success, this
a0d0: 20 70 61 72 61 6d 65 74 65 72 20 77 69 6c 6c 20   parameter will 
a0e0: 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63  be modified to c
a0f0: 6f 6e 74 61 69 6e 20 74 68 65 20 6e 65 77 6c 79  ontain the newly
a100: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72  ..        /// cr
a110: 65 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d  eated <see cref=
a120: 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e  "SQLiteIndex" />
a130: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
a140: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
a150: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
a160: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
a170: 20 76 6f 69 64 20 46 72 6f 6d 49 6e 74 50 74 72   void FromIntPtr
a180: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
a190: 6e 74 50 74 72 20 70 49 6e 64 65 78 2c 0d 0a 20  ntPtr pIndex,.. 
a1a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53             ref S
a1b0: 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78  QLiteIndex index
a1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
a1d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
a1e0: 20 20 20 20 20 20 20 20 69 66 20 28 70 49 6e 64          if (pInd
a1f0: 65 78 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ex == IntPtr.Zer
a200: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
a210: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a220: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f             int o
a230: 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  ffset = 0;....  
a240: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 43            int nC
a250: 6f 6e 73 74 72 61 69 6e 74 20 3d 20 53 51 4c 69  onstraint = SQLi
a260: 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  teMarshal.ReadIn
a270: 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  t32(pIndex, offs
a280: 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
a290: 20 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c      offset = SQL
a2a0: 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f  iteMarshal.NextO
a2b0: 66 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20  ffsetOf(offset, 
a2c0: 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20 20  sizeof(int),..  
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
a2e0: 74 50 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20  tPtr.Size);.... 
a2f0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
a300: 72 20 70 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20  r pConstraint = 
a310: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65  SQLiteMarshal.Re
a320: 61 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c  adIntPtr(pIndex,
a330: 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
a340: 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
a350: 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e  = SQLiteMarshal.
a360: 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66  NextOffsetOf(off
a370: 73 65 74 2c 20 49 6e 74 50 74 72 2e 53 69 7a 65  set, IntPtr.Size
a380: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a390: 20 20 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b     sizeof(int));
a3a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a3b0: 69 6e 74 20 6e 4f 72 64 65 72 42 79 20 3d 20 53  int nOrderBy = S
a3c0: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61  QLiteMarshal.Rea
a3d0: 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f  dInt32(pIndex, o
a3e0: 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
a3f0: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20         offset = 
a400: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65  SQLiteMarshal.Ne
a410: 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65  xtOffsetOf(offse
a420: 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d  t, sizeof(int),.
a430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a440: 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 3b 0d 0a   IntPtr.Size);..
a450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
a460: 74 50 74 72 20 70 4f 72 64 65 72 42 79 20 3d 20  tPtr pOrderBy = 
a470: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65  SQLiteMarshal.Re
a480: 61 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c  adIntPtr(pIndex,
a490: 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20   offset);....   
a4a0: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 3d           index =
a4b0: 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
a4c0: 28 6e 43 6f 6e 73 74 72 61 69 6e 74 2c 20 6e 4f  (nConstraint, nO
a4d0: 72 64 65 72 42 79 29 3b 0d 0a 0d 0a 20 20 20 20  rderBy);....    
a4e0: 20 20 20 20 20 20 20 20 54 79 70 65 20 69 6e 64          Type ind
a4f0: 65 78 43 6f 6e 73 74 72 61 69 6e 74 54 79 70 65  exConstraintType
a500: 20 3d 20 74 79 70 65 6f 66 28 0d 0a 20 20 20 20   = typeof(..    
a510: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
a520: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a530: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
a540: 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 0d 0a 20 20  nstraint);....  
a550: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 69            int si
a560: 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54 79  zeOfConstraintTy
a570: 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a  pe = Marshal.Siz
a580: 65 4f 66 28 69 6e 64 65 78 43 6f 6e 73 74 72 61  eOf(indexConstra
a590: 69 6e 74 54 79 70 65 29 3b 0d 0a 0d 0a 20 20 20  intType);....   
a5a0: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
a5b0: 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20  t iConstraint = 
a5c0: 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c  0; iConstraint <
a5d0: 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43   nConstraint; iC
a5e0: 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20  onstraint++)..  
a5f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a600: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
a610: 50 74 72 20 70 4f 66 66 73 65 74 20 3d 20 53 51  Ptr pOffset = SQ
a620: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49 6e 74 50  LiteMarshal.IntP
a630: 74 72 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20  trForOffset(..  
a640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a650: 20 20 70 43 6f 6e 73 74 72 61 69 6e 74 2c 20 69    pConstraint, i
a660: 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a  Constraint * siz
a670: 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54 79 70  eOfConstraintTyp
a680: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
a690: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
a6a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a6b0: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
a6c0: 69 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 20 3d  int constraint =
a6d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a6e0: 20 20 20 20 20 20 28 55 6e 73 61 66 65 4e 61 74        (UnsafeNat
a6f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a700: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
a710: 69 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  int)..          
a720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61                Ma
a730: 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 75 63  rshal.PtrToStruc
a740: 74 75 72 65 28 70 4f 66 66 73 65 74 2c 20 69 6e  ture(pOffset, in
a750: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 54 79 70  dexConstraintTyp
a760: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
a770: 20 20 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70         index.Inp
a780: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 5b  uts.Constraints[
a790: 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20 3d 0d 0a  iConstraint] =..
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a7b0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 49 6e      new SQLiteIn
a7c0: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 63 6f  dexConstraint(co
a7d0: 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 20 20 20 20  nstraint);..    
a7e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a7f0: 20 20 20 20 20 20 20 20 20 54 79 70 65 20 69 6e           Type in
a800: 64 65 78 4f 72 64 65 72 42 79 54 79 70 65 20 3d  dexOrderByType =
a810: 20 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20   typeof(..      
a820: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
a830: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a840: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65  lite3_index_orde
a850: 72 62 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rby);....       
a860: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 4f       int sizeOfO
a870: 72 64 65 72 42 79 54 79 70 65 20 3d 20 4d 61 72  rderByType = Mar
a880: 73 68 61 6c 2e 53 69 7a 65 4f 66 28 69 6e 64 65  shal.SizeOf(inde
a890: 78 4f 72 64 65 72 42 79 54 79 70 65 29 3b 0d 0a  xOrderByType);..
a8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
a8b0: 72 20 28 69 6e 74 20 69 4f 72 64 65 72 42 79 20  r (int iOrderBy 
a8c0: 3d 20 30 3b 20 69 4f 72 64 65 72 42 79 20 3c 20  = 0; iOrderBy < 
a8d0: 6e 4f 72 64 65 72 42 79 3b 20 69 4f 72 64 65 72  nOrderBy; iOrder
a8e0: 42 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  By++)..         
a8f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a900: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4f 66        IntPtr pOf
a910: 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72  fset = SQLiteMar
a920: 73 68 61 6c 2e 49 6e 74 50 74 72 46 6f 72 4f 66  shal.IntPtrForOf
a930: 66 73 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20  fset(..         
a940: 20 20 20 20 20 20 20 20 20 20 20 70 4f 72 64 65             pOrde
a950: 72 42 79 2c 20 69 4f 72 64 65 72 42 79 20 2a 20  rBy, iOrderBy * 
a960: 73 69 7a 65 4f 66 4f 72 64 65 72 42 79 54 79 70  sizeOfOrderByTyp
a970: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
a980: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
a990: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a9a0: 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79  e3_index_orderby
a9b0: 20 6f 72 64 65 72 42 79 20 3d 0d 0a 20 20 20 20   orderBy =..    
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9d0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
a9e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
a9f0: 65 78 5f 6f 72 64 65 72 62 79 29 0d 0a 20 20 20  ex_orderby)..   
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa10: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 50 74 72       Marshal.Ptr
aa20: 54 6f 53 74 72 75 63 74 75 72 65 28 70 4f 66 66  ToStructure(pOff
aa30: 73 65 74 2c 20 69 6e 64 65 78 4f 72 64 65 72 42  set, indexOrderB
aa40: 79 54 79 70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yType);....     
aa50: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
aa60: 2e 49 6e 70 75 74 73 2e 4f 72 64 65 72 42 79 73  .Inputs.OrderBys
aa70: 5b 69 4f 72 64 65 72 42 79 5d 20 3d 0d 0a 20 20  [iOrderBy] =..  
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa90: 20 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65    new SQLiteInde
aaa0: 78 4f 72 64 65 72 42 79 28 6f 72 64 65 72 42 79  xOrderBy(orderBy
aab0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
aac0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
aad0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
aae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ab20: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
ab30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
ab40: 20 20 2f 2f 2f 20 50 6f 70 75 6c 61 74 65 73 20    /// Populates 
ab50: 74 68 65 20 6f 75 74 70 75 74 73 20 6f 66 20 61  the outputs of a
ab60: 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 64 20 6e   pre-allocated n
ab70: 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e  ative sqlite3_in
ab80: 64 65 78 5f 69 6e 66 6f 0d 0a 20 20 20 20 20 20  dex_info..      
ab90: 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20    /// structure 
aba0: 75 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  using an existin
abb0: 67 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  g <see cref="SQL
abc0: 69 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a  iteIndex" /> obj
abd0: 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ect..        ///
abe0: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
abf0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
ac00: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
ac10: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64  <param name="ind
ac20: 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ex">..        //
ac30: 2f 20 54 68 65 20 65 78 69 73 74 69 6e 67 20 3c  / The existing <
ac40: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
ac50: 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74  Index" /> object
ac60: 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69   instance contai
ac70: 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ning..        //
ac80: 2f 20 74 68 65 20 6f 75 74 70 75 74 20 64 61 74  / the output dat
ac90: 61 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  a to use...     
aca0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
acb0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
acc0: 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65 78  ram name="pIndex
acd0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
ace0: 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
acf0: 65 72 20 74 6f 20 74 68 65 20 70 72 65 2d 61 6c  er to the pre-al
ad00: 6c 6f 63 61 74 65 64 20 6e 61 74 69 76 65 20 73  located native s
ad10: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
ad20: 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  o..        /// s
ad30: 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
ad40: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
ad50: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
ad60: 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20 54 6f  l static void To
ad70: 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20  IntPtr(..       
ad80: 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78       SQLiteIndex
ad90: 20 69 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20   index,..       
ada0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 49 6e 64       IntPtr pInd
adb0: 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
adc0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
add0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 69            if ((i
ade0: 6e 64 65 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  ndex == null) ||
adf0: 20 28 69 6e 64 65 78 2e 49 6e 70 75 74 73 20 3d   (index.Inputs =
ae00: 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20  = null) ||..    
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 64              (ind
ae20: 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72  ex.Inputs.Constr
ae30: 61 69 6e 74 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c  aints == null) |
ae40: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
ae50: 20 20 20 28 69 6e 64 65 78 2e 4f 75 74 70 75 74     (index.Output
ae60: 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20  s == null) ||.. 
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
ae80: 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f  index.Outputs.Co
ae90: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 20 3d  nstraintUsages =
aea0: 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
aeb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
aec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
aed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
aee0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
aef0: 66 20 28 70 49 6e 64 65 78 20 3d 3d 20 49 6e 74  f (pIndex == Int
af00: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
af10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
af20: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
af30: 20 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20 30    int offset = 0
af40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
af50: 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74   int nConstraint
af60: 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c   = SQLiteMarshal
af70: 2e 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65  .ReadInt32(pInde
af80: 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20  x, offset);.... 
af90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
afa0: 43 6f 6e 73 74 72 61 69 6e 74 20 21 3d 20 69 6e  Constraint != in
afb0: 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74  dex.Inputs.Const
afc0: 72 61 69 6e 74 73 2e 4c 65 6e 67 74 68 29 0d 0a  raints.Length)..
afd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afe0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
aff0: 20 20 20 20 20 20 20 69 66 20 28 6e 43 6f 6e 73         if (nCons
b000: 74 72 61 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e  traint != index.
b010: 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69  Outputs.Constrai
b020: 6e 74 55 73 61 67 65 73 2e 4c 65 6e 67 74 68 29  ntUsages.Length)
b030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b040: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
b050: 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
b060: 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e  = SQLiteMarshal.
b070: 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66  NextOffsetOf(off
b080: 73 65 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  set, sizeof(int)
b090: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b0a0: 20 20 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 3b     IntPtr.Size);
b0b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b0c0: 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d  offset = SQLiteM
b0d0: 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65  arshal.NextOffse
b0e0: 74 4f 66 28 6f 66 66 73 65 74 2c 20 49 6e 74 50  tOf(offset, IntP
b0f0: 74 72 2e 53 69 7a 65 2c 0d 0a 20 20 20 20 20 20  tr.Size,..      
b100: 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
b110: 28 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  (int));....     
b120: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20         offset = 
b130: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65  SQLiteMarshal.Ne
b140: 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65  xtOffsetOf(offse
b150: 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2c 0d  t, sizeof(int),.
b160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b170: 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 3b 0d 0a   IntPtr.Size);..
b180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
b190: 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72  fset = SQLiteMar
b1a0: 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f  shal.NextOffsetO
b1b0: 66 28 6f 66 66 73 65 74 2c 20 49 6e 74 50 74 72  f(offset, IntPtr
b1c0: 2e 53 69 7a 65 2c 0d 0a 20 20 20 20 20 20 20 20  .Size,..        
b1d0: 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 69          sizeof(i
b1e0: 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt));....       
b1f0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e       IntPtr pCon
b200: 73 74 72 61 69 6e 74 55 73 61 67 65 20 3d 20 53  straintUsage = S
b210: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61  QLiteMarshal.Rea
b220: 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20  dIntPtr(pIndex, 
b230: 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20  offset);....    
b240: 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65          int size
b250: 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  OfConstraintUsag
b260: 65 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e  eType = Marshal.
b270: 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a  SizeOf(typeof(..
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b290: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b2a0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
b2b0: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61  x_constraint_usa
b2c0: 67 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ge));....       
b2d0: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 43       for (int iC
b2e0: 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b 20 69  onstraint = 0; i
b2f0: 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43 6f  Constraint < nCo
b300: 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73 74  nstraint; iConst
b310: 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20 20  raint++)..      
b320: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b330: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
b340: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b350: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
b360: 72 61 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e 73  raint_usage cons
b370: 74 72 61 69 6e 74 55 73 61 67 65 20 3d 0d 0a 20  traintUsage =.. 
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74     new UnsafeNat
b3a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b3b0: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
b3c0: 69 6e 74 5f 75 73 61 67 65 28 0d 0a 20 20 20 20  int_usage(..    
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3e0: 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74      index.Output
b3f0: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  s.ConstraintUsag
b400: 65 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 29  es[iConstraint])
b410: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b420: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 53 74 72       Marshal.Str
b430: 75 63 74 75 72 65 54 6f 50 74 72 28 0d 0a 20 20  uctureToPtr(..  
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b450: 20 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67    constraintUsag
b460: 65 2c 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c  e, SQLiteMarshal
b470: 2e 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74  .IntPtrForOffset
b480: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b490: 20 20 20 20 20 20 20 70 43 6f 6e 73 74 72 61 69         pConstrai
b4a0: 6e 74 55 73 61 67 65 2c 20 69 43 6f 6e 73 74 72  ntUsage, iConstr
b4b0: 61 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e  aint * sizeOfCon
b4c0: 73 74 72 61 69 6e 74 55 73 61 67 65 54 79 70 65  straintUsageType
b4d0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
b4e0: 20 20 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d          false);.
b4f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
b510: 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72  fset = SQLiteMar
b520: 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f  shal.NextOffsetO
b530: 66 28 6f 66 66 73 65 74 2c 20 49 6e 74 50 74 72  f(offset, IntPtr
b540: 2e 53 69 7a 65 2c 0d 0a 20 20 20 20 20 20 20 20  .Size,..        
b550: 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 69          sizeof(i
b560: 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt));....       
b570: 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68       SQLiteMarsh
b580: 61 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 70 49  al.WriteInt32(pI
b590: 6e 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20  ndex, offset,.. 
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b5b0: 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 49 6e 64  ndex.Outputs.Ind
b5c0: 65 78 4e 75 6d 62 65 72 29 3b 0d 0a 0d 0a 20 20  exNumber);....  
b5d0: 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
b5e0: 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c   = SQLiteMarshal
b5f0: 2e 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66  .NextOffsetOf(of
b600: 66 73 65 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74  fset, sizeof(int
b610: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
b620: 20 20 20 20 49 6e 74 50 74 72 2e 53 69 7a 65 29      IntPtr.Size)
b630: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b640: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57   SQLiteMarshal.W
b650: 72 69 74 65 49 6e 74 50 74 72 28 70 49 6e 64 65  riteIntPtr(pInde
b660: 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20  x, offset,..    
b670: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
b680: 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
b690: 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 69 6e  PtrFromString(in
b6a0: 64 65 78 2e 4f 75 74 70 75 74 73 2e 49 6e 64 65  dex.Outputs.Inde
b6b0: 78 53 74 72 69 6e 67 29 29 3b 0d 0a 0d 0a 20 20  xString));....  
b6c0: 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
b6d0: 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c   = SQLiteMarshal
b6e0: 2e 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66  .NextOffsetOf(of
b6f0: 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 53 69 7a  fset, IntPtr.Siz
b700: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
b710: 20 20 20 20 73 69 7a 65 6f 66 28 69 6e 74 29 29      sizeof(int))
b720: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b730: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
b740: 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 6a 75 73   // NOTE: We jus
b750: 74 20 61 6c 6c 6f 63 61 74 65 64 20 74 68 65 20  t allocated the 
b760: 49 6e 64 65 78 53 74 72 69 6e 67 20 66 69 65 6c  IndexString fiel
b770: 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65  d; therefore, we
b780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b790: 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20 73         need to s
b7a0: 65 74 20 74 68 65 20 4e 65 65 64 54 6f 46 72 65  et the NeedToFre
b7b0: 65 49 6e 64 65 78 53 74 72 69 6e 67 20 66 69 65  eIndexString fie
b7c0: 6c 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 0d  ld to non-zero..
b7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
b7e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
b7f0: 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65  iteMarshal.Write
b800: 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66  Int32(pIndex, of
b810: 66 73 65 74 2c 20 31 29 3b 0d 0a 0d 0a 20 20 20  fset, 1);....   
b820: 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
b830: 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e  = SQLiteMarshal.
b840: 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66  NextOffsetOf(off
b850: 73 65 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  set, sizeof(int)
b860: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b870: 20 20 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b     sizeof(int));
b880: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b890: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72  SQLiteMarshal.Wr
b8a0: 69 74 65 49 6e 74 33 32 28 70 49 6e 64 65 78 2c  iteInt32(pIndex,
b8b0: 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20   offset,..      
b8c0: 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e            index.
b8d0: 4f 75 74 70 75 74 73 2e 4f 72 64 65 72 42 79 43  Outputs.OrderByC
b8e0: 6f 6e 73 75 6d 65 64 29 3b 0d 0a 0d 0a 20 20 20  onsumed);....   
b8f0: 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
b900: 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e  = SQLiteMarshal.
b910: 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66  NextOffsetOf(off
b920: 73 65 74 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  set, sizeof(int)
b930: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b940: 20 20 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65     sizeof(double
b950: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
b960: 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74     if (index.Out
b970: 70 75 74 73 2e 45 73 74 69 6d 61 74 65 64 43 6f  puts.EstimatedCo
b980: 73 74 2e 48 61 73 56 61 6c 75 65 29 0d 0a 20 20  st.HasValue)..  
b990: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
b9b0: 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65  iteMarshal.Write
b9c0: 44 6f 75 62 6c 65 28 70 49 6e 64 65 78 2c 20 6f  Double(pIndex, o
b9d0: 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
b9f0: 78 2e 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61  x.Outputs.Estima
ba00: 74 65 64 43 6f 73 74 2e 47 65 74 56 61 6c 75 65  tedCost.GetValue
ba10: 4f 72 44 65 66 61 75 6c 74 28 29 29 3b 0d 0a 20  OrDefault());.. 
ba20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ba40: 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 61  index.Outputs.Ca
ba50: 6e 55 73 65 45 73 74 69 6d 61 74 65 64 52 6f 77  nUseEstimatedRow
ba60: 73 28 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  s() &&..        
ba70: 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75          index.Ou
ba80: 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65 64 52  tputs.EstimatedR
ba90: 6f 77 73 2e 48 61 73 56 61 6c 75 65 29 0d 0a 20  ows.HasValue).. 
baa0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
bac0: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74  LiteMarshal.Writ
bad0: 65 49 6e 74 36 34 28 70 49 6e 64 65 78 2c 20 6f  eInt64(pIndex, o
bae0: 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
bb00: 78 2e 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61  x.Outputs.Estima
bb10: 74 65 64 52 6f 77 73 2e 47 65 74 56 61 6c 75 65  tedRows.GetValue
bb20: 4f 72 44 65 66 61 75 6c 74 28 29 29 3b 0d 0a 20  OrDefault());.. 
bb30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
bb40: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
bb50: 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 61  index.Outputs.Ca
bb60: 6e 55 73 65 46 6c 61 67 73 28 29 20 26 26 0d 0a  nUseFlags() &&..
bb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb80: 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 49 64  index.Outputs.Id
bb90: 78 46 6c 61 67 73 2e 48 61 73 56 61 6c 75 65 29  xFlags.HasValue)
bba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
bbb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bbc0: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57   SQLiteMarshal.W
bbd0: 72 69 74 65 49 6e 74 33 32 28 70 49 6e 64 65 78  riteInt32(pIndex
bbe0: 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20  , offset,..     
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
bc00: 6e 74 29 69 6e 64 65 78 2e 4f 75 74 70 75 74 73  nt)index.Outputs
bc10: 2e 49 64 78 46 6c 61 67 73 2e 47 65 74 56 61 6c  .IdxFlags.GetVal
bc20: 75 65 4f 72 44 65 66 61 75 6c 74 28 29 29 3b 0d  ueOrDefault());.
bc30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
bc40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
bc50: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
bc60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
bc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
bcc0: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
bcd0: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70  rties..        p
bce0: 72 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64  rivate SQLiteInd
bcf0: 65 78 49 6e 70 75 74 73 20 69 6e 70 75 74 73 3b  exInputs inputs;
bd00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
bd10: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
bd20: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
bd30: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 49  ef="SQLiteIndexI
bd40: 6e 70 75 74 73 22 20 2f 3e 20 6f 62 6a 65 63 74  nputs" /> object
bd50: 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69   instance contai
bd60: 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ning..        //
bd70: 2f 20 74 68 65 20 69 6e 70 75 74 73 20 74 6f 20  / the inputs to 
bd80: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
bd90: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
bda0: 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f  ule.BestIndex" /
bdb0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
bdc0: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
bdd0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
bde0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
bdf0: 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73  QLiteIndexInputs
be00: 20 49 6e 70 75 74 73 0d 0a 20 20 20 20 20 20 20   Inputs..       
be10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
be20: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 70  get { return inp
be30: 75 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  uts; }..        
be40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
be80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be90: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
bea0: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e  private SQLiteIn
beb0: 64 65 78 4f 75 74 70 75 74 73 20 6f 75 74 70 75  dexOutputs outpu
bec0: 74 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ts;..        ///
bed0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
bee0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
bef0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
bf00: 65 78 4f 75 74 70 75 74 73 22 20 2f 3e 20 6f 62  exOutputs" /> ob
bf10: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f  ject instance co
bf20: 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20  ntaining..      
bf30: 20 20 2f 2f 2f 20 74 68 65 20 6f 75 74 70 75 74    /// the output
bf40: 73 20 66 72 6f 6d 20 74 68 65 20 3c 73 65 65 20  s from the <see 
bf50: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
bf60: 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49  agedModule.BestI
bf70: 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20  ndex" />..      
bf80: 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20    /// method... 
bf90: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
bfa0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
bfb0: 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65  ublic SQLiteInde
bfc0: 78 4f 75 74 70 75 74 73 20 4f 75 74 70 75 74 73  xOutputs Outputs
bfd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
bfe0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
bff0: 65 74 75 72 6e 20 6f 75 74 70 75 74 73 3b 20 7d  eturn outputs; }
c000: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
c010: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
c020: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
c030: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
c040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
c090: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 56   #region SQLiteV
c0a0: 69 72 74 75 61 6c 54 61 62 6c 65 20 42 61 73 65  irtualTable Base
c0b0: 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20   Class..    /// 
c0c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
c0d0: 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 72 65  // This class re
c0e0: 70 72 65 73 65 6e 74 73 20 61 20 6d 61 6e 61 67  presents a manag
c0f0: 65 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ed virtual table
c100: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
c110: 20 20 49 74 20 69 73 0d 0a 20 20 20 20 2f 2f 2f    It is..    ///
c120: 20 6e 6f 74 20 73 65 61 6c 65 64 20 61 6e 64 20   not sealed and 
c130: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 61  should be used a
c140: 73 20 74 68 65 20 62 61 73 65 20 63 6c 61 73 73  s the base class
c150: 20 66 6f 72 20 61 6e 79 20 75 73 65 72 2d 64 65   for any user-de
c160: 66 69 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 76  fined..    /// v
c170: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 6c 61  irtual table cla
c180: 73 73 65 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  sses implemented
c190: 20 69 6e 20 6d 61 6e 61 67 65 64 20 63 6f 64 65   in managed code
c1a0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
c1b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
c1c0: 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 56 69  c class SQLiteVi
c1d0: 72 74 75 61 6c 54 61 62 6c 65 20 3a 0d 0a 20 20  rtualTable :..  
c1e0: 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74            ISQLit
c1f0: 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 2c 20 49  eNativeHandle, I
c200: 44 69 73 70 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f  Disposable /* NO
c210: 54 20 53 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20  T SEALED */..   
c220: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
c230: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
c240: 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  tants..        /
c250: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
c260: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
c270: 64 65 78 20 77 69 74 68 69 6e 20 74 68 65 20 61  dex within the a
c280: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
c290: 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d  provided to the.
c2a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
c2b0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
c2c0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65  anagedModule.Cre
c2d0: 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20  ate" /> and..   
c2e0: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
c2f0: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
c300: 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74  edModule.Connect
c310: 22 20 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f 6e  " /> methods con
c320: 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20  taining the..   
c330: 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66       /// name of
c340: 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
c350: 65 6d 65 6e 74 69 6e 67 20 74 68 69 73 20 76 69  ementing this vi
c360: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
c370: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
c380: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
c390: 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20  ivate const int 
c3a0: 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65 78 20  ModuleNameIndex 
c3b0: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c400: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c410: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
c420: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
c430: 65 20 69 6e 64 65 78 20 77 69 74 68 69 6e 20 74  e index within t
c440: 68 65 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  he array of stri
c450: 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20  ngs provided to 
c460: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
c470: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
c480: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
c490: 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d  .Create" /> and.
c4a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
c4b0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
c4c0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e  anagedModule.Con
c4d0: 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73  nect" /> methods
c4e0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d   containing the.
c4f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d  .        /// nam
c500: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
c510: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69  e containing thi
c520: 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
c530: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
c540: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
c550: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
c560: 69 6e 74 20 44 61 74 61 62 61 73 65 4e 61 6d 65  int DatabaseName
c570: 49 6e 64 65 78 20 3d 20 31 3b 0d 0a 0d 0a 20 20  Index = 1;....  
c580: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
c590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
c5d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
c5e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
c5f0: 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20 77 69  /// The index wi
c600: 74 68 69 6e 20 74 68 65 20 61 72 72 61 79 20 6f  thin the array o
c610: 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69 64  f strings provid
c620: 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ed to the..     
c630: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
c640: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
c650: 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f  Module.Create" /
c660: 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f  > and..        /
c670: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
c680: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
c690: 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  le.Connect" /> m
c6a0: 65 74 68 6f 64 73 20 63 6f 6e 74 61 69 6e 69 6e  ethods containin
c6b0: 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
c6c0: 2f 2f 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 76  // name of the v
c6d0: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
c6e0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
c6f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
c700: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
c710: 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 20   TableNameIndex 
c720: 3d 20 32 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  = 2;..        #e
c730: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
c740: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c790: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
c7a0: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
c7b0: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
c7c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
c7d0: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
c7e0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
c7f0: 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20   this class...  
c800: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
c810: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
c820: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
c830: 72 67 75 6d 65 6e 74 73 22 3e 0d 0a 20 20 20 20  rguments">..    
c840: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67      /// The orig
c850: 69 6e 61 6c 20 61 72 72 61 79 20 6f 66 20 73 74  inal array of st
c860: 72 69 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74  rings provided t
c870: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
c880: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
c890: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
c8a0: 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e  le.Create" /> an
c8b0: 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  d..        /// <
c8c0: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
c8d0: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43  eManagedModule.C
c8e0: 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
c8f0: 64 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ds...        ///
c900: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
c910: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
c920: 56 69 72 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20  VirtualTable(.. 
c930: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
c940: 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 0d 0a 20  g[] arguments.. 
c950: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
c960: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c970: 20 20 20 20 20 74 68 69 73 2e 61 72 67 75 6d 65       this.argume
c980: 6e 74 73 20 3d 20 61 72 67 75 6d 65 6e 74 73 3b  nts = arguments;
c990: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
c9a0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
c9b0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
c9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca00: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
ca10: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f  egion Public Pro
ca20: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
ca30: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 5b   private string[
ca40: 5d 20 61 72 67 75 6d 65 6e 74 73 3b 0d 0a 20 20  ] arguments;..  
ca50: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
ca60: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
ca70: 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72   The original ar
ca80: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 70  ray of strings p
ca90: 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a  rovided to the..
caa0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
cab0: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
cac0: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61  nagedModule.Crea
cad0: 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20  te" /> and..    
cae0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
caf0: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
cb00: 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22  dModule.Connect"
cb10: 20 2f 3e 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20   /> methods...  
cb20: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
cb30: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
cb40: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72  blic virtual str
cb50: 69 6e 67 5b 5d 20 41 72 67 75 6d 65 6e 74 73 0d  ing[] Arguments.
cb60: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
cb70: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
cb80: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
cb90: 65 74 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 3b  eturn arguments;
cba0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
cbb0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
cbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
cc10: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
cc20: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
cc30: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  of the module im
cc40: 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 69 73 20  plementing this 
cc50: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
cc60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
cc70: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
cc80: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73  public virtual s
cc90: 74 72 69 6e 67 20 4d 6f 64 75 6c 65 4e 61 6d 65  tring ModuleName
cca0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
ccb0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
ccc0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
cce0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
ccf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cd00: 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
cd10: 6e 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b  nts = Arguments;
cd20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cd30: 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e      if ((argumen
cd40: 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ts != null) &&..
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd60: 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c      (arguments.L
cd70: 65 6e 67 74 68 20 3e 20 4d 6f 64 75 6c 65 4e 61  ength > ModuleNa
cd80: 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20  meIndex))..     
cd90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdb0: 20 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65 6e    return argumen
cdc0: 74 73 5b 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64  ts[ModuleNameInd
cdd0: 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex];..          
cde0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
cdf0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
ce10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ce20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
ce30: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
ce40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
ce50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
ce60: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
ce70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ceb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
cec0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
ced0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d       /// The nam
cee0: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
cef0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69  e containing thi
cf00: 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
cf10: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
cf20: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
cf30: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
cf40: 20 73 74 72 69 6e 67 20 44 61 74 61 62 61 73 65   string Database
cf50: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  Name..        {.
cf60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
cf70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
cf80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cf90: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
cfa0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cfb0: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
cfc0: 67 75 6d 65 6e 74 73 20 3d 20 41 72 67 75 6d 65  guments = Argume
cfd0: 6e 74 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nts;....        
cfe0: 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67          if ((arg
cff0: 75 6d 65 6e 74 73 20 21 3d 20 6e 75 6c 6c 29 20  uments != null) 
d000: 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
d010: 20 20 20 20 20 20 20 20 28 61 72 67 75 6d 65 6e          (argumen
d020: 74 73 2e 4c 65 6e 67 74 68 20 3e 20 44 61 74 61  ts.Length > Data
d030: 62 61 73 65 4e 61 6d 65 49 6e 64 65 78 29 29 0d  baseNameIndex)).
d040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d050: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d060: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61          return a
d070: 72 67 75 6d 65 6e 74 73 5b 44 61 74 61 62 61 73  rguments[Databas
d080: 65 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a 20 20  eNameIndex];..  
d090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
d0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d0b0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
d0c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d0e0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d100: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
d110: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d120: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d170: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
d180: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
d190: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
d1a0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
d1b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
d1c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
d1d0: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
d1e0: 73 74 72 69 6e 67 20 54 61 62 6c 65 4e 61 6d 65  string TableName
d1f0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
d200: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
d210: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
d230: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
d240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d250: 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
d260: 6e 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b  nts = Arguments;
d270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d280: 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e      if ((argumen
d290: 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ts != null) &&..
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2b0: 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c      (arguments.L
d2c0: 65 6e 67 74 68 20 3e 20 54 61 62 6c 65 4e 61 6d  ength > TableNam
d2d0: 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20  eIndex))..      
d2e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d300: 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65 6e 74   return argument
d310: 73 5b 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78  s[TableNameIndex
d320: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
d330: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
d340: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
d350: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d370: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
d380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d390: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
d3a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
d3b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
d3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d400: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
d410: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 20  ate SQLiteIndex 
d420: 69 6e 64 65 78 3b 0d 0a 20 20 20 20 20 20 20 20  index;..        
d430: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d440: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
d450: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
d460: 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74  Index" /> object
d470: 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69   instance contai
d480: 6e 69 6e 67 20 61 6c 6c 20 74 68 65 0d 0a 20 20  ning all the..  
d490: 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 20 66        /// data f
d4a0: 6f 72 20 74 68 65 20 69 6e 70 75 74 73 20 61 6e  or the inputs an
d4b0: 64 20 6f 75 74 70 75 74 73 20 72 65 6c 61 74 69  d outputs relati
d4c0: 6e 67 20 74 6f 20 74 68 65 20 6d 6f 73 74 20 72  ng to the most r
d4d0: 65 63 65 6e 74 20 69 6e 64 65 78 0d 0a 20 20 20  ecent index..   
d4e0: 20 20 20 20 20 2f 2f 2f 20 73 65 6c 65 63 74 69       /// selecti
d4f0: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
d500: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d510: 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
d520: 75 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 20  ual SQLiteIndex 
d530: 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 7b  Index..        {
d540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
d550: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
d560: 64 28 29 3b 20 72 65 74 75 72 6e 20 69 6e 64 65  d(); return inde
d570: 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  x; }..        }.
d580: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
d590: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5e0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
d5f0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
d600: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
d610: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
d620: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
d630: 73 20 6d 65 74 68 6f 64 20 73 68 6f 75 6c 64 20  s method should 
d640: 6e 6f 72 6d 61 6c 6c 79 20 62 65 20 75 73 65 64  normally be used
d650: 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20   by the..       
d660: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
d670: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
d680: 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20  dule.BestIndex" 
d690: 2f 3e 20 6d 65 74 68 6f 64 20 69 6e 20 6f 72 64  /> method in ord
d6a0: 65 72 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  er to..        /
d6b0: 2f 2f 20 70 65 72 66 6f 72 6d 20 69 6e 64 65 78  // perform index
d6c0: 20 73 65 6c 65 63 74 69 6f 6e 20 62 61 73 65 64   selection based
d6d0: 20 6f 6e 20 74 68 65 20 63 6f 6e 73 74 72 61 69   on the constrai
d6e0: 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 79 20  nts provided by 
d6f0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
d700: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
d710: 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
d720: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
d730: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
d740: 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d  m name="index">.
d750: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
d760: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
d770: 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65  teIndex" /> obje
d780: 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74  ct instance cont
d790: 61 69 6e 69 6e 67 20 61 6c 6c 20 74 68 65 0d 0a  aining all the..
d7a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61          /// data
d7b0: 20 66 6f 72 20 74 68 65 20 69 6e 70 75 74 73 20   for the inputs 
d7c0: 61 6e 64 20 6f 75 74 70 75 74 73 20 72 65 6c 61  and outputs rela
d7d0: 74 69 6e 67 20 74 6f 20 69 6e 64 65 78 20 73 65  ting to index se
d7e0: 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  lection...      
d7f0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
d800: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
d810: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
d820: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e  // Non-zero upon
d830: 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20   success...     
d840: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
d850: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
d860: 63 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 42  c virtual bool B
d870: 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20  estIndex(..     
d880: 20 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64         SQLiteInd
d890: 65 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20  ex index..      
d8a0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
d8b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d8c0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
d8d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d8e0: 74 68 69 73 2e 69 6e 64 65 78 20 3d 20 69 6e 64  this.index = ind
d8f0: 65 78 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ex;....         
d900: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
d910: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
d920: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
d930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
d970: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
d980: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
d990: 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20  /// Attempts to 
d9a0: 72 65 63 6f 72 64 20 74 68 65 20 72 65 6e 61 6d  record the renam
d9b0: 69 6e 67 20 6f 66 20 74 68 65 20 76 69 72 74 75  ing of the virtu
d9c0: 61 6c 20 74 61 62 6c 65 20 61 73 73 6f 63 69 61  al table associa
d9d0: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
d9e0: 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63   with this objec
d9f0: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
da00: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
da10: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
da20: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
da30: 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  me">..        //
da40: 2f 20 54 68 65 20 6e 65 77 20 6e 61 6d 65 20 66  / The new name f
da50: 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  or the virtual t
da60: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
da70: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
da80: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
da90: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
daa0: 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75  Non-zero upon su
dab0: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
dac0: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
dad0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
dae0: 69 72 74 75 61 6c 20 62 6f 6f 6c 20 52 65 6e 61  irtual bool Rena
daf0: 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
db00: 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20   string name..  
db10: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
db20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
db30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
db40: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
db50: 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e      if ((argumen
db60: 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ts != null) &&..
db70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db80: 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74  (arguments.Lengt
db90: 68 20 3e 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64  h > TableNameInd
dba0: 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ex))..          
dbb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
dbc0: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 73 5b 54       arguments[T
dbd0: 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 20 3d  ableNameIndex] =
dbe0: 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20   name;..        
dbf0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
dc00: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
dc10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
dc20: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
dc30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
dc40: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
dc50: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
dc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dca0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
dcb0: 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74  egion ISQLiteNat
dcc0: 69 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72  iveHandle Member
dcd0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
dce0: 74 65 20 49 6e 74 50 74 72 20 6e 61 74 69 76 65  te IntPtr native
dcf0: 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20  Handle;..       
dd00: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
dd10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75          /// Retu
dd20: 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79 69  rns the underlyi
dd30: 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65  ng SQLite native
dd40: 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61 74   handle associat
dd50: 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20 20  ed with this..  
dd60: 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74        /// object
dd70: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
dd80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
dd90: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
dda0: 69 63 20 76 69 72 74 75 61 6c 20 49 6e 74 50 74  ic virtual IntPt
ddb0: 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a  r NativeHandle..
ddc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ddd0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
dde0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
ddf0: 74 75 72 6e 20 6e 61 74 69 76 65 48 61 6e 64 6c  turn nativeHandl
de00: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
de10: 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 74 20 7b    internal set {
de20: 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 20 3d 20   nativeHandle = 
de30: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
de40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
de50: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
de60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
de70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
deb0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
dec0: 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72  isposable Member
ded0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
dee0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
def0: 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f    /// Disposes o
df00: 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
df10: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
df20: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
df30: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
df40: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
df50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
df60: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74         Dispose(t
df70: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
df80: 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
df90: 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
dfa0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
dfb0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
dfc0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
dfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e010: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
e020: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
e030: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
e040: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
e050: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
e060: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
e070: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
e080: 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20 3c   /// Throws an <
e090: 73 65 65 20 63 72 65 66 3d 22 4f 62 6a 65 63 74  see cref="Object
e0a0: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
e0b0: 6e 22 20 2f 3e 20 69 66 20 74 68 69 73 20 6f 62  n" /> if this ob
e0c0: 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
e0d0: 2f 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62  / instance has b
e0e0: 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  een disposed... 
e0f0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
e100: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
e110: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
e120: 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74  kDisposed() /* t
e130: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
e140: 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e   {..#if THROW_ON
e150: 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20  _DISPOSED..     
e160: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
e170: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
e180: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e190: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f       throw new O
e1a0: 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
e1b0: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
e1d0: 65 6f 66 28 53 51 4c 69 74 65 56 69 72 74 75 61  eof(SQLiteVirtua
e1e0: 6c 54 61 62 6c 65 29 2e 4e 61 6d 65 29 3b 0d 0a  lTable).Name);..
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
e200: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
e210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
e220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e260: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
e270: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
e280: 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73        /// Dispos
e290: 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  es of this objec
e2a0: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
e2b0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
e2c0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
e2d0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69   <param name="di
e2e0: 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20 20  sposing">..     
e2f0: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
e300: 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69  if this method i
e310: 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  s being called f
e320: 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20  rom the..       
e330: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
e340: 44 69 73 70 6f 73 65 28 29 22 20 2f 3e 20 6d 65  Dispose()" /> me
e350: 74 68 6f 64 2e 20 20 5a 65 72 6f 20 69 66 20 74  thod.  Zero if t
e360: 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65  his method is be
e370: 69 6e 67 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20  ing called..    
e380: 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68 65      /// from the
e390: 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a 20 20 20   finalizer...   
e3a0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
e3b0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  >..        prote
e3c0: 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69  cted virtual voi
e3d0: 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64  d Dispose(bool d
e3e0: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
e3f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e400: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
e410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e430: 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67   //if (disposing
e440: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e450: 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20     //{..        
e460: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
e470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e490: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
e4a0: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73      //    // dis
e4b0: 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
e4c0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4e0: 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
e4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
e510: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d              //}.
e520: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e530: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
e560: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
e570: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
e580: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
e590: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e5a0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
e5e0: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
e5f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e600: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e610: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
e620: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e670: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
e680: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
e690: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
e6a0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
e6b0: 20 46 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20   Finalizes this 
e6c0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
e6d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
e6e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e6f0: 20 20 7e 53 51 4c 69 74 65 56 69 72 74 75 61 6c    ~SQLiteVirtual
e700: 54 61 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20  Table()..       
e710: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e720: 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d  Dispose(false);.
e730: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
e740: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e750: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
e760: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e7c0: 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 56 69  #region SQLiteVi
e7d0: 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
e7e0: 20 42 61 73 65 20 43 6c 61 73 73 0d 0a 20 20 20   Base Class..   
e7f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e800: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
e810: 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ss represents a 
e820: 6d 61 6e 61 67 65 64 20 76 69 72 74 75 61 6c 20  managed virtual 
e830: 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 6d 70  table cursor imp
e840: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20  lementation...  
e850: 20 20 2f 2f 2f 20 49 74 20 69 73 20 6e 6f 74 20    /// It is not 
e860: 73 65 61 6c 65 64 20 61 6e 64 20 73 68 6f 75 6c  sealed and shoul
e870: 64 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  d be used as the
e880: 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f 72 20   base class for 
e890: 61 6e 79 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 65  any..    /// use
e8a0: 72 2d 64 65 66 69 6e 65 64 20 76 69 72 74 75 61  r-defined virtua
e8b0: 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63  l table cursor c
e8c0: 6c 61 73 73 65 73 20 69 6d 70 6c 65 6d 65 6e 74  lasses implement
e8d0: 65 64 20 69 6e 20 6d 61 6e 61 67 65 64 20 63 6f  ed in managed co
e8e0: 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  de...    /// </s
e8f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62  ummary>..    pub
e900: 6c 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65  lic class SQLite
e910: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
e920: 6f 72 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  or :..          
e930: 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48    ISQLiteNativeH
e940: 61 6e 64 6c 65 2c 20 49 44 69 73 70 6f 73 61 62  andle, IDisposab
e950: 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45 44  le /* NOT SEALED
e960: 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   */..    {..    
e970: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 6f 74      #region Prot
e980: 65 63 74 65 64 20 43 6f 6e 73 74 61 6e 74 73 0d  ected Constants.
e990: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
e9a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
e9b0: 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72  /// This value r
e9c0: 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 76  epresents an inv
e9d0: 61 6c 69 64 20 69 6e 74 65 67 65 72 20 72 6f 77  alid integer row
e9e0: 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
e9f0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
ea00: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
ea10: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
ea20: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 69 6e 74  tic readonly int
ea30: 20 49 6e 76 61 6c 69 64 52 6f 77 49 6e 64 65 78   InvalidRowIndex
ea40: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 23   = 0;..        #
ea50: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
ea60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ea70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
eab0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
eac0: 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20  Private Data..  
ead0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
eae0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
eaf0: 20 54 68 65 20 66 69 65 6c 64 20 68 6f 6c 64 73   The field holds
eb00: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77   the integer row
eb10: 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
eb20: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
eb30: 20 72 6f 77 0d 0a 20 20 20 20 20 20 20 20 2f 2f   row..        //
eb40: 2f 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  / pointed to by 
eb50: 74 68 69 73 20 63 75 72 73 6f 72 20 6f 62 6a 65  this cursor obje
eb60: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
eb70: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
eb80: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
eb90: 69 76 61 74 65 20 69 6e 74 20 72 6f 77 49 6e 64  ivate int rowInd
eba0: 65 78 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ex;..        #en
ebb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
ebc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ebd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ec10: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
ec20: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
ec30: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
ec40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
ec50: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
ec60: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
ec70: 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
ec80: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
ec90: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
eca0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61   <param name="ta
ecb0: 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
ecc0: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
ecd0: 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
ece0: 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
ecf0: 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
ed00: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
ed10: 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63   with this objec
ed20: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
ed30: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
ed40: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
ed50: 63 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  c SQLiteVirtualT
ed60: 61 62 6c 65 43 75 72 73 6f 72 28 0d 0a 20 20 20  ableCursor(..   
ed70: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
ed80: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
ed90: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
eda0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 3a 20  ..            : 
edb0: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
edc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
edd0: 68 69 73 2e 74 61 62 6c 65 20 3d 20 74 61 62 6c  his.table = tabl
ede0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
edf0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
ee00: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
ee10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ee60: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
ee70: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
ee80: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
ee90: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
eea0: 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
eeb0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
eec0: 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
eed0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
eee0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
eef0: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
ef00: 6c 65 43 75 72 73 6f 72 28 29 0d 0a 20 20 20 20  leCursor()..    
ef10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ef20: 20 20 20 72 6f 77 49 6e 64 65 78 20 3d 20 49 6e     rowIndex = In
ef30: 76 61 6c 69 64 52 6f 77 49 6e 64 65 78 3b 0d 0a  validRowIndex;..
ef40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ef50: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
ef60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
ef70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
efc0: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
efd0: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70  rties..        p
efe0: 72 69 76 61 74 65 20 53 51 4c 69 74 65 56 69 72  rivate SQLiteVir
eff0: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 3b  tualTable table;
f000: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
f010: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
f020: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
f030: 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
f040: 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  lTable" /> objec
f050: 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63  t instance assoc
f060: 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  iated..        /
f070: 2f 2f 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a  // with this obj
f080: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
f090: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
f0a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
f0b0: 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 53 51  ublic virtual SQ
f0c0: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
f0d0: 20 54 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   Table..        
f0e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
f0f0: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
f100: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 74 61 62  ed(); return tab
f110: 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  le; }..        }
f120: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
f130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f170: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
f180: 72 69 76 61 74 65 20 69 6e 74 20 69 6e 64 65 78  rivate int index
f190: 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20  Number;..       
f1a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
f1b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62          /// Numb
f1c0: 65 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  er used to help 
f1d0: 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c  identify the sel
f1e0: 65 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54 68  ected index.  Th
f1f0: 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20  is value will.. 
f200: 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 73 65         /// be se
f210: 74 20 76 69 61 20 74 68 65 20 3c 73 65 65 20 63  t via the <see c
f220: 72 65 66 3d 22 46 69 6c 74 65 72 22 20 2f 3e 20  ref="Filter" /> 
f230: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
f240: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f250: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
f260: 76 69 72 74 75 61 6c 20 69 6e 74 20 49 6e 64 65  virtual int Inde
f270: 78 4e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 20  xNumber..       
f280: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f290: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
f2a0: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 69 6e  sed(); return in
f2b0: 64 65 78 4e 75 6d 62 65 72 3b 20 7d 0d 0a 20 20  dexNumber; }..  
f2c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f2d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f320: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
f330: 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67  ring indexString
f340: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
f350: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
f360: 20 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65    /// String use
f370: 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69  d to help identi
f380: 66 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  fy the selected 
f390: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 76 61 6c  index.  This val
f3a0: 75 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  ue will..       
f3b0: 20 2f 2f 2f 20 62 65 20 73 65 74 20 76 69 61 20   /// be set via 
f3c0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 46  the <see cref="F
f3d0: 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64  ilter" /> method
f3e0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
f3f0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
f400: 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61     public virtua
f410: 6c 20 73 74 72 69 6e 67 20 49 6e 64 65 78 53 74  l string IndexSt
f420: 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ring..        {.
f430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
f440: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
f450: 28 29 3b 20 72 65 74 75 72 6e 20 69 6e 64 65 78  (); return index
f460: 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20  String; }..     
f470: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f4d0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
f4e0: 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73 3b  eValue[] values;
f4f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
f500: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
f510: 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 73 20   /// The values 
f520: 75 73 65 64 20 74 6f 20 66 69 6c 74 65 72 20 74  used to filter t
f530: 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  he rows returned
f540: 20 76 69 61 20 74 68 69 73 20 63 75 72 73 6f 72   via this cursor
f550: 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20   object..       
f560: 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 20 20   /// instance.  
f570: 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20  This value will 
f580: 62 65 20 73 65 74 20 76 69 61 20 74 68 65 20 3c  be set via the <
f590: 73 65 65 20 63 72 65 66 3d 22 46 69 6c 74 65 72  see cref="Filter
f5a0: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  " />..        //
f5b0: 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  / method...     
f5c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
f5d0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
f5e0: 63 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74 65  c virtual SQLite
f5f0: 56 61 6c 75 65 5b 5d 20 56 61 6c 75 65 73 0d 0a  Value[] Values..
f600: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f610: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
f620: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
f630: 74 75 72 6e 20 76 61 6c 75 65 73 3b 20 7d 0d 0a  turn values; }..
f640: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f650: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
f660: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
f670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
f6c0: 69 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d 65  ion Protected Me
f6d0: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
f6e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
f6f0: 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70        /// Attemp
f700: 74 73 20 74 6f 20 70 65 72 73 69 73 74 20 74 68  ts to persist th
f710: 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65  e specified <see
f720: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c   cref="SQLiteVal
f730: 75 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20  ue" /> object.. 
f740: 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61         /// insta
f750: 6e 63 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  nces in order to
f760: 20 6d 61 6b 65 20 74 68 65 6d 20 61 76 61 69 6c   make them avail
f770: 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 0d 0a  able after the..
f780: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
f790: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
f7a0: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74  nagedModule.Filt
f7b0: 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 20 72 65  er" /> method re
f7c0: 74 75 72 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20  turns...        
f7d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
f7e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
f7f0: 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22  am name="values"
f800: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
f810: 68 65 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65  he array of <see
f820: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c   cref="SQLiteVal
f830: 75 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ue" /> object in
f840: 73 74 61 6e 63 65 73 20 74 6f 20 62 65 0d 0a 20  stances to be.. 
f850: 20 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 73 69         /// persi
f860: 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sted...        /
f870: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
f880: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
f890: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
f8a0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73  The number of <s
f8b0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
f8c0: 61 6c 75 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  alue" /> object 
f8d0: 69 6e 73 74 61 6e 63 65 73 20 74 68 61 74 20 77  instances that w
f8e0: 65 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ere..        ///
f8f0: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 65   successfully pe
f900: 72 73 69 73 74 65 64 2e 0d 0a 20 20 20 20 20 20  rsisted...      
f910: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
f920: 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
f930: 74 65 64 20 76 69 72 74 75 61 6c 20 69 6e 74 20  ted virtual int 
f940: 54 72 79 50 65 72 73 69 73 74 56 61 6c 75 65 73  TryPersistValues
f950: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
f960: 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c  QLiteValue[] val
f970: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ues..           
f980: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
f990: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72             int r
f9a0: 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  esult = 0;....  
f9b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
f9c0: 6c 75 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  lues != null).. 
f9d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
f9f0: 72 65 61 63 68 20 28 53 51 4c 69 74 65 56 61 6c  reach (SQLiteVal
fa00: 75 65 20 76 61 6c 75 65 20 69 6e 20 76 61 6c 75  ue value in valu
fa10: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es)..           
fa20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
fa40: 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa60: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
fa70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fa80: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
fa90: 75 65 2e 50 65 72 73 69 73 74 28 29 29 0d 0a 20  ue.Persist()).. 
faa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fab0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b         result++;
fac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fad0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
fae0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
faf0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
fb00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
fb10: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
fb20: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
fb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb70: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
fb80: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74  egion Public Met
fb90: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
fba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
fbb0: 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
fbc0: 74 68 6f 64 20 73 68 6f 75 6c 64 20 6e 6f 72 6d  thod should norm
fbd0: 61 6c 6c 79 20 62 65 20 75 73 65 64 20 62 79 20  ally be used by 
fbe0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
fbf0: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
fc00: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
fc10: 2e 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68  .Filter" /> meth
fc20: 6f 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0d 0a  od in order to..
fc30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 66          /// perf
fc40: 6f 72 6d 20 66 69 6c 74 65 72 69 6e 67 20 6f 66  orm filtering of
fc50: 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 73   the result rows
fc60: 20 61 6e 64 2f 6f 72 20 74 6f 20 72 65 63 6f 72   and/or to recor
fc70: 64 20 74 68 65 20 66 69 6c 74 65 72 69 6e 67 0d  d the filtering.
fc80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 69  .        /// cri
fc90: 74 65 72 69 61 20 70 72 6f 76 69 64 65 64 20 62  teria provided b
fca0: 79 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  y the SQLite cor
fcb0: 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...    
fcc0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
fcd0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
fce0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64  <param name="ind
fcf0: 65 78 4e 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20  exNumber">..    
fd00: 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75      /// Number u
fd10: 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e  sed to help iden
fd20: 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74 65  tify the selecte
fd30: 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20  d index...      
fd40: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
fd50: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
fd60: 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 53 74  am name="indexSt
fd70: 72 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20  ring">..        
fd80: 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20  /// String used 
fd90: 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79  to help identify
fda0: 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e   the selected in
fdb0: 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
fdc0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
fdd0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
fde0: 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a 20  ame="values">.. 
fdf0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76         /// The v
fe00: 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e 64  alues correspond
fe10: 69 6e 67 20 74 6f 20 65 61 63 68 20 63 6f 6c 75  ing to each colu
fe20: 6d 6e 20 69 6e 20 74 68 65 20 73 65 6c 65 63 74  mn in the select
fe30: 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20  ed index...     
fe40: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
fe50: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
fe60: 76 69 72 74 75 61 6c 20 76 6f 69 64 20 46 69 6c  virtual void Fil
fe70: 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
fe80: 20 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65    int indexNumbe
fe90: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
fea0: 73 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69  string indexStri
feb0: 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
fec0: 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76   SQLiteValue[] v
fed0: 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20  alues..         
fee0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
fef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
ff00: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
ff10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
ff20: 28 28 76 61 6c 75 65 73 20 21 3d 20 6e 75 6c 6c  ((values != null
ff30: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
ff40: 20 20 20 20 20 20 28 54 72 79 50 65 72 73 69 73        (TryPersis
ff50: 74 56 61 6c 75 65 73 28 76 61 6c 75 65 73 29 20  tValues(values) 
ff60: 21 3d 20 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68  != values.Length
ff70: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
ff80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ff90: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
ffa0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  iteException(.. 
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffc0: 20 20 20 22 66 61 69 6c 65 64 20 74 6f 20 70 65     "failed to pe
ffd0: 72 73 69 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72  rsist one or mor
ffe0: 65 20 76 61 6c 75 65 73 22 29 3b 0d 0a 20 20 20  e values");..   
fff0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
10000 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
10010 6e 64 65 78 4e 75 6d 62 65 72 20 3d 20 69 6e 64  ndexNumber = ind
10020 65 78 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20  exNumber;..     
10030 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65         this.inde
10040 78 53 74 72 69 6e 67 20 3d 20 69 6e 64 65 78 53  xString = indexS
10050 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  tring;..        
10060 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65 73 20      this.values 
10070 3d 20 76 61 6c 75 65 73 3b 0d 0a 20 20 20 20 20  = values;..     
10080 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
100e0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
100f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 65  ..        /// De
10100 74 65 72 6d 69 6e 65 73 20 74 68 65 20 69 6e 74  termines the int
10110 65 67 65 72 20 72 6f 77 20 73 65 71 75 65 6e 63  eger row sequenc
10120 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
10130 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 0d 0a 20   current row... 
10140 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
10150 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
10160 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
10170 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
10180 74 65 67 65 72 20 72 6f 77 20 73 65 71 75 65 6e  teger row sequen
10190 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ce number for th
101a0 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 2d 4f  e current row -O
101b0 52 2d 20 7a 65 72 6f 20 69 66 0d 0a 20 20 20 20  R- zero if..    
101c0 20 20 20 20 2f 2f 2f 20 69 74 20 63 61 6e 6e 6f      /// it canno
101d0 74 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64 2e  t be determined.
101e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
101f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
10200 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
10210 20 69 6e 74 20 47 65 74 52 6f 77 49 6e 64 65 78   int GetRowIndex
10220 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
10230 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10240 6e 20 72 6f 77 49 6e 64 65 78 3b 0d 0a 20 20 20  n rowIndex;..   
10250 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10260 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
102b0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
102c0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
102d0 41 64 6a 75 73 74 73 20 74 68 65 20 69 6e 74 65  Adjusts the inte
102e0 67 65 72 20 72 6f 77 20 73 65 71 75 65 6e 63 65  ger row sequence
102f0 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20   number so that 
10300 69 74 20 72 65 66 65 72 73 20 74 6f 20 74 68 65  it refers to the
10310 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 65  ..        /// ne
10320 78 74 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20  xt row...       
10330 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10340 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
10350 76 69 72 74 75 61 6c 20 76 6f 69 64 20 4e 65 78  virtual void Nex
10360 74 52 6f 77 49 6e 64 65 78 28 29 0d 0a 20 20 20  tRowIndex()..   
10370 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10380 20 20 20 20 72 6f 77 49 6e 64 65 78 2b 2b 3b 0d      rowIndex++;.
10390 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
103a0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
103b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
103c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10400 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
10410 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
10420 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72 73  veHandle Members
10430 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
10440 65 20 49 6e 74 50 74 72 20 6e 61 74 69 76 65 48  e IntPtr nativeH
10450 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  andle;..        
10460 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10470 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72         /// Retur
10480 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  ns the underlyin
10490 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20  g SQLite native 
104a0 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61 74 65  handle associate
104b0 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20 20 20  d with this..   
104c0 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20       /// object 
104d0 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
104e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
104f0 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
10500 63 20 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72  c virtual IntPtr
10510 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20   NativeHandle.. 
10520 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10530 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
10540 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
10550 75 72 6e 20 6e 61 74 69 76 65 48 61 6e 64 6c 65  urn nativeHandle
10560 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
10570 20 69 6e 74 65 72 6e 61 6c 20 73 65 74 20 7b 20   internal set { 
10580 6e 61 74 69 76 65 48 61 6e 64 6c 65 20 3d 20 76  nativeHandle = v
10590 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
105a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
105b0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
105c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
105d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
105e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
105f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10600 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
10610 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
10620 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
10630 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
10640 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
10650 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66   /// Disposes of
10660 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
10670 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
10680 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10690 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
106a0 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20  oid Dispose().. 
106b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
106c0 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
106d0 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
106e0 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
106f0 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
10700 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10710 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
10720 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
10730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10770 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
10780 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
10790 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
107a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
107b0 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
107c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
107d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
107e0 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20 3c 73  /// Throws an <s
107f0 65 65 20 63 72 65 66 3d 22 4f 62 6a 65 63 74 44  ee cref="ObjectD
10800 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
10810 22 20 2f 3e 20 69 66 20 74 68 69 73 20 6f 62 6a  " /> if this obj
10820 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ect..        ///
10830 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65   instance has be
10840 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  en disposed...  
10850 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
10860 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
10870 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
10880 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
10890 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
108a0 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f  {..#if THROW_ON_
108b0 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20  DISPOSED..      
108c0 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
108d0 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
108e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
108f0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
10900 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
10910 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
10920 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
10930 6f 66 28 53 51 4c 69 74 65 56 69 72 74 75 61 6c  of(SQLiteVirtual
10940 54 61 62 6c 65 43 75 72 73 6f 72 29 2e 4e 61 6d  TableCursor).Nam
10950 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
10960 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
10970 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10980 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
10990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
109d0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
109e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44  >..        /// D
109f0 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20  isposes of this 
10a00 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
10a10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
10a20 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
10a30 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
10a40 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a  e="disposing">..
10a50 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
10a60 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74  zero if this met
10a70 68 6f 64 20 69 73 20 62 65 69 6e 67 20 63 61 6c  hod is being cal
10a80 6c 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20  led from the..  
10a90 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
10aa0 72 65 66 3d 22 44 69 73 70 6f 73 65 28 29 22 20  ref="Dispose()" 
10ab0 2f 3e 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f  /> method.  Zero
10ac0 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20   if this method 
10ad0 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 0d  is being called.
10ae0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 72 6f  .        /// fro
10af0 6d 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 2e  m the finalizer.
10b00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
10b10 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
10b20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
10b30 6c 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  l void Dispose(b
10b40 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
10b50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10b60 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
10b70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
10b80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10b90 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70        //if (disp
10ba0 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
10bb0 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10bd0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
10be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bf0 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
10c00 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
10c10 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65  / dispose manage
10c20 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
10c30 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
10c40 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f       //    /////
10c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c80 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   //}....        
10c90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
10ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e  // release unman
10ce0 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
10cf0 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
10d00 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
10d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10d40 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75    disposed = tru
10d50 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10d60 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
10d70 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
10d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
10d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10dd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
10de0 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f  region Destructo
10df0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  r..        /// <
10e00 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
10e10 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73 20    /// Finalizes 
10e20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
10e30 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
10e40 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10e50 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65 56 69         ~SQLiteVi
10e60 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
10e70 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
10e80 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
10e90 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  se(false);..    
10ea0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
10eb0 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
10ec0 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
10ed0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
10ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
10f30 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  on ISQLiteNative
10f40 48 61 6e 64 6c 65 20 49 6e 74 65 72 66 61 63 65  Handle Interface
10f50 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
10f60 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
10f70 73 20 69 6e 74 65 72 66 61 63 65 20 72 65 70 72  s interface repr
10f80 65 73 65 6e 74 73 20 61 20 6e 61 74 69 76 65 20  esents a native 
10f90 68 61 6e 64 6c 65 20 70 72 6f 76 69 64 65 64 20  handle provided 
10fa0 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  by the SQLite co
10fb0 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72  re..    /// libr
10fc0 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ary...    /// </
10fd0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
10fe0 62 6c 69 63 20 69 6e 74 65 72 66 61 63 65 20 49  blic interface I
10ff0 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64  SQLiteNativeHand
11000 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  le..    {..     
11010 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
11020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
11030 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20  e native handle 
11040 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...        
11050 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
11060 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 4e          IntPtr N
11070 61 74 69 76 65 48 61 6e 64 6c 65 20 7b 20 67 65  ativeHandle { ge
11080 74 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  t; }..    }..   
11090 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
110a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
110b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
110c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
110d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
110e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
110f0 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53  ..    #region IS
11100 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
11110 65 20 49 6e 74 65 72 66 61 63 65 0d 0a 20 20 20  e Interface..   
11120 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11130 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74      /// This int
11140 65 72 66 61 63 65 20 72 65 70 72 65 73 65 6e 74  erface represent
11150 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
11160 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
11170 20 77 72 69 74 74 65 6e 20 69 6e 0d 0a 20 20 20   written in..   
11180 20 2f 2f 2f 20 6e 61 74 69 76 65 20 63 6f 64 65   /// native code
11190 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
111a0 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
111b0 63 20 69 6e 74 65 72 66 61 63 65 20 49 53 51 4c  c interface ISQL
111c0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 0d  iteNativeModule.
111d0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
111e0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
111f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
11200 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
11210 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
11220 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  lled to create a
11230 20 6e 65 77 20 69 6e 73 74 61 6e 63 65 20 6f 66   new instance of
11240 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11250 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
11260 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 43   response to a C
11270 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
11280 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  BLE statement. T
11290 68 65 20 64 62 20 70 61 72 61 6d 65 74 65 72 0d  he db parameter.
112a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 73 20  .        /// is 
112b0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
112c0 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
112d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   connection that
112e0 20 69 73 20 65 78 65 63 75 74 69 6e 67 0d 0a 20   is executing.. 
112f0 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 43         /// the C
11300 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
11310 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  BLE statement. T
11320 68 65 20 70 41 75 78 20 61 72 67 75 6d 65 6e 74  he pAux argument
11330 20 69 73 20 74 68 65 20 63 6f 70 79 0d 0a 20 20   is the copy..  
11340 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65        /// of the
11350 20 63 6c 69 65 6e 74 20 64 61 74 61 20 70 6f 69   client data poi
11360 6e 74 65 72 20 74 68 61 74 20 77 61 73 20 74 68  nter that was th
11370 65 20 66 6f 75 72 74 68 20 61 72 67 75 6d 65 6e  e fourth argumen
11380 74 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  t to the..      
11390 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72    /// sqlite3_cr
113a0 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 6f 72  eate_module() or
113b0 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
113c0 6d 6f 64 75 6c 65 5f 76 32 28 29 20 63 61 6c 6c  module_v2() call
113d0 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f   that..        /
113e0 2f 2f 20 72 65 67 69 73 74 65 72 65 64 20 74 68  // registered th
113f0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
11400 6d 6f 64 75 6c 65 2e 20 54 68 65 20 61 72 67 76  module. The argv
11410 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 61 6e   parameter is an
11420 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72  ..        /// ar
11430 72 61 79 20 6f 66 20 61 72 67 63 20 70 6f 69 6e  ray of argc poin
11440 74 65 72 73 20 74 6f 20 6e 75 6c 6c 20 74 65 72  ters to null ter
11450 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 73 2e  minated strings.
11460 20 54 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20   The first..    
11470 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 2c 20      /// string, 
11480 61 72 67 76 5b 30 5d 2c 20 69 73 20 74 68 65 20  argv[0], is the 
11490 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64 75  name of the modu
114a0 6c 65 20 62 65 69 6e 67 20 69 6e 76 6f 6b 65 64  le being invoked
114b0 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  . The..        /
114c0 2f 2f 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 69  // module name i
114d0 73 20 74 68 65 20 6e 61 6d 65 20 70 72 6f 76 69  s the name provi
114e0 64 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e  ded as the secon
114f0 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 0d 0a 20  d argument to.. 
11500 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
11510 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
11520 28 29 20 61 6e 64 20 61 73 20 74 68 65 20 61 72  () and as the ar
11530 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 55 53  gument to the US
11540 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 0d 0a 20  ING clause of.. 
11550 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 43         /// the C
11560 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
11570 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 74 68  BLE statement th
11580 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 54  at is running. T
11590 68 65 20 73 65 63 6f 6e 64 2c 0d 0a 20 20 20 20  he second,..    
115a0 20 20 20 20 2f 2f 2f 20 61 72 67 76 5b 31 5d 2c      /// argv[1],
115b0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
115c0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
115d0 77 68 69 63 68 20 74 68 65 20 6e 65 77 20 76 69  which the new vi
115e0 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
115f0 20 20 20 20 20 2f 2f 2f 20 69 73 20 62 65 69 6e       /// is bein
11600 67 20 63 72 65 61 74 65 64 2e 20 54 68 65 20 64  g created. The d
11610 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20  atabase name is 
11620 22 6d 61 69 6e 22 20 66 6f 72 20 74 68 65 20 70  "main" for the p
11630 72 69 6d 61 72 79 0d 0a 20 20 20 20 20 20 20 20  rimary..        
11640 2f 2f 2f 20 64 61 74 61 62 61 73 65 2c 20 6f 72  /// database, or
11650 20 22 74 65 6d 70 22 20 66 6f 72 20 54 45 4d 50   "temp" for TEMP
11660 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20 74 68   database, or th
11670 65 20 6e 61 6d 65 20 67 69 76 65 6e 20 61 74 20  e name given at 
11680 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
11690 20 65 6e 64 20 6f 66 20 74 68 65 20 41 54 54 41   end of the ATTA
116a0 43 48 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72  CH statement for
116b0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
116c0 73 65 73 2e 20 54 68 65 20 74 68 69 72 64 0d 0a  ses. The third..
116d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 6c 65 6d          /// elem
116e0 65 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61 79  ent of the array
116f0 2c 20 61 72 67 76 5b 32 5d 2c 20 69 73 20 74 68  , argv[2], is th
11700 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
11710 77 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20  w virtual..     
11720 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2c 20 61 73     /// table, as
11730 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c 6f   specified follo
11740 77 69 6e 67 20 74 68 65 20 54 41 42 4c 45 20 6b  wing the TABLE k
11750 65 79 77 6f 72 64 20 69 6e 20 74 68 65 20 43 52  eyword in the CR
11760 45 41 54 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f  EATE..        //
11770 2f 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  / VIRTUAL TABLE 
11780 73 74 61 74 65 6d 65 6e 74 2e 20 49 66 20 70 72  statement. If pr
11790 65 73 65 6e 74 2c 20 74 68 65 20 66 6f 75 72 74  esent, the fourt
117a0 68 20 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74  h and subsequent
117b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
117c0 72 69 6e 67 73 20 69 6e 20 74 68 65 20 61 72 67  rings in the arg
117d0 76 5b 5d 20 61 72 72 61 79 20 72 65 70 6f 72 74  v[] array report
117e0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   the arguments t
117f0 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 6e 61 6d  o the module nam
11800 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
11810 6e 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  n the CREATE VIR
11820 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
11830 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ment...        /
11840 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
11850 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
11860 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
11870 6a 6f 62 20 6f 66 20 74 68 69 73 20 6d 65 74 68  job of this meth
11880 6f 64 20 69 73 20 74 6f 20 63 6f 6e 73 74 72 75  od is to constru
11890 63 74 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ct the new virtu
118a0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 0d  al table object.
118b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 28 61 6e  .        /// (an
118c0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 6f 62   sqlite3_vtab ob
118d0 6a 65 63 74 29 20 61 6e 64 20 72 65 74 75 72 6e  ject) and return
118e0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74   a pointer to it
118f0 20 69 6e 20 2a 70 70 56 54 61 62 2e 0d 0a 20 20   in *ppVTab...  
11900 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
11910 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
11920 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
11930 2f 2f 20 41 73 20 70 61 72 74 20 6f 66 20 74 68  // As part of th
11940 65 20 74 61 73 6b 20 6f 66 20 63 72 65 61 74 69  e task of creati
11950 6e 67 20 61 20 6e 65 77 20 73 71 6c 69 74 65 33  ng a new sqlite3
11960 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2c  _vtab structure,
11970 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
11980 2f 2f 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 69  // method must i
11990 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33 5f 64 65  nvoke sqlite3_de
119a0 63 6c 61 72 65 5f 76 74 61 62 28 29 20 74 6f 20  clare_vtab() to 
119b0 74 65 6c 6c 20 74 68 65 20 53 51 4c 69 74 65 20  tell the SQLite 
119c0 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  core..        //
119d0 2f 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6c 75  / about the colu
119e0 6d 6e 73 20 61 6e 64 20 64 61 74 61 74 79 70 65  mns and datatype
119f0 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s in the virtual
11a00 20 74 61 62 6c 65 2e 20 54 68 65 0d 0a 20 20 20   table. The..   
11a10 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
11a20 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
11a30 41 50 49 20 68 61 73 20 74 68 65 20 66 6f 6c 6c  API has the foll
11a40 6f 77 69 6e 67 20 70 72 6f 74 6f 74 79 70 65 3a  owing prototype:
11a50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
11a60 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
11a70 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
11a80 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20     /// <code>.. 
11a90 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 20 73         /// int s
11aa0 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
11ab0 74 61 62 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  tab(sqlite3 *db,
11ac0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 72   const char *zCr
11ad0 65 61 74 65 54 61 62 6c 65 29 0d 0a 20 20 20 20  eateTable)..    
11ae0 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d      /// </code>.
11af0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
11b00 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
11b10 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
11b20 20 20 2f 2f 2f 20 54 68 65 20 66 69 72 73 74 20    /// The first 
11b30 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
11b40 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
11b50 28 29 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  () must be the s
11b60 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ame..        ///
11b70 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
11b80 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 61 73 20  tion pointer as 
11b90 74 68 65 20 66 69 72 73 74 20 70 61 72 61 6d 65  the first parame
11ba0 74 65 72 20 74 6f 20 74 68 69 73 20 6d 65 74 68  ter to this meth
11bb0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
11bc0 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75   The second argu
11bd0 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 5f  ment to sqlite3_
11be0 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 6d  declare_vtab() m
11bf0 75 73 74 20 61 0d 0a 20 20 20 20 20 20 20 20 2f  ust a..        /
11c00 2f 2f 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74  // zero-terminat
11c10 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
11c20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
11c30 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 43 52 45 41  well-formed CREA
11c40 54 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  TE..        /// 
11c50 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
11c60 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
11c70 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
11c80 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 61 6e  virtual table an
11c90 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  d..        /// t
11ca0 68 65 69 72 20 64 61 74 61 20 74 79 70 65 73 2e  heir data types.
11cb0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
11cc0 20 74 61 62 6c 65 20 69 6e 20 74 68 69 73 20 43   table in this C
11cd0 52 45 41 54 45 20 54 41 42 4c 45 0d 0a 20 20 20  REATE TABLE..   
11ce0 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 6d 65       /// stateme
11cf0 6e 74 20 69 73 20 69 67 6e 6f 72 65 64 2c 20 61  nt is ignored, a
11d00 73 20 61 72 65 20 61 6c 6c 20 63 6f 6e 73 74 72  s are all constr
11d10 61 69 6e 74 73 2e 20 4f 6e 6c 79 20 74 68 65 20  aints. Only the 
11d20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 0d 0a 20 20  column names..  
11d30 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20 64 61        /// and da
11d40 74 61 74 79 70 65 73 20 6d 61 74 74 65 72 2e 20  tatypes matter. 
11d50 54 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  The CREATE TABLE
11d60 20 73 74 61 74 65 6d 65 6e 74 20 73 74 72 69 6e   statement strin
11d70 67 20 6e 65 65 64 20 6e 6f 74 20 74 6f 0d 0a 20  g need not to.. 
11d80 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 68 65         /// be he
11d90 6c 64 20 69 6e 20 70 65 72 73 69 73 74 65 6e 74  ld in persistent
11da0 20 6d 65 6d 6f 72 79 2e 20 54 68 65 20 73 74 72   memory. The str
11db0 69 6e 67 20 63 61 6e 20 62 65 20 64 65 61 6c 6c  ing can be deall
11dc0 6f 63 61 74 65 64 20 61 6e 64 2f 6f 72 0d 0a 20  ocated and/or.. 
11dd0 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 75 73 65         /// reuse
11de0 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  d as soon as the
11df0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
11e00 5f 76 74 61 62 28 29 20 72 6f 75 74 69 6e 65 20  _vtab() routine 
11e10 72 65 74 75 72 6e 73 2e 0d 0a 20 20 20 20 20 20  returns...      
11e20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
11e30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
11e40 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
11e50 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11e60 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  pDb">..        /
11e70 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 64 61  // The native da
11e80 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11e90 6e 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20  n handle...     
11ea0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
11eb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
11ec0 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22 3e  ram name="pAux">
11ed0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
11ee0 65 20 6f 72 69 67 69 6e 61 6c 20 6e 61 74 69 76  e original nativ
11ef0 65 20 70 6f 69 6e 74 65 72 20 76 61 6c 75 65 20  e pointer value 
11f00 74 68 61 74 20 77 61 73 20 70 72 6f 76 69 64 65  that was provide
11f10 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  d to the..      
11f20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72    /// sqlite3_cr
11f30 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 2c 20 73  eate_module(), s
11f40 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
11f50 64 75 6c 65 5f 76 32 28 29 20 6f 72 0d 0a 20 20  dule_v2() or..  
11f60 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
11f70 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61  3_create_disposa
11f80 62 6c 65 5f 6d 6f 64 75 6c 65 28 29 20 66 75 6e  ble_module() fun
11f90 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20  ctions...       
11fa0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
11fb0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
11fc0 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a  m name="argc">..
11fd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
11fe0 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
11ff0 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52 45  nts from the CRE
12000 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
12010 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  E statement...  
12020 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
12030 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
12040 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
12050 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  v">..        ///
12060 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 73 74   The array of st
12070 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 66  ring arguments f
12080 72 6f 6d 20 74 68 65 20 43 52 45 41 54 45 20 56  rom the CREATE V
12090 49 52 54 55 41 4c 20 54 41 42 4c 45 0d 0a 20 20  IRTUAL TABLE..  
120a0 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 6d        /// statem
120b0 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ent...        //
120c0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
120d0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
120e0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
120f0 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73        /// Upon s
12100 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72  uccess, this par
12110 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d  ameter must be m
12120 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74  odified to point
12130 20 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a 20   to the newly.. 
12140 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74         /// creat
12150 65 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  ed native sqlite
12160 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
12170 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
12180 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
12190 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
121a0 72 61 6d 20 6e 61 6d 65 3d 22 70 45 72 72 6f 72  ram name="pError
121b0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
121c0 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20 74 68  Upon failure, th
121d0 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73  is parameter mus
121e0 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f  t be modified to
121f0 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 65 72   point to the er
12200 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ror..        ///
12210 20 6d 65 73 73 61 67 65 2c 20 77 69 74 68 20 74   message, with t
12220 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 65  he underlying me
12230 6d 6f 72 79 20 68 61 76 69 6e 67 20 62 65 65 6e  mory having been
12240 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74   obtained from t
12250 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
12260 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
12270 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20   function...    
12280 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
12290 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
122a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
122b0 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
122c0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
122d0 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
122e0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
122f0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
12300 43 6f 64 65 20 78 43 72 65 61 74 65 28 0d 0a 20  Code xCreate(.. 
12310 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
12320 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20  r pDb,..        
12330 20 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c      IntPtr pAux,
12340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
12350 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20  t argc,..       
12360 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76       IntPtr argv
12370 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
12380 65 66 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c  ef IntPtr pVtab,
12390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
123a0 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d  f IntPtr pError.
123b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
123c0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
123d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12410 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
12420 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
12430 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
12440 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
12450 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64   xConnect method
12460 20 69 73 20 76 65 72 79 20 73 69 6d 69 6c 61 72   is very similar
12470 20 74 6f 20 78 43 72 65 61 74 65 2e 20 49 74 20   to xCreate. It 
12480 68 61 73 20 74 68 65 20 73 61 6d 65 0d 0a 20 20  has the same..  
12490 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65        /// parame
124a0 74 65 72 73 20 61 6e 64 20 63 6f 6e 73 74 72 75  ters and constru
124b0 63 74 73 20 61 20 6e 65 77 20 73 71 6c 69 74 65  cts a new sqlite
124c0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
124d0 20 6a 75 73 74 20 6c 69 6b 65 0d 0a 20 20 20 20   just like..    
124e0 20 20 20 20 2f 2f 2f 20 78 43 72 65 61 74 65 2e      /// xCreate.
124f0 20 41 6e 64 20 69 74 20 6d 75 73 74 20 61 6c 73   And it must als
12500 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 64  o call sqlite3_d
12510 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 6c 69  eclare_vtab() li
12520 6b 65 20 78 43 72 65 61 74 65 2e 0d 0a 20 20 20  ke xCreate...   
12530 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
12540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
12550 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
12560 2f 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65  / The difference
12570 20 69 73 20 74 68 61 74 20 78 43 6f 6e 6e 65 63   is that xConnec
12580 74 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 65  t is called to e
12590 73 74 61 62 6c 69 73 68 20 61 20 6e 65 77 0d 0a  stablish a new..
125a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e          /// conn
125b0 65 63 74 69 6f 6e 20 74 6f 20 61 6e 20 65 78 69  ection to an exi
125c0 73 74 69 6e 67 20 76 69 72 74 75 61 6c 20 74 61  sting virtual ta
125d0 62 6c 65 20 77 68 65 72 65 61 73 20 78 43 72 65  ble whereas xCre
125e0 61 74 65 20 69 73 20 63 61 6c 6c 65 64 0d 0a 20  ate is called.. 
125f0 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 63 72         /// to cr
12600 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75  eate a new virtu
12610 61 6c 20 74 61 62 6c 65 20 66 72 6f 6d 20 73 63  al table from sc
12620 72 61 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20  ratch...        
12630 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
12640 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
12650 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
12660 20 78 43 72 65 61 74 65 20 61 6e 64 20 78 43 6f   xCreate and xCo
12670 6e 6e 65 63 74 20 6d 65 74 68 6f 64 73 20 61 72  nnect methods ar
12680 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 74  e only different
12690 20 77 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 20   when the..     
126a0 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
126b0 61 62 6c 65 20 68 61 73 20 73 6f 6d 65 20 6b 69  able has some ki
126c0 6e 64 20 6f 66 20 62 61 63 6b 69 6e 67 20 73 74  nd of backing st
126d0 6f 72 65 20 74 68 61 74 20 6d 75 73 74 20 62 65  ore that must be
126e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
126f0 69 74 69 61 6c 69 7a 65 64 20 74 68 65 20 66 69  itialized the fi
12700 72 73 74 20 74 69 6d 65 20 74 68 65 20 76 69 72  rst time the vir
12710 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 63 72  tual table is cr
12720 65 61 74 65 64 2e 20 54 68 65 0d 0a 20 20 20 20  eated. The..    
12730 20 20 20 20 2f 2f 2f 20 78 43 72 65 61 74 65 20      /// xCreate 
12740 6d 65 74 68 6f 64 20 63 72 65 61 74 65 73 20 61  method creates a
12750 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 74  nd initializes t
12760 68 65 20 62 61 63 6b 69 6e 67 20 73 74 6f 72 65  he backing store
12770 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  . The..        /
12780 2f 2f 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68  // xConnect meth
12790 6f 64 20 6a 75 73 74 20 63 6f 6e 6e 65 63 74 73  od just connects
127a0 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
127b0 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 2e 0d 0a  backing store...
127c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
127d0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
127e0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
127f0 20 2f 2f 2f 20 41 73 20 61 6e 20 65 78 61 6d 70   /// As an examp
12800 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20 61 20 76  le, consider a v
12810 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
12820 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 61 74  lementation that
12830 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72  ..        /// pr
12840 6f 76 69 64 65 73 20 72 65 61 64 2d 6f 6e 6c 79  ovides read-only
12850 20 61 63 63 65 73 73 20 74 6f 20 65 78 69 73 74   access to exist
12860 69 6e 67 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61  ing comma-separa
12870 74 65 64 2d 76 61 6c 75 65 20 28 43 53 56 29 0d  ted-value (CSV).
12880 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 6c  .        /// fil
12890 65 73 20 6f 6e 20 64 69 73 6b 2e 20 54 68 65 72  es on disk. Ther
128a0 65 20 69 73 20 6e 6f 20 62 61 63 6b 69 6e 67 20  e is no backing 
128b0 73 74 6f 72 65 20 74 68 61 74 20 6e 65 65 64 73  store that needs
128c0 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 0d 0a   to be created..
128d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72 20 69          /// or i
128e0 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 73  nitialized for s
128f0 75 63 68 20 61 20 76 69 72 74 75 61 6c 20 74 61  uch a virtual ta
12900 62 6c 65 20 28 73 69 6e 63 65 20 74 68 65 20 43  ble (since the C
12910 53 56 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20  SV files..      
12920 20 20 2f 2f 2f 20 61 6c 72 65 61 64 79 20 65 78    /// already ex
12930 69 73 74 20 6f 6e 20 64 69 73 6b 29 20 73 6f 20  ist on disk) so 
12940 74 68 65 20 78 43 72 65 61 74 65 20 61 6e 64 20  the xCreate and 
12950 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 73  xConnect methods
12960 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..      
12970 20 20 2f 2f 2f 20 69 64 65 6e 74 69 63 61 6c 20    /// identical 
12980 66 6f 72 20 74 68 61 74 20 6d 6f 64 75 6c 65 2e  for that module.
12990 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
129a0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
129b0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
129c0 20 20 20 2f 2f 2f 20 41 6e 6f 74 68 65 72 20 65     /// Another e
129d0 78 61 6d 70 6c 65 20 69 73 20 61 20 76 69 72 74  xample is a virt
129e0 75 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 69  ual table that i
129f0 6d 70 6c 65 6d 65 6e 74 73 20 61 20 66 75 6c 6c  mplements a full
12a00 2d 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 2f  -text..        /
12a10 2f 2f 20 69 6e 64 65 78 2e 20 54 68 65 20 78 43  // index. The xC
12a20 72 65 61 74 65 20 6d 65 74 68 6f 64 20 6d 75 73  reate method mus
12a30 74 20 63 72 65 61 74 65 20 61 6e 64 20 69 6e 69  t create and ini
12a40 74 69 61 6c 69 7a 65 20 64 61 74 61 0d 0a 20 20  tialize data..  
12a50 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74        /// struct
12a60 75 72 65 73 20 74 6f 20 68 6f 6c 64 20 74 68 65  ures to hold the
12a70 20 64 69 63 74 69 6f 6e 61 72 79 20 61 6e 64 20   dictionary and 
12a80 70 6f 73 74 69 6e 67 20 6c 69 73 74 73 20 66 6f  posting lists fo
12a90 72 20 74 68 61 74 20 69 6e 64 65 78 2e 0d 0a 20  r that index... 
12aa0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
12ab0 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2c 20  Connect method, 
12ac0 6f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  on the other han
12ad0 64 2c 20 6f 6e 6c 79 20 68 61 73 20 74 6f 20 6c  d, only has to l
12ae0 6f 63 61 74 65 20 61 6e 64 20 75 73 65 0d 0a 20  ocate and use.. 
12af0 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 20 65 78         /// an ex
12b00 69 73 74 69 6e 67 20 64 69 63 74 69 6f 6e 61 72  isting dictionar
12b10 79 20 61 6e 64 20 70 6f 73 74 69 6e 67 20 6c 69  y and posting li
12b20 73 74 73 20 74 68 61 74 20 77 65 72 65 20 63 72  sts that were cr
12b30 65 61 74 65 64 20 62 79 20 61 0d 0a 20 20 20 20  eated by a..    
12b40 20 20 20 20 2f 2f 2f 20 70 72 69 6f 72 20 78 43      /// prior xC
12b50 72 65 61 74 65 20 63 61 6c 6c 2e 0d 0a 20 20 20  reate call...   
12b60 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
12b70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
12b80 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
12b90 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74 20 6d  / The xConnect m
12ba0 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72  ethod must retur
12bb0 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 69  n SQLITE_OK if i
12bc0 74 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 20  t is successful 
12bd0 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  in..        /// 
12be0 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e 65 77  creating the new
12bf0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20   virtual table, 
12c00 6f 72 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  or SQLITE_ERROR 
12c10 69 66 20 69 74 20 69 73 20 6e 6f 74 0d 0a 20 20  if it is not..  
12c20 20 20 20 20 20 20 2f 2f 2f 20 73 75 63 63 65 73        /// succes
12c30 73 66 75 6c 2e 20 49 66 20 6e 6f 74 20 73 75 63  sful. If not suc
12c40 63 65 73 73 66 75 6c 2c 20 74 68 65 20 73 71 6c  cessful, the sql
12c50 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
12c60 75 72 65 20 6d 75 73 74 20 6e 6f 74 0d 0a 20 20  ure must not..  
12c70 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 61 6c 6c        /// be all
12c80 6f 63 61 74 65 64 2e 20 41 6e 20 65 72 72 6f 72  ocated. An error
12c90 20 6d 65 73 73 61 67 65 20 6d 61 79 20 6f 70 74   message may opt
12ca0 69 6f 6e 61 6c 6c 79 20 62 65 20 72 65 74 75 72  ionally be retur
12cb0 6e 65 64 20 69 6e 20 2a 70 7a 45 72 72 0d 0a 20  ned in *pzErr.. 
12cc0 20 20 20 20 20 20 20 2f 2f 2f 20 69 66 20 75 6e         /// if un
12cd0 73 75 63 63 65 73 73 66 75 6c 2e 20 53 70 61 63  successful. Spac
12ce0 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 72  e to hold the er
12cf0 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
12d00 6e 67 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20  ng must be..    
12d10 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 65      /// allocate
12d20 64 20 75 73 69 6e 67 20 61 6e 20 53 51 4c 69 74  d using an SQLit
12d30 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
12d40 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b  ion function lik
12d50 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
12d60 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
12d70 6f 72 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  or sqlite3_mprin
12d80 74 66 28 29 20 61 73 20 74 68 65 20 53 51 4c 69  tf() as the SQLi
12d90 74 65 20 63 6f 72 65 20 77 69 6c 6c 0d 0a 20 20  te core will..  
12da0 20 20 20 20 20 20 2f 2f 2f 20 61 74 74 65 6d 70        /// attemp
12db0 74 20 74 6f 20 66 72 65 65 20 74 68 65 20 73 70  t to free the sp
12dc0 61 63 65 20 75 73 69 6e 67 20 73 71 6c 69 74 65  ace using sqlite
12dd0 33 5f 66 72 65 65 28 29 20 61 66 74 65 72 20 74  3_free() after t
12de0 68 65 20 65 72 72 6f 72 20 68 61 73 0d 0a 20 20  he error has..  
12df0 20 20 20 20 20 20 2f 2f 2f 20 62 65 65 6e 20 72        /// been r
12e00 65 70 6f 72 74 65 64 20 75 70 20 74 6f 20 74 68  eported up to th
12e10 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a  e application...
12e20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
12e30 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
12e40 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
12e50 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63   /// The xConnec
12e60 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  t method is requ
12e70 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
12e80 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
12e90 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
12ea0 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75 67 68  entation, though
12eb0 20 74 68 65 20 78 43 72 65 61 74 65 20 61 6e 64   the xCreate and
12ec0 20 78 43 6f 6e 6e 65 63 74 20 70 6f 69 6e 74 65   xConnect pointe
12ed0 72 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  rs of the..     
12ee0 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d     /// sqlite3_m
12ef0 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 6d 61 79  odule object may
12f00 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 73 61   point to the sa
12f10 6d 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 65 20  me function the 
12f20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20  virtual..       
12f30 20 2f 2f 2f 20 74 61 62 6c 65 20 64 6f 65 73 20   /// table does 
12f40 6e 6f 74 20 6e 65 65 64 20 74 6f 20 69 6e 69 74  not need to init
12f50 69 61 6c 69 7a 65 20 62 61 63 6b 69 6e 67 20 73  ialize backing s
12f60 74 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tore...        /
12f70 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
12f80 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
12f90 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
12fa0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62  <param name="pDb
12fb0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
12fc0 54 68 65 20 6e 61 74 69 76 65 20 64 61 74 61 62  The native datab
12fd0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
12fe0 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  andle...        
12ff0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
13000 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
13010 20 6e 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20   name="pAux">.. 
13020 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f         /// The o
13030 72 69 67 69 6e 61 6c 20 6e 61 74 69 76 65 20 70  riginal native p
13040 6f 69 6e 74 65 72 20 76 61 6c 75 65 20 74 68 61  ointer value tha
13050 74 20 77 61 73 20 70 72 6f 76 69 64 65 64 20 74  t was provided t
13060 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
13070 2f 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  // sqlite3_creat
13080 65 5f 6d 6f 64 75 6c 65 28 29 2c 20 73 71 6c 69  e_module(), sqli
13090 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
130a0 65 5f 76 32 28 29 20 6f 72 0d 0a 20 20 20 20 20  e_v2() or..     
130b0 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63     /// sqlite3_c
130c0 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65  reate_disposable
130d0 5f 6d 6f 64 75 6c 65 28 29 20 66 75 6e 63 74 69  _module() functi
130e0 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ons...        //
130f0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
13100 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13110 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20  ame="argc">..   
13120 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d       /// The num
13130 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
13140 20 66 72 6f 6d 20 74 68 65 20 43 52 45 41 54 45   from the CREATE
13150 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
13160 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20  tatement...     
13170 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
13180 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
13190 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e  ram name="argv">
131a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
131b0 65 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e  e array of strin
131c0 67 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  g arguments from
131d0 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54   the CREATE VIRT
131e0 55 41 4c 20 54 41 42 4c 45 0d 0a 20 20 20 20 20  UAL TABLE..     
131f0 20 20 20 2f 2f 2f 20 73 74 61 74 65 6d 65 6e 74     /// statement
13200 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
13210 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
13220 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
13230 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
13240 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
13250 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
13260 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
13270 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f  fied to point to
13280 20 74 68 65 20 6e 65 77 6c 79 0d 0a 20 20 20 20   the newly..    
13290 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 65 64 20      /// created 
132a0 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76  native sqlite3_v
132b0 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
132c0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
132d0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
132e0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
132f0 20 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d   name="pError">.
13300 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f  .        /// Upo
13310 6e 20 66 61 69 6c 75 72 65 2c 20 74 68 69 73 20  n failure, this 
13320 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62  parameter must b
13330 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f  e modified to po
13340 69 6e 74 20 74 6f 20 74 68 65 20 65 72 72 6f 72  int to the error
13350 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
13360 73 73 61 67 65 2c 20 77 69 74 68 20 74 68 65 20  ssage, with the 
13370 75 6e 64 65 72 6c 79 69 6e 67 20 6d 65 6d 6f 72  underlying memor
13380 79 20 68 61 76 69 6e 67 20 62 65 65 6e 20 6f 62  y having been ob
13390 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d  tained from the.
133a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
133b0 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 66 75  ite3_malloc() fu
133c0 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  nction...       
133d0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
133e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
133f0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
13400 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
13410 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
13420 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
13430 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
13440 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
13450 65 20 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  e xConnect(..   
13460 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
13470 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  pDb,..          
13480 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a    IntPtr pAux,..
13490 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
134a0 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20  argc,..         
134b0 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 2c 0d     IntPtr argv,.
134c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
134d0 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
134e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
134f0 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a 20  IntPtr pError.. 
13500 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
13510 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
13520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
13570 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
13580 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
13590 20 20 20 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74         /// SQLit
135a0 65 20 75 73 65 73 20 74 68 65 20 78 42 65 73 74  e uses the xBest
135b0 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 6f 66 20  Index method of 
135c0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
135d0 6d 6f 64 75 6c 65 20 74 6f 0d 0a 20 20 20 20 20  module to..     
135e0 20 20 20 2f 2f 2f 20 64 65 74 65 72 6d 69 6e 65     /// determine
135f0 20 74 68 65 20 62 65 73 74 20 77 61 79 20 74 6f   the best way to
13600 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
13610 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 65 20 78  ual table. The x
13620 42 65 73 74 49 6e 64 65 78 0d 0a 20 20 20 20 20  BestIndex..     
13630 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 68 61     /// method ha
13640 73 20 61 20 70 72 6f 74 6f 74 79 70 65 20 6c 69  s a prototype li
13650 6b 65 20 74 68 69 73 3a 0d 0a 20 20 20 20 20 20  ke this:..      
13660 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
13670 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65         /// <code
13680 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  >..        /// i
13690 6e 74 20 28 2a 78 42 65 73 74 49 6e 64 65 78 29  nt (*xBestIndex)
136a0 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70  (sqlite3_vtab *p
136b0 56 54 61 62 2c 20 73 71 6c 69 74 65 33 5f 69 6e  VTab, sqlite3_in
136c0 64 65 78 5f 69 6e 66 6f 2a 29 3b 0d 0a 20 20 20  dex_info*);..   
136d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
136e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
136f0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
13700 2f 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72  / The SQLite cor
13710 65 20 63 6f 6d 6d 75 6e 69 63 61 74 65 73 20 77  e communicates w
13720 69 74 68 20 74 68 65 20 78 42 65 73 74 49 6e 64  ith the xBestInd
13730 65 78 20 6d 65 74 68 6f 64 20 62 79 20 66 69 6c  ex method by fil
13740 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ling..        //
13750 2f 20 69 6e 20 63 65 72 74 61 69 6e 20 66 69 65  / in certain fie
13760 6c 64 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  lds of the sqlit
13770 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74  e3_index_info st
13780 72 75 63 74 75 72 65 20 61 6e 64 20 70 61 73 73  ructure and pass
13790 69 6e 67 20 61 0d 0a 20 20 20 20 20 20 20 20 2f  ing a..        /
137a0 2f 2f 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  // pointer to th
137b0 61 74 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  at structure int
137c0 6f 20 78 42 65 73 74 49 6e 64 65 78 20 61 73 20  o xBestIndex as 
137d0 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d  the second param
137e0 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  eter...        /
137f0 2f 2f 20 54 68 65 20 78 42 65 73 74 49 6e 64 65  // The xBestInde
13800 78 20 6d 65 74 68 6f 64 20 66 69 6c 6c 73 20 6f  x method fills o
13810 75 74 20 6f 74 68 65 72 20 66 69 65 6c 64 73 20  ut other fields 
13820 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
13830 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  e..        /// w
13840 68 69 63 68 20 66 6f 72 6d 73 20 74 68 65 20 72  hich forms the r
13850 65 70 6c 79 2e 20 54 68 65 20 73 71 6c 69 74 65  eply. The sqlite
13860 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72  3_index_info str
13870 75 63 74 75 72 65 20 6c 6f 6f 6b 73 20 6c 69 6b  ucture looks lik
13880 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
13890 68 69 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  his:..        //
138a0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
138b0 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20     /// <code>.. 
138c0 20 20 20 20 20 20 20 2f 2f 2f 20 20 73 74 72 75         ///  stru
138d0 63 74 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ct sqlite3_index
138e0 5f 69 6e 66 6f 20 7b 0d 0a 20 20 20 20 20 20 20  _info {..       
138f0 20 2f 2f 2f 20 20 20 20 2f 2a 20 49 6e 70 75 74   ///    /* Input
13900 73 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s */..        //
13910 2f 20 20 20 20 63 6f 6e 73 74 20 69 6e 74 20 6e  /    const int n
13920 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 2f 2a  Constraint;   /*
13930 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
13940 65 73 20 69 6e 20 61 43 6f 6e 73 74 72 61 69 6e  es in aConstrain
13950 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t */..        //
13960 2f 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63  /    const struc
13970 74 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  t sqlite3_index_
13980 63 6f 6e 73 74 72 61 69 6e 74 20 7b 0d 0a 20 20  constraint {..  
13990 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
139a0 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
139b0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
139c0 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64  on left-hand sid
139d0 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e of..        //
139e0 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /               
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13a00 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0d 0a   constraint */..
13a10 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
13a20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20    unsigned char 
13a30 6f 70 3b 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74  op;     /* Const
13a40 72 61 69 6e 74 20 6f 70 65 72 61 74 6f 72 20 2a  raint operator *
13a50 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  /..        ///  
13a60 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68       unsigned ch
13a70 61 72 20 75 73 61 62 6c 65 3b 20 2f 2a 20 54 72  ar usable; /* Tr
13a80 75 65 20 69 66 20 74 68 69 73 20 63 6f 6e 73 74  ue if this const
13a90 72 61 69 6e 74 20 69 73 20 75 73 61 62 6c 65 20  raint is usable 
13aa0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
13ab0 20 20 20 20 20 20 69 6e 74 20 69 54 65 72 6d 4f        int iTermO
13ac0 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 55  ffset;      /* U
13ad0 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2d  sed internally -
13ae0 20 78 42 65 73 74 49 6e 64 65 78 20 73 68 6f 75   xBestIndex shou
13af0 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ld..        /// 
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 69               * i
13b20 67 6e 6f 72 65 20 2a 2f 0d 0a 20 20 20 20 20 20  gnore */..      
13b30 20 20 2f 2f 2f 20 20 20 20 7d 20 2a 63 6f 6e 73    ///    } *cons
13b40 74 20 61 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  t aConstraint;  
13b50 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 57 48    /* Table of WH
13b60 45 52 45 20 63 6c 61 75 73 65 20 63 6f 6e 73 74  ERE clause const
13b70 72 61 69 6e 74 73 20 2a 2f 0d 0a 20 20 20 20 20  raints */..     
13b80 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73 74 20     ///    const 
13b90 69 6e 74 20 6e 4f 72 64 65 72 42 79 3b 20 20 20  int nOrderBy;   
13ba0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13bb0 74 65 72 6d 73 20 69 6e 20 74 68 65 20 4f 52 44  terms in the ORD
13bc0 45 52 20 42 59 0d 0a 20 20 20 20 20 20 20 20 2f  ER BY..        /
13bd0 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  //              
13be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bf0 2a 20 63 6c 61 75 73 65 20 2a 2f 0d 0a 20 20 20  * clause */..   
13c00 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73       ///    cons
13c10 74 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  t struct sqlite3
13c20 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 7b  _index_orderby {
13c30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
13c40 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
13c50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
13c60 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0d 0a 20  umn number */.. 
13c70 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
13c80 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 64   unsigned char d
13c90 65 73 63 3b 20 20 20 2f 2a 20 54 72 75 65 20 66  esc;   /* True f
13ca0 6f 72 20 44 45 53 43 2e 20 20 46 61 6c 73 65 20  or DESC.  False 
13cb0 66 6f 72 20 41 53 43 2e 20 2a 2f 0d 0a 20 20 20  for ASC. */..   
13cc0 20 20 20 20 20 2f 2f 2f 20 20 20 20 7d 20 2a 63       ///    } *c
13cd0 6f 6e 73 74 20 61 4f 72 64 65 72 42 79 3b 20 20  onst aOrderBy;  
13ce0 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45       /* The ORDE
13cf0 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0d 0a  R BY clause */..
13d00 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 2f          ///    /
13d10 2a 20 4f 75 74 70 75 74 73 20 2a 2f 0d 0a 20 20  * Outputs */..  
13d20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 73 74 72        ///    str
13d30 75 63 74 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  uct sqlite3_inde
13d40 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61  x_constraint_usa
13d50 67 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ge {..        //
13d60 2f 20 20 20 20 20 20 69 6e 74 20 61 72 67 76 49  /      int argvI
13d70 6e 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  ndex;         /*
13d80 20 69 66 20 67 72 65 61 74 65 72 20 74 68 61 6e   if greater than
13d90 20 7a 65 72 6f 2c 20 63 6f 6e 73 74 72 61 69 6e   zero, constrain
13da0 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t is..        //
13db0 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /               
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13dd0 20 70 61 72 74 20 6f 66 20 61 72 67 76 20 74 6f   part of argv to
13de0 20 78 46 69 6c 74 65 72 20 2a 2f 0d 0a 20 20 20   xFilter */..   
13df0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 75 6e       ///      un
13e00 73 69 67 6e 65 64 20 63 68 61 72 20 6f 6d 69 74  signed char omit
13e10 3b 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 63  ;    /* Do not c
13e20 6f 64 65 20 61 20 74 65 73 74 20 66 6f 72 20 74  ode a test for t
13e30 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20                * 
13e60 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0d 0a 20  constraint */.. 
13e70 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 7d 20         ///    } 
13e80 2a 63 6f 6e 73 74 20 61 43 6f 6e 73 74 72 61 69  *const aConstrai
13e90 6e 74 55 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  ntUsage;..      
13ea0 20 20 2f 2f 2f 20 20 20 20 69 6e 74 20 69 64 78    ///    int idx
13eb0 4e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Num;            
13ec0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 75 73 65 64    /* Number used
13ed0 20 74 6f 20 69 64 65 6e 74 69 66 79 20 74 68 65   to identify the
13ee0 20 69 6e 64 65 78 20 2a 2f 0d 0a 20 20 20 20 20   index */..     
13ef0 20 20 20 2f 2f 2f 20 20 20 20 63 68 61 72 20 2a     ///    char *
13f00 69 64 78 53 74 72 3b 20 20 20 20 20 20 20 20 20  idxStr;         
13f10 20 20 20 2f 2a 20 53 74 72 69 6e 67 2c 20 70 6f     /* String, po
13f20 73 73 69 62 6c 79 20 6f 62 74 61 69 6e 65 64 20  ssibly obtained 
13f30 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 2f 2f  from..        //
13f40 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /               
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13f60 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
13f70 29 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ) */..        //
13f80 2f 20 20 20 20 69 6e 74 20 6e 65 65 64 54 6f 46  /    int needToF
13f90 72 65 65 49 64 78 53 74 72 3b 20 20 20 20 2f 2a  reeIdxStr;    /*
13fa0 20 46 72 65 65 20 69 64 78 53 74 72 20 75 73 69   Free idxStr usi
13fb0 6e 67 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  ng sqlite3_free(
13fc0 29 20 69 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ) if..        //
13fd0 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /               
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13ff0 20 74 72 75 65 20 2a 2f 0d 0a 20 20 20 20 20 20   true */..      
14000 20 20 2f 2f 2f 20 20 20 20 69 6e 74 20 6f 72 64    ///    int ord
14010 65 72 42 79 43 6f 6e 73 75 6d 65 64 3b 20 20 20  erByConsumed;   
14020 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 75 74    /* True if out
14030 70 75 74 20 69 73 20 61 6c 72 65 61 64 79 20 6f  put is already o
14040 72 64 65 72 65 64 20 2a 2f 0d 0a 20 20 20 20 20  rdered */..     
14050 20 20 20 2f 2f 2f 20 20 20 20 64 6f 75 62 6c 65     ///    double
14060 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74 3b 20   estimatedCost; 
14070 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
14080 63 6f 73 74 20 6f 66 20 75 73 69 6e 67 20 74 68  cost of using th
14090 69 73 20 69 6e 64 65 78 20 2a 2f 0d 0a 20 20 20  is index */..   
140a0 20 20 20 20 20 2f 2f 2f 20 20 7d 3b 0d 0a 20 20       ///  };..  
140b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65        /// </code
140c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
140d0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
140e0 2f 2f 20 49 6e 20 61 64 64 69 74 69 6f 6e 2c 20  // In addition, 
140f0 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 64  there are some d
14100 65 66 69 6e 65 64 20 63 6f 6e 73 74 61 6e 74 73  efined constants
14110 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  :..        /// <
14120 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
14130 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
14140 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65      ///  #define
14150 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f   SQLITE_INDEX_CO
14160 4e 53 54 52 41 49 4e 54 5f 45 51 20 20 20 20 32  NSTRAINT_EQ    2
14170 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 23  ..        ///  #
14180 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
14190 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 47  DEX_CONSTRAINT_G
141a0 54 20 20 20 20 34 0d 0a 20 20 20 20 20 20 20 20  T    4..        
141b0 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51 4c  ///  #define SQL
141c0 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52  ITE_INDEX_CONSTR
141d0 41 49 4e 54 5f 4c 45 20 20 20 20 38 0d 0a 20 20  AINT_LE    8..  
141e0 20 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69        ///  #defi
141f0 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f  ne SQLITE_INDEX_
14200 43 4f 4e 53 54 52 41 49 4e 54 5f 4c 54 20 20 20  CONSTRAINT_LT   
14210 20 31 36 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   16..        ///
14220 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
14230 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e  _INDEX_CONSTRAIN
14240 54 5f 47 45 20 20 20 20 33 32 0d 0a 20 20 20 20  T_GE    32..    
14250 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65      ///  #define
14260 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f   SQLITE_INDEX_CO
14270 4e 53 54 52 41 49 4e 54 5f 4d 41 54 43 48 20 36  NSTRAINT_MATCH 6
14280 34 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  4..        /// <
14290 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
142a0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
142b0 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c 69      /// The SQLi
142c0 74 65 20 63 6f 72 65 20 63 61 6c 6c 73 20 74 68  te core calls th
142d0 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74  e xBestIndex met
142e0 68 6f 64 20 77 68 65 6e 20 69 74 20 69 73 20 63  hod when it is c
142f0 6f 6d 70 69 6c 69 6e 67 20 61 0d 0a 20 20 20 20  ompiling a..    
14300 20 20 20 20 2f 2f 2f 20 71 75 65 72 79 20 74 68      /// query th
14310 61 74 20 69 6e 76 6f 6c 76 65 73 20 61 20 76 69  at involves a vi
14320 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 49 6e 20  rtual table. In 
14330 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 51 4c  other words, SQL
14340 69 74 65 20 63 61 6c 6c 73 0d 0a 20 20 20 20 20  ite calls..     
14350 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74 68     /// this meth
14360 6f 64 20 77 68 65 6e 20 69 74 20 69 73 20 72 75  od when it is ru
14370 6e 6e 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  nning sqlite3_pr
14380 65 70 61 72 65 28 29 20 6f 72 20 74 68 65 20 65  epare() or the e
14390 71 75 69 76 61 6c 65 6e 74 2e 0d 0a 20 20 20 20  quivalent...    
143a0 20 20 20 20 2f 2f 2f 20 42 79 20 63 61 6c 6c 69      /// By calli
143b0 6e 67 20 74 68 69 73 20 6d 65 74 68 6f 64 2c 20  ng this method, 
143c0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
143d0 69 73 20 73 61 79 69 6e 67 20 74 6f 20 74 68 65  is saying to the
143e0 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20   virtual..      
143f0 20 20 2f 2f 2f 20 74 61 62 6c 65 20 74 68 61 74    /// table that
14400 20 69 74 20 6e 65 65 64 73 20 74 6f 20 61 63 63   it needs to acc
14410 65 73 73 20 73 6f 6d 65 20 73 75 62 73 65 74 20  ess some subset 
14420 6f 66 20 74 68 65 20 72 6f 77 73 20 69 6e 20 74  of the rows in t
14430 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
14440 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 61 6e  virtual table an
14450 64 20 69 74 20 77 61 6e 74 73 20 74 6f 20 6b 6e  d it wants to kn
14460 6f 77 20 74 68 65 20 6d 6f 73 74 20 65 66 66 69  ow the most effi
14470 63 69 65 6e 74 20 77 61 79 20 74 6f 20 64 6f 0d  cient way to do.
14480 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61  .        /// tha
14490 74 20 61 63 63 65 73 73 2e 20 54 68 65 20 78 42  t access. The xB
144a0 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
144b0 72 65 70 6c 69 65 73 20 77 69 74 68 20 69 6e 66  replies with inf
144c0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0d 0a 20  ormation that.. 
144d0 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 53         /// the S
144e0 51 4c 69 74 65 20 63 6f 72 65 20 63 61 6e 20 74  QLite core can t
144f0 68 65 6e 20 75 73 65 20 74 6f 20 63 6f 6e 64 75  hen use to condu
14500 63 74 20 61 6e 20 65 66 66 69 63 69 65 6e 74 20  ct an efficient 
14510 73 65 61 72 63 68 20 6f 66 20 74 68 65 0d 0a 20  search of the.. 
14520 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75         /// virtu
14530 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
14540 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
14550 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
14560 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14570 57 68 69 6c 65 20 63 6f 6d 70 69 6c 69 6e 67 20  While compiling 
14580 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 71 75 65  a single SQL que
14590 72 79 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63  ry, the SQLite c
145a0 6f 72 65 20 6d 69 67 68 74 20 63 61 6c 6c 0d 0a  ore might call..
145b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 42 65 73          /// xBes
145c0 74 49 6e 64 65 78 20 6d 75 6c 74 69 70 6c 65 20  tIndex multiple 
145d0 74 69 6d 65 73 20 77 69 74 68 20 64 69 66 66 65  times with diffe
145e0 72 65 6e 74 20 73 65 74 74 69 6e 67 73 20 69 6e  rent settings in
145f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
14600 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
14610 2e 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72  . The SQLite cor
14620 65 20 77 69 6c 6c 20 74 68 65 6e 20 73 65 6c 65  e will then sele
14630 63 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ct the..        
14640 2f 2f 2f 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  /// combination 
14650 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20  that appears to 
14660 67 69 76 65 20 74 68 65 20 62 65 73 74 20 70 65  give the best pe
14670 72 66 6f 72 6d 61 6e 63 65 2e 0d 0a 20 20 20 20  rformance...    
14680 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
14690 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
146a0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
146b0 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20   Before calling 
146c0 74 68 69 73 20 6d 65 74 68 6f 64 2c 20 74 68 65  this method, the
146d0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69 6e 69   SQLite core ini
146e0 74 69 61 6c 69 7a 65 73 20 61 6e 20 69 6e 73 74  tializes an inst
146f0 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
14700 2f 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  / of the sqlite3
14710 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75  _index_info stru
14720 63 74 75 72 65 20 77 69 74 68 20 69 6e 66 6f 72  cture with infor
14730 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
14740 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 71 75  ..        /// qu
14750 65 72 79 20 74 68 61 74 20 69 74 20 69 73 20 63  ery that it is c
14760 75 72 72 65 6e 74 6c 79 20 74 72 79 69 6e 67 20  urrently trying 
14770 74 6f 20 70 72 6f 63 65 73 73 2e 20 54 68 69 73  to process. This
14780 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20 20   information..  
14790 20 20 20 20 20 20 2f 2f 2f 20 64 65 72 69 76 65        /// derive
147a0 73 20 6d 61 69 6e 6c 79 20 66 72 6f 6d 20 74 68  s mainly from th
147b0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 61  e WHERE clause a
147c0 6e 64 20 4f 52 44 45 52 20 42 59 20 6f 72 20 47  nd ORDER BY or G
147d0 52 4f 55 50 20 42 59 0d 0a 20 20 20 20 20 20 20  ROUP BY..       
147e0 20 2f 2f 2f 20 63 6c 61 75 73 65 73 20 6f 66 20   /// clauses of 
147f0 74 68 65 20 71 75 65 72 79 2c 20 62 75 74 20 61  the query, but a
14800 6c 73 6f 20 66 72 6f 6d 20 61 6e 79 20 4f 4e 20  lso from any ON 
14810 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 73  or USING clauses
14820 20 69 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   if the..       
14830 20 2f 2f 2f 20 71 75 65 72 79 20 69 73 20 61 20   /// query is a 
14840 6a 6f 69 6e 2e 20 54 68 65 20 69 6e 66 6f 72 6d  join. The inform
14850 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 53  ation that the S
14860 51 4c 69 74 65 20 63 6f 72 65 20 70 72 6f 76 69  QLite core provi
14870 64 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  des to..        
14880 2f 2f 2f 20 74 68 65 20 78 42 65 73 74 49 6e 64  /// the xBestInd
14890 65 78 20 6d 65 74 68 6f 64 20 69 73 20 68 65 6c  ex method is hel
148a0 64 20 69 6e 20 74 68 65 20 70 61 72 74 20 6f 66  d in the part of
148b0 20 74 68 65 20 73 74 72 75 63 74 75 72 65 20 74   the structure t
148c0 68 61 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20  hat is..        
148d0 2f 2f 2f 20 6d 61 72 6b 65 64 20 61 73 20 22 49  /// marked as "I
148e0 6e 70 75 74 73 22 2e 20 54 68 65 20 22 4f 75 74  nputs". The "Out
148f0 70 75 74 73 22 20 73 65 63 74 69 6f 6e 20 69 73  puts" section is
14900 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
14910 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2f  zero...        /
14920 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
14930 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
14940 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
14950 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74  information in t
14960 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  he sqlite3_index
14970 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  _info structure 
14980 69 73 20 65 70 68 65 6d 65 72 61 6c 0d 0a 20 20  is ephemeral..  
14990 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20 6d 61        /// and ma
149a0 79 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  y be overwritten
149b0 20 6f 72 20 64 65 61 6c 6c 6f 63 61 74 65 64 20   or deallocated 
149c0 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 78  as soon as the x
149d0 42 65 73 74 49 6e 64 65 78 0d 0a 20 20 20 20 20  BestIndex..     
149e0 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 72 65     /// method re
149f0 74 75 72 6e 73 2e 20 49 66 20 74 68 65 20 78 42  turns. If the xB
14a00 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
14a10 6e 65 65 64 73 20 74 6f 20 72 65 6d 65 6d 62 65  needs to remembe
14a20 72 20 61 6e 79 20 70 61 72 74 0d 0a 20 20 20 20  r any part..    
14a30 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20 73      /// of the s
14a40 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
14a50 6f 20 73 74 72 75 63 74 75 72 65 2c 20 69 74 20  o structure, it 
14a60 73 68 6f 75 6c 64 20 6d 61 6b 65 20 61 20 63 6f  should make a co
14a70 70 79 2e 20 43 61 72 65 0d 0a 20 20 20 20 20 20  py. Care..      
14a80 20 20 2f 2f 2f 20 6d 75 73 74 20 62 65 20 74 61    /// must be ta
14a90 6b 65 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ke to store the 
14aa0 63 6f 70 79 20 69 6e 20 61 20 70 6c 61 63 65 20  copy in a place 
14ab0 77 68 65 72 65 20 69 74 20 77 69 6c 6c 20 62 65  where it will be
14ac0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65  ..        /// de
14ad0 61 6c 6c 6f 63 61 74 65 64 2c 20 73 75 63 68 20  allocated, such 
14ae0 61 73 20 69 6e 20 74 68 65 20 69 64 78 53 74 72  as in the idxStr
14af0 20 66 69 65 6c 64 20 77 69 74 68 20 6e 65 65 64   field with need
14b00 54 6f 46 72 65 65 49 64 78 53 74 72 20 73 65 74  ToFreeIdxStr set
14b10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f  ..        /// to
14b20 20 31 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   1...        ///
14b30 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
14b40 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
14b50 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 74 65 20 74        /// Note t
14b60 68 61 74 20 78 42 65 73 74 49 6e 64 65 78 20 77  hat xBestIndex w
14b70 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 63 61  ill always be ca
14b80 6c 6c 65 64 20 62 65 66 6f 72 65 20 78 46 69 6c  lled before xFil
14b90 74 65 72 2c 20 73 69 6e 63 65 0d 0a 20 20 20 20  ter, since..    
14ba0 20 20 20 20 2f 2f 2f 20 74 68 65 20 69 64 78 4e      /// the idxN
14bb0 75 6d 20 61 6e 64 20 69 64 78 53 74 72 20 6f 75  um and idxStr ou
14bc0 74 70 75 74 73 20 66 72 6f 6d 20 78 42 65 73 74  tputs from xBest
14bd0 49 6e 64 65 78 20 61 72 65 20 72 65 71 75 69 72  Index are requir
14be0 65 64 20 69 6e 70 75 74 73 0d 0a 20 20 20 20 20  ed inputs..     
14bf0 20 20 20 2f 2f 2f 20 74 6f 20 78 46 69 6c 74 65     /// to xFilte
14c00 72 2e 20 48 6f 77 65 76 65 72 2c 20 74 68 65 72  r. However, ther
14c10 65 20 69 73 20 6e 6f 20 67 75 61 72 61 6e 74 65  e is no guarante
14c20 65 20 74 68 61 74 20 78 46 69 6c 74 65 72 20 77  e that xFilter w
14c30 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
14c40 2f 2f 2f 20 63 61 6c 6c 65 64 20 66 6f 6c 6c 6f  /// called follo
14c50 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
14c60 6c 20 78 42 65 73 74 49 6e 64 65 78 2e 0d 0a 20  l xBestIndex... 
14c70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
14c80 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14c90 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
14ca0 2f 2f 2f 20 54 68 65 20 78 42 65 73 74 49 6e 64  /// The xBestInd
14cb0 65 78 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71  ex method is req
14cc0 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20  uired for every 
14cd0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
14ce0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
14cf0 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
14d00 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
14d10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
14d20 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
14d30 20 32 2e 33 2e 31 20 49 6e 70 75 74 73 0d 0a 20   2.3.1 Inputs.. 
14d40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
14d50 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14d60 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
14d70 2f 2f 2f 20 54 68 65 20 6d 61 69 6e 20 74 68 69  /// The main thi
14d80 6e 67 20 74 68 61 74 20 74 68 65 20 53 51 4c 69  ng that the SQLi
14d90 74 65 20 63 6f 72 65 20 69 73 20 74 72 79 69 6e  te core is tryin
14da0 67 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  g to communicate
14db0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
14dc0 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62   /// virtual tab
14dd0 6c 65 20 69 73 20 74 68 65 20 63 6f 6e 73 74 72  le is the constr
14de0 61 69 6e 74 73 20 74 68 61 74 20 61 72 65 20 61  aints that are a
14df0 76 61 69 6c 61 62 6c 65 20 74 6f 20 6c 69 6d 69  vailable to limi
14e00 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  t the..        /
14e10 2f 2f 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  // number of row
14e20 73 20 74 68 61 74 20 6e 65 65 64 20 74 6f 20 62  s that need to b
14e30 65 20 73 65 61 72 63 68 65 64 2e 20 54 68 65 20  e searched. The 
14e40 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 61 72  aConstraint[] ar
14e50 72 61 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ray..        ///
14e60 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 65 6e   contains one en
14e70 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6e  try for each con
14e80 73 74 72 61 69 6e 74 2e 20 54 68 65 72 65 20 77  straint. There w
14e90 69 6c 6c 20 62 65 20 65 78 61 63 74 6c 79 0d 0a  ill be exactly..
14ea0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 43 6f 6e          /// nCon
14eb0 73 74 72 61 69 6e 74 20 65 6e 74 72 69 65 73 20  straint entries 
14ec0 69 6e 20 74 68 61 74 20 61 72 72 61 79 2e 0d 0a  in that array...
14ed0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
14ee0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
14ef0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
14f00 20 2f 2f 2f 20 45 61 63 68 20 63 6f 6e 73 74 72   /// Each constr
14f10 61 69 6e 74 20 77 69 6c 6c 20 63 6f 72 72 65 73  aint will corres
14f20 70 6f 6e 64 20 74 6f 20 61 20 74 65 72 6d 20 69  pond to a term i
14f30 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  n the WHERE clau
14f40 73 65 20 6f 72 20 69 6e 0d 0a 20 20 20 20 20 20  se or in..      
14f50 20 20 2f 2f 2f 20 61 20 55 53 49 4e 47 20 6f 72    /// a USING or
14f60 20 4f 4e 20 63 6c 61 75 73 65 20 74 68 61 74 20   ON clause that 
14f70 69 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 0d 0a  is of the form..
14f80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
14f90 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
14fa0 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20   <code>..       
14fb0 20 2f 2f 2f 20 20 20 20 20 63 6f 6c 75 6d 6e 20   ///     column 
14fc0 4f 50 20 45 58 50 52 0d 0a 20 20 20 20 20 20 20  OP EXPR..       
14fd0 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
14fe0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
14ff0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 57 68  ..        /// Wh
15000 65 72 65 20 22 63 6f 6c 75 6d 6e 22 20 69 73 20  ere "column" is 
15010 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  a column in the 
15020 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20 4f  virtual table, O
15030 50 20 69 73 20 61 6e 20 6f 70 65 72 61 74 6f 72  P is an operator
15040 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69  ..        /// li
15050 6b 65 20 22 3d 22 20 6f 72 20 22 26 6c 74 3b 22  ke "=" or "&lt;"
15060 2c 20 61 6e 64 20 45 58 50 52 20 69 73 20 61 6e  , and EXPR is an
15070 20 61 72 62 69 74 72 61 72 79 20 65 78 70 72 65   arbitrary expre
15080 73 73 69 6f 6e 2e 20 53 6f 2c 20 66 6f 72 0d 0a  ssion. So, for..
15090 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 78 61 6d          /// exam
150a0 70 6c 65 2c 20 69 66 20 74 68 65 20 57 48 45 52  ple, if the WHER
150b0 45 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e  E clause contain
150c0 65 64 20 61 20 74 65 72 6d 20 6c 69 6b 65 20 74  ed a term like t
150d0 68 69 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  his:..        //
150e0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
150f0 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20     /// <code>.. 
15100 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
15110 20 20 20 20 61 20 3d 20 35 0d 0a 20 20 20 20 20      a = 5..     
15120 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a     /// </code>..
15130 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
15140 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
15150 54 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  Then one of the 
15160 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 6f 75 6c  constraints woul
15170 64 20 62 65 20 6f 6e 20 74 68 65 20 22 61 22 20  d be on the "a" 
15180 63 6f 6c 75 6d 6e 20 77 69 74 68 0d 0a 20 20 20  column with..   
15190 20 20 20 20 20 2f 2f 2f 20 6f 70 65 72 61 74 6f       /// operato
151a0 72 20 22 3d 22 20 61 6e 64 20 61 6e 20 65 78 70  r "=" and an exp
151b0 72 65 73 73 69 6f 6e 20 6f 66 20 22 35 22 2e 20  ression of "5". 
151c0 43 6f 6e 73 74 72 61 69 6e 74 73 20 6e 65 65 64  Constraints need
151d0 20 6e 6f 74 20 68 61 76 65 20 61 0d 0a 20 20 20   not have a..   
151e0 20 20 20 20 20 2f 2f 2f 20 6c 69 74 65 72 61 6c       /// literal
151f0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
15200 6f 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  of the WHERE cla
15210 75 73 65 2e 20 54 68 65 20 71 75 65 72 79 20 6f  use. The query o
15220 70 74 69 6d 69 7a 65 72 0d 0a 20 20 20 20 20 20  ptimizer..      
15230 20 20 2f 2f 2f 20 6d 69 67 68 74 20 6d 61 6b 65    /// might make
15240 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 73   transformations
15250 20 74 6f 20 74 68 65 20 57 48 45 52 45 20 63 6c   to the WHERE cl
15260 61 75 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  ause in order to
15270 20 65 78 74 72 61 63 74 0d 0a 20 20 20 20 20 20   extract..      
15280 20 20 2f 2f 2f 20 61 73 20 6d 61 6e 79 20 63 6f    /// as many co
15290 6e 73 74 72 61 69 6e 74 73 20 61 73 20 69 74 20  nstraints as it 
152a0 63 61 6e 2e 20 53 6f 2c 20 66 6f 72 20 65 78 61  can. So, for exa
152b0 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 57 48 45  mple, if the WHE
152c0 52 45 20 63 6c 61 75 73 65 0d 0a 20 20 20 20 20  RE clause..     
152d0 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 65 64     /// contained
152e0 20 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 20   something like 
152f0 74 68 69 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f  this:..        /
15300 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
15310 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
15320 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
15330 20 20 20 20 20 78 20 42 45 54 57 45 45 4e 20 31       x BETWEEN 1
15340 30 20 41 4e 44 20 31 30 30 20 41 4e 44 20 39 39  0 AND 100 AND 99
15350 39 26 67 74 3b 79 0d 0a 20 20 20 20 20 20 20 20  9&gt;y..        
15360 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20  /// </code>..   
15370 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
15380 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
15390 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
153a0 20 6d 69 67 68 74 20 74 72 61 6e 73 6c 61 74 65   might translate
153b0 20 74 68 69 73 20 69 6e 74 6f 20 74 68 72 65 65   this into three
153c0 20 73 65 70 61 72 61 74 65 0d 0a 20 20 20 20 20   separate..     
153d0 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 61 69 6e     /// constrain
153e0 74 73 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ts:..        ///
153f0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
15400 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20    /// <code>..  
15410 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
15420 20 20 20 78 20 26 67 74 3b 3d 20 31 30 0d 0a 20     x &gt;= 10.. 
15430 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
15440 20 20 20 20 78 20 26 6c 74 3b 3d 20 31 30 30 0d      x &lt;= 100.
15450 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
15460 20 20 20 20 20 20 79 20 26 6c 74 3b 20 39 39 39        y &lt; 999
15470 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15480 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
15490 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
154a0 20 20 20 2f 2f 2f 20 46 6f 72 20 65 61 63 68 20     /// For each 
154b0 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20  constraint, the 
154c0 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 2e 69 43  aConstraint[].iC
154d0 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 6e 64 69  olumn field indi
154e0 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20 2f  cates..        /
154f0 2f 2f 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 20  // which column 
15500 61 70 70 65 61 72 73 20 6f 6e 20 74 68 65 20 6c  appears on the l
15510 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
15520 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e   the constraint.
15530 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   The..        //
15540 2f 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  / first column o
15550 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
15560 62 6c 65 20 69 73 20 63 6f 6c 75 6d 6e 20 30 2e  ble is column 0.
15570 20 54 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   The rowid of th
15580 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
15590 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20  irtual table is 
155a0 63 6f 6c 75 6d 6e 20 2d 31 2e 20 54 68 65 20 61  column -1. The a
155b0 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 2e 6f 70 20  Constraint[].op 
155c0 66 69 65 6c 64 20 69 6e 64 69 63 61 74 65 73 0d  field indicates.
155d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68 69  .        /// whi
155e0 63 68 20 6f 70 65 72 61 74 6f 72 20 69 73 20 75  ch operator is u
155f0 73 65 64 2e 20 54 68 65 20 53 51 4c 49 54 45 5f  sed. The SQLITE_
15600 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54  INDEX_CONSTRAINT
15610 5f 2a 20 63 6f 6e 73 74 61 6e 74 73 20 6d 61 70  _* constants map
15620 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
15630 74 65 67 65 72 20 63 6f 6e 73 74 61 6e 74 73 20  teger constants 
15640 69 6e 74 6f 20 6f 70 65 72 61 74 6f 72 20 76 61  into operator va
15650 6c 75 65 73 2e 20 43 6f 6c 75 6d 6e 73 20 6f 63  lues. Columns oc
15660 63 75 72 20 69 6e 20 74 68 65 20 6f 72 64 65 72  cur in the order
15670 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
15680 65 79 20 77 65 72 65 20 64 65 66 69 6e 65 64 20  ey were defined 
15690 62 79 20 74 68 65 20 63 61 6c 6c 20 74 6f 20 73  by the call to s
156a0 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
156b0 74 61 62 28 29 20 69 6e 20 74 68 65 0d 0a 20 20  tab() in the..  
156c0 20 20 20 20 20 20 2f 2f 2f 20 78 43 72 65 61 74        /// xCreat
156d0 65 20 6f 72 20 78 43 6f 6e 6e 65 63 74 20 6d 65  e or xConnect me
156e0 74 68 6f 64 2e 20 48 69 64 64 65 6e 20 63 6f 6c  thod. Hidden col
156f0 75 6d 6e 73 20 61 72 65 20 63 6f 75 6e 74 65 64  umns are counted
15700 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f   when..        /
15710 2f 2f 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 74  // determining t
15720 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e  he column index.
15730 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15740 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15750 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
15760 20 20 20 2f 2f 2f 20 54 68 65 20 61 43 6f 6e 73     /// The aCons
15770 74 72 61 69 6e 74 5b 5d 20 61 72 72 61 79 20 63  traint[] array c
15780 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
15790 69 6f 6e 20 61 62 6f 75 74 20 61 6c 6c 20 63 6f  ion about all co
157a0 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 20 20  nstraints..     
157b0 20 20 20 2f 2f 2f 20 74 68 61 74 20 61 70 70 6c     /// that appl
157c0 79 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c  y to the virtual
157d0 20 74 61 62 6c 65 2e 20 42 75 74 20 73 6f 6d 65   table. But some
157e0 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
157f0 6e 74 73 20 6d 69 67 68 74 0d 0a 20 20 20 20 20  nts might..     
15800 20 20 20 2f 2f 2f 20 6e 6f 74 20 62 65 20 75 73     /// not be us
15810 61 62 6c 65 20 62 65 63 61 75 73 65 20 6f 66 20  able because of 
15820 74 68 65 20 77 61 79 20 74 61 62 6c 65 73 20 61  the way tables a
15830 72 65 20 6f 72 64 65 72 65 64 20 69 6e 20 61 20  re ordered in a 
15840 6a 6f 69 6e 2e 20 54 68 65 0d 0a 20 20 20 20 20  join. The..     
15850 20 20 20 2f 2f 2f 20 78 42 65 73 74 49 6e 64 65     /// xBestInde
15860 78 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 74 68  x method must th
15870 65 72 65 66 6f 72 65 20 6f 6e 6c 79 20 63 6f 6e  erefore only con
15880 73 69 64 65 72 20 63 6f 6e 73 74 72 61 69 6e 74  sider constraint
15890 73 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20  s that..        
158a0 2f 2f 2f 20 68 61 76 65 20 61 6e 20 61 43 6f 6e  /// have an aCon
158b0 73 74 72 61 69 6e 74 5b 5d 2e 75 73 61 62 6c 65  straint[].usable
158c0 20 66 6c 61 67 20 77 68 69 63 68 20 69 73 20 74   flag which is t
158d0 72 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rue...        //
158e0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
158f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
15900 20 20 20 20 20 20 20 2f 2f 2f 20 49 6e 20 61 64         /// In ad
15910 64 69 74 69 6f 6e 20 74 6f 20 57 48 45 52 45 20  dition to WHERE 
15920 63 6c 61 75 73 65 20 63 6f 6e 73 74 72 61 69 6e  clause constrain
15930 74 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63  ts, the SQLite c
15940 6f 72 65 20 61 6c 73 6f 20 74 65 6c 6c 73 0d 0a  ore also tells..
15950 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
15960 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f  xBestIndex metho
15970 64 20 61 62 6f 75 74 20 74 68 65 20 4f 52 44 45  d about the ORDE
15980 52 20 42 59 20 63 6c 61 75 73 65 2e 20 28 49 6e  R BY clause. (In
15990 20 61 6e 20 61 67 67 72 65 67 61 74 65 0d 0a 20   an aggregate.. 
159a0 20 20 20 20 20 20 20 2f 2f 2f 20 71 75 65 72 79         /// query
159b0 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  , the SQLite cor
159c0 65 20 6d 69 67 68 74 20 70 75 74 20 69 6e 20 47  e might put in G
159d0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 69  ROUP BY clause i
159e0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 0d 0a 20  nformation in.. 
159f0 20 20 20 20 20 20 20 2f 2f 2f 20 70 6c 61 63 65         /// place
15a00 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   of the ORDER BY
15a10 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74   clause informat
15a20 69 6f 6e 2c 20 62 75 74 20 74 68 69 73 20 66 61  ion, but this fa
15a30 63 74 20 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20  ct should not.. 
15a40 20 20 20 20 20 20 20 2f 2f 2f 20 6d 61 6b 65 20         /// make 
15a50 61 6e 79 20 64 69 66 66 65 72 65 6e 63 65 20 74  any difference t
15a60 6f 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  o the xBestIndex
15a70 20 6d 65 74 68 6f 64 2e 29 20 49 66 20 61 6c 6c   method.) If all
15a80 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0d 0a 20   terms of the.. 
15a90 20 20 20 20 20 20 20 2f 2f 2f 20 4f 52 44 45 52         /// ORDER
15aa0 20 42 59 20 63 6c 61 75 73 65 20 61 72 65 20 63   BY clause are c
15ab0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 76 69  olumns in the vi
15ac0 72 74 75 61 6c 20 74 61 62 6c 65 2c 20 74 68 65  rtual table, the
15ad0 6e 20 6e 4f 72 64 65 72 42 79 0d 0a 20 20 20 20  n nOrderBy..    
15ae0 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 62 65 20      /// will be 
15af0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 65  the number of te
15b00 72 6d 73 20 69 6e 20 74 68 65 20 4f 52 44 45 52  rms in the ORDER
15b10 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20 74   BY clause and t
15b20 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
15b30 61 4f 72 64 65 72 42 79 5b 5d 20 61 72 72 61 79  aOrderBy[] array
15b40 20 77 69 6c 6c 20 69 64 65 6e 74 69 66 79 20 74   will identify t
15b50 68 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 65 61  he column for ea
15b60 63 68 20 74 65 72 6d 20 69 6e 20 74 68 65 0d 0a  ch term in the..
15b70 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72 64 65          /// orde
15b80 72 20 62 79 20 63 6c 61 75 73 65 20 61 6e 64 20  r by clause and 
15b90 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
15ba0 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 41 53  hat column is AS
15bb0 43 20 6f 72 20 44 45 53 43 2e 0d 0a 20 20 20 20  C or DESC...    
15bc0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
15bd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
15be0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
15bf0 20 32 2e 33 2e 32 20 4f 75 74 70 75 74 73 0d 0a   2.3.2 Outputs..
15c00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
15c10 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
15c20 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
15c30 20 2f 2f 2f 20 47 69 76 65 6e 20 61 6c 6c 20 6f   /// Given all o
15c40 66 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  f the informatio
15c50 6e 20 61 62 6f 76 65 2c 20 74 68 65 20 6a 6f 62  n above, the job
15c60 20 6f 66 20 74 68 65 20 78 42 65 73 74 49 6e 64   of the xBestInd
15c70 65 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ex..        /// 
15c80 6d 65 74 68 6f 64 20 69 74 20 74 6f 20 66 69 67  method it to fig
15c90 75 72 65 20 6f 75 74 20 74 68 65 20 62 65 73 74  ure out the best
15ca0 20 77 61 79 20 74 6f 20 73 65 61 72 63 68 20 74   way to search t
15cb0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
15cc0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15cd0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
15ce0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
15cf0 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65 73      /// The xBes
15d00 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20 66 69  tIndex method fi
15d10 6c 6c 73 20 74 68 65 20 69 64 78 4e 75 6d 20 61  lls the idxNum a
15d20 6e 64 20 69 64 78 53 74 72 20 66 69 65 6c 64 73  nd idxStr fields
15d30 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f   with..        /
15d40 2f 2f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  // information t
15d50 68 61 74 20 63 6f 6d 6d 75 6e 69 63 61 74 65 73  hat communicates
15d60 20 61 6e 20 69 6e 64 65 78 69 6e 67 20 73 74 72   an indexing str
15d70 61 74 65 67 79 20 74 6f 20 74 68 65 20 78 46 69  ategy to the xFi
15d80 6c 74 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lter..        //
15d90 2f 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 69 6e  / method. The in
15da0 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 69 64 78  formation in idx
15db0 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72 20 69  Num and idxStr i
15dc0 73 20 61 72 62 69 74 72 61 72 79 20 61 73 20 66  s arbitrary as f
15dd0 61 72 20 61 73 0d 0a 20 20 20 20 20 20 20 20 2f  ar as..        /
15de0 2f 2f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  // the SQLite co
15df0 72 65 20 69 73 20 63 6f 6e 63 65 72 6e 65 64 2e  re is concerned.
15e00 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   The SQLite core
15e10 20 6a 75 73 74 20 63 6f 70 69 65 73 20 74 68 65   just copies the
15e20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
15e30 66 6f 72 6d 61 74 69 6f 6e 20 74 68 72 6f 75 67  formation throug
15e40 68 20 74 6f 20 74 68 65 20 78 46 69 6c 74 65 72  h to the xFilter
15e50 20 6d 65 74 68 6f 64 2e 20 41 6e 79 20 64 65 73   method. Any des
15e60 69 72 65 64 20 6d 65 61 6e 69 6e 67 20 63 61 6e  ired meaning can
15e70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65  ..        /// be
15e80 20 61 73 73 69 67 6e 65 64 20 74 6f 20 69 64 78   assigned to idx
15e90 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72 20 61  Num and idxStr a
15ea0 73 20 6c 6f 6e 67 20 61 73 20 78 42 65 73 74 49  s long as xBestI
15eb0 6e 64 65 78 20 61 6e 64 20 78 46 69 6c 74 65 72  ndex and xFilter
15ec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 67  ..        /// ag
15ed0 72 65 65 20 6f 6e 20 77 68 61 74 20 74 68 61 74  ree on what that
15ee0 20 6d 65 61 6e 69 6e 67 20 69 73 2e 0d 0a 20 20   meaning is...  
15ef0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
15f00 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15f10 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15f20 2f 2f 20 54 68 65 20 69 64 78 53 74 72 20 76 61  // The idxStr va
15f30 6c 75 65 20 6d 61 79 20 62 65 20 61 20 73 74 72  lue may be a str
15f40 69 6e 67 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ing obtained fro
15f50 6d 20 61 6e 20 53 51 4c 69 74 65 20 6d 65 6d 6f  m an SQLite memo
15f60 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ry..        /// 
15f70 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 75 6e 63 74  allocation funct
15f80 69 6f 6e 20 73 75 63 68 20 61 73 20 73 71 6c 69  ion such as sqli
15f90 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 2e 20 49  te3_mprintf(). I
15fa0 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
15fb0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se,..        ///
15fc0 20 74 68 65 6e 20 74 68 65 20 6e 65 65 64 54 6f   then the needTo
15fd0 46 72 65 65 49 64 78 53 74 72 20 66 6c 61 67 20  FreeIdxStr flag 
15fe0 6d 75 73 74 20 62 65 20 73 65 74 20 74 6f 20 74  must be set to t
15ff0 72 75 65 20 73 6f 20 74 68 61 74 20 74 68 65 0d  rue so that the.
16000 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 51 4c  .        /// SQL
16010 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 6b 6e  ite core will kn
16020 6f 77 20 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74  ow to call sqlit
16030 65 33 5f 66 72 65 65 28 29 20 6f 6e 20 74 68 61  e3_free() on tha
16040 74 20 73 74 72 69 6e 67 20 77 68 65 6e 20 69 74  t string when it
16050 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61  ..        /// ha
16060 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 20  s finished with 
16070 69 74 2c 20 61 6e 64 20 74 68 75 73 20 61 76 6f  it, and thus avo
16080 69 64 20 61 20 6d 65 6d 6f 72 79 20 6c 65 61 6b  id a memory leak
16090 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
160a0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
160b0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
160c0 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20 76      /// If the v
160d0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 69 6c  irtual table wil
160e0 6c 20 6f 75 74 70 75 74 20 72 6f 77 73 20 69 6e  l output rows in
160f0 20 74 68 65 20 6f 72 64 65 72 20 73 70 65 63 69   the order speci
16100 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
16110 20 20 20 20 20 2f 2f 2f 20 4f 52 44 45 52 20 42       /// ORDER B
16120 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
16130 68 65 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d  he orderByConsum
16140 65 64 20 66 6c 61 67 20 6d 61 79 20 62 65 20 73  ed flag may be s
16150 65 74 20 74 6f 20 74 72 75 65 2e 0d 0a 20 20 20  et to true...   
16160 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20       /// If the 
16170 6f 75 74 70 75 74 20 69 73 20 6e 6f 74 20 61 75  output is not au
16180 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e 20 74  tomatically in t
16190 68 65 20 63 6f 72 72 65 63 74 20 6f 72 64 65 72  he correct order
161a0 20 74 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f   then..        /
161b0 2f 2f 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d  // orderByConsum
161c0 65 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20  ed must be left 
161d0 69 6e 20 69 74 73 20 64 65 66 61 75 6c 74 20 66  in its default f
161e0 61 6c 73 65 20 73 65 74 74 69 6e 67 2e 20 54 68  alse setting. Th
161f0 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
16200 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 74 6f  will indicate to
16210 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
16220 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 6e 65   that it will ne
16230 65 64 20 74 6f 20 64 6f 20 61 20 73 65 70 61 72  ed to do a separ
16240 61 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ate..        ///
16250 20 73 6f 72 74 69 6e 67 20 70 61 73 73 20 6f 76   sorting pass ov
16260 65 72 20 74 68 65 20 64 61 74 61 20 61 66 74 65  er the data afte
16270 72 20 69 74 20 63 6f 6d 65 73 20 6f 75 74 20 6f  r it comes out o
16280 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
16290 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
162a0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
162b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
162c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65         /// The e
162d0 73 74 69 6d 61 74 65 64 43 6f 73 74 20 66 69 65  stimatedCost fie
162e0 6c 64 20 73 68 6f 75 6c 64 20 62 65 20 73 65 74  ld should be set
162f0 20 74 6f 20 74 68 65 20 65 73 74 69 6d 61 74 65   to the estimate
16300 64 20 6e 75 6d 62 65 72 20 6f 66 0d 0a 20 20 20  d number of..   
16310 20 20 20 20 20 2f 2f 2f 20 64 69 73 6b 20 61 63       /// disk ac
16320 63 65 73 73 20 6f 70 65 72 61 74 69 6f 6e 73 20  cess operations 
16330 72 65 71 75 69 72 65 64 20 74 6f 20 65 78 65 63  required to exec
16340 75 74 65 20 74 68 69 73 20 71 75 65 72 79 20 61  ute this query a
16350 67 61 69 6e 73 74 20 74 68 65 0d 0a 20 20 20 20  gainst the..    
16360 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
16370 74 61 62 6c 65 2e 20 54 68 65 20 53 51 4c 69 74  table. The SQLit
16380 65 20 63 6f 72 65 20 77 69 6c 6c 20 6f 66 74 65  e core will ofte
16390 6e 20 63 61 6c 6c 20 78 42 65 73 74 49 6e 64 65  n call xBestInde
163a0 78 20 6d 75 6c 74 69 70 6c 65 0d 0a 20 20 20 20  x multiple..    
163b0 20 20 20 20 2f 2f 2f 20 74 69 6d 65 73 20 77 69      /// times wi
163c0 74 68 20 64 69 66 66 65 72 65 6e 74 20 63 6f 6e  th different con
163d0 73 74 72 61 69 6e 74 73 2c 20 6f 62 74 61 69 6e  straints, obtain
163e0 20 6d 75 6c 74 69 70 6c 65 20 63 6f 73 74 20 65   multiple cost e
163f0 73 74 69 6d 61 74 65 73 2c 0d 0a 20 20 20 20 20  stimates,..     
16400 20 20 20 2f 2f 2f 20 74 68 65 6e 20 63 68 6f 6f     /// then choo
16410 73 65 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  se the query pla
16420 6e 20 74 68 61 74 20 67 69 76 65 73 20 74 68 65  n that gives the
16430 20 6c 6f 77 65 73 74 20 65 73 74 69 6d 61 74 65   lowest estimate
16440 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16450 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
16460 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
16470 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 43 6f 6e      /// The aCon
16480 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 20 61  straintUsage[] a
16490 72 72 61 79 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  rray contains on
164a0 65 20 65 6c 65 6d 65 6e 74 20 66 6f 72 20 65 61  e element for ea
164b0 63 68 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  ch of the..     
164c0 20 20 20 2f 2f 2f 20 6e 43 6f 6e 73 74 72 61 69     /// nConstrai
164d0 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 69  nt constraints i
164e0 6e 20 74 68 65 20 69 6e 70 75 74 73 20 73 65 63  n the inputs sec
164f0 74 69 6f 6e 20 6f 66 20 74 68 65 0d 0a 20 20 20  tion of the..   
16500 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
16510 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75  _index_info stru
16520 63 74 75 72 65 2e 20 54 68 65 20 61 43 6f 6e 73  cture. The aCons
16530 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 20 61 72  traintUsage[] ar
16540 72 61 79 20 69 73 20 75 73 65 64 0d 0a 20 20 20  ray is used..   
16550 20 20 20 20 20 2f 2f 2f 20 62 79 20 78 42 65 73       /// by xBes
16560 74 49 6e 64 65 78 20 74 6f 20 74 65 6c 6c 20 74  tIndex to tell t
16570 68 65 20 63 6f 72 65 20 68 6f 77 20 69 74 20 69  he core how it i
16580 73 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 73  s using the cons
16590 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20  traints...      
165a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
165b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
165c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
165d0 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
165e0 74 68 6f 64 20 6d 61 79 20 73 65 74 20 61 43 6f  thod may set aCo
165f0 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e  nstraintUsage[].
16600 61 72 67 76 49 6e 64 65 78 20 65 6e 74 72 69 65  argvIndex entrie
16610 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  s..        /// t
16620 6f 20 76 61 6c 75 65 73 20 67 72 65 61 74 65 72  o values greater
16630 20 74 68 61 6e 20 6f 6e 65 2e 20 45 78 61 63 74   than one. Exact
16640 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20 73 68 6f  ly one entry sho
16650 75 6c 64 20 62 65 20 73 65 74 20 74 6f 20 31 2c  uld be set to 1,
16660 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e  ..        /// an
16670 6f 74 68 65 72 20 74 6f 20 32 2c 20 61 6e 6f 74  other to 2, anot
16680 68 65 72 20 74 6f 20 33 2c 20 61 6e 64 20 73 6f  her to 3, and so
16690 20 66 6f 72 74 68 20 75 70 20 74 6f 20 61 73 20   forth up to as 
166a0 6d 61 6e 79 20 6f 72 20 61 73 20 66 65 77 20 61  many or as few a
166b0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  s..        /// t
166c0 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
166d0 74 68 6f 64 20 77 61 6e 74 73 2e 20 54 68 65 20  thod wants. The 
166e0 45 58 50 52 20 6f 66 20 74 68 65 20 63 6f 72 72  EXPR of the corr
166f0 65 73 70 6f 6e 64 69 6e 67 0d 0a 20 20 20 20 20  esponding..     
16700 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 61 69 6e     /// constrain
16710 74 73 20 77 69 6c 6c 20 74 68 65 6e 20 62 65 20  ts will then be 
16720 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68 65  passed in as the
16730 20 61 72 67 76 5b 5d 20 70 61 72 61 6d 65 74 65   argv[] paramete
16740 72 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  rs to..        /
16750 2f 2f 20 78 46 69 6c 74 65 72 2e 0d 0a 20 20 20  // xFilter...   
16760 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
16770 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
16780 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
16790 2f 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69  / For example, i
167a0 66 20 74 68 65 20 61 43 6f 6e 73 74 72 61 69 6e  f the aConstrain
167b0 74 5b 33 5d 2e 61 72 67 76 49 6e 64 65 78 20 69  t[3].argvIndex i
167c0 73 20 73 65 74 20 74 6f 20 31 2c 20 74 68 65 6e  s set to 1, then
167d0 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f   when..        /
167e0 2f 2f 20 78 46 69 6c 74 65 72 20 69 73 20 63 61  // xFilter is ca
167f0 6c 6c 65 64 2c 20 74 68 65 20 61 72 67 76 5b 30  lled, the argv[0
16800 5d 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  ] passed to xFil
16810 74 65 72 20 77 69 6c 6c 20 68 61 76 65 20 74 68  ter will have th
16820 65 20 45 58 50 52 0d 0a 20 20 20 20 20 20 20 20  e EXPR..        
16830 2f 2f 2f 20 76 61 6c 75 65 20 6f 66 20 74 68 65  /// value of the
16840 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 33 5d 20   aConstraint[3] 
16850 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20  constraint...   
16860 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
16870 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
16880 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
16890 2f 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68  / By default, th
168a0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 64 6f  e SQLite core do
168b0 75 62 6c 65 20 63 68 65 63 6b 73 20 61 6c 6c 20  uble checks all 
168c0 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 65  constraints on e
168d0 61 63 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ach..        ///
168e0 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
168f0 75 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 69  ual table that i
16900 74 20 72 65 63 65 69 76 65 73 2e 20 49 66 20 73  t receives. If s
16910 75 63 68 20 61 20 63 68 65 63 6b 20 69 73 0d 0a  uch a check is..
16920 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 64 75          /// redu
16930 6e 64 61 6e 74 2c 20 74 68 65 20 78 42 65 73 74  ndant, the xBest
16940 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 63 61  Filter method ca
16950 6e 20 73 75 70 70 72 65 73 73 20 74 68 61 74 20  n suppress that 
16960 64 6f 75 62 6c 65 2d 63 68 65 63 6b 20 62 79 0d  double-check by.
16970 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 65 74  .        /// set
16980 74 69 6e 67 20 61 43 6f 6e 73 74 72 61 69 6e 74  ting aConstraint
16990 55 73 61 67 65 5b 5d 2e 6f 6d 69 74 2e 0d 0a 20  Usage[].omit... 
169a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
169b0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
169c0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
169d0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
169e0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
169f0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
16a00 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
16a10 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
16a20 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
16a30 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
16a40 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
16a50 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
16a60 6d 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20  me="pIndex">..  
16a70 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
16a80 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
16a90 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  the sqlite3_inde
16aa0 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  x_info structure
16ab0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16ac0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
16ad0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
16ae0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
16af0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
16b00 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
16b10 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
16b20 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
16b30 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42 65 73  teErrorCode xBes
16b40 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20  tIndex(..       
16b50 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
16b60 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
16b70 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a 20  IntPtr pIndex.. 
16b80 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
16b90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
16ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
16bf0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
16c00 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
16c10 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
16c20 6d 65 74 68 6f 64 20 72 65 6c 65 61 73 65 73 20  method releases 
16c30 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  a connection to 
16c40 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
16c50 20 4f 6e 6c 79 20 74 68 65 0d 0a 20 20 20 20 20   Only the..     
16c60 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76     /// sqlite3_v
16c70 74 61 62 20 6f 62 6a 65 63 74 20 69 73 20 64 65  tab object is de
16c80 73 74 72 6f 79 65 64 2e 20 54 68 65 20 76 69 72  stroyed. The vir
16c90 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 6e 6f  tual table is no
16ca0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  t..        /// d
16cb0 65 73 74 72 6f 79 65 64 20 61 6e 64 20 61 6e 79  estroyed and any
16cc0 20 62 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 61   backing store a
16cd0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
16ce0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
16cf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 65  ..        /// pe
16d00 72 73 69 73 74 73 2e 20 54 68 69 73 20 6d 65 74  rsists. This met
16d10 68 6f 64 20 75 6e 64 6f 65 73 20 74 68 65 20 77  hod undoes the w
16d20 6f 72 6b 20 6f 66 20 78 43 6f 6e 6e 65 63 74 2e  ork of xConnect.
16d30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
16d40 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
16d50 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
16d60 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
16d70 6f 64 20 69 73 20 61 20 64 65 73 74 72 75 63 74  od is a destruct
16d80 6f 72 20 66 6f 72 20 61 20 63 6f 6e 6e 65 63 74  or for a connect
16d90 69 6f 6e 20 74 6f 20 74 68 65 20 76 69 72 74 75  ion to the virtu
16da0 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
16db0 20 20 20 2f 2f 2f 20 43 6f 6e 74 72 61 73 74 20     /// Contrast 
16dc0 74 68 69 73 20 6d 65 74 68 6f 64 20 77 69 74 68  this method with
16dd0 20 78 44 65 73 74 72 6f 79 2e 20 54 68 65 20 78   xDestroy. The x
16de0 44 65 73 74 72 6f 79 20 69 73 20 61 20 64 65 73  Destroy is a des
16df0 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20  tructor..       
16e00 20 2f 2f 2f 20 66 6f 72 20 74 68 65 20 65 6e 74   /// for the ent
16e10 69 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ire virtual tabl
16e20 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
16e30 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
16e40 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
16e50 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 44 69       /// The xDi
16e60 73 63 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20  sconnect method 
16e70 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
16e80 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
16e90 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
16ea0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
16eb0 20 74 68 6f 75 67 68 20 69 74 20 69 73 20 61 63   though it is ac
16ec0 63 65 70 74 61 62 6c 65 20 66 6f 72 20 74 68 65  ceptable for the
16ed0 20 78 44 69 73 63 6f 6e 6e 65 63 74 20 61 6e 64   xDisconnect and
16ee0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 44  ..        /// xD
16ef0 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 73 20 74  estroy methods t
16f00 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 66 75  o be the same fu
16f10 6e 63 74 69 6f 6e 20 69 66 20 74 68 61 74 20 6d  nction if that m
16f20 61 6b 65 73 20 73 65 6e 73 65 20 66 6f 72 0d 0a  akes sense for..
16f30 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
16f40 70 61 72 74 69 63 75 6c 61 72 20 76 69 72 74 75  particular virtu
16f50 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
16f60 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
16f70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
16f80 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
16f90 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
16fa0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
16fb0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
16fc0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
16fd0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
16fe0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
16ff0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
17000 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
17010 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
17020 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
17030 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
17040 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
17050 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
17060 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
17070 45 72 72 6f 72 43 6f 64 65 20 78 44 69 73 63 6f  ErrorCode xDisco
17080 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
17090 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
170a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
170b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
170c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17100 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
17110 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
17120 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
17130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
17140 69 73 20 6d 65 74 68 6f 64 20 72 65 6c 65 61 73  is method releas
17150 65 73 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  es a connection 
17160 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
17170 6c 65 2c 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  le, just like th
17180 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
17190 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 74 68 6f  Disconnect metho
171a0 64 2c 20 61 6e 64 20 69 74 20 61 6c 73 6f 20 64  d, and it also d
171b0 65 73 74 72 6f 79 73 20 74 68 65 20 75 6e 64 65  estroys the unde
171c0 72 6c 79 69 6e 67 20 74 61 62 6c 65 0d 0a 20 20  rlying table..  
171d0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
171e0 65 6e 74 61 74 69 6f 6e 2e 20 54 68 69 73 20 6d  entation. This m
171f0 65 74 68 6f 64 20 75 6e 64 6f 65 73 20 74 68 65  ethod undoes the
17200 20 77 6f 72 6b 20 6f 66 20 78 43 72 65 61 74 65   work of xCreate
17210 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17220 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
17230 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
17240 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 44 69 73      /// The xDis
17250 63 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 69  connect method i
17260 73 20 63 61 6c 6c 65 64 20 77 68 65 6e 65 76 65  s called wheneve
17270 72 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e  r a database con
17280 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  nection..       
17290 20 2f 2f 2f 20 74 68 61 74 20 75 73 65 73 20 61   /// that uses a
172a0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
172b0 73 20 63 6c 6f 73 65 64 2e 20 54 68 65 20 78 44  s closed. The xD
172c0 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 20 69 73  estroy method is
172d0 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f   only..        /
172e0 2f 2f 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 61  // called when a
172f0 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74   DROP TABLE stat
17300 65 6d 65 6e 74 20 69 73 20 65 78 65 63 75 74 65  ement is execute
17310 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 76 69  d against the vi
17320 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f  rtual..        /
17330 2f 2f 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  // table...     
17340 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
17350 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
17360 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17370 54 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74  The xDestroy met
17380 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
17390 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
173a0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
173b0 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
173c0 69 6f 6e 2c 20 74 68 6f 75 67 68 20 69 74 20 69  ion, though it i
173d0 73 20 61 63 63 65 70 74 61 62 6c 65 20 66 6f 72  s acceptable for
173e0 20 74 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74   the xDisconnect
173f0 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f   and..        //
17400 2f 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f  / xDestroy metho
17410 64 73 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  ds to be the sam
17420 65 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 74 68  e function if th
17430 61 74 20 6d 61 6b 65 73 20 73 65 6e 73 65 20 66  at makes sense f
17440 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
17450 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
17460 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
17470 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17480 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17490 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
174a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
174b0 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
174c0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
174d0 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
174e0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
174f0 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
17500 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
17510 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
17520 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
17530 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
17540 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
17550 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
17560 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
17570 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
17580 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44  LiteErrorCode xD
17590 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20  estroy(..       
175a0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
175b0 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
175c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
175d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
175e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
175f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17610 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
17620 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
17630 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
17640 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
17650 68 65 20 78 4f 70 65 6e 20 6d 65 74 68 6f 64 20  he xOpen method 
17660 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 63 75  creates a new cu
17670 72 73 6f 72 20 75 73 65 64 20 66 6f 72 20 61 63  rsor used for ac
17680 63 65 73 73 69 6e 67 20 28 72 65 61 64 0d 0a 20  cessing (read.. 
17690 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 2f 6f         /// and/o
176a0 72 20 77 72 69 74 69 6e 67 29 20 61 20 76 69 72  r writing) a vir
176b0 74 75 61 6c 20 74 61 62 6c 65 2e 20 41 20 73 75  tual table. A su
176c0 63 63 65 73 73 66 75 6c 20 69 6e 76 6f 63 61 74  ccessful invocat
176d0 69 6f 6e 20 6f 66 20 74 68 69 73 0d 0a 20 20 20  ion of this..   
176e0 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20       /// method 
176f0 77 69 6c 6c 20 61 6c 6c 6f 63 61 74 65 20 74 68  will allocate th
17700 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 74 68 65  e memory for the
17710 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
17720 72 73 6f 72 20 28 6f 72 20 61 0d 0a 20 20 20 20  rsor (or a..    
17730 20 20 20 20 2f 2f 2f 20 73 75 62 63 6c 61 73 73      /// subclass
17740 29 2c 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68  ), initialize th
17750 65 20 6e 65 77 20 6f 62 6a 65 63 74 2c 20 61 6e  e new object, an
17760 64 20 6d 61 6b 65 20 2a 70 70 43 75 72 73 6f 72  d make *ppCursor
17770 20 70 6f 69 6e 74 20 74 6f 0d 0a 20 20 20 20 20   point to..     
17780 20 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77 20 6f     /// the new o
17790 62 6a 65 63 74 2e 20 54 68 65 20 73 75 63 63 65  bject. The succe
177a0 73 73 66 75 6c 20 63 61 6c 6c 20 74 68 65 6e 20  ssful call then 
177b0 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
177c0 4b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  K...        /// 
177d0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
177e0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
177f0 20 20 20 20 20 2f 2f 2f 20 46 6f 72 20 65 76 65       /// For eve
17800 72 79 20 73 75 63 63 65 73 73 66 75 6c 20 63 61  ry successful ca
17810 6c 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f  ll to this metho
17820 64 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  d, the SQLite co
17830 72 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  re will..       
17840 20 2f 2f 2f 20 6c 61 74 65 72 20 69 6e 76 6f 6b   /// later invok
17850 65 20 74 68 65 20 78 43 6c 6f 73 65 20 6d 65 74  e the xClose met
17860 68 6f 64 20 74 6f 20 64 65 73 74 72 6f 79 20 74  hod to destroy t
17870 68 65 20 61 6c 6c 6f 63 61 74 65 64 20 63 75 72  he allocated cur
17880 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sor...        //
17890 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
178a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
178b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
178c0 4f 70 65 6e 20 6d 65 74 68 6f 64 20 6e 65 65 64  Open method need
178d0 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 20   not initialize 
178e0 74 68 65 20 70 56 74 61 62 20 66 69 65 6c 64 20  the pVtab field 
178f0 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
17900 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /// sqlite3_vtab
17910 5f 63 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  _cursor structur
17920 65 2e 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f  e. The SQLite co
17930 72 65 20 77 69 6c 6c 20 74 61 6b 65 20 63 61 72  re will take car
17940 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e of..        //
17950 2f 20 74 68 61 74 20 63 68 6f 72 65 20 61 75 74  / that chore aut
17960 6f 6d 61 74 69 63 61 6c 6c 79 2e 0d 0a 20 20 20  omatically...   
17970 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
17980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
17990 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
179a0 2f 20 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c  / A virtual tabl
179b0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
179c0 20 6d 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f   must be able to
179d0 20 73 75 70 70 6f 72 74 20 61 6e 20 61 72 62 69   support an arbi
179e0 74 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 2f  trary..        /
179f0 2f 2f 20 6e 75 6d 62 65 72 20 6f 66 20 73 69 6d  // number of sim
17a00 75 6c 74 61 6e 65 6f 75 73 6c 79 20 6f 70 65 6e  ultaneously open
17a10 20 63 75 72 73 6f 72 73 2e 0d 0a 20 20 20 20 20   cursors...     
17a20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
17a30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
17a40 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17a50 57 68 65 6e 20 69 6e 69 74 69 61 6c 6c 79 20 6f  When initially o
17a60 70 65 6e 65 64 2c 20 74 68 65 20 63 75 72 73 6f  pened, the curso
17a70 72 20 69 73 20 69 6e 20 61 6e 20 75 6e 64 65 66  r is in an undef
17a80 69 6e 65 64 20 73 74 61 74 65 2e 20 54 68 65 0d  ined state. The.
17a90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 51 4c  .        /// SQL
17aa0 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 69 6e  ite core will in
17ab0 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72  voke the xFilter
17ac0 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 63   method on the c
17ad0 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 0d 0a  ursor prior to..
17ae0 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 79 20          /// any 
17af0 61 74 74 65 6d 70 74 20 74 6f 20 70 6f 73 69 74  attempt to posit
17b00 69 6f 6e 20 6f 72 20 72 65 61 64 20 66 72 6f 6d  ion or read from
17b10 20 74 68 65 20 63 75 72 73 6f 72 2e 0d 0a 20 20   the cursor...  
17b20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
17b30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17b40 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
17b50 2f 2f 20 54 68 65 20 78 4f 70 65 6e 20 6d 65 74  // The xOpen met
17b60 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
17b70 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
17b80 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
17b90 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
17ba0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
17bb0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
17bc0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
17bd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17be0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
17bf0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
17c00 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
17c10 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
17c20 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
17c30 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
17c40 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
17c50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
17c60 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
17c70 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
17c80 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
17c90 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
17ca0 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
17cb0 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
17cc0 6e 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f  newly..        /
17cd0 2f 2f 20 63 72 65 61 74 65 64 20 6e 61 74 69 76  // created nativ
17ce0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
17cf0 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
17d00 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
17d10 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
17d20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
17d30 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
17d40 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
17d50 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
17d60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17d70 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
17d80 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
17d90 64 65 20 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20  de xOpen(..     
17da0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
17db0 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
17dc0 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43 75    ref IntPtr pCu
17dd0 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
17de0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
17df0 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
17e40 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
17e50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
17e60 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
17e70 2f 20 54 68 65 20 78 43 6c 6f 73 65 20 6d 65 74  / The xClose met
17e80 68 6f 64 20 63 6c 6f 73 65 73 20 61 20 63 75 72  hod closes a cur
17e90 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
17ea0 70 65 6e 65 64 20 62 79 20 78 4f 70 65 6e 2e 20  pened by xOpen. 
17eb0 54 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  The..        ///
17ec0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69 6c   SQLite core wil
17ed0 6c 20 61 6c 77 61 79 73 20 63 61 6c 6c 20 78 43  l always call xC
17ee0 6c 6f 73 65 20 6f 6e 63 65 20 66 6f 72 20 65 61  lose once for ea
17ef0 63 68 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64  ch cursor opened
17f00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73  ..        /// us
17f10 69 6e 67 20 78 4f 70 65 6e 2e 0d 0a 20 20 20 20  ing xOpen...    
17f20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
17f30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
17f40 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
17f50 20 54 68 69 73 20 6d 65 74 68 6f 64 20 6d 75 73   This method mus
17f60 74 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 72 65  t release all re
17f70 73 6f 75 72 63 65 73 20 61 6c 6c 6f 63 61 74 65  sources allocate
17f80 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
17f90 20 20 2f 2f 2f 20 63 6f 72 72 65 73 70 6f 6e 64    /// correspond
17fa0 69 6e 67 20 78 4f 70 65 6e 20 63 61 6c 6c 2e 20  ing xOpen call. 
17fb0 54 68 65 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  The routine will
17fc0 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 61   not be called a
17fd0 67 61 69 6e 20 65 76 65 6e 0d 0a 20 20 20 20 20  gain even..     
17fe0 20 20 20 2f 2f 2f 20 69 66 20 69 74 20 72 65 74     /// if it ret
17ff0 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 2e 20 54  urns an error. T
18000 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77  he SQLite core w
18010 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74 68 65 0d  ill not use the.
18020 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
18030 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
18040 20 61 67 61 69 6e 20 61 66 74 65 72 20 69 74 20   again after it 
18050 68 61 73 20 62 65 65 6e 20 63 6c 6f 73 65 64 2e  has been closed.
18060 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18070 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18080 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
18090 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6c 6f 73     /// The xClos
180a0 65 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  e method is requ
180b0 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
180c0 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
180d0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
180e0 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
180f0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
18100 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
18110 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
18120 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
18130 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
18140 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
18150 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
18160 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
18170 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
18180 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
18190 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
181a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
181b0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
181c0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
181d0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
181e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
181f0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
18200 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
18210 64 65 20 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20  de xClose(..    
18220 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
18230 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  Cursor..        
18240 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
18250 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18290 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
182a0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
182b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
182c0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
182d0 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
182e0 62 65 67 69 6e 73 20 61 20 73 65 61 72 63 68 20  begins a search 
182f0 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
18300 6c 65 2e 20 54 68 65 20 66 69 72 73 74 20 61 72  le. The first ar
18310 67 75 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  gument..        
18320 2f 2f 2f 20 69 73 20 61 20 63 75 72 73 6f 72 20  /// is a cursor 
18330 6f 70 65 6e 65 64 20 62 79 20 78 4f 70 65 6e 2e  opened by xOpen.
18340 20 54 68 65 20 6e 65 78 74 20 74 77 6f 20 61 72   The next two ar
18350 67 75 6d 65 6e 74 20 64 65 66 69 6e 65 20 61 0d  gument define a.
18360 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 61 72  .        /// par
18370 74 69 63 75 6c 61 72 20 73 65 61 72 63 68 20 69  ticular search i
18380 6e 64 65 78 20 70 72 65 76 69 6f 75 73 6c 79 20  ndex previously 
18390 63 68 6f 73 65 6e 20 62 79 20 78 42 65 73 74 49  chosen by xBestI
183a0 6e 64 65 78 2e 20 54 68 65 0d 0a 20 20 20 20 20  ndex. The..     
183b0 20 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 63 20     /// specific 
183c0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 69 64 78 4e  meanings of idxN
183d0 75 6d 20 61 6e 64 20 69 64 78 53 74 72 20 61 72  um and idxStr ar
183e0 65 20 75 6e 69 6d 70 6f 72 74 61 6e 74 20 61 73  e unimportant as
183f0 20 6c 6f 6e 67 20 61 73 0d 0a 20 20 20 20 20 20   long as..      
18400 20 20 2f 2f 2f 20 78 46 69 6c 74 65 72 20 61 6e    /// xFilter an
18410 64 20 78 42 65 73 74 49 6e 64 65 78 20 61 67 72  d xBestIndex agr
18420 65 65 20 6f 6e 20 77 68 61 74 20 74 68 61 74 20  ee on what that 
18430 6d 65 61 6e 69 6e 67 20 69 73 2e 0d 0a 20 20 20  meaning is...   
18440 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
18450 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18460 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
18470 2f 20 54 68 65 20 78 42 65 73 74 49 6e 64 65 78  / The xBestIndex
18480 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61   function may ha
18490 76 65 20 72 65 71 75 65 73 74 65 64 20 74 68 65  ve requested the
184a0 20 76 61 6c 75 65 73 20 6f 66 20 63 65 72 74 61   values of certa
184b0 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  in..        /// 
184c0 65 78 70 72 65 73 73 69 6f 6e 73 20 75 73 69 6e  expressions usin
184d0 67 20 74 68 65 20 61 43 6f 6e 73 74 72 61 69 6e  g the aConstrain
184e0 74 55 73 61 67 65 5b 5d 2e 61 72 67 76 49 6e 64  tUsage[].argvInd
184f0 65 78 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ex values of the
18500 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
18510 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
18520 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 6f 73   structure. Thos
18530 65 20 76 61 6c 75 65 73 20 61 72 65 20 70 61 73  e values are pas
18540 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 0d 0a  sed to xFilter..
18550 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 69 6e          /// usin
18560 67 20 74 68 65 20 61 72 67 63 20 61 6e 64 20 61  g the argc and a
18570 72 67 76 20 70 61 72 61 6d 65 74 65 72 73 2e 0d  rgv parameters..
18580 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
18590 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
185a0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
185b0 20 20 2f 2f 2f 20 49 66 20 74 68 65 20 76 69 72    /// If the vir
185c0 74 75 61 6c 20 74 61 62 6c 65 20 63 6f 6e 74 61  tual table conta
185d0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
185e0 72 6f 77 73 20 74 68 61 74 20 6d 61 74 63 68 20  rows that match 
185f0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
18600 20 73 65 61 72 63 68 20 63 72 69 74 65 72 69 61   search criteria
18610 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f  , then the curso
18620 72 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 70  r must be left p
18630 6f 69 6e 74 20 61 74 20 74 68 65 20 66 69 72 73  oint at the firs
18640 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  t..        /// r
18650 6f 77 2e 20 53 75 62 73 65 71 75 65 6e 74 20 63  ow. Subsequent c
18660 61 6c 6c 73 20 74 6f 20 78 45 6f 66 20 6d 75 73  alls to xEof mus
18670 74 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 28  t return false (
18680 7a 65 72 6f 29 2e 20 49 66 20 74 68 65 72 65 0d  zero). If there.
18690 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 65  .        /// are
186a0 20 6e 6f 20 72 6f 77 73 20 6d 61 74 63 68 2c 20   no rows match, 
186b0 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
186c0 6d 75 73 74 20 62 65 20 6c 65 66 74 20 69 6e 20  must be left in 
186d0 61 20 73 74 61 74 65 20 74 68 61 74 0d 0a 20 20  a state that..  
186e0 20 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 63        /// will c
186f0 61 75 73 65 20 74 68 65 20 78 45 6f 66 20 74 6f  ause the xEof to
18700 20 72 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   return true (no
18710 6e 2d 7a 65 72 6f 29 2e 20 54 68 65 20 53 51 4c  n-zero). The SQL
18720 69 74 65 20 65 6e 67 69 6e 65 0d 0a 20 20 20 20  ite engine..    
18730 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 75 73 65      /// will use
18740 20 74 68 65 20 78 43 6f 6c 75 6d 6e 20 61 6e 64   the xColumn and
18750 20 78 52 6f 77 69 64 20 6d 65 74 68 6f 64 73 20   xRowid methods 
18760 74 6f 20 61 63 63 65 73 73 20 74 68 61 74 20 72  to access that r
18770 6f 77 20 63 6f 6e 74 65 6e 74 2e 0d 0a 20 20 20  ow content...   
18780 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4e 65       /// The xNe
18790 78 74 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 62  xt method will b
187a0 65 20 75 73 65 64 20 74 6f 20 61 64 76 61 6e 63  e used to advanc
187b0 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  e to the next ro
187c0 77 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  w...        /// 
187d0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
187e0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
187f0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
18800 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e  thod must return
18810 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 73 75   SQLITE_OK if su
18820 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 61 6e 20  ccessful, or an 
18830 73 71 6c 69 74 65 20 65 72 72 6f 72 0d 0a 20 20  sqlite error..  
18840 20 20 20 20 20 20 2f 2f 2f 20 63 6f 64 65 20 69        /// code i
18850 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
18860 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
18870 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
18880 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
18890 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 46 69       /// The xFi
188a0 6c 74 65 72 20 6d 65 74 68 6f 64 20 69 73 20 72  lter method is r
188b0 65 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72  equired for ever
188c0 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  y virtual table.
188d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70  .        /// imp
188e0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20  lementation...  
188f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
18900 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18910 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
18920 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
18930 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
18940 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
18950 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
18960 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
18970 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64  b_cursor derived
18980 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
18990 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
189a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
189b0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78 4e  param name="idxN
189c0 75 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  um">..        //
189d0 2f 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  / Number used to
189e0 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74   help identify t
189f0 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65  he selected inde
18a00 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  x...        /// 
18a10 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
18a20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
18a30 65 3d 22 69 64 78 53 74 72 22 3e 0d 0a 20 20 20  e="idxStr">..   
18a40 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
18a50 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
18a60 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  he UTF-8 encoded
18a70 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
18a80 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ng the..        
18a90 2f 2f 2f 20 73 74 72 69 6e 67 20 75 73 65 64 20  /// string used 
18aa0 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79  to help identify
18ab0 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e   the selected in
18ac0 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
18ad0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
18ae0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
18af0 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20  ame="argc">..   
18b00 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d       /// The num
18b10 62 65 72 20 6f 66 20 6e 61 74 69 76 65 20 70 6f  ber of native po
18b20 69 6e 74 65 72 73 20 74 6f 20 73 71 6c 69 74 65  inters to sqlite
18b30 33 5f 76 61 6c 75 65 20 73 74 72 75 63 74 75 72  3_value structur
18b40 65 73 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20  es specified..  
18b50 20 20 20 20 20 20 2f 2f 2f 20 69 6e 20 3c 70 61        /// in <pa
18b60 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 61 72 67  ramref name="arg
18b70 76 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20  v" />...        
18b80 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
18b90 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
18ba0 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20   name="argv">.. 
18bb0 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20 61 72         /// An ar
18bc0 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20 70 6f  ray of native po
18bd0 69 6e 74 65 72 73 20 74 6f 20 73 71 6c 69 74 65  inters to sqlite
18be0 33 5f 76 61 6c 75 65 20 73 74 72 75 63 74 75 72  3_value structur
18bf0 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  es containing.. 
18c00 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 6c 74 65         /// filte
18c10 72 69 6e 67 20 63 72 69 74 65 72 69 61 20 66 6f  ring criteria fo
18c20 72 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  r the selected i
18c30 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
18c40 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
18c50 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
18c60 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
18c70 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
18c80 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
18c90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
18ca0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
18cb0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
18cc0 78 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20  xFilter(..      
18cd0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
18ce0 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  rsor,..         
18cf0 20 20 20 69 6e 74 20 69 64 78 4e 75 6d 2c 0d 0a     int idxNum,..
18d00 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
18d10 74 72 20 69 64 78 53 74 72 2c 0d 0a 20 20 20 20  tr idxStr,..    
18d20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63          int argc
18d30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
18d40 6e 74 50 74 72 20 61 72 67 76 0d 0a 20 20 20 20  ntPtr argv..    
18d50 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
18d60 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
18d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
18db0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
18dc0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
18dd0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
18de0 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4e 65 78      /// The xNex
18df0 74 20 6d 65 74 68 6f 64 20 61 64 76 61 6e 63 65  t method advance
18e00 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
18e10 65 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  e cursor to the 
18e20 6e 65 78 74 20 72 6f 77 20 6f 66 0d 0a 20 20 20  next row of..   
18e30 20 20 20 20 20 2f 2f 2f 20 61 20 72 65 73 75 6c       /// a resul
18e40 74 20 73 65 74 20 69 6e 69 74 69 61 74 65 64 20  t set initiated 
18e50 62 79 20 78 46 69 6c 74 65 72 2e 20 49 66 20 74  by xFilter. If t
18e60 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72  he cursor is alr
18e70 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  eady..        //
18e80 2f 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  / pointing at th
18e90 65 20 6c 61 73 74 20 72 6f 77 20 77 68 65 6e 20  e last row when 
18ea0 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
18eb0 63 61 6c 6c 65 64 2c 20 74 68 65 6e 20 74 68 65  called, then the
18ec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 75  ..        /// cu
18ed0 72 73 6f 72 20 6e 6f 20 6c 6f 6e 67 65 72 20 70  rsor no longer p
18ee0 6f 69 6e 74 73 20 74 6f 20 76 61 6c 69 64 20 64  oints to valid d
18ef0 61 74 61 20 61 6e 64 20 61 20 73 75 62 73 65 71  ata and a subseq
18f00 75 65 6e 74 20 63 61 6c 6c 20 74 6f 20 74 68 65  uent call to the
18f10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 45  ..        /// xE
18f20 6f 66 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72  of method must r
18f30 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d  eturn true (non-
18f40 7a 65 72 6f 29 2e 20 49 66 20 74 68 65 20 63 75  zero). If the cu
18f50 72 73 6f 72 20 69 73 0d 0a 20 20 20 20 20 20 20  rsor is..       
18f60 20 2f 2f 2f 20 73 75 63 63 65 73 73 66 75 6c 6c   /// successfull
18f70 79 20 61 64 76 61 6e 63 65 64 20 74 6f 20 61 6e  y advanced to an
18f80 6f 74 68 65 72 20 72 6f 77 20 6f 66 20 63 6f 6e  other row of con
18f90 74 65 6e 74 2c 20 74 68 65 6e 20 73 75 62 73 65  tent, then subse
18fa0 71 75 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 2f  quent..        /
18fb0 2f 2f 20 63 61 6c 6c 73 20 74 6f 20 78 45 6f 66  // calls to xEof
18fc0 20 6d 75 73 74 20 72 65 74 75 72 6e 20 66 61 6c   must return fal
18fd0 73 65 20 28 7a 65 72 6f 29 2e 0d 0a 20 20 20 20  se (zero)...    
18fe0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
18ff0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
19000 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
19010 20 54 68 69 73 20 6d 65 74 68 6f 64 20 6d 75 73   This method mus
19020 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  t return SQLITE_
19030 4f 4b 20 69 66 20 73 75 63 63 65 73 73 66 75 6c  OK if successful
19040 2c 20 6f 72 20 61 6e 20 73 71 6c 69 74 65 20 65  , or an sqlite e
19050 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rror..        //
19060 2f 20 63 6f 64 65 20 69 66 20 61 6e 20 65 72 72  / code if an err
19070 6f 72 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  or occurs...    
19080 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
19090 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
190a0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
190b0 20 54 68 65 20 78 4e 65 78 74 20 6d 65 74 68 6f   The xNext metho
190c0 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  d is required fo
190d0 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20  r every virtual 
190e0 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
190f0 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
19100 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
19110 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
19120 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
19130 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
19140 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
19150 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
19160 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
19170 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
19180 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
19190 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
191a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
191b0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
191c0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
191d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
191e0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
191f0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
19200 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
19210 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
19220 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4e 65 78  teErrorCode xNex
19230 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
19240 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
19250 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
19260 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
19270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
192c0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
192d0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
192e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
192f0 78 45 6f 66 20 6d 65 74 68 6f 64 20 6d 75 73 74  xEof method must
19300 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 28 7a   return false (z
19310 65 72 6f 29 20 69 66 20 74 68 65 20 73 70 65 63  ero) if the spec
19320 69 66 69 65 64 20 63 75 72 73 6f 72 0d 0a 20 20  ified cursor..  
19330 20 20 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e        /// curren
19340 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  tly points to a 
19350 76 61 6c 69 64 20 72 6f 77 20 6f 66 20 64 61 74  valid row of dat
19360 61 2c 20 6f 72 20 74 72 75 65 20 28 6e 6f 6e 2d  a, or true (non-
19370 7a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 2f  zero)..        /
19380 2f 2f 20 6f 74 68 65 72 77 69 73 65 2e 20 54 68  // otherwise. Th
19390 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
193a0 6c 65 64 20 62 79 20 74 68 65 20 53 51 4c 20 65  led by the SQL e
193b0 6e 67 69 6e 65 20 69 6d 6d 65 64 69 61 74 65 6c  ngine immediatel
193c0 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  y..        /// a
193d0 66 74 65 72 20 65 61 63 68 20 78 46 69 6c 74 65  fter each xFilte
193e0 72 20 61 6e 64 20 78 4e 65 78 74 20 69 6e 76 6f  r and xNext invo
193f0 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
19400 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
19410 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
19420 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
19430 65 20 78 45 6f 66 20 6d 65 74 68 6f 64 20 69 73  e xEof method is
19440 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76   required for ev
19450 65 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ery virtual tabl
19460 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
19470 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
19480 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
19490 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
194a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
194b0 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
194c0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
194d0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
194e0 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
194f0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65  3_vtab_cursor de
19500 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
19510 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
19520 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
19530 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
19540 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
19550 65 72 6f 20 69 66 20 6e 6f 20 6d 6f 72 65 20 72  ero if no more r
19560 6f 77 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ows are availabl
19570 65 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73  e; zero otherwis
19580 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
19590 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
195a0 20 20 20 20 69 6e 74 20 78 45 6f 66 28 0d 0a 20      int xEof(.. 
195b0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
195c0 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
195d0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
195e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
195f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19630 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
19640 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
19650 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
19660 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c 69 74     /// The SQLit
19670 65 20 63 6f 72 65 20 69 6e 76 6f 6b 65 73 20 74  e core invokes t
19680 68 69 73 20 6d 65 74 68 6f 64 20 69 6e 20 6f 72  his method in or
19690 64 65 72 20 74 6f 20 66 69 6e 64 20 74 68 65 20  der to find the 
196a0 76 61 6c 75 65 20 66 6f 72 0d 0a 20 20 20 20 20  value for..     
196b0 20 20 20 2f 2f 2f 20 74 68 65 20 4e 2d 74 68 20     /// the N-th 
196c0 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 63 75  column of the cu
196d0 72 72 65 6e 74 20 72 6f 77 2e 20 4e 20 69 73 20  rrent row. N is 
196e0 7a 65 72 6f 2d 62 61 73 65 64 20 73 6f 20 74 68  zero-based so th
196f0 65 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20 20  e first..       
19700 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 69 73 20 6e   /// column is n
19710 75 6d 62 65 72 65 64 20 30 2e 20 54 68 65 20 78  umbered 0. The x
19720 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 6d 61  Column method ma
19730 79 20 72 65 74 75 72 6e 20 69 74 73 20 72 65 73  y return its res
19740 75 6c 74 20 62 61 63 6b 0d 0a 20 20 20 20 20 20  ult back..      
19750 20 20 2f 2f 2f 20 74 6f 20 53 51 4c 69 74 65 20    /// to SQLite 
19760 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65  using one of the
19770 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 74 65 72   following inter
19780 66 61 63 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f  face:..        /
19790 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
197a0 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
197b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
197c0 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62  sqlite3_result_b
197d0 6c 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  lob()..        /
197e0 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
197f0 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 29 0d 0a  esult_double()..
19800 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
19810 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
19820 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nt()..        //
19830 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  /     sqlite3_re
19840 73 75 6c 74 5f 69 6e 74 36 34 28 29 0d 0a 20 20  sult_int64()..  
19850 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71        ///     sq
19860 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c  lite3_result_nul
19870 6c 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  l()..        ///
19880 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
19890 75 6c 74 5f 74 65 78 74 28 29 0d 0a 20 20 20 20  ult_text()..    
198a0 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69      ///     sqli
198b0 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31  te3_result_text1
198c0 36 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  6()..        ///
198d0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
198e0 75 6c 74 5f 74 65 78 74 31 36 6c 65 28 29 0d 0a  ult_text16le()..
198f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
19900 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
19910 65 78 74 31 36 62 65 28 29 0d 0a 20 20 20 20 20  ext16be()..     
19920 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69 74     ///     sqlit
19930 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c  e3_result_zerobl
19940 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ob()..        //
19950 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20  / </code>..     
19960 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
19970 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68         /// If th
19980 65 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64  e xColumn method
19990 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
199a0 63 61 6c 6c 73 20 6e 6f 6e 65 20 6f 66 20 74 68  calls none of th
199b0 65 20 66 75 6e 63 74 69 6f 6e 73 0d 0a 20 20 20  e functions..   
199c0 20 20 20 20 20 2f 2f 2f 20 61 62 6f 76 65 2c 20       /// above, 
199d0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  then the value o
199e0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66  f the column def
199f0 61 75 6c 74 73 20 74 6f 20 61 6e 20 53 51 4c 20  aults to an SQL 
19a00 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f  NULL...        /
19a10 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
19a20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
19a30 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 6f 20 72          /// To r
19a40 61 69 73 65 20 61 6e 20 65 72 72 6f 72 2c 20 74  aise an error, t
19a50 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f  he xColumn metho
19a60 64 20 73 68 6f 75 6c 64 20 75 73 65 20 6f 6e 65  d should use one
19a70 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
19a80 20 2f 2f 2f 20 72 65 73 75 6c 74 5f 74 65 78 74   /// result_text
19a90 28 29 20 6d 65 74 68 6f 64 73 20 74 6f 20 73 65  () methods to se
19aa0 74 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  t the error mess
19ab0 61 67 65 20 74 65 78 74 2c 20 74 68 65 6e 20 72  age text, then r
19ac0 65 74 75 72 6e 20 61 6e 0d 0a 20 20 20 20 20 20  eturn an..      
19ad0 20 20 2f 2f 2f 20 61 70 70 72 6f 70 72 69 61 74    /// appropriat
19ae0 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 54 68  e error code. Th
19af0 65 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64  e xColumn method
19b00 20 6d 75 73 74 20 72 65 74 75 72 6e 20 53 51 4c   must return SQL
19b10 49 54 45 5f 4f 4b 20 6f 6e 0d 0a 20 20 20 20 20  ITE_OK on..     
19b20 20 20 20 2f 2f 2f 20 73 75 63 63 65 73 73 2e 0d     /// success..
19b30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
19b40 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
19b50 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
19b60 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f 6c 75 6d    /// The xColum
19b70 6e 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  n method is requ
19b80 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
19b90 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
19ba0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
19bb0 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
19bc0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
19bd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
19be0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
19bf0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
19c00 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
19c10 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
19c20 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
19c30 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
19c40 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
19c50 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
19c60 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
19c70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
19c80 61 6d 20 6e 61 6d 65 3d 22 70 43 6f 6e 74 65 78  am name="pContex
19c90 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
19ca0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
19cb0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
19cc0 65 33 5f 63 6f 6e 74 65 78 74 20 73 74 72 75 63  e3_context struc
19cd0 74 75 72 65 20 74 6f 20 62 65 20 75 73 65 64 0d  ture to be used.
19ce0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72  .        /// for
19cf0 20 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 73   returning the s
19d00 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20  pecified column 
19d10 76 61 6c 75 65 20 74 6f 20 74 68 65 20 53 51 4c  value to the SQL
19d20 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20  ite core..      
19d30 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 2e 0d 0a    /// library...
19d40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
19d50 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
19d60 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
19d70 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  ndex">..        
19d80 2f 2f 2f 20 54 68 65 20 7a 65 72 6f 2d 62 61 73  /// The zero-bas
19d90 65 64 20 69 6e 64 65 78 20 63 6f 72 72 65 73 70  ed index corresp
19da0 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 63 6f  onding to the co
19db0 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20  lumn containing 
19dc0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
19dd0 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65 74   value to be ret
19de0 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  urned...        
19df0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
19e00 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
19e10 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
19e20 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
19e30 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
19e40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
19e50 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
19e60 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
19e70 20 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20   xColumn(..     
19e80 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
19e90 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20  ursor,..        
19ea0 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 74      IntPtr pCont
19eb0 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ext,..          
19ec0 20 20 69 6e 74 20 69 6e 64 65 78 0d 0a 20 20 20    int index..   
19ed0 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
19ee0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19f30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
19f40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
19f50 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
19f60 20 20 20 20 20 2f 2f 2f 20 41 20 73 75 63 63 65       /// A succe
19f70 73 73 66 75 6c 20 69 6e 76 6f 63 61 74 69 6f 6e  ssful invocation
19f80 20 6f 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20   of this method 
19f90 77 69 6c 6c 20 63 61 75 73 65 20 2a 70 52 6f 77  will cause *pRow
19fa0 69 64 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20  id to be..      
19fb0 20 20 2f 2f 2f 20 66 69 6c 6c 65 64 20 77 69 74    /// filled wit
19fc0 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 72  h the rowid of r
19fd0 6f 77 20 74 68 61 74 20 74 68 65 20 76 69 72 74  ow that the virt
19fe0 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
19ff0 20 70 43 75 72 20 69 73 0d 0a 20 20 20 20 20 20   pCur is..      
1a000 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 6c 79 20    /// currently 
1a010 70 6f 69 6e 74 69 6e 67 20 61 74 2e 20 54 68 69  pointing at. Thi
1a020 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e 73  s method returns
1a030 20 53 51 4c 49 54 45 5f 4f 4b 20 6f 6e 20 73 75   SQLITE_OK on su
1a040 63 63 65 73 73 2e 20 49 74 0d 0a 20 20 20 20 20  ccess. It..     
1a050 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e 73 20 61     /// returns a
1a060 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72  n appropriate er
1a070 72 6f 72 20 63 6f 64 65 20 6f 6e 20 66 61 69 6c  ror code on fail
1a080 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
1a090 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1a0a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1a0b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
1a0c0 52 6f 77 69 64 20 6d 65 74 68 6f 64 20 69 73 20  Rowid method is 
1a0d0 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 76 65  required for eve
1a0e0 72 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ry virtual table
1a0f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d  ..        /// im
1a100 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20  plementation... 
1a110 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1a120 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1a130 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1a140 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1a150 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a  ame="pCursor">..
1a160 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1a170 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1a180 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
1a190 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65  ab_cursor derive
1a1a0 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
1a1b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1a1c0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1a1d0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77  <param name="row
1a1e0 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  Id">..        //
1a1f0 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
1a200 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
1a210 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
1a220 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 75  to contain the u
1a230 6e 69 71 75 65 0d 0a 20 20 20 20 20 20 20 20 2f  nique..        /
1a240 2f 2f 20 69 6e 74 65 67 65 72 20 72 6f 77 20 69  // integer row i
1a250 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68  dentifier for th
1a260 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 66 6f  e current row fo
1a270 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  r the specified 
1a280 63 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20  cursor...       
1a290 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1a2a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1a2b0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1a2c0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1a2d0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1a2e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1a2f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1a300 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1a310 65 20 78 52 6f 77 49 64 28 0d 0a 20 20 20 20 20  e xRowId(..     
1a320 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
1a330 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20  ursor,..        
1a340 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
1a350 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
1a360 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1a370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a3b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a3c0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1a3d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1a3e0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1a3f0 41 6c 6c 20 63 68 61 6e 67 65 73 20 74 6f 20 61  All changes to a
1a400 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 61   virtual table a
1a410 72 65 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  re made using th
1a420 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  e xUpdate method
1a430 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  ...        /// T
1a440 68 69 73 20 6f 6e 65 20 6d 65 74 68 6f 64 20 63  his one method c
1a450 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 69 6e  an be used to in
1a460 73 65 72 74 2c 20 64 65 6c 65 74 65 2c 20 6f 72  sert, delete, or
1a470 20 75 70 64 61 74 65 2e 0d 0a 20 20 20 20 20 20   update...      
1a480 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1a490 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1a4a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1a4b0 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  he argc paramete
1a4c0 72 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  r specifies the 
1a4d0 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
1a4e0 73 20 69 6e 20 74 68 65 20 61 72 67 76 0d 0a 20  s in the argv.. 
1a4f0 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 72 61 79         /// array
1a500 2e 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  . The value of a
1a510 72 67 63 20 77 69 6c 6c 20 62 65 20 31 20 66 6f  rgc will be 1 fo
1a520 72 20 61 20 70 75 72 65 20 64 65 6c 65 74 65 20  r a pure delete 
1a530 6f 70 65 72 61 74 69 6f 6e 20 6f 72 0d 0a 20 20  operation or..  
1a540 20 20 20 20 20 20 2f 2f 2f 20 4e 2b 32 20 66 6f        /// N+2 fo
1a550 72 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 72  r an insert or r
1a560 65 70 6c 61 63 65 20 6f 72 20 75 70 64 61 74 65  eplace or update
1a570 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20   where N is the 
1a580 6e 75 6d 62 65 72 20 6f 66 0d 0a 20 20 20 20 20  number of..     
1a590 20 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 73 20 69     /// columns i
1a5a0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 6e 20  n the table. In 
1a5b0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 65 6e  the previous sen
1a5c0 74 65 6e 63 65 2c 20 4e 20 69 6e 63 6c 75 64 65  tence, N include
1a5d0 73 20 61 6e 79 0d 0a 20 20 20 20 20 20 20 20 2f  s any..        /
1a5e0 2f 2f 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  // hidden column
1a5f0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
1a600 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1a610 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1a620 20 20 20 20 20 2f 2f 2f 20 45 76 65 72 79 20 61       /// Every a
1a630 72 67 76 20 65 6e 74 72 79 20 77 69 6c 6c 20 68  rgv entry will h
1a640 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  ave a non-NULL v
1a650 61 6c 75 65 20 69 6e 20 43 20 62 75 74 20 6d 61  alue in C but ma
1a660 79 20 63 6f 6e 74 61 69 6e 0d 0a 20 20 20 20 20  y contain..     
1a670 20 20 20 2f 2f 2f 20 74 68 65 20 53 51 4c 20 76     /// the SQL v
1a680 61 6c 75 65 20 4e 55 4c 4c 2e 20 49 6e 20 6f 74  alue NULL. In ot
1a690 68 65 72 20 77 6f 72 64 73 2c 20 69 74 20 69 73  her words, it is
1a6a0 20 61 6c 77 61 79 73 20 74 72 75 65 20 74 68 61   always true tha
1a6b0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  t..        /// a
1a6c0 72 67 76 5b 69 5d 21 3d 30 20 66 6f 72 20 69 20  rgv[i]!=0 for i 
1a6d0 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 61 72  between 0 and ar
1a6e0 67 63 2d 31 2e 20 48 6f 77 65 76 65 72 2c 20 69  gc-1. However, i
1a6f0 74 20 6d 69 67 68 74 20 62 65 20 74 68 65 0d 0a  t might be the..
1a700 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 73 65          /// case
1a710 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f 76 61   that sqlite3_va
1a720 6c 75 65 5f 74 79 70 65 28 61 72 67 76 5b 69 5d  lue_type(argv[i]
1a730 29 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 2e 0d  )==SQLITE_NULL..
1a740 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1a750 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1a760 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1a770 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 76 5b 30    /// The argv[0
1a780 5d 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 74  ] parameter is t
1a790 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
1a7a0 77 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  w in the virtual
1a7b0 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
1a7c0 2f 2f 2f 20 74 6f 20 62 65 20 64 65 6c 65 74 65  /// to be delete
1a7d0 64 2e 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  d. If argv[0] is
1a7e0 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2c 20 74 68   an SQL NULL, th
1a7f0 65 6e 20 6e 6f 20 64 65 6c 65 74 69 6f 6e 20 6f  en no deletion o
1a800 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccurs...        
1a810 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
1a820 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1a830 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1a840 20 61 72 67 76 5b 31 5d 20 70 61 72 61 6d 65 74   argv[1] paramet
1a850 65 72 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  er is the rowid 
1a860 6f 66 20 61 20 6e 65 77 20 72 6f 77 20 74 6f 20  of a new row to 
1a870 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  be inserted into
1a880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
1a890 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
1a8a0 20 49 66 20 61 72 67 76 5b 31 5d 20 69 73 20 61   If argv[1] is a
1a8b0 6e 20 53 51 4c 20 4e 55 4c 4c 2c 20 74 68 65 6e  n SQL NULL, then
1a8c0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1a8d0 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
1a8e0 20 6d 75 73 74 20 63 68 6f 6f 73 65 20 61 20 72   must choose a r
1a8f0 6f 77 69 64 20 66 6f 72 20 74 68 65 20 6e 65 77  owid for the new
1a900 6c 79 20 69 6e 73 65 72 74 65 64 20 72 6f 77 2e  ly inserted row.
1a910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 75  ..        /// Su
1a920 62 73 65 71 75 65 6e 74 20 61 72 67 76 5b 5d 20  bsequent argv[] 
1a930 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
1a940 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 63 6f  values of the co
1a950 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0d 0a 20 20  lumns of the..  
1a960 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61        /// virtua
1a970 6c 20 74 61 62 6c 65 2c 20 69 6e 20 74 68 65 20  l table, in the 
1a980 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 20 63  order that the c
1a990 6f 6c 75 6d 6e 73 20 77 65 72 65 20 64 65 63 6c  olumns were decl
1a9a0 61 72 65 64 2e 20 54 68 65 0d 0a 20 20 20 20 20  ared. The..     
1a9b0 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72 20 6f 66     /// number of
1a9c0 20 63 6f 6c 75 6d 6e 73 20 77 69 6c 6c 20 6d 61   columns will ma
1a9d0 74 63 68 20 74 68 65 20 74 61 62 6c 65 20 64 65  tch the table de
1a9e0 63 6c 61 72 61 74 69 6f 6e 20 74 68 61 74 20 74  claration that t
1a9f0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1aa00 78 43 6f 6e 6e 65 63 74 20 6f 72 20 78 43 72 65  xConnect or xCre
1aa10 61 74 65 20 6d 65 74 68 6f 64 20 6d 61 64 65 20  ate method made 
1aa20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
1aa30 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1aa40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61  ..        /// ca
1aa50 6c 6c 2e 20 41 6c 6c 20 68 69 64 64 65 6e 20 63  ll. All hidden c
1aa60 6f 6c 75 6d 6e 73 20 61 72 65 20 69 6e 63 6c 75  olumns are inclu
1aa70 64 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ded...        //
1aa80 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1aa90 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1aaa0 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20         /// When 
1aab0 64 6f 69 6e 67 20 61 6e 20 69 6e 73 65 72 74 20  doing an insert 
1aac0 77 69 74 68 6f 75 74 20 61 20 72 6f 77 69 64 20  without a rowid 
1aad0 28 61 72 67 63 3e 31 2c 20 61 72 67 76 5b 31 5d  (argc>1, argv[1]
1aae0 20 69 73 20 61 6e 20 53 51 4c 0d 0a 20 20 20 20   is an SQL..    
1aaf0 20 20 20 20 2f 2f 2f 20 4e 55 4c 4c 29 2c 20 74      /// NULL), t
1ab00 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
1ab10 6e 20 6d 75 73 74 20 73 65 74 20 2a 70 52 6f 77  n must set *pRow
1ab20 69 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  id to the rowid 
1ab30 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
1ab40 2f 2f 2f 20 6e 65 77 6c 79 20 69 6e 73 65 72 74  /// newly insert
1ab50 65 64 20 72 6f 77 3b 20 74 68 69 73 20 77 69 6c  ed row; this wil
1ab60 6c 20 62 65 63 6f 6d 65 20 74 68 65 20 76 61 6c  l become the val
1ab70 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ue returned by t
1ab80 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1ab90 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
1aba0 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
1abb0 74 69 6f 6e 2e 20 53 65 74 74 69 6e 67 20 74 68  tion. Setting th
1abc0 69 73 20 76 61 6c 75 65 20 69 6e 20 61 6c 6c 20  is value in all 
1abd0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1abe0 20 6f 74 68 65 72 20 63 61 73 65 73 20 69 73 20   other cases is 
1abf0 61 20 68 61 72 6d 6c 65 73 73 20 6e 6f 2d 6f 70  a harmless no-op
1ac00 3b 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67  ; the SQLite eng
1ac10 69 6e 65 20 69 67 6e 6f 72 65 73 20 74 68 65 0d  ine ignores the.
1ac20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 2a 70 52  .        /// *pR
1ac30 6f 77 69 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owid return valu
1ac40 65 20 69 66 20 61 72 67 63 3d 3d 31 20 6f 72 20  e if argc==1 or 
1ac50 61 72 67 76 5b 31 5d 20 69 73 20 6e 6f 74 20 61  argv[1] is not a
1ac60 6e 20 53 51 4c 20 4e 55 4c 4c 2e 0d 0a 20 20 20  n SQL NULL...   
1ac70 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1ac80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1ac90 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1aca0 2f 20 45 61 63 68 20 63 61 6c 6c 20 74 6f 20 78  / Each call to x
1acb0 55 70 64 61 74 65 20 77 69 6c 6c 20 66 61 6c 6c  Update will fall
1acc0 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 63 61 73   into one of cas
1acd0 65 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 2e 20  es shown below. 
1ace0 4e 6f 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  Note..        //
1acf0 2f 20 74 68 61 74 20 72 65 66 65 72 65 6e 63 65  / that reference
1ad00 73 20 74 6f 20 61 72 67 76 5b 69 5d 20 6d 65 61  s to argv[i] mea
1ad10 6e 20 74 68 65 20 53 51 4c 20 76 61 6c 75 65 20  n the SQL value 
1ad20 68 65 6c 64 20 77 69 74 68 69 6e 20 74 68 65 0d  held within the.
1ad30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72 67  .        /// arg
1ad40 76 5b 69 5d 20 6f 62 6a 65 63 74 2c 20 6e 6f 74  v[i] object, not
1ad50 20 74 68 65 20 61 72 67 76 5b 69 5d 20 6f 62 6a   the argv[i] obj
1ad60 65 63 74 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20  ect itself...   
1ad70 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1ad80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
1ad90 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
1ada0 2f 20 20 20 20 20 61 72 67 63 20 3d 20 31 0d 0a  /     argc = 1..
1adb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f          /// </co
1adc0 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
1add0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1ade0 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 54 68 65   ///         The
1adf0 20 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68   single row with
1ae00 20 72 6f 77 69 64 20 65 71 75 61 6c 20 74 6f 20   rowid equal to 
1ae10 61 72 67 76 5b 30 5d 20 69 73 20 64 65 6c 65 74  argv[0] is delet
1ae20 65 64 2e 20 4e 6f 0d 0a 20 20 20 20 20 20 20 20  ed. No..        
1ae30 2f 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 73 65  ///         inse
1ae40 72 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  rt occurs...    
1ae50 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1ae60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f  .        /// <co
1ae70 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
1ae80 20 20 20 20 20 61 72 67 63 20 3e 20 31 0d 0a 20       argc > 1.. 
1ae90 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61         ///     a
1aea0 72 67 76 5b 30 5d 20 3d 20 4e 55 4c 4c 0d 0a 20  rgv[0] = NULL.. 
1aeb0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
1aec0 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
1aed0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1aee0 2f 2f 2f 20 20 20 20 20 20 20 20 20 41 20 6e 65  ///         A ne
1aef0 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65  w row is inserte
1af00 64 20 77 69 74 68 20 61 20 72 6f 77 69 64 20 61  d with a rowid a
1af10 72 67 76 5b 31 5d 20 61 6e 64 20 63 6f 6c 75 6d  rgv[1] and colum
1af20 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  n..        ///  
1af30 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e         values in
1af40 20 61 72 67 76 5b 32 5d 20 61 6e 64 20 66 6f 6c   argv[2] and fol
1af50 6c 6f 77 69 6e 67 2e 20 49 66 20 61 72 67 76 5b  lowing. If argv[
1af60 31 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e 55 4c  1] is an SQL NUL
1af70 4c 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  L,..        /// 
1af80 20 20 20 20 20 20 20 20 74 68 65 20 61 20 6e 65          the a ne
1af90 77 20 75 6e 69 71 75 65 20 72 6f 77 69 64 20 69  w unique rowid i
1afa0 73 20 67 65 6e 65 72 61 74 65 64 20 61 75 74 6f  s generated auto
1afb0 6d 61 74 69 63 61 6c 6c 79 2e 0d 0a 20 20 20 20  matically...    
1afc0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1afd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f  .        /// <co
1afe0 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
1aff0 20 20 20 20 20 61 72 67 63 20 3e 20 31 0d 0a 20       argc > 1.. 
1b000 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61         ///     a
1b010 72 67 76 5b 30 5d 20 3f 20 4e 55 4c 4c 0d 0a 20  rgv[0] ? NULL.. 
1b020 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61         ///     a
1b030 72 67 76 5b 30 5d 20 3d 20 61 72 67 76 5b 31 5d  rgv[0] = argv[1]
1b040 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b050 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
1b060 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1b070 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 54     ///         T
1b080 68 65 20 72 6f 77 20 77 69 74 68 20 72 6f 77 69  he row with rowi
1b090 64 20 61 72 67 76 5b 30 5d 20 69 73 20 75 70 64  d argv[0] is upd
1b0a0 61 74 65 64 20 77 69 74 68 20 6e 65 77 20 76 61  ated with new va
1b0b0 6c 75 65 73 20 69 6e 0d 0a 20 20 20 20 20 20 20  lues in..       
1b0c0 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 61 72 67   ///         arg
1b0d0 76 5b 32 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77 69  v[2] and followi
1b0e0 6e 67 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a  ng parameters...
1b0f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1b100 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1b110 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20   <code>..       
1b120 20 2f 2f 2f 20 20 20 20 20 61 72 67 63 20 3e 20   ///     argc > 
1b130 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  1..        ///  
1b140 20 20 20 61 72 67 76 5b 30 5d 20 3f 20 4e 55 4c     argv[0] ? NUL
1b150 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  L..        ///  
1b160 20 20 20 61 72 67 76 5b 30 5d 20 3f 20 61 72 67     argv[0] ? arg
1b170 76 5b 31 5d 0d 0a 20 20 20 20 20 20 20 20 2f 2f  v[1]..        //
1b180 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20  / </code>..     
1b190 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1b1a0 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
1b1b0 20 20 20 54 68 65 20 72 6f 77 20 77 69 74 68 20     The row with 
1b1c0 72 6f 77 69 64 20 61 72 67 76 5b 30 5d 20 69 73  rowid argv[0] is
1b1d0 20 75 70 64 61 74 65 64 20 77 69 74 68 20 72 6f   updated with ro
1b1e0 77 69 64 20 61 72 67 76 5b 31 5d 0d 0a 20 20 20  wid argv[1]..   
1b1f0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
1b200 20 61 6e 64 20 6e 65 77 20 76 61 6c 75 65 73 20   and new values 
1b210 69 6e 20 61 72 67 76 5b 32 5d 20 61 6e 64 20 66  in argv[2] and f
1b220 6f 6c 6c 6f 77 69 6e 67 20 70 61 72 61 6d 65 74  ollowing paramet
1b230 65 72 73 2e 20 54 68 69 73 0d 0a 20 20 20 20 20  ers. This..     
1b240 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 77     ///         w
1b250 69 6c 6c 20 6f 63 63 75 72 20 77 68 65 6e 20 61  ill occur when a
1b260 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
1b270 75 70 64 61 74 65 73 20 61 20 72 6f 77 69 64 2c  updates a rowid,
1b280 20 61 73 20 69 6e 0d 0a 20 20 20 20 20 20 20 20   as in..        
1b290 2f 2f 2f 20 20 20 20 20 20 20 20 20 74 68 65 20  ///         the 
1b2a0 73 74 61 74 65 6d 65 6e 74 3a 0d 0a 20 20 20 20  statement:..    
1b2b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1b2c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f  .        /// <co
1b2d0 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 55 50 44               UPD
1b2f0 41 54 45 20 74 61 62 6c 65 20 53 45 54 20 72 6f  ATE table SET ro
1b300 77 69 64 3d 72 6f 77 69 64 2b 31 20 57 48 45 52  wid=rowid+1 WHER
1b310 45 20 2e 2e 2e 3b 0d 0a 20 20 20 20 20 20 20 20  E ...;..        
1b320 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20  /// </code>..   
1b330 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1b340 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1b350 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
1b360 6d 75 73 74 20 72 65 74 75 72 6e 20 53 51 4c 49  must return SQLI
1b370 54 45 5f 4f 4b 20 69 66 20 61 6e 64 20 6f 6e 6c  TE_OK if and onl
1b380 79 20 69 66 20 69 74 20 69 73 0d 0a 20 20 20 20  y if it is..    
1b390 20 20 20 20 2f 2f 2f 20 73 75 63 63 65 73 73 66      /// successf
1b3a0 75 6c 2e 20 49 66 20 61 20 66 61 69 6c 75 72 65  ul. If a failure
1b3b0 20 6f 63 63 75 72 73 2c 20 74 68 65 20 78 55 70   occurs, the xUp
1b3c0 64 61 74 65 20 6d 75 73 74 20 72 65 74 75 72 6e  date must return
1b3d0 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   an..        ///
1b3e0 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72   appropriate err
1b3f0 6f 72 20 63 6f 64 65 2e 20 4f 6e 20 61 20 66 61  or code. On a fa
1b400 69 6c 75 72 65 2c 20 74 68 65 20 70 56 54 61 62  ilure, the pVTab
1b410 2d 3e 7a 45 72 72 4d 73 67 20 65 6c 65 6d 65 6e  ->zErrMsg elemen
1b420 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  t..        /// m
1b430 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65  ay optionally be
1b440 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 65   replaced with e
1b450 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65 78  rror message tex
1b460 74 20 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f  t stored in memo
1b470 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ry..        /// 
1b480 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 20 53  allocated from S
1b490 51 4c 69 74 65 20 75 73 69 6e 67 20 66 75 6e 63  QLite using func
1b4a0 74 69 6f 6e 73 20 73 75 63 68 20 61 73 20 73 71  tions such as sq
1b4b0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 20  lite3_mprintf() 
1b4c0 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
1b4d0 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
1b4e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1b4f0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1b500 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
1b510 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20 78      /// If the x
1b520 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 76 69  Update method vi
1b530 6f 6c 61 74 65 73 20 73 6f 6d 65 20 63 6f 6e 73  olates some cons
1b540 74 72 61 69 6e 74 20 6f 66 20 74 68 65 20 76 69  traint of the vi
1b550 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
1b560 20 20 20 20 20 2f 2f 2f 20 28 69 6e 63 6c 75 64       /// (includ
1b570 69 6e 67 2c 20 62 75 74 20 6e 6f 74 20 6c 69 6d  ing, but not lim
1b580 69 74 65 64 20 74 6f 2c 20 61 74 74 65 6d 70 74  ited to, attempt
1b590 69 6e 67 20 74 6f 20 73 74 6f 72 65 20 61 20 76  ing to store a v
1b5a0 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  alue of the..   
1b5b0 20 20 20 20 20 2f 2f 2f 20 77 72 6f 6e 67 20 64       /// wrong d
1b5c0 61 74 61 74 79 70 65 2c 20 61 74 74 65 6d 70 74  atatype, attempt
1b5d0 69 6e 67 20 74 6f 20 73 74 6f 72 65 20 61 20 76  ing to store a v
1b5e0 61 6c 75 65 20 74 68 61 74 20 69 73 20 74 6f 6f  alue that is too
1b5f0 20 6c 61 72 67 65 20 6f 72 0d 0a 20 20 20 20 20   large or..     
1b600 20 20 20 2f 2f 2f 20 74 6f 6f 20 73 6d 61 6c 6c     /// too small
1b610 2c 20 6f 72 20 61 74 74 65 6d 70 74 69 6e 67 20  , or attempting 
1b620 74 6f 20 63 68 61 6e 67 65 20 61 20 72 65 61 64  to change a read
1b630 2d 6f 6e 6c 79 20 76 61 6c 75 65 29 20 74 68 65  -only value) the
1b640 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
1b650 2f 2f 20 78 55 70 64 61 74 65 20 6d 75 73 74 20  // xUpdate must 
1b660 66 61 69 6c 20 77 69 74 68 20 61 6e 20 61 70 70  fail with an app
1b670 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 63  ropriate error c
1b680 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
1b690 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1b6a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1b6b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 72 65         /// There
1b6c0 20 6d 69 67 68 74 20 62 65 20 6f 6e 65 20 6f 72   might be one or
1b6d0 20 6d 6f 72 65 20 73 71 6c 69 74 65 33 5f 76 74   more sqlite3_vt
1b6e0 61 62 5f 63 75 72 73 6f 72 20 6f 62 6a 65 63 74  ab_cursor object
1b6f0 73 20 6f 70 65 6e 20 61 6e 64 20 69 6e 0d 0a 20  s open and in.. 
1b700 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 20 6f         /// use o
1b710 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
1b720 62 6c 65 20 69 6e 73 74 61 6e 63 65 20 61 6e 64  ble instance and
1b730 20 70 65 72 68 61 70 73 20 65 76 65 6e 20 6f 6e   perhaps even on
1b740 20 74 68 65 20 72 6f 77 20 6f 66 0d 0a 20 20 20   the row of..   
1b750 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72       /// the vir
1b760 74 75 61 6c 20 74 61 62 6c 65 20 77 68 65 6e 20  tual table when 
1b770 74 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  the xUpdate meth
1b780 6f 64 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 54  od is invoked. T
1b790 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1b7a0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
1b7b0 66 20 78 55 70 64 61 74 65 20 6d 75 73 74 20 62  f xUpdate must b
1b7c0 65 20 70 72 65 70 61 72 65 64 20 66 6f 72 20 61  e prepared for a
1b7d0 74 74 65 6d 70 74 73 20 74 6f 20 64 65 6c 65 74  ttempts to delet
1b7e0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  e..        /// o
1b7f0 72 20 6d 6f 64 69 66 79 20 72 6f 77 73 20 6f 66  r modify rows of
1b800 20 74 68 65 20 74 61 62 6c 65 20 6f 75 74 20 66   the table out f
1b810 72 6f 6d 20 6f 74 68 65 72 20 65 78 69 73 74 69  rom other existi
1b820 6e 67 20 63 75 72 73 6f 72 73 2e 20 49 66 20 74  ng cursors. If t
1b830 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1b840 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 61  virtual table ca
1b850 6e 6e 6f 74 20 61 63 63 6f 6d 6d 6f 64 61 74 65  nnot accommodate
1b860 20 73 75 63 68 20 63 68 61 6e 67 65 73 2c 20 74   such changes, t
1b870 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
1b880 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  d..        /// m
1b890 75 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65 72  ust return an er
1b8a0 72 6f 72 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  ror code...     
1b8b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1b8c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1b8d0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1b8e0 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
1b8f0 6f 64 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20  od is optional. 
1b900 49 66 20 74 68 65 20 78 55 70 64 61 74 65 20 70  If the xUpdate p
1b910 6f 69 6e 74 65 72 20 69 6e 20 74 68 65 0d 0a 20  ointer in the.. 
1b920 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
1b930 65 33 5f 6d 6f 64 75 6c 65 20 66 6f 72 20 61 20  e3_module for a 
1b940 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
1b950 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2c   a NULL pointer,
1b960 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 20   then the..     
1b970 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
1b980 61 62 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  able is read-onl
1b990 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
1b9a0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1b9b0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1b9c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1b9d0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
1b9e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1b9f0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
1ba00 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
1ba10 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
1ba20 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
1ba30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1ba40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1ba50 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d  am name="argc">.
1ba60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1ba70 20 6e 75 6d 62 65 72 20 6f 66 20 6e 65 77 20 6f   number of new o
1ba80 72 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c 75 6d  r modified colum
1ba90 6e 20 76 61 6c 75 65 73 20 63 6f 6e 74 61 69 6e  n values contain
1baa0 65 64 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f  ed in..        /
1bab0 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  // <paramref nam
1bac0 65 3d 22 61 72 67 76 22 20 2f 3e 2e 0d 0a 20 20  e="argv" />...  
1bad0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1bae0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1baf0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
1bb00 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  v">..        ///
1bb10 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 6e 61   The array of na
1bb20 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74 6f  tive pointers to
1bb30 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 73   sqlite3_value s
1bb40 74 72 75 63 74 75 72 65 73 20 63 6f 6e 74 61 69  tructures contai
1bb50 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ning..        //
1bb60 2f 20 74 68 65 20 6e 65 77 20 6f 72 20 6d 6f 64  / the new or mod
1bb70 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c  ified column val
1bb80 75 65 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20  ues, if any...  
1bb90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1bba0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1bbb0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77  <param name="row
1bbc0 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  Id">..        //
1bbd0 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
1bbe0 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
1bbf0 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
1bc00 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 75  to contain the u
1bc10 6e 69 71 75 65 0d 0a 20 20 20 20 20 20 20 20 2f  nique..        /
1bc20 2f 2f 20 69 6e 74 65 67 65 72 20 72 6f 77 20 69  // integer row i
1bc30 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68  dentifier for th
1bc40 65 20 72 6f 77 20 74 68 61 74 20 77 61 73 20 69  e row that was i
1bc50 6e 73 65 72 74 65 64 2c 20 69 66 20 61 6e 79 2e  nserted, if any.
1bc60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1bc70 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1bc80 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1bc90 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1bca0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1bcb0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1bcc0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1bcd0 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1bce0 65 45 72 72 6f 72 43 6f 64 65 20 78 55 70 64 61  eErrorCode xUpda
1bcf0 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
1bd00 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
1bd10 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
1bd20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20  argc,..         
1bd30 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 2c 0d     IntPtr argv,.
1bd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1bd50 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20   long rowId..   
1bd60 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1bd70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1bd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1bdc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1bdd0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1bde0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1bdf0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1be00 74 68 6f 64 20 62 65 67 69 6e 73 20 61 20 74 72  thod begins a tr
1be10 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 61 20 76  ansaction on a v
1be20 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68  irtual table. Th
1be30 69 73 20 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20  is is method..  
1be40 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 6f 70 74        /// is opt
1be50 69 6f 6e 61 6c 2e 20 54 68 65 20 78 42 65 67 69  ional. The xBegi
1be60 6e 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c  n pointer of sql
1be70 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20  ite3_module may 
1be80 62 65 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20  be NULL...      
1be90 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1bea0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1beb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1bec0 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 61 6c  his method is al
1bed0 77 61 79 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ways followed by
1bee0 20 6f 6e 65 20 63 61 6c 6c 20 74 6f 20 65 69 74   one call to eit
1bef0 68 65 72 20 74 68 65 20 78 43 6f 6d 6d 69 74 20  her the xCommit 
1bf00 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
1bf10 78 52 6f 6c 6c 62 61 63 6b 20 6d 65 74 68 6f 64  xRollback method
1bf20 2e 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 20  . Virtual table 
1bf30 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 64 6f 20  transactions do 
1bf40 6e 6f 74 20 6e 65 73 74 2c 20 73 6f 20 74 68 65  not nest, so the
1bf50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 42  ..        /// xB
1bf60 65 67 69 6e 20 6d 65 74 68 6f 64 20 77 69 6c 6c  egin method will
1bf70 20 6e 6f 74 20 62 65 20 69 6e 76 6f 6b 65 64 20   not be invoked 
1bf80 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 6f  more than once o
1bf90 6e 20 61 20 73 69 6e 67 6c 65 0d 0a 20 20 20 20  n a single..    
1bfa0 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
1bfb0 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e  table without an
1bfc0 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 63 61 6c   intervening cal
1bfd0 6c 20 74 6f 20 65 69 74 68 65 72 20 78 43 6f 6d  l to either xCom
1bfe0 6d 69 74 20 6f 72 0d 0a 20 20 20 20 20 20 20 20  mit or..        
1bff0 2f 2f 2f 20 78 52 6f 6c 6c 62 61 63 6b 2e 20 4d  /// xRollback. M
1c000 75 6c 74 69 70 6c 65 20 63 61 6c 6c 73 20 74 6f  ultiple calls to
1c010 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 73 20 63   other methods c
1c020 61 6e 20 61 6e 64 20 6c 69 6b 65 6c 79 20 77 69  an and likely wi
1c030 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ll..        /// 
1c040 6f 63 63 75 72 20 69 6e 20 62 65 74 77 65 65 6e  occur in between
1c050 20 74 68 65 20 78 42 65 67 69 6e 20 61 6e 64 20   the xBegin and 
1c060 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
1c070 67 20 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20 20  g xCommit or..  
1c080 20 20 20 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c 62        /// xRollb
1c090 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ack...        //
1c0a0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1c0b0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1c0c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1c0d0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
1c0e0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
1c0f0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
1c100 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
1c110 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
1c120 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
1c130 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1c140 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1c150 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1c160 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1c170 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1c180 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1c190 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1c1a0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1c1b0 43 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a 20 20  Code xBegin(..  
1c1c0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1c1d0 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
1c1e0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1c1f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1c200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c240 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1c250 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1c260 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1c270 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1c280 73 69 67 6e 61 6c 73 20 74 68 65 20 73 74 61 72  signals the star
1c290 74 20 6f 66 20 61 20 74 77 6f 2d 70 68 61 73 65  t of a two-phase
1c2a0 20 63 6f 6d 6d 69 74 20 6f 6e 20 61 20 76 69 72   commit on a vir
1c2b0 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tual..        //
1c2c0 2f 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 73  / table. This is
1c2d0 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f   method is optio
1c2e0 6e 61 6c 2e 20 54 68 65 20 78 53 79 6e 63 20 70  nal. The xSync p
1c2f0 6f 69 6e 74 65 72 20 6f 66 0d 0a 20 20 20 20 20  ointer of..     
1c300 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d     /// sqlite3_m
1c310 6f 64 75 6c 65 20 6d 61 79 20 62 65 20 4e 55 4c  odule may be NUL
1c320 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  L...        /// 
1c330 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1c340 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1c350 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1c360 74 68 6f 64 20 69 73 20 6f 6e 6c 79 20 69 6e 76  thod is only inv
1c370 6f 6b 65 64 20 61 66 74 65 72 20 63 61 6c 6c 20  oked after call 
1c380 74 6f 20 74 68 65 20 78 42 65 67 69 6e 20 6d 65  to the xBegin me
1c390 74 68 6f 64 20 61 6e 64 0d 0a 20 20 20 20 20 20  thod and..      
1c3a0 20 20 2f 2f 2f 20 70 72 69 6f 72 20 74 6f 20 61    /// prior to a
1c3b0 6e 20 78 43 6f 6d 6d 69 74 20 6f 72 20 78 52 6f  n xCommit or xRo
1c3c0 6c 6c 62 61 63 6b 2e 20 49 6e 20 6f 72 64 65 72  llback. In order
1c3d0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 77   to implement tw
1c3e0 6f 2d 70 68 61 73 65 0d 0a 20 20 20 20 20 20 20  o-phase..       
1c3f0 20 2f 2f 2f 20 63 6f 6d 6d 69 74 2c 20 74 68 65   /// commit, the
1c400 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 6f 6e   xSync method on
1c410 20 61 6c 6c 20 76 69 72 74 75 61 6c 20 74 61 62   all virtual tab
1c420 6c 65 73 20 69 73 20 69 6e 76 6f 6b 65 64 20 70  les is invoked p
1c430 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 20  rior to..       
1c440 20 2f 2f 2f 20 69 6e 76 6f 6b 69 6e 67 20 74 68   /// invoking th
1c450 65 20 78 43 6f 6d 6d 69 74 20 6d 65 74 68 6f 64  e xCommit method
1c460 20 6f 6e 20 61 6e 79 20 76 69 72 74 75 61 6c 20   on any virtual 
1c470 74 61 62 6c 65 2e 20 49 66 20 61 6e 79 20 6f 66  table. If any of
1c480 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1c490 2f 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 73 20  / xSync methods 
1c4a0 66 61 69 6c 2c 20 74 68 65 20 65 6e 74 69 72 65  fail, the entire
1c4b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
1c4c0 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 0d 0a 20 20  rolled back...  
1c4d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1c4e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1c4f0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
1c500 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1c510 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
1c520 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
1c530 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
1c540 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
1c550 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
1c560 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1c570 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1c580 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1c590 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1c5a0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1c5b0 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1c5c0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1c5d0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1c5e0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 79  iteErrorCode xSy
1c5f0 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nc(..           
1c600 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
1c610 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1c620 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1c630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1c680 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1c690 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1c6a0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1c6b0 6d 65 74 68 6f 64 20 63 61 75 73 65 73 20 61 20  method causes a 
1c6c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 72  virtual table tr
1c6d0 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 63 6f 6d  ansaction to com
1c6e0 6d 69 74 2e 20 54 68 69 73 20 69 73 0d 0a 20 20  mit. This is..  
1c6f0 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
1c700 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68   is optional. Th
1c710 65 20 78 43 6f 6d 6d 69 74 20 70 6f 69 6e 74 65  e xCommit pointe
1c720 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d 6f 64  r of sqlite3_mod
1c730 75 6c 65 20 6d 61 79 20 62 65 0d 0a 20 20 20 20  ule may be..    
1c740 20 20 20 20 2f 2f 2f 20 4e 55 4c 4c 2e 0d 0a 20      /// NULL... 
1c750 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1c760 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1c770 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1c780 2f 2f 2f 20 41 20 63 61 6c 6c 20 74 6f 20 74 68  /// A call to th
1c790 69 73 20 6d 65 74 68 6f 64 20 61 6c 77 61 79 73  is method always
1c7a0 20 66 6f 6c 6c 6f 77 73 20 61 20 70 72 69 6f 72   follows a prior
1c7b0 20 63 61 6c 6c 20 74 6f 20 78 42 65 67 69 6e 20   call to xBegin 
1c7c0 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  and..        ///
1c7d0 20 78 53 79 6e 63 2e 0d 0a 20 20 20 20 20 20 20   xSync...       
1c7e0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
1c7f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1c800 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1c810 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
1c820 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
1c830 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
1c840 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
1c850 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
1c860 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
1c870 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1c880 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1c890 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1c8a0 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
1c8b0 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
1c8c0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
1c8d0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1c8e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1c8f0 72 6f 72 43 6f 64 65 20 78 43 6f 6d 6d 69 74 28  rorCode xCommit(
1c900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
1c910 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
1c920 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
1c930 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1c940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1c980 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1c990 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1c9a0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
1c9b0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1c9c0 68 6f 64 20 63 61 75 73 65 73 20 61 20 76 69 72  hod causes a vir
1c9d0 74 75 61 6c 20 74 61 62 6c 65 20 74 72 61 6e 73  tual table trans
1c9e0 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61  action to rollba
1c9f0 63 6b 2e 20 54 68 69 73 20 69 73 0d 0a 20 20 20  ck. This is..   
1ca00 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20       /// method 
1ca10 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68 65  is optional. The
1ca20 20 78 52 6f 6c 6c 62 61 63 6b 20 70 6f 69 6e 74   xRollback point
1ca30 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d 6f  er of sqlite3_mo
1ca40 64 75 6c 65 20 6d 61 79 20 62 65 0d 0a 20 20 20  dule may be..   
1ca50 20 20 20 20 20 2f 2f 2f 20 4e 55 4c 4c 2e 0d 0a       /// NULL...
1ca60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1ca70 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1ca80 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1ca90 20 2f 2f 2f 20 41 20 63 61 6c 6c 20 74 6f 20 74   /// A call to t
1caa0 68 69 73 20 6d 65 74 68 6f 64 20 61 6c 77 61 79  his method alway
1cab0 73 20 66 6f 6c 6c 6f 77 73 20 61 20 70 72 69 6f  s follows a prio
1cac0 72 20 63 61 6c 6c 20 74 6f 20 78 42 65 67 69 6e  r call to xBegin
1cad0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1cae0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1caf0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1cb00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1cb10 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
1cb20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1cb30 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
1cb40 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
1cb50 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
1cb60 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
1cb70 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1cb80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1cb90 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1cba0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1cbb0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1cbc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1cbd0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1cbe0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1cbf0 65 20 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20  e xRollback(..  
1cc00 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1cc10 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
1cc20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1cc30 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1cc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1cc80 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1cc90 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1cca0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1ccb0 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1ccc0 70 72 6f 76 69 64 65 73 20 6e 6f 74 69 66 69 63  provides notific
1ccd0 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 76  ation that the v
1cce0 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
1ccf0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
1cd00 65 6e 74 61 74 69 6f 6e 20 74 68 61 74 20 74 68  entation that th
1cd10 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
1cd20 77 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 61 20  will be given a 
1cd30 6e 65 77 20 6e 61 6d 65 2e 20 49 66 0d 0a 20 20  new name. If..  
1cd40 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d        /// this m
1cd50 65 74 68 6f 64 20 72 65 74 75 72 6e 73 20 53 51  ethod returns SQ
1cd60 4c 49 54 45 5f 4f 4b 20 74 68 65 6e 20 53 51 4c  LITE_OK then SQL
1cd70 69 74 65 20 72 65 6e 61 6d 65 73 20 74 68 65 20  ite renames the 
1cd80 74 61 62 6c 65 2e 20 49 66 0d 0a 20 20 20 20 20  table. If..     
1cd90 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74 68     /// this meth
1cda0 6f 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  od returns an er
1cdb0 72 6f 72 20 63 6f 64 65 20 74 68 65 6e 20 74 68  ror code then th
1cdc0 65 20 72 65 6e 61 6d 69 6e 67 20 69 73 20 70 72  e renaming is pr
1cdd0 65 76 65 6e 74 65 64 2e 0d 0a 20 20 20 20 20 20  evented...      
1cde0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1cdf0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1ce00 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1ce10 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  he xRename metho
1ce20 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  d is required fo
1ce30 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20  r every virtual 
1ce40 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  table..        /
1ce50 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
1ce60 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
1ce70 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1ce80 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1ce90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1cea0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
1ceb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1cec0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
1ced0 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
1cee0 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74  _vtab derived st
1cef0 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
1cf00 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1cf10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1cf20 61 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 22 3e 0d  am name="nArg">.
1cf30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1cf40 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
1cf50 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63  ents to the func
1cf60 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f 75 67 68  tion being sough
1cf70 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
1cf80 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1cf90 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1cfa0 65 3d 22 7a 4e 61 6d 65 22 3e 0d 0a 20 20 20 20  e="zName">..    
1cfb0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
1cfc0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
1cfd0 20 62 65 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a   being sought...
1cfe0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1cff0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1d000 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
1d010 61 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20 20 20 20  allback">..     
1d020 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
1d030 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
1d040 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
1d050 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
1d060 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1d070 20 64 65 6c 65 67 61 74 65 20 72 65 73 70 6f 6e   delegate respon
1d080 73 69 62 6c 65 20 66 6f 72 20 69 6d 70 6c 65 6d  sible for implem
1d090 65 6e 74 69 6e 67 20 74 68 65 20 73 70 65 63 69  enting the speci
1d0a0 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a  fied function...
1d0b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1d0c0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1d0d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
1d0e0 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20  ClientData">..  
1d0f0 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73        /// Upon s
1d100 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72  uccess, this par
1d110 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d  ameter must be m
1d120 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61  odified to conta
1d130 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..        
1d140 2f 2f 2f 20 6e 61 74 69 76 65 20 75 73 65 72 2d  /// native user-
1d150 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73 73  data pointer ass
1d160 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20  ociated with..  
1d170 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1d180 72 65 66 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61  ref name="callba
1d190 63 6b 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20  ck" />...       
1d1a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1d1b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1d1c0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1d1d0 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
1d1e0 65 20 73 70 65 63 69 66 69 65 64 20 66 75 6e 63  e specified func
1d1f0 74 69 6f 6e 20 77 61 73 20 66 6f 75 6e 64 3b 20  tion was found; 
1d200 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e 0d  zero otherwise..
1d210 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1d220 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1d230 20 69 6e 74 20 78 46 69 6e 64 46 75 6e 63 74 69   int xFindFuncti
1d240 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
1d250 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
1d260 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
1d270 6e 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  nArg,..         
1d280 20 20 20 49 6e 74 50 74 72 20 7a 4e 61 6d 65 2c     IntPtr zName,
1d290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1d2a0 66 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  f SQLiteCallback
1d2b0 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20   callback,..    
1d2c0 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
1d2d0 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a  tr pClientData..
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1d2f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1d300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d340 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1d350 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1d360 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1d370 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1d380 20 6d 65 74 68 6f 64 20 70 72 6f 76 69 64 65 73   method provides
1d390 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20 74 68   notification th
1d3a0 61 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  at the virtual t
1d3b0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
1d3c0 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
1d3d0 20 74 68 61 74 20 74 68 65 20 76 69 72 74 75 61   that the virtua
1d3e0 6c 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  l table will be 
1d3f0 67 69 76 65 6e 20 61 20 6e 65 77 20 6e 61 6d 65  given a new name
1d400 2e 20 49 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  . If..        //
1d410 2f 20 74 68 69 73 20 6d 65 74 68 6f 64 20 72 65  / this method re
1d420 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 20  turns SQLITE_OK 
1d430 74 68 65 6e 20 53 51 4c 69 74 65 20 72 65 6e 61  then SQLite rena
1d440 6d 65 73 20 74 68 65 20 74 61 62 6c 65 2e 20 49  mes the table. I
1d450 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  f..        /// t
1d460 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72  his method retur
1d470 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
1d480 20 74 68 65 6e 20 74 68 65 20 72 65 6e 61 6d 69   then the renami
1d490 6e 67 20 69 73 20 70 72 65 76 65 6e 74 65 64 2e  ng is prevented.
1d4a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d4b0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1d4c0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1d4d0 20 20 20 2f 2f 2f 20 54 68 65 20 78 52 65 6e 61     /// The xRena
1d4e0 6d 65 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71  me method is req
1d4f0 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20  uired for every 
1d500 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
1d510 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
1d520 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
1d530 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1d540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
1d550 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1d560 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1d570 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
1d580 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
1d590 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
1d5a0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
1d5b0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
1d5c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1d5d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1d5e0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1d5f0 22 7a 4e 65 77 22 3e 0d 0a 20 20 20 20 20 20 20  "zNew">..       
1d600 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
1d610 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 55  pointer to the U
1d620 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72  TF-8 encoded str
1d630 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
1d640 68 65 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20  he new..        
1d650 2f 2f 2f 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  /// name for the
1d660 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
1d670 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1d680 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1d690 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1d6a0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
1d6b0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
1d6c0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
1d6d0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1d6e0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1d6f0 45 72 72 6f 72 43 6f 64 65 20 78 52 65 6e 61 6d  ErrorCode xRenam
1d700 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1d710 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
1d720 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1d730 72 20 7a 4e 65 77 0d 0a 20 20 20 20 20 20 20 20  r zNew..        
1d740 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1d750 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d790 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1d7a0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1d7b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1d7c0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1d7d0 2f 2f 2f 20 54 68 65 73 65 20 6d 65 74 68 6f 64  /// These method
1d7e0 73 20 70 72 6f 76 69 64 65 20 74 68 65 20 76 69  s provide the vi
1d7f0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
1d800 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 0d 0a 20  ementation an.. 
1d810 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 70 6f 72         /// oppor
1d820 74 75 6e 69 74 79 20 74 6f 20 69 6d 70 6c 65 6d  tunity to implem
1d830 65 6e 74 20 6e 65 73 74 65 64 20 74 72 61 6e 73  ent nested trans
1d840 61 63 74 69 6f 6e 73 2e 20 54 68 65 79 20 61 72  actions. They ar
1d850 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20  e always..      
1d860 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 61 6c 20 61    /// optional a
1d870 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20  nd will only be 
1d880 63 61 6c 6c 65 64 20 69 6e 20 53 51 4c 69 74 65  called in SQLite
1d890 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 37 20 61   version 3.7.7 a
1d8a0 6e 64 20 6c 61 74 65 72 2e 0d 0a 20 20 20 20 20  nd later...     
1d8b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1d8c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1d8d0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1d8e0 57 68 65 6e 20 78 53 61 76 65 70 6f 69 6e 74 28  When xSavepoint(
1d8f0 58 2c 4e 29 20 69 73 20 69 6e 76 6f 6b 65 64 2c  X,N) is invoked,
1d900 20 74 68 61 74 20 69 73 20 61 20 73 69 67 6e 61   that is a signa
1d910 6c 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c  l to the virtual
1d920 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61  ..        /// ta
1d930 62 6c 65 20 58 20 74 68 61 74 20 69 74 20 73 68  ble X that it sh
1d940 6f 75 6c 64 20 73 61 76 65 20 69 74 73 20 63 75  ould save its cu
1d950 72 72 65 6e 74 20 73 74 61 74 65 20 61 73 20 73  rrent state as s
1d960 61 76 65 70 6f 69 6e 74 20 4e 2e 20 41 0d 0a 20  avepoint N. A.. 
1d970 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 62 73 65         /// subse
1d980 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f 20 78 52  quent call to xR
1d990 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20 6d  ollbackTo(X,R) m
1d9a0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 73 74  eans that the st
1d9b0 61 74 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ate of the..    
1d9c0 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
1d9d0 74 61 62 6c 65 20 73 68 6f 75 6c 64 20 72 65 74  table should ret
1d9e0 75 72 6e 20 74 6f 20 77 68 61 74 20 69 74 20 77  urn to what it w
1d9f0 61 73 20 77 68 65 6e 20 78 53 61 76 65 70 6f 69  as when xSavepoi
1da00 6e 74 28 58 2c 52 29 20 77 61 73 0d 0a 20 20 20  nt(X,R) was..   
1da10 20 20 20 20 20 2f 2f 2f 20 6c 61 73 74 20 63 61       /// last ca
1da20 6c 6c 65 64 2e 20 54 68 65 20 63 61 6c 6c 20 74  lled. The call t
1da30 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c  o xRollbackTo(X,
1da40 52 29 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61  R) will invalida
1da50 74 65 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  te all..        
1da60 2f 2f 2f 20 73 61 76 65 70 6f 69 6e 74 73 20 77  /// savepoints w
1da70 69 74 68 20 4e 3e 52 3b 20 6e 6f 6e 65 20 6f 66  ith N>R; none of
1da80 20 74 68 65 20 69 6e 76 61 6c 69 64 65 64 20 73   the invalided s
1da90 61 76 65 70 6f 69 6e 74 73 20 77 69 6c 6c 20 62  avepoints will b
1daa0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  e..        /// r
1dab0 6f 6c 6c 65 64 20 62 61 63 6b 20 6f 72 20 72 65  olled back or re
1dac0 6c 65 61 73 65 64 20 77 69 74 68 6f 75 74 20 66  leased without f
1dad0 69 72 73 74 20 62 65 69 6e 67 20 72 65 69 6e 69  irst being reini
1dae0 74 69 61 6c 69 7a 65 64 20 62 79 20 61 20 63 61  tialized by a ca
1daf0 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ll..        /// 
1db00 74 6f 20 78 53 61 76 65 70 6f 69 6e 74 28 29 2e  to xSavepoint().
1db10 20 41 20 63 61 6c 6c 20 74 6f 20 78 52 65 6c 65   A call to xRele
1db20 61 73 65 28 58 2c 4d 29 20 69 6e 76 61 6c 69 64  ase(X,M) invalid
1db30 61 74 65 73 20 61 6c 6c 20 73 61 76 65 70 6f 69  ates all savepoi
1db40 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nts..        ///
1db50 20 77 68 65 72 65 20 4e 3e 3d 4d 2e 0d 0a 20 20   where N>=M...  
1db60 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1db70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1db80 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1db90 2f 2f 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20 78  // None of the x
1dba0 53 61 76 65 70 6f 69 6e 74 28 29 2c 20 78 52 65  Savepoint(), xRe
1dbb0 6c 65 61 73 65 28 29 2c 20 6f 72 20 78 52 6f 6c  lease(), or xRol
1dbc0 6c 62 61 63 6b 54 6f 28 29 20 6d 65 74 68 6f 64  lbackTo() method
1dbd0 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20  s will..        
1dbe0 2f 2f 2f 20 65 76 65 72 20 62 65 20 63 61 6c 6c  /// ever be call
1dbf0 65 64 20 65 78 63 65 70 74 20 69 6e 20 62 65 74  ed except in bet
1dc00 77 65 65 6e 20 63 61 6c 6c 73 20 74 6f 20 78 42  ween calls to xB
1dc10 65 67 69 6e 28 29 20 61 6e 64 20 65 69 74 68 65  egin() and eithe
1dc20 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  r..        /// x
1dc30 43 6f 6d 6d 69 74 28 29 20 6f 72 20 78 52 6f 6c  Commit() or xRol
1dc40 6c 62 61 63 6b 28 29 2e 0d 0a 20 20 20 20 20 20  lback()...      
1dc50 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1dc60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1dc70 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1dc80 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1dc90 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
1dca0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
1dcb0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
1dcc0 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
1dcd0 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
1dce0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1dcf0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1dd00 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
1dd10 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20  Savepoint">..   
1dd20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73       /// This is
1dd30 20 61 6e 20 69 6e 74 65 67 65 72 20 69 64 65 6e   an integer iden
1dd40 74 69 66 69 65 72 20 75 6e 64 65 72 20 77 68 69  tifier under whi
1dd50 63 68 20 74 68 65 20 74 68 65 20 63 75 72 72 65  ch the the curre
1dd60 6e 74 20 73 74 61 74 65 20 6f 66 0d 0a 20 20 20  nt state of..   
1dd70 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72       /// the vir
1dd80 74 75 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c  tual table shoul
1dd90 64 20 62 65 20 73 61 76 65 64 2e 0d 0a 20 20 20  d be saved...   
1dda0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1ddb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1ddc0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1ddd0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
1dde0 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
1ddf0 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
1de00 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
1de10 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1de20 72 43 6f 64 65 20 78 53 61 76 65 70 6f 69 6e 74  rCode xSavepoint
1de30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
1de40 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
1de50 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53            int iS
1de60 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20  avepoint..      
1de70 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1de80 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1de90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1deb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1ded0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1dee0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1def0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1df00 20 20 2f 2f 2f 20 54 68 65 73 65 20 6d 65 74 68    /// These meth
1df10 6f 64 73 20 70 72 6f 76 69 64 65 20 74 68 65 20  ods provide the 
1df20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
1df30 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 0d  plementation an.
1df40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 70  .        /// opp
1df50 6f 72 74 75 6e 69 74 79 20 74 6f 20 69 6d 70 6c  ortunity to impl
1df60 65 6d 65 6e 74 20 6e 65 73 74 65 64 20 74 72 61  ement nested tra
1df70 6e 73 61 63 74 69 6f 6e 73 2e 20 54 68 65 79 20  nsactions. They 
1df80 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  are always..    
1df90 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 61 6c      /// optional
1dfa0 20 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79 20 62   and will only b
1dfb0 65 20 63 61 6c 6c 65 64 20 69 6e 20 53 51 4c 69  e called in SQLi
1dfc0 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 37  te version 3.7.7
1dfd0 20 61 6e 64 20 6c 61 74 65 72 2e 0d 0a 20 20 20   and later...   
1dfe0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1dff0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1e000 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1e010 2f 20 57 68 65 6e 20 78 53 61 76 65 70 6f 69 6e  / When xSavepoin
1e020 74 28 58 2c 4e 29 20 69 73 20 69 6e 76 6f 6b 65  t(X,N) is invoke
1e030 64 2c 20 74 68 61 74 20 69 73 20 61 20 73 69 67  d, that is a sig
1e040 6e 61 6c 20 74 6f 20 74 68 65 20 76 69 72 74 75  nal to the virtu
1e050 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  al..        /// 
1e060 74 61 62 6c 65 20 58 20 74 68 61 74 20 69 74 20  table X that it 
1e070 73 68 6f 75 6c 64 20 73 61 76 65 20 69 74 73 20  should save its 
1e080 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 61 73  current state as
1e090 20 73 61 76 65 70 6f 69 6e 74 20 4e 2e 20 41 0d   savepoint N. A.
1e0a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 62  .        /// sub
1e0b0 73 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f 20  sequent call to 
1e0c0 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29  xRollbackTo(X,R)
1e0d0 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
1e0e0 73 74 61 74 65 20 6f 66 20 74 68 65 0d 0a 20 20  state of the..  
1e0f0 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61        /// virtua
1e100 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20 72  l table should r
1e110 65 74 75 72 6e 20 74 6f 20 77 68 61 74 20 69 74  eturn to what it
1e120 20 77 61 73 20 77 68 65 6e 20 78 53 61 76 65 70   was when xSavep
1e130 6f 69 6e 74 28 58 2c 52 29 20 77 61 73 0d 0a 20  oint(X,R) was.. 
1e140 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 73 74 20         /// last 
1e150 63 61 6c 6c 65 64 2e 20 54 68 65 20 63 61 6c 6c  called. The call
1e160 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28   to xRollbackTo(
1e170 58 2c 52 29 20 77 69 6c 6c 20 69 6e 76 61 6c 69  X,R) will invali
1e180 64 61 74 65 20 61 6c 6c 0d 0a 20 20 20 20 20 20  date all..      
1e190 20 20 2f 2f 2f 20 73 61 76 65 70 6f 69 6e 74 73    /// savepoints
1e1a0 20 77 69 74 68 20 4e 3e 52 3b 20 6e 6f 6e 65 20   with N>R; none 
1e1b0 6f 66 20 74 68 65 20 69 6e 76 61 6c 69 64 65 64  of the invalided
1e1c0 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 6c 6c   savepoints will
1e1d0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   be..        ///
1e1e0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6f 72 20   rolled back or 
1e1f0 72 65 6c 65 61 73 65 64 20 77 69 74 68 6f 75 74  released without
1e200 20 66 69 72 73 74 20 62 65 69 6e 67 20 72 65 69   first being rei
1e210 6e 69 74 69 61 6c 69 7a 65 64 20 62 79 20 61 20  nitialized by a 
1e220 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  call..        //
1e230 2f 20 74 6f 20 78 53 61 76 65 70 6f 69 6e 74 28  / to xSavepoint(
1e240 29 2e 20 41 20 63 61 6c 6c 20 74 6f 20 78 52 65  ). A call to xRe
1e250 6c 65 61 73 65 28 58 2c 4d 29 20 69 6e 76 61 6c  lease(X,M) inval
1e260 69 64 61 74 65 73 20 61 6c 6c 20 73 61 76 65 70  idates all savep
1e270 6f 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  oints..        /
1e280 2f 2f 20 77 68 65 72 65 20 4e 3e 3d 4d 2e 0d 0a  // where N>=M...
1e290 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1e2a0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1e2b0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
1e2c0 20 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20 74 68 65   /// None of the
1e2d0 20 78 53 61 76 65 70 6f 69 6e 74 28 29 2c 20 78   xSavepoint(), x
1e2e0 52 65 6c 65 61 73 65 28 29 2c 20 6f 72 20 78 52  Release(), or xR
1e2f0 6f 6c 6c 62 61 63 6b 54 6f 28 29 20 6d 65 74 68  ollbackTo() meth
1e300 6f 64 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20  ods will..      
1e310 20 20 2f 2f 2f 20 65 76 65 72 20 62 65 20 63 61    /// ever be ca
1e320 6c 6c 65 64 20 65 78 63 65 70 74 20 69 6e 20 62  lled except in b
1e330 65 74 77 65 65 6e 20 63 61 6c 6c 73 20 74 6f 20  etween calls to 
1e340 78 42 65 67 69 6e 28 29 20 61 6e 64 20 65 69 74  xBegin() and eit
1e350 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  her..        ///
1e360 20 78 43 6f 6d 6d 69 74 28 29 20 6f 72 20 78 52   xCommit() or xR
1e370 6f 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20 20 20 20  ollback()...    
1e380 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
1e390 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
1e3a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1e3b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1e3c0 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
1e3d0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
1e3e0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
1e3f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
1e400 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
1e410 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e420 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1e430 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e440 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20  "iSavepoint">.. 
1e450 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1e460 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73  is an integer us
1e470 65 64 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  ed to indicate t
1e480 68 61 74 20 61 6e 79 20 73 61 76 65 64 20 73 74  hat any saved st
1e490 61 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20  ates with an..  
1e4a0 20 20 20 20 20 20 2f 2f 2f 20 69 64 65 6e 74 69        /// identi
1e4b0 66 69 65 72 20 67 72 65 61 74 65 72 20 74 68 61  fier greater tha
1e4c0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1e4d0 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 65 6c  is should be del
1e4e0 65 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  eted by the..   
1e4f0 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c       /// virtual
1e500 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
1e510 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1e520 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1e530 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1e540 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1e550 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1e560 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e570 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1e580 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1e590 65 20 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20  e xRelease(..   
1e5a0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1e5b0 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
1e5c0 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69      int iSavepoi
1e5d0 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
1e5e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1e5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e630 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e640 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1e650 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1e660 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1e670 54 68 65 73 65 20 6d 65 74 68 6f 64 73 20 70 72  These methods pr
1e680 6f 76 69 64 65 20 74 68 65 20 76 69 72 74 75 61  ovide the virtua
1e690 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
1e6a0 74 61 74 69 6f 6e 20 61 6e 0d 0a 20 20 20 20 20  tation an..     
1e6b0 20 20 20 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e 69     /// opportuni
1e6c0 74 79 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ty to implement 
1e6d0 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74 69  nested transacti
1e6e0 6f 6e 73 2e 20 54 68 65 79 20 61 72 65 20 61 6c  ons. They are al
1e6f0 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ways..        //
1e700 2f 20 6f 70 74 69 6f 6e 61 6c 20 61 6e 64 20 77  / optional and w
1e710 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c  ill only be call
1e720 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ed in SQLite ver
1e730 73 69 6f 6e 20 33 2e 37 2e 37 20 61 6e 64 20 6c  sion 3.7.7 and l
1e740 61 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ater...        /
1e750 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1e760 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1e770 20 20 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e          /// When
1e780 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 4e 29   xSavepoint(X,N)
1e790 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 61   is invoked, tha
1e7a0 74 20 69 73 20 61 20 73 69 67 6e 61 6c 20 74 6f  t is a signal to
1e7b0 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20   the virtual..  
1e7c0 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20        /// table 
1e7d0 58 20 74 68 61 74 20 69 74 20 73 68 6f 75 6c 64  X that it should
1e7e0 20 73 61 76 65 20 69 74 73 20 63 75 72 72 65 6e   save its curren
1e7f0 74 20 73 74 61 74 65 20 61 73 20 73 61 76 65 70  t state as savep
1e800 6f 69 6e 74 20 4e 2e 20 41 0d 0a 20 20 20 20 20  oint N. A..     
1e810 20 20 20 2f 2f 2f 20 73 75 62 73 65 71 75 65 6e     /// subsequen
1e820 74 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62  t call to xRollb
1e830 61 63 6b 54 6f 28 58 2c 52 29 20 6d 65 61 6e 73  ackTo(X,R) means
1e840 20 74 68 61 74 20 74 68 65 20 73 74 61 74 65 20   that the state 
1e850 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
1e860 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c  /// virtual tabl
1e870 65 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20  e should return 
1e880 74 6f 20 77 68 61 74 20 69 74 20 77 61 73 20 77  to what it was w
1e890 68 65 6e 20 78 53 61 76 65 70 6f 69 6e 74 28 58  hen xSavepoint(X
1e8a0 2c 52 29 20 77 61 73 0d 0a 20 20 20 20 20 20 20  ,R) was..       
1e8b0 20 2f 2f 2f 20 6c 61 73 74 20 63 61 6c 6c 65 64   /// last called
1e8c0 2e 20 54 68 65 20 63 61 6c 6c 20 74 6f 20 78 52  . The call to xR
1e8d0 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52 29 20 77  ollbackTo(X,R) w
1e8e0 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 61  ill invalidate a
1e8f0 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ll..        /// 
1e900 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20  savepoints with 
1e910 4e 3e 52 3b 20 6e 6f 6e 65 20 6f 66 20 74 68 65  N>R; none of the
1e920 20 69 6e 76 61 6c 69 64 65 64 20 73 61 76 65 70   invalided savep
1e930 6f 69 6e 74 73 20 77 69 6c 6c 20 62 65 0d 0a 20  oints will be.. 
1e940 20 20 20 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65         /// rolle
1e950 64 20 62 61 63 6b 20 6f 72 20 72 65 6c 65 61 73  d back or releas
1e960 65 64 20 77 69 74 68 6f 75 74 20 66 69 72 73 74  ed without first
1e970 20 62 65 69 6e 67 20 72 65 69 6e 69 74 69 61 6c   being reinitial
1e980 69 7a 65 64 20 62 79 20 61 20 63 61 6c 6c 0d 0a  ized by a call..
1e990 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78          /// to x
1e9a0 53 61 76 65 70 6f 69 6e 74 28 29 2e 20 41 20 63  Savepoint(). A c
1e9b0 61 6c 6c 20 74 6f 20 78 52 65 6c 65 61 73 65 28  all to xRelease(
1e9c0 58 2c 4d 29 20 69 6e 76 61 6c 69 64 61 74 65 73  X,M) invalidates
1e9d0 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 0d   all savepoints.
1e9e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 68 65  .        /// whe
1e9f0 72 65 20 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20 20  re N>=M...      
1ea00 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1ea10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1ea20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
1ea30 6f 6e 65 20 6f 66 20 74 68 65 20 78 53 61 76 65  one of the xSave
1ea40 70 6f 69 6e 74 28 29 2c 20 78 52 65 6c 65 61 73  point(), xReleas
1ea50 65 28 29 2c 20 6f 72 20 78 52 6f 6c 6c 62 61 63  e(), or xRollbac
1ea60 6b 54 6f 28 29 20 6d 65 74 68 6f 64 73 20 77 69  kTo() methods wi
1ea70 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ll..        /// 
1ea80 65 76 65 72 20 62 65 20 63 61 6c 6c 65 64 20 65  ever be called e
1ea90 78 63 65 70 74 20 69 6e 20 62 65 74 77 65 65 6e  xcept in between
1eaa0 20 63 61 6c 6c 73 20 74 6f 20 78 42 65 67 69 6e   calls to xBegin
1eab0 28 29 20 61 6e 64 20 65 69 74 68 65 72 0d 0a 20  () and either.. 
1eac0 20 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6d 6d         /// xComm
1ead0 69 74 28 29 20 6f 72 20 78 52 6f 6c 6c 62 61 63  it() or xRollbac
1eae0 6b 28 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  k()...        //
1eaf0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1eb00 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1eb10 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1eb20 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
1eb30 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
1eb40 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
1eb50 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
1eb60 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
1eb70 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
1eb80 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1eb90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1eba0 61 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65  aram name="iSave
1ebb0 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20  point">..       
1ebc0 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6e 20   /// This is an 
1ebd0 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66 69  integer identifi
1ebe0 65 72 20 75 73 65 64 20 74 6f 20 73 70 65 63 69  er used to speci
1ebf0 66 79 20 61 20 73 70 65 63 69 66 69 63 20 73 61  fy a specific sa
1ec00 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ved..        ///
1ec10 20 73 74 61 74 65 20 66 6f 72 20 74 68 65 20 76   state for the v
1ec20 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 6f 72  irtual table for
1ec30 20 69 74 20 74 6f 20 72 65 73 74 6f 72 65 20 69   it to restore i
1ec40 74 73 65 6c 66 20 62 61 63 6b 20 74 6f 2c 20 77  tself back to, w
1ec50 68 69 63 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hich..        //
1ec60 2f 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 68 61  / should also ha
1ec70 76 65 20 74 68 65 20 65 66 66 65 63 74 20 6f 66  ve the effect of
1ec80 20 64 65 6c 65 74 69 6e 67 20 61 6c 6c 20 73 61   deleting all sa
1ec90 76 65 64 20 73 74 61 74 65 73 20 77 69 74 68 20  ved states with 
1eca0 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  an..        /// 
1ecb0 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66 69  integer identifi
1ecc0 65 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  er greater than 
1ecd0 74 68 69 73 20 6f 6e 65 2e 0d 0a 20 20 20 20 20  this one...     
1ece0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1ecf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
1ed00 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1ed10 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
1ed20 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
1ed30 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1ed40 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1ed50 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1ed60 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28  ode xRollbackTo(
1ed70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
1ed80 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
1ed90 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61           int iSa
1eda0 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  vepoint..       
1edb0 20 20 20 20 20 29 3b 0d 0a 20 20 20 20 7d 0d 0a       );..    }..
1edc0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1edd0 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
1ede0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1edf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee20 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
1ee30 20 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d   ISQLiteManagedM
1ee40 6f 64 75 6c 65 20 49 6e 74 65 72 66 61 63 65 0d  odule Interface.
1ee50 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1ee60 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
1ee70 20 69 6e 74 65 72 66 61 63 65 20 72 65 70 72 65   interface repre
1ee80 73 65 6e 74 73 20 61 20 76 69 72 74 75 61 6c 20  sents a virtual 
1ee90 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
1eea0 74 69 6f 6e 20 77 72 69 74 74 65 6e 20 69 6e 0d  tion written in.
1eeb0 0a 20 20 20 20 2f 2f 2f 20 6d 61 6e 61 67 65 64  .    /// managed
1eec0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
1eed0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1eee0 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63 65  public interface
1eef0 20 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d   ISQLiteManagedM
1ef00 6f 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20  odule..    {..  
1ef10 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1ef20 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1ef30 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   Returns non-zer
1ef40 6f 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20  o if the schema 
1ef50 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
1ef60 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e 0d 0a  table has been..
1ef70 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 63 6c          /// decl
1ef80 61 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ared...        /
1ef90 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1efa0 20 20 20 20 20 20 20 62 6f 6f 6c 20 44 65 63 6c         bool Decl
1efb0 61 72 65 64 20 7b 20 67 65 74 3b 20 7d 0d 0a 0d  ared { get; }...
1efc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1efd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1f020 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1f030 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
1f040 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d  he name of the m
1f050 6f 64 75 6c 65 20 61 73 20 69 74 20 77 61 73 20  odule as it was 
1f060 72 65 67 69 73 74 65 72 65 64 20 77 69 74 68 20  registered with 
1f070 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20  the SQLite..    
1f080 20 20 20 20 2f 2f 2f 20 63 6f 72 65 20 6c 69 62      /// core lib
1f090 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
1f0a0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1f0b0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 4e 61         string Na
1f0c0 6d 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 0d 0a 20  me { get; }.... 
1f0d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f120 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1f130 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1f140 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
1f150 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
1f160 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
1f170 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
1f180 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
1f190 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
1f1a0 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
1f1b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1f1c0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1f1d0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1f1e0 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d 0a 20 20  connection">..  
1f1f0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1f200 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
1f210 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62  onnection" /> ob
1f220 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
1f230 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20  sociated with.. 
1f240 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76         /// the v
1f250 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
1f260 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1f270 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1f280 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
1f290 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20  lientData">..   
1f2a0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
1f2b0 69 76 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f  ive user-data po
1f2c0 69 6e 74 65 72 20 61 73 73 6f 63 69 61 74 65 64  inter associated
1f2d0 20 77 69 74 68 20 74 68 69 73 20 6d 6f 64 75 6c   with this modul
1f2e0 65 2c 20 61 73 20 69 74 20 77 61 73 0d 0a 20 20  e, as it was..  
1f2f0 20 20 20 20 20 20 2f 2f 2f 20 70 72 6f 76 69 64        /// provid
1f300 65 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65  ed to the SQLite
1f310 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 68   core library wh
1f320 65 6e 20 74 68 65 20 6e 61 74 69 76 65 20 6d 6f  en the native mo
1f330 64 75 6c 65 20 69 6e 73 74 61 6e 63 65 0d 0a 20  dule instance.. 
1f340 20 20 20 20 20 20 20 2f 2f 2f 20 77 61 73 20 63         /// was c
1f350 72 65 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  reated...       
1f360 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1f370 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1f380 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74  m name="argument
1f390 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  s">..        ///
1f3a0 20 54 68 65 20 6d 6f 64 75 6c 65 20 6e 61 6d 65   The module name
1f3b0 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  , database name,
1f3c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6e   virtual table n
1f3d0 61 6d 65 2c 20 61 6e 64 20 61 6c 6c 20 6f 74 68  ame, and all oth
1f3e0 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  er..        /// 
1f3f0 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
1f400 20 74 6f 20 74 68 65 20 43 52 45 41 54 45 20 56   to the CREATE V
1f410 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
1f420 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  tement...       
1f430 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1f440 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1f450 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d  m name="table">.
1f460 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f  .        /// Upo
1f470 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20  n success, this 
1f480 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62  parameter must b
1f490 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f  e modified to co
1f4a0 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ntain the..     
1f4b0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
1f4c0 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
1f4d0 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
1f4e0 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
1f4f0 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20  ted with..      
1f500 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61    /// the virtua
1f510 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
1f520 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1f530 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1f540 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e  am name="error">
1f550 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
1f560 6f 6e 20 66 61 69 6c 75 72 65 2c 20 74 68 69 73  on failure, this
1f570 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
1f580 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63  be modified to c
1f590 6f 6e 74 61 69 6e 20 61 6e 20 65 72 72 6f 72 0d  ontain an error.
1f5a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 73  .        /// mes
1f5b0 73 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sage...        /
1f5c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1f5d0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1f5e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
1f5f0 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
1f600 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
1f610 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
1f620 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1f630 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1f640 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20  Create(..       
1f650 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
1f660 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ction connection
1f670 2c 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  ,  /* in */..   
1f680 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1f690 70 43 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20  pClientData,    
1f6a0 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
1f6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1f6c0 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 2c  ing[] arguments,
1f6d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
1f6e0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1f6f0 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75   ref SQLiteVirtu
1f700 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f  alTable table, /
1f710 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  * out */..      
1f720 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
1f730 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20 20   error          
1f740 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
1f750 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1f760 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1f7c0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1f7d0 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1f7e0 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20  od is called in 
1f7f0 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d  response to the.
1f800 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
1f810 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
1f820 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
1f830 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
1f840 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1f850 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1f860 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1f870 65 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d  e="connection">.
1f880 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1f890 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1f8a0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e  teConnection" />
1f8b0 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1f8c0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1f8d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
1f8e0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
1f8f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1f900 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1f910 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1f920 22 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a  "pClientData">..
1f930 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1f940 6e 61 74 69 76 65 20 75 73 65 72 2d 64 61 74 61  native user-data
1f950 20 70 6f 69 6e 74 65 72 20 61 73 73 6f 63 69 61   pointer associa
1f960 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 6f  ted with this mo
1f970 64 75 6c 65 2c 20 61 73 20 69 74 20 77 61 73 0d  dule, as it was.
1f980 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 6f  .        /// pro
1f990 76 69 64 65 64 20 74 6f 20 74 68 65 20 53 51 4c  vided to the SQL
1f9a0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
1f9b0 20 77 68 65 6e 20 74 68 65 20 6e 61 74 69 76 65   when the native
1f9c0 20 6d 6f 64 75 6c 65 20 69 6e 73 74 61 6e 63 65   module instance
1f9d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 61  ..        /// wa
1f9e0 73 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 20 20  s created...    
1f9f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1fa00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1fa10 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d  aram name="argum
1fa20 65 6e 74 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  ents">..        
1fa30 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6e  /// The module n
1fa40 61 6d 65 2c 20 64 61 74 61 62 61 73 65 20 6e 61  ame, database na
1fa50 6d 65 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c  me, virtual tabl
1fa60 65 20 6e 61 6d 65 2c 20 61 6e 64 20 61 6c 6c 20  e name, and all 
1fa70 6f 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f  other..        /
1fa80 2f 2f 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  // arguments pas
1fa90 73 65 64 20 74 6f 20 74 68 65 20 43 52 45 41 54  sed to the CREAT
1faa0 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
1fab0 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
1fac0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1fad0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1fae0 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
1faf0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1fb00 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
1fb10 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73  is parameter mus
1fb20 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f  t be modified to
1fb30 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20   contain the..  
1fb40 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
1fb50 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
1fb60 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
1fb70 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
1fb80 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20  ciated with..   
1fb90 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72       /// the vir
1fba0 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
1fbb0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1fbc0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1fbd0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f  param name="erro
1fbe0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
1fbf0 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20 74   Upon failure, t
1fc00 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
1fc10 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
1fc20 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 72 72  o contain an err
1fc30 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
1fc40 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20  message...      
1fc50 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1fc60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
1fc70 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
1fc80 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
1fc90 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
1fca0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1fcb0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1fcc0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1fcd0 64 65 20 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  de Connect(..   
1fce0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
1fcf0 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
1fd00 74 69 6f 6e 2c 20 20 2f 2a 20 69 6e 20 2a 2f 0d  tion,  /* in */.
1fd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
1fd20 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 2c  Ptr pClientData,
1fd30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
1fd40 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1fd50 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
1fd60 6e 74 73 2c 20 20 20 20 20 20 20 20 20 20 20 2f  nts,           /
1fd70 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
1fd80 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56       ref SQLiteV
1fd90 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
1fda0 65 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20  e, /* out */..  
1fdb0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
1fdc0 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20 20  ring error      
1fdd0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a          /* out *
1fde0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
1fdf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1fe00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1fe50 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1fe60 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1fe70 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
1fe80 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
1fe90 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1fea0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
1feb0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
1fec0 78 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d  xBestIndex" /> m
1fed0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
1fee0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1fef0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1ff00 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
1ff10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1ff20 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
1ff30 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
1ff40 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
1ff50 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
1ff60 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
1ff70 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
1ff80 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
1ff90 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1ffa0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1ffb0 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20  ame="index">..  
1ffc0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1ffd0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
1ffe0 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20  ndex" /> object 
1fff0 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e  instance contain
20000 69 6e 67 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20  ing all the..   
20010 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 20 66 6f       /// data fo
20020 72 20 74 68 65 20 69 6e 70 75 74 73 20 61 6e 64  r the inputs and
20030 20 6f 75 74 70 75 74 73 20 72 65 6c 61 74 69 6e   outputs relatin
20040 67 20 74 6f 20 69 6e 64 65 78 20 73 65 6c 65 63  g to index selec
20050 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
20060 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
20070 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
20080 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
20090 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
200a0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
200b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
200c0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
200d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
200e0 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20  BestIndex(..    
200f0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
20100 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
20110 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
20120 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e          SQLiteIn
20130 64 65 78 20 69 6e 64 65 78 20 20 20 20 20 20 20  dex index       
20140 20 20 2f 2a 20 69 6e 2c 20 6f 75 74 20 2a 2f 0d    /* in, out */.
20150 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
20160 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
20170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
201c0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
201d0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
201e0 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
201f0 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
20200 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
20210 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
20220 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44  eNativeModule.xD
20230 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  isconnect" /> me
20240 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
20250 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
20260 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
20270 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d  m name="table">.
20280 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
20290 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
202a0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
202b0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
202c0 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  ce associated.. 
202d0 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20         /// with 
202e0 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62  this virtual tab
202f0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
20300 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
20310 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
20320 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
20330 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
20340 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
20350 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
20360 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
20370 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 69  LiteErrorCode Di
20380 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20  sconnect(..     
20390 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
203a0 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20  tualTable table 
203b0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
203c0 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
203d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
203e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20420 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
20430 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
20440 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
20450 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
20460 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
20470 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
20480 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
20490 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22  Module.xDestroy"
204a0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
204b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
204c0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
204d0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61   <param name="ta
204e0 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
204f0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
20500 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
20510 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
20520 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
20530 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
20540 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75   with this virtu
20550 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
20560 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
20570 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
20580 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
20590 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
205a0 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
205b0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
205c0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
205d0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
205e0 6f 64 65 20 44 65 73 74 72 6f 79 28 0d 0a 20 20  ode Destroy(..  
205f0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
20600 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
20610 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  le /* in */..   
20620 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
20630 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
20690 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
206a0 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
206b0 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
206c0 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
206d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
206e0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
206f0 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22  iveModule.xOpen"
20700 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
20710 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
20720 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
20730 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61   <param name="ta
20740 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
20750 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
20760 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
20770 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  able" /> object 
20780 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
20790 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
207a0 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75   with this virtu
207b0 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
207c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
207d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
207e0 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72  ram name="cursor
207f0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
20800 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
20810 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73  is parameter mus
20820 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f  t be modified to
20830 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20   contain the..  
20840 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
20850 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
20860 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f  alTableCursor" /
20870 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
20880 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
20890 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
208a0 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20  he newly opened 
208b0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
208c0 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rsor...        /
208d0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
208e0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
208f0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
20900 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
20910 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
20920 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
20930 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
20940 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
20950 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  Open(..         
20960 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
20970 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20 20  Table table,    
20980 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
20990 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
209a0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
209b0 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
209c0 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
209d0 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
209e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
209f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20a30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
20a40 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
20a50 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
20a60 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73  is called in res
20a70 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20  ponse to the..  
20a80 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
20a90 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
20aa0 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 22  veModule.xClose"
20ab0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
20ac0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
20ad0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
20ae0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75   <param name="cu
20af0 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rsor">..        
20b00 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
20b10 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
20b20 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20  TableCursor" /> 
20b30 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d  object instance.
20b40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73  .        /// ass
20b50 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
20b60 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
20b70 65 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ed virtual table
20b80 20 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20   cursor to be.. 
20b90 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e         /// used.
20ba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
20bb0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
20bc0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
20bd0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
20be0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
20bf0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
20c00 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
20c10 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
20c20 65 45 72 72 6f 72 43 6f 64 65 20 43 6c 6f 73 65  eErrorCode Close
20c30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
20c40 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
20c50 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 2f  eCursor cursor /
20c60 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
20c70 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
20c80 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20cd0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
20ce0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
20cf0 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
20d00 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
20d10 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
20d20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
20d30 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
20d40 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
20d50 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
20d60 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
20d70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
20d80 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73  param name="curs
20d90 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
20da0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
20db0 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
20dc0 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62  bleCursor" /> ob
20dd0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20  ject instance.. 
20de0 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63         /// assoc
20df0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70  iated with the p
20e00 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
20e10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
20e20 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20  ursor to be..   
20e30 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a       /// used...
20e40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
20e50 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
20e60 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
20e70 6e 64 65 78 4e 75 6d 62 65 72 22 3e 0d 0a 20 20  ndexNumber">..  
20e80 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72        /// Number
20e90 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64   used to help id
20ea0 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63  entify the selec
20eb0 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20  ted index...    
20ec0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
20ed0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
20ee0 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78  aram name="index
20ef0 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20  String">..      
20f00 20 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75 73 65    /// String use
20f10 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69  d to help identi
20f20 66 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  fy the selected 
20f30 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
20f40 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
20f50 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
20f60 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d   name="values">.
20f70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
20f80 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f   values correspo
20f90 6e 64 69 6e 67 20 74 6f 20 65 61 63 68 20 63 6f  nding to each co
20fa0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 73 65 6c 65  lumn in the sele
20fb0 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20  cted index...   
20fc0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
20fd0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
20fe0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
20ff0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
21000 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
21010 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
21020 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
21030 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
21040 72 43 6f 64 65 20 46 69 6c 74 65 72 28 0d 0a 20  rCode Filter(.. 
21050 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
21060 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
21070 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a 20 69  sor cursor, /* i
21080 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
21090 20 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65    int indexNumbe
210a0 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
210b0 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
210c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
210d0 69 6e 64 65 78 53 74 72 69 6e 67 2c 20 20 20 20  indexString,    
210e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
210f0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
21100 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61  SQLiteValue[] va
21110 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 20 20  lues            
21120 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
21130 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
21140 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21190 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
211a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
211b0 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
211c0 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
211d0 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
211e0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
211f0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
21200 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 22 20 2f  eModule.xNext" /
21210 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
21220 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
21230 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
21240 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73  param name="curs
21250 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
21260 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
21270 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
21280 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62  bleCursor" /> ob
21290 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20  ject instance.. 
212a0 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63         /// assoc
212b0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70  iated with the p
212c0 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
212d0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
212e0 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20  ursor to be..   
212f0 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a       /// used...
21300 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
21310 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
21320 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
21330 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
21340 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
21350 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
21360 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
21370 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
21380 72 72 6f 72 43 6f 64 65 20 4e 65 78 74 28 0d 0a  rrorCode Next(..
21390 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
213a0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
213b0 72 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 69  rsor cursor /* i
213c0 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
213d0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
213e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21420 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21430 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
21440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21450 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
21460 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
21470 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
21480 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
21490 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
214a0 6c 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68  le.xEof" /> meth
214b0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
214c0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
214d0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
214e0 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a  name="cursor">..
214f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
21500 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
21510 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
21520 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  sor" /> object i
21530 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20  nstance..       
21540 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
21550 77 69 74 68 20 74 68 65 20 70 72 65 76 69 6f 75  with the previou
21560 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75  sly opened virtu
21570 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  al table cursor 
21580 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  to be..        /
21590 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20  // used...      
215a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
215b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
215c0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
215d0 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 6e  // Non-zero if n
215e0 6f 20 6d 6f 72 65 20 72 6f 77 73 20 61 72 65 20  o more rows are 
215f0 61 76 61 69 6c 61 62 6c 65 3b 20 7a 65 72 6f 20  available; zero 
21600 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20  otherwise...    
21610 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
21620 73 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  s>..        bool
21630 20 45 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20   Eof(..         
21640 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
21650 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
21660 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  or /* in */..   
21670 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
21680 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
216d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
216e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
216f0 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
21700 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
21710 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
21720 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
21730 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
21740 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  iveModule.xColum
21750 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
21760 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
21770 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
21780 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
21790 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  cursor">..      
217a0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
217b0 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
217c0 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f  alTableCursor" /
217d0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
217e0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  e..        /// a
217f0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
21800 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  he previously op
21810 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61 62  ened virtual tab
21820 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65 0d  le cursor to be.
21830 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65  .        /// use
21840 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
21850 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
21860 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
21870 65 3d 22 63 6f 6e 74 65 78 74 22 3e 0d 0a 20 20  e="context">..  
21880 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
21890 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
218a0 6f 6e 74 65 78 74 22 20 2f 3e 20 6f 62 6a 65 63  ontext" /> objec
218b0 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65  t instance to be
218c0 20 75 73 65 64 20 66 6f 72 0d 0a 20 20 20 20 20   used for..     
218d0 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e 69 6e 67     /// returning
218e0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
218f0 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 74  olumn value to t
21900 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
21910 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
21920 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
21930 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
21940 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d  m name="index">.
21950 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
21960 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
21970 78 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  x corresponding 
21980 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f  to the column co
21990 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20  ntaining the..  
219a0 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20        /// value 
219b0 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d  to be returned..
219c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
219d0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
219e0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
219f0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
21a00 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
21a10 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
21a20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
21a30 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
21a40 45 72 72 6f 72 43 6f 64 65 20 43 6f 6c 75 6d 6e  ErrorCode Column
21a50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
21a60 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
21a70 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 20  eCursor cursor, 
21a80 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
21a90 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 74        SQLiteCont
21aa0 65 78 74 20 63 6f 6e 74 65 78 74 2c 20 20 20 20  ext context,    
21ab0 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
21ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
21ad0 20 69 6e 64 65 78 20 20 20 20 20 20 20 20 20 20   index          
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21af0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
21b00 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
21b10 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21b60 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
21b70 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
21b80 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
21b90 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
21ba0 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
21bb0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
21bc0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
21bd0 64 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20  dule.xRowId" /> 
21be0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
21bf0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
21c00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
21c10 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72  ram name="cursor
21c20 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
21c30 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
21c40 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
21c50 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65  eCursor" /> obje
21c60 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20  ct instance..   
21c70 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61       /// associa
21c80 74 65 64 20 77 69 74 68 20 74 68 65 20 70 72 65  ted with the pre
21c90 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76  viously opened v
21ca0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
21cb0 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20 20 20 20  sor to be..     
21cc0 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20     /// used...  
21cd0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
21ce0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
21cf0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77  <param name="row
21d00 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  Id">..        //
21d10 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
21d20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d  this parameter m
21d30 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20  ust be modified 
21d40 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 75  to contain the u
21d50 6e 69 71 75 65 0d 0a 20 20 20 20 20 20 20 20 2f  nique..        /
21d60 2f 2f 20 69 6e 74 65 67 65 72 20 72 6f 77 20 69  // integer row i
21d70 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68  dentifier for th
21d80 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 66 6f  e current row fo
21d90 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  r the specified 
21da0 63 75 72 73 6f 72 2e 0d 0a 20 20 20 20 20 20 20  cursor...       
21db0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
21dc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
21dd0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
21de0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
21df0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
21e00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
21e10 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
21e20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
21e30 65 20 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20  e RowId(..      
21e40 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
21e50 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
21e60 75 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d  ursor, /* in */.
21e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
21e80 20 6c 6f 6e 67 20 72 6f 77 49 64 20 20 20 20 20   long rowId     
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21ea0 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20   out */..       
21eb0 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
21ec0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21f10 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
21f20 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
21f30 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
21f40 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
21f50 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
21f60 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
21f70 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
21f80 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f  odule.xUpdate" /
21f90 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
21fa0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
21fb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
21fc0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
21fd0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
21fe0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
21ff0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
22000 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
22010 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
22020 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
22030 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c  ith this virtual
22040 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
22050 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
22060 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
22070 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e  m name="values">
22080 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
22090 65 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20  e array of <see 
220a0 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75  cref="SQLiteValu
220b0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
220c0 74 61 6e 63 65 73 20 63 6f 6e 74 61 69 6e 69 6e  tances containin
220d0 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  g..        /// t
220e0 68 65 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66 69  he new or modifi
220f0 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ed column values
22100 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20  , if any...     
22110 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
22120 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
22130 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64 22  ram name="rowId"
22140 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
22150 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
22160 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
22170 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
22180 63 6f 6e 74 61 69 6e 20 74 68 65 20 75 6e 69 71  contain the uniq
22190 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ue..        /// 
221a0 69 6e 74 65 67 65 72 20 72 6f 77 20 69 64 65 6e  integer row iden
221b0 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 72  tifier for the r
221c0 6f 77 20 74 68 61 74 20 77 61 73 20 69 6e 73 65  ow that was inse
221d0 72 74 65 64 2c 20 69 66 20 61 6e 79 2e 0d 0a 20  rted, if any... 
221e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
221f0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
22200 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
22210 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
22220 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
22230 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
22240 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
22250 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
22260 72 6f 72 43 6f 64 65 20 55 70 64 61 74 65 28 0d  rorCode Update(.
22270 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
22280 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
22290 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d  table, /* in */.
222a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
222b0 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65  iteValue[] value
222c0 73 2c 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d  s,     /* in */.
222d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
222e0 20 6c 6f 6e 67 20 72 6f 77 49 64 20 20 20 20 20   long rowId     
222f0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f         /* out */
22300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
22310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
22320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22360 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
22370 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
22380 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
22390 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
223a0 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
223b0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
223c0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
223d0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
223e0 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  Begin" /> method
223f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
22400 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
22410 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
22420 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
22430 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
22440 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
22450 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
22460 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
22470 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
22480 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
22490 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
224a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
224b0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
224c0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
224d0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
224e0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
224f0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
22500 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
22510 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
22520 45 72 72 6f 72 43 6f 64 65 20 42 65 67 69 6e 28  ErrorCode Begin(
22530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
22540 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
22550 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d   table /* in */.
22560 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
22570 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
22580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
225d0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
225e0 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
225f0 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
22600 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
22610 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
22620 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
22630 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53  eNativeModule.xS
22640 79 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ync" /> method..
22650 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
22660 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
22670 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
22680 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  ="table">..     
22690 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
226a0 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
226b0 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a  ualTable" /> obj
226c0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
226d0 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
226e0 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76   /// with this v
226f0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
22700 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
22710 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
22720 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
22730 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
22740 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
22750 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
22760 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
22770 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
22780 72 6f 72 43 6f 64 65 20 53 79 6e 63 28 0d 0a 20  rorCode Sync(.. 
22790 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
227a0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
227b0 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  ble /* in */..  
227c0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
227d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
227e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22820 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
22830 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
22840 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
22850 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72  d is called in r
22860 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a  esponse to the..
22870 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
22880 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
22890 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d  tiveModule.xComm
228a0 69 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  it" /> method...
228b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
228c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
228d0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
228e0 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20  "table">..      
228f0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
22900 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
22910 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65  alTable" /> obje
22920 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
22930 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  ciated..        
22940 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69  /// with this vi
22950 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
22960 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
22970 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
22980 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
22990 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
229a0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
229b0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
229c0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
229d0 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
229e0 6f 72 43 6f 64 65 20 43 6f 6d 6d 69 74 28 0d 0a  orCode Commit(..
229f0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
22a00 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
22a10 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  able /* in */.. 
22a20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
22a30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
22a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
22a90 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
22aa0 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
22ab0 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20  od is called in 
22ac0 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d  response to the.
22ad0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
22ae0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
22af0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c  ativeModule.xRol
22b00 6c 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f 64  lback" /> method
22b10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
22b20 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
22b30 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
22b40 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
22b50 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
22b60 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
22b70 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
22b80 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
22b90 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
22ba0 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
22bb0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
22bc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
22bd0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
22be0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
22bf0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
22c00 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
22c10 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
22c20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
22c30 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
22c40 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c 6c 62 61  ErrorCode Rollba
22c50 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
22c60 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
22c70 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20  ble table /* in 
22c80 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
22c90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
22ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ce0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22cf0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
22d00 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
22d10 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
22d20 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
22d30 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
22d40 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
22d50 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
22d60 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20  .xFindFunction" 
22d70 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
22d80 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
22d90 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
22da0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
22db0 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
22dc0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
22dd0 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
22de0 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
22df0 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
22e00 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
22e10 77 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61  with this virtua
22e20 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
22e30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
22e40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
22e50 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e  am name="argumen
22e60 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 20 20  tCount">..      
22e70 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
22e80 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
22e90 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
22ea0 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20 20 20  ing sought...   
22eb0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
22ec0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
22ed0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65  param name="name
22ee0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
22ef0 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
22f00 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 73  function being s
22f10 6f 75 67 68 74 2e 0d 0a 20 20 20 20 20 20 20 20  ought...        
22f20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
22f30 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
22f40 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22   name="function"
22f50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  >..        /// U
22f60 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69  pon success, thi
22f70 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74  s parameter must
22f80 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   be modified to 
22f90 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20  contain the..   
22fa0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
22fb0 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
22fc0 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  on" /> object in
22fd0 73 74 61 6e 63 65 20 72 65 73 70 6f 6e 73 69 62  stance responsib
22fe0 6c 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  le for..        
22ff0 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  /// implementing
23000 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
23010 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  unction...      
23020 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
23030 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
23040 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74  am name="pClient
23050 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20  Data">..        
23060 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
23070 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
23080 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
23090 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65  d to contain the
230a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61  ..        /// na
230b0 74 69 76 65 20 75 73 65 72 2d 64 61 74 61 20 70  tive user-data p
230c0 6f 69 6e 74 65 72 20 61 73 73 6f 63 69 61 74 65  ointer associate
230d0 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  d with..        
230e0 2f 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e 61  /// <paramref na
230f0 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 2f 3e  me="function" />
23100 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
23110 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
23120 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
23130 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
23140 7a 65 72 6f 20 69 66 20 74 68 65 20 73 70 65 63  zero if the spec
23150 69 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 20 77  ified function w
23160 61 73 20 66 6f 75 6e 64 3b 20 7a 65 72 6f 20 6f  as found; zero o
23170 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 20  therwise...     
23180 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
23190 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  >..        bool 
231a0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  FindFunction(.. 
231b0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
231c0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
231d0 62 6c 65 2c 20 20 20 20 2f 2a 20 69 6e 20 2a 2f  ble,    /* in */
231e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
231f0 74 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c  t argumentCount,
23200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
23210 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
23220 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 20 20 20   string name,   
23230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23240 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
23250 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 46 75      ref SQLiteFu
23260 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c  nction function,
23270 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
23280 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
23290 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 20 20  tr pClientData  
232a0 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
232b0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
232c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
232d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23310 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
23320 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
23330 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
23340 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
23350 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
23360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
23370 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
23380 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  NativeModule.xRe
23390 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  name" /> method.
233a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
233b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
233c0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
233d0 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
233e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
233f0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
23400 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
23410 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
23420 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
23430 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
23440 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
23450 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
23460 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
23470 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
23480 65 77 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20  ewName">..      
23490 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 6e 61    /// The new na
234a0 6d 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75  me for the virtu
234b0 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
234c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
234d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
234e0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
234f0 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
23500 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
23510 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
23520 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
23530 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
23540 6f 64 65 20 52 65 6e 61 6d 65 28 0d 0a 20 20 20  ode Rename(..   
23550 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
23560 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
23570 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  e, /* in */..   
23580 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
23590 6e 65 77 4e 61 6d 65 20 20 20 20 20 20 20 20 20  newName         
235a0 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
235b0 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
235c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
235d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23610 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
23620 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
23630 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
23640 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
23650 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
23660 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
23670 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
23680 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70  iveModule.xSavep
23690 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  oint" /> method.
236a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
236b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
236c0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
236d0 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
236e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
236f0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
23700 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
23710 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
23720 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
23730 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
23740 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
23750 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
23760 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
23770 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
23780 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20  avepoint">..    
23790 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20      /// This is 
237a0 61 6e 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74  an integer ident
237b0 69 66 69 65 72 20 75 6e 64 65 72 20 77 68 69 63  ifier under whic
237c0 68 20 74 68 65 20 74 68 65 20 63 75 72 72 65 6e  h the the curren
237d0 74 20 73 74 61 74 65 20 6f 66 0d 0a 20 20 20 20  t state of..    
237e0 20 20 20 20 2f 2f 2f 20 74 68 65 20 76 69 72 74      /// the virt
237f0 75 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c 64  ual table should
23800 20 62 65 20 73 61 76 65 64 2e 0d 0a 20 20 20 20   be saved...    
23810 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
23820 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
23830 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
23840 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
23850 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
23860 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
23870 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
23880 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
23890 43 6f 64 65 20 53 61 76 65 70 6f 69 6e 74 28 0d  Code Savepoint(.
238a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
238b0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
238c0 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d  table, /* in */.
238d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
238e0 20 73 61 76 65 70 6f 69 6e 74 20 20 20 20 20 20   savepoint      
238f0 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
23900 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
23910 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
23920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23960 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
23970 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
23980 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
23990 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
239a0 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
239b0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
239c0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
239d0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
239e0 65 6c 65 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f  elease" /> metho
239f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
23a00 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
23a10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
23a20 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
23a30 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
23a40 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
23a50 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
23a60 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
23a70 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
23a80 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
23a90 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
23aa0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
23ab0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
23ac0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
23ad0 22 73 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20  "savepoint">..  
23ae0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
23af0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 65  s an integer use
23b00 64 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  d to indicate th
23b10 61 74 20 61 6e 79 20 73 61 76 65 64 20 73 74 61  at any saved sta
23b20 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20  tes with an..   
23b30 20 20 20 20 20 2f 2f 2f 20 69 64 65 6e 74 69 66       /// identif
23b40 69 65 72 20 67 72 65 61 74 65 72 20 74 68 61 6e  ier greater than
23b50 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 69   or equal to thi
23b60 73 20 73 68 6f 75 6c 64 20 62 65 20 64 65 6c 65  s should be dele
23b70 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ted by the..    
23b80 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20      /// virtual 
23b90 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
23ba0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
23bb0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
23bc0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
23bd0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
23be0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
23bf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
23c00 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
23c10 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
23c20 20 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20   Release(..     
23c30 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
23c40 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
23c50 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
23c60 20 20 20 20 20 20 20 69 6e 74 20 73 61 76 65 70         int savep
23c70 6f 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20  oint            
23c80 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
23c90 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
23ca0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
23cf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
23d00 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
23d10 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
23d20 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
23d30 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
23d40 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
23d50 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
23d60 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
23d70 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  kTo" /> method..
23d80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
23d90 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
23da0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
23db0 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  ="table">..     
23dc0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
23dd0 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
23de0 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a  ualTable" /> obj
23df0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
23e00 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
23e10 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76   /// with this v
23e20 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
23e30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
23e40 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
23e50 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 61   <param name="sa
23e60 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20  vepoint">..     
23e70 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61     /// This is a
23e80 6e 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69  n integer identi
23e90 66 69 65 72 20 75 73 65 64 20 74 6f 20 73 70 65  fier used to spe
23ea0 63 69 66 79 20 61 20 73 70 65 63 69 66 69 63 20  cify a specific 
23eb0 73 61 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  saved..        /
23ec0 2f 2f 20 73 74 61 74 65 20 66 6f 72 20 74 68 65  // state for the
23ed0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66   virtual table f
23ee0 6f 72 20 69 74 20 74 6f 20 72 65 73 74 6f 72 65  or it to restore
23ef0 20 69 74 73 65 6c 66 20 62 61 63 6b 20 74 6f 2c   itself back to,
23f00 20 77 68 69 63 68 0d 0a 20 20 20 20 20 20 20 20   which..        
23f10 2f 2f 2f 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20  /// should also 
23f20 68 61 76 65 20 74 68 65 20 65 66 66 65 63 74 20  have the effect 
23f30 6f 66 20 64 65 6c 65 74 69 6e 67 20 61 6c 6c 20  of deleting all 
23f40 73 61 76 65 64 20 73 74 61 74 65 73 20 77 69 74  saved states wit
23f50 68 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  h an..        //
23f60 2f 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69  / integer identi
23f70 66 69 65 72 20 67 72 65 61 74 65 72 20 74 68 61  fier greater tha
23f80 6e 20 74 68 69 73 20 6f 6e 65 2e 0d 0a 20 20 20  n this one...   
23f90 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
23fa0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
23fb0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
23fc0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
23fd0 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
23fe0 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
23ff0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
24000 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
24010 72 43 6f 64 65 20 52 6f 6c 6c 62 61 63 6b 54 6f  rCode RollbackTo
24020 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
24030 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
24040 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a  e table, /* in *
24050 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  /..            i
24060 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 20 20 20  nt savepoint    
24070 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
24080 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
24090 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  ;..    }..    #e
240a0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
240b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24100 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
24110 65 4d 65 6d 6f 72 79 20 53 74 61 74 69 63 20 43  eMemory Static C
24120 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
24130 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
24140 20 54 68 69 73 20 63 6c 61 73 73 20 63 6f 6e 74   This class cont
24150 61 69 6e 73 20 73 74 61 74 69 63 20 6d 65 74 68  ains static meth
24160 6f 64 73 20 74 68 61 74 20 61 72 65 20 75 73 65  ods that are use
24170 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 2c 0d 0a  d to allocate,..
24180 20 20 20 20 2f 2f 2f 20 6d 61 6e 69 70 75 6c 61      /// manipula
24190 74 65 2c 20 61 6e 64 20 66 72 65 65 20 6e 61 74  te, and free nat
241a0 69 76 65 20 6d 65 6d 6f 72 79 20 70 72 6f 76 69  ive memory provi
241b0 64 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  ded by the SQLit
241c0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
241d0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
241e0 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
241f0 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53  l static class S
24200 51 4c 69 74 65 4d 65 6d 6f 72 79 0d 0a 20 20 20  QLiteMemory..   
24210 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
24220 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74 61  ion Private Data
24230 0d 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f  ..#if TRACK_MEMO
24240 52 59 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20  RY_BYTES..      
24250 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
24260 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
24270 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
24280 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 79 6e  e is used to syn
24290 63 68 72 6f 6e 69 7a 65 20 61 63 63 65 73 73 20  chronize access 
242a0 74 6f 20 74 68 65 20 6f 74 68 65 72 0d 0a 20 20  to the other..  
242b0 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 69 63        /// static
242c0 20 66 69 65 6c 64 73 20 6f 66 20 74 68 69 73 20   fields of this 
242d0 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
242e0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
242f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24300 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
24310 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
24320 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ect();....      
24330 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
24340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24370 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
24380 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
24390 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
243a0 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  The total number
243b0 20 6f 66 20 6f 75 74 73 74 61 6e 64 69 6e 67 20   of outstanding 
243c0 6d 65 6d 6f 72 79 20 62 79 74 65 73 20 61 6c 6c  memory bytes all
243d0 6f 63 61 74 65 64 20 62 79 20 74 68 69 73 0d 0a  ocated by this..
243e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6c 61 73          /// clas
243f0 73 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c 69  s using the SQLi
24400 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
24410 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
24420 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
24430 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
24440 20 69 6e 74 20 62 79 74 65 73 41 6c 6c 6f 63 61   int bytesAlloca
24450 74 65 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ted;....        
24460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
244b0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
244c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
244d0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
244e0 20 6f 66 20 6f 75 74 73 74 61 6e 64 69 6e 67 20   of outstanding 
244f0 6d 65 6d 6f 72 79 20 62 79 74 65 73 20 65 76 65  memory bytes eve
24500 72 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0d 0a  r allocated by..
24510 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73          /// this
24520 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65   class using the
24530 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
24540 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
24550 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
24560 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
24570 74 61 74 69 63 20 69 6e 74 20 6d 61 78 69 6d 75  tatic int maximu
24580 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 3b  mBytesAllocated;
24590 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
245a0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
245b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
245c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24600 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
24610 6f 6e 20 4d 65 6d 6f 72 79 20 41 6c 6c 6f 63 61  on Memory Alloca
24620 74 69 6f 6e 20 48 65 6c 70 65 72 20 4d 65 74 68  tion Helper Meth
24630 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
24640 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
24650 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 63 61 74 65      /// Allocate
24660 73 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 73  s at least the s
24670 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72 20  pecified number 
24680 6f 66 20 62 79 74 65 73 20 6f 66 20 6e 61 74 69  of bytes of nati
24690 76 65 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20  ve memory..     
246a0 20 20 20 2f 2f 2f 20 76 69 61 20 74 68 65 20 53     /// via the S
246b0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
246c0 72 79 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  ry sqlite3_mallo
246d0 63 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  c() function and
246e0 20 72 65 74 75 72 6e 73 0d 0a 20 20 20 20 20 20   returns..      
246f0 20 20 2f 2f 2f 20 74 68 65 20 72 65 73 75 6c 74    /// the result
24700 69 6e 67 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  ing native point
24710 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  er...        ///
24720 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
24730 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
24740 6e 61 6d 65 3d 22 73 69 7a 65 22 3e 0d 0a 20 20  name="size">..  
24750 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75        /// The nu
24760 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f  mber of bytes to
24770 20 61 6c 6c 6f 63 61 74 65 2e 0d 0a 20 20 20 20   allocate...    
24780 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
24790 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
247a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
247b0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
247c0 70 6f 69 6e 74 65 72 20 74 68 61 74 20 70 6f 69  pointer that poi
247d0 6e 74 73 20 74 6f 20 61 20 62 6c 6f 63 6b 20 6f  nts to a block o
247e0 66 20 6d 65 6d 6f 72 79 20 6f 66 20 61 74 20 6c  f memory of at l
247f0 65 61 73 74 20 74 68 65 0d 0a 20 20 20 20 20 20  east the..      
24800 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 65 64 20    /// specified 
24810 73 69 7a 65 20 2d 4f 52 2d 20 3c 73 65 65 20 63  size -OR- <see c
24820 72 65 66 3d 22 49 6e 74 50 74 72 2e 5a 65 72 6f  ref="IntPtr.Zero
24830 22 20 2f 3e 20 69 66 20 74 68 65 20 6d 65 6d 6f  " /> if the memo
24840 72 79 20 63 6f 75 6c 64 0d 0a 20 20 20 20 20 20  ry could..      
24850 20 20 2f 2f 2f 20 6e 6f 74 20 62 65 20 61 6c 6c    /// not be all
24860 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ocated...       
24870 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
24880 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
24890 73 74 61 74 69 63 20 49 6e 74 50 74 72 20 41 6c  static IntPtr Al
248a0 6c 6f 63 61 74 65 28 69 6e 74 20 73 69 7a 65 29  locate(int size)
248b0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
248c0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
248d0 70 4d 65 6d 6f 72 79 20 3d 20 55 6e 73 61 66 65  pMemory = Unsafe
248e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
248f0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 73 69 7a  lite3_malloc(siz
24900 65 29 3b 0d 0a 0d 0a 23 69 66 20 54 52 41 43 4b  e);....#if TRACK
24910 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20  _MEMORY_BYTES.. 
24920 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
24930 4d 65 6d 6f 72 79 20 21 3d 20 49 6e 74 50 74 72  Memory != IntPtr
24940 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
24950 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24960 20 20 20 20 20 20 20 69 6e 74 20 62 6c 6f 63 6b         int block
24970 53 69 7a 65 20 3d 20 53 69 7a 65 28 70 4d 65 6d  Size = Size(pMem
24980 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
24990 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6c 6f           if (blo
249a0 63 6b 53 69 7a 65 20 3e 20 30 29 0d 0a 20 20 20  ckSize > 0)..   
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f      lock (syncRo
249e0 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ot)..           
249f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a10 20 20 20 20 62 79 74 65 73 41 6c 6c 6f 63 61 74      bytesAllocat
24a20 65 64 20 2b 3d 20 62 6c 6f 63 6b 53 69 7a 65 3b  ed += blockSize;
24a30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24a40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24a50 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20 3e  bytesAllocated >
24a60 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c   maximumBytesAll
24a70 6f 63 61 74 65 64 29 0d 0a 20 20 20 20 20 20 20  ocated)..       
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 20 20 20 20 20 6d 61 78 69 6d 75 6d 42 79 74 65       maximumByte
24aa0 73 41 6c 6c 6f 63 61 74 65 64 20 3d 20 62 79 74  sAllocated = byt
24ab0 65 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 20 20  esAllocated;..  
24ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ad0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
24ae0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24af0 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
24b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
24b10 75 72 6e 20 70 4d 65 6d 6f 72 79 3b 0d 0a 20 20  urn pMemory;..  
24b20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24b30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24b80 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
24b90 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
24ba0 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e   Gets and return
24bb0 73 20 74 68 65 20 61 63 74 75 61 6c 20 73 69 7a  s the actual siz
24bc0 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69  e of the specifi
24bd0 65 64 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20  ed memory block 
24be0 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  that..        //
24bf0 2f 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79  / was previously
24c00 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74   obtained from t
24c10 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 41 6c  he <see cref="Al
24c20 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  locate" /> metho
24c30 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
24c40 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
24c50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
24c60 61 6d 65 3d 22 70 4d 65 6d 6f 72 79 22 3e 0d 0a  ame="pMemory">..
24c70 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
24c80 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
24c90 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c 6f  o the memory blo
24ca0 63 6b 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 62  ck previously ob
24cb0 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d  tained from the.
24cc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
24cd0 65 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65  e cref="Allocate
24ce0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
24cf0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
24d00 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
24d10 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
24d20 20 20 20 2f 2f 2f 20 54 68 65 20 61 63 74 75 61     /// The actua
24d30 6c 20 73 69 7a 65 2c 20 69 6e 20 62 79 74 65 73  l size, in bytes
24d40 2c 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  , of the memory 
24d50 62 6c 6f 63 6b 20 73 70 65 63 69 66 69 65 64 20  block specified 
24d60 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 20  via the..       
24d70 20 2f 2f 2f 20 6e 61 74 69 76 65 20 70 6f 69 6e   /// native poin
24d80 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ter...        //
24d90 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
24da0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
24db0 74 69 63 20 69 6e 74 20 53 69 7a 65 28 49 6e 74  tic int Size(Int
24dc0 50 74 72 20 70 4d 65 6d 6f 72 79 29 0d 0a 20 20  Ptr pMemory)..  
24dd0 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
24de0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
24df0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24e00 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
24e10 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61  thods.sqlite3_ma
24e20 6c 6c 6f 63 5f 73 69 7a 65 5f 69 6e 74 65 72 6f  lloc_size_intero
24e30 70 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 23 65 6c  p(pMemory);..#el
24e40 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f  if TRACK_MEMORY_
24e50 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20 20  BYTES..         
24e60 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
24e70 20 20 20 2f 2f 20 48 41 43 4b 3a 20 4f 6b 2c 20     // HACK: Ok, 
24e80 77 65 20 63 61 6e 6e 6f 74 20 64 65 74 65 72 6d  we cannot determ
24e90 69 6e 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ine the size of 
24ea0 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b  the memory block
24eb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;..            /
24ec0 2f 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  /       therefor
24ed0 65 2c 20 6a 75 73 74 20 74 72 61 63 6b 20 6e 75  e, just track nu
24ee0 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 63 61 74 69  mber of allocati
24ef0 6f 6e 73 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20  ons instead...  
24f00 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
24f10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24f20 20 28 70 4d 65 6d 6f 72 79 20 21 3d 20 49 6e 74   (pMemory != Int
24f30 50 74 72 2e 5a 65 72 6f 29 20 3f 20 31 20 3a 20  Ptr.Zero) ? 1 : 
24f40 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  0;..#else..     
24f50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
24f60 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
24f70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
24f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fc0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24fd0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
24fe0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 72 65  .        /// Fre
24ff0 65 73 20 61 20 6d 65 6d 6f 72 79 20 62 6c 6f 63  es a memory bloc
25000 6b 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 62 74  k previously obt
25010 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a  ained from the..
25020 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
25030 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65 22   cref="Allocate"
25040 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
25050 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
25060 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
25070 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 4d   <param name="pM
25080 65 6d 6f 72 79 22 3e 0d 0a 20 20 20 20 20 20 20  emory">..       
25090 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
250a0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d  pointer to the m
250b0 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65 76  emory block prev
250c0 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20  iously obtained 
250d0 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20  from the..      
250e0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
250f0 22 41 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65  "Allocate" /> me
25100 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
25110 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
25120 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
25130 69 63 20 76 6f 69 64 20 46 72 65 65 28 49 6e 74  ic void Free(Int
25140 50 74 72 20 70 4d 65 6d 6f 72 79 29 0d 0a 20 20  Ptr pMemory)..  
25150 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 52 41        {..#if TRA
25160 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d  CK_MEMORY_BYTES.
25170 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
25180 28 70 4d 65 6d 6f 72 79 20 21 3d 20 49 6e 74 50  (pMemory != IntP
25190 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
251a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
251b0 20 20 20 20 20 20 20 20 20 69 6e 74 20 62 6c 6f           int blo
251c0 63 6b 53 69 7a 65 20 3d 20 53 69 7a 65 28 70 4d  ckSize = Size(pM
251d0 65 6d 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  emory);....     
251e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62             if (b
251f0 6c 6f 63 6b 53 69 7a 65 20 3e 20 30 29 0d 0a 20  lockSize > 0).. 
25200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25220 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
25230 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
25240 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25260 20 20 20 20 20 20 62 79 74 65 73 41 6c 6c 6f 63        bytesAlloc
25270 61 74 65 64 20 2d 3d 20 62 6c 6f 63 6b 53 69 7a  ated -= blockSiz
25280 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
25290 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
252a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
252b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
252c0 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
252d0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
252e0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66  ethods.sqlite3_f
252f0 72 65 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 20  ree(pMemory);.. 
25300 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25310 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
25320 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
25330 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
25340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25380 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
25390 65 67 69 6f 6e 20 53 51 4c 69 74 65 53 74 72 69  egion SQLiteStri
253a0 6e 67 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d  ng Static Class.
253b0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
253c0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
253d0 20 63 6c 61 73 73 20 63 6f 6e 74 61 69 6e 73 20   class contains 
253e0 73 74 61 74 69 63 20 6d 65 74 68 6f 64 73 20 74  static methods t
253f0 68 61 74 20 61 72 65 20 75 73 65 64 20 74 6f 20  hat are used to 
25400 64 65 61 6c 20 77 69 74 68 20 6e 61 74 69 76 65  deal with native
25410 0d 0a 20 20 20 20 2f 2f 2f 20 55 54 46 2d 38 20  ..    /// UTF-8 
25420 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 73 20  string pointers 
25430 74 6f 20 62 65 20 75 73 65 64 20 77 69 74 68 20  to be used with 
25440 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
25450 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f  library...    //
25460 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
25470 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
25480 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 53 74  c class SQLiteSt
25490 72 69 6e 67 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ring..    {..   
254a0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
254b0 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
254c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
254d0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
254e0 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65 20 6d  // This is the m
254f0 61 78 69 6d 75 6d 20 70 6f 73 73 69 62 6c 65 20  aximum possible 
25500 6c 65 6e 67 74 68 20 66 6f 72 20 74 68 65 20 6e  length for the n
25510 61 74 69 76 65 20 55 54 46 2d 38 20 65 6e 63 6f  ative UTF-8 enco
25520 64 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ded..        ///
25530 20 73 74 72 69 6e 67 73 20 75 73 65 64 20 77 69   strings used wi
25540 74 68 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  th the SQLite co
25550 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  re library...   
25560 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
25570 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
25580 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
25590 54 68 69 72 74 79 42 69 74 73 20 3d 20 30 78 33  ThirtyBits = 0x3
255a0 66 66 66 66 66 66 66 3b 0d 0a 0d 0a 20 20 20 20  fffffff;....    
255b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
255c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25600 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
25610 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
25620 2f 20 54 68 69 73 20 69 73 20 74 68 65 20 3c 73  / This is the <s
25630 65 65 20 63 72 65 66 3d 22 45 6e 63 6f 64 69 6e  ee cref="Encodin
25640 67 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  g" /> object ins
25650 74 61 6e 63 65 20 75 73 65 64 20 74 6f 20 68 61  tance used to ha
25660 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ndle..        //
25670 2f 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 66 72  / conversions fr
25680 6f 6d 2f 74 6f 20 55 54 46 2d 38 2e 0d 0a 20 20  om/to UTF-8...  
25690 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
256a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
256b0 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
256c0 64 6f 6e 6c 79 20 45 6e 63 6f 64 69 6e 67 20 55  donly Encoding U
256d0 74 66 38 45 6e 63 6f 64 69 6e 67 20 3d 20 45 6e  tf8Encoding = En
256e0 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20  coding.UTF8;..  
256f0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
25700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25750 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
25760 72 65 67 69 6f 6e 20 55 54 46 2d 38 20 45 6e 63  region UTF-8 Enc
25770 6f 64 69 6e 67 20 48 65 6c 70 65 72 20 4d 65 74  oding Helper Met
25780 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
25790 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
257a0 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74       /// Convert
257b0 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  s the specified 
257c0 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20 69  managed string i
257d0 6e 74 6f 20 74 68 65 20 55 54 46 2d 38 20 65 6e  nto the UTF-8 en
257e0 63 6f 64 69 6e 67 20 61 6e 64 0d 0a 20 20 20 20  coding and..    
257f0 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e 73 20      /// returns 
25800 74 68 65 20 61 72 72 61 79 20 6f 66 20 62 79 74  the array of byt
25810 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74  es containing it
25820 73 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  s representation
25830 20 69 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20   in that..      
25840 20 20 2f 2f 2f 20 65 6e 63 6f 64 69 6e 67 2e 0d    /// encoding..
25850 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
25860 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
25870 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
25880 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20  ="value">..     
25890 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67     /// The manag
258a0 65 64 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6e  ed string to con
258b0 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  vert...        /
258c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
258d0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
258e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
258f0 54 68 65 20 61 72 72 61 79 20 6f 66 20 62 79 74  The array of byt
25900 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  es containing th
25910 65 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  e representation
25920 20 6f 66 20 74 68 65 20 6d 61 6e 61 67 65 64 0d   of the managed.
25930 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72  .        /// str
25940 69 6e 67 20 69 6e 20 74 68 65 20 55 54 46 2d 38  ing in the UTF-8
25950 20 65 6e 63 6f 64 69 6e 67 20 6f 72 20 6e 75 6c   encoding or nul
25960 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d  l upon failure..
25970 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
25980 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
25990 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62   public static b
259a0 79 74 65 5b 5d 20 47 65 74 55 74 66 38 42 79 74  yte[] GetUtf8Byt
259b0 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20  esFromString(.. 
259c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
259d0 67 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  g value..       
259e0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
259f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
25a00 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
25a10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25a20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
25a30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
25a40 65 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69  eturn Utf8Encodi
25a50 6e 67 2e 47 65 74 42 79 74 65 73 28 76 61 6c 75  ng.GetBytes(valu
25a60 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
25a70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
25ad0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
25ae0 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73      /// Converts
25af0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 61   the specified a
25b00 72 72 61 79 20 6f 66 20 62 79 74 65 73 20 72 65  rray of bytes re
25b10 70 72 65 73 65 6e 74 69 6e 67 20 61 20 73 74 72  presenting a str
25b20 69 6e 67 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ing in the..    
25b30 20 20 20 20 2f 2f 2f 20 55 54 46 2d 38 20 65 6e      /// UTF-8 en
25b40 63 6f 64 69 6e 67 20 61 6e 64 20 72 65 74 75 72  coding and retur
25b50 6e 73 20 61 20 6d 61 6e 61 67 65 64 20 73 74 72  ns a managed str
25b60 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ing...        //
25b70 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
25b80 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
25b90 20 6e 61 6d 65 3d 22 62 79 74 65 73 22 3e 0d 0a   name="bytes">..
25ba0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
25bb0 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 20 74  array of bytes t
25bc0 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20  o convert...    
25bd0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
25be0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
25bf0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
25c00 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65 64   /// The managed
25c10 20 73 74 72 69 6e 67 20 6f 72 20 6e 75 6c 6c 20   string or null 
25c20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20  upon failure... 
25c30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
25c40 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
25c50 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
25c60 69 6e 67 20 47 65 74 53 74 72 69 6e 67 46 72 6f  ing GetStringFro
25c70 6d 55 74 66 38 42 79 74 65 73 28 0d 0a 20 20 20  mUtf8Bytes(..   
25c80 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
25c90 62 79 74 65 73 0d 0a 20 20 20 20 20 20 20 20 20  bytes..         
25ca0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
25cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
25cc0 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  (bytes == null).
25cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25ce0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
25cf0 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
25d00 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
25d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
25d20 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e 67  urn Utf8Encoding
25d30 2e 47 65 74 53 74 72 69 6e 67 28 62 79 74 65 73  .GetString(bytes
25d40 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
25d50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 74         return Ut
25d60 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 53 74  f8Encoding.GetSt
25d70 72 69 6e 67 28 62 79 74 65 73 2c 20 30 2c 20 62  ring(bytes, 0, b
25d80 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  ytes.Length);..#
25d90 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
25da0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
25db0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
25dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25e10 20 20 20 23 72 65 67 69 6f 6e 20 55 54 46 2d 38     #region UTF-8
25e20 20 53 74 72 69 6e 67 20 48 65 6c 70 65 72 20 4d   String Helper M
25e30 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
25e40 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
25e50 20 20 20 20 20 20 20 2f 2f 2f 20 50 72 6f 62 65         /// Probe
25e60 73 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  s a native point
25e70 65 72 20 74 6f 20 61 20 73 74 72 69 6e 67 20 69  er to a string i
25e80 6e 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f  n the UTF-8 enco
25e90 64 69 6e 67 20 66 6f 72 20 69 74 73 0d 0a 20 20  ding for its..  
25ea0 20 20 20 20 20 20 2f 2f 2f 20 74 65 72 6d 69 6e        /// termin
25eb0 61 74 69 6e 67 20 4e 55 4c 20 63 68 61 72 61 63  ating NUL charac
25ec0 74 65 72 2c 20 77 69 74 68 69 6e 20 74 68 65 20  ter, within the 
25ed0 73 70 65 63 69 66 69 65 64 20 6c 65 6e 67 74 68  specified length
25ee0 20 6c 69 6d 69 74 2e 0d 0a 20 20 20 20 20 20 20   limit...       
25ef0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
25f00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
25f10 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65  ram name="pValue
25f20 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
25f30 54 68 65 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74  The native NUL-t
25f40 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67  erminated string
25f50 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20 20 20   pointer...     
25f60 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
25f70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
25f80 72 61 6d 20 6e 61 6d 65 3d 22 6c 69 6d 69 74 22  ram name="limit"
25f90 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
25fa0 68 65 20 6d 61 78 69 6d 75 6d 20 6c 65 6e 67 74  he maximum lengt
25fb0 68 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20  h of the native 
25fc0 73 74 72 69 6e 67 2c 20 69 6e 20 62 79 74 65 73  string, in bytes
25fd0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
25fe0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
25ff0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
26000 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
26010 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 6e 61  length of the na
26020 74 69 76 65 20 73 74 72 69 6e 67 2c 20 69 6e 20  tive string, in 
26030 62 79 74 65 73 20 2d 4f 52 2d 20 7a 65 72 6f 20  bytes -OR- zero 
26040 69 66 20 74 68 65 20 6c 65 6e 67 74 68 0d 0a 20  if the length.. 
26050 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 75 6c 64         /// could
26060 20 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e   not be determin
26070 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
26080 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
26090 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
260a0 69 63 20 69 6e 74 20 50 72 6f 62 65 46 6f 72 55  ic int ProbeForU
260b0 74 66 38 42 79 74 65 4c 65 6e 67 74 68 28 0d 0a  tf8ByteLength(..
260c0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
260d0 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20  tr pValue,..    
260e0 20 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69          int limi
260f0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
26100 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
26110 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e           int len
26120 67 74 68 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  gth = 0;....    
26130 20 20 20 20 20 20 20 20 69 66 20 28 28 70 56 61          if ((pVa
26140 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  lue != IntPtr.Ze
26150 72 6f 29 20 26 26 20 28 6c 69 6d 69 74 20 3e 20  ro) && (limit > 
26160 30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0))..           
26170 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26180 20 20 20 20 64 6f 0d 0a 20 20 20 20 20 20 20 20      do..        
26190 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
261a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
261b0 66 20 28 4d 61 72 73 68 61 6c 2e 52 65 61 64 42  f (Marshal.ReadB
261c0 79 74 65 28 70 56 61 6c 75 65 2c 20 6c 65 6e 67  yte(pValue, leng
261d0 74 68 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  th) == 0)..     
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261f0 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a 20 20 20     break;....   
26200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26210 20 69 66 20 28 6c 65 6e 67 74 68 20 3e 3d 20 6c   if (length >= l
26220 69 6d 69 74 29 0d 0a 20 20 20 20 20 20 20 20 20  imit)..         
26230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
26240 72 65 61 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  reak;....       
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e               len
26260 67 74 68 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  gth++;..        
26270 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20          } while 
26280 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
26290 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
262a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 65 6e        return len
262b0 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gth;..        }.
262c0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
262d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26310 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
26320 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
26330 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74       /// Convert
26340 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  s the specified 
26350 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69  native NUL-termi
26360 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
26370 6e 67 20 70 6f 69 6e 74 65 72 0d 0a 20 20 20 20  ng pointer..    
26380 20 20 20 20 2f 2f 2f 20 69 6e 74 6f 20 61 20 6d      /// into a m
26390 61 6e 61 67 65 64 20 73 74 72 69 6e 67 2e 0d 0a  anaged string...
263a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
263b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
263c0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
263d0 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20  "pValue">..     
263e0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
263f0 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64  e NUL-terminated
26400 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f   UTF-8 string po
26410 69 6e 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  inter...        
26420 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
26430 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
26440 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
26450 20 54 68 65 20 6d 61 6e 61 67 65 64 20 73 74 72   The managed str
26460 69 6e 67 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e  ing or null upon
26470 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
26480 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
26490 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
264a0 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
264b0 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
264c0 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
264d0 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65     IntPtr pValue
264e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
264f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
26500 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
26510 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74  tringFromUtf8Int
26520 50 74 72 28 70 56 61 6c 75 65 2c 0d 0a 20 20 20  Ptr(pValue,..   
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
26540 62 65 46 6f 72 55 74 66 38 42 79 74 65 4c 65 6e  beForUtf8ByteLen
26550 67 74 68 28 70 56 61 6c 75 65 2c 20 54 68 69 72  gth(pValue, Thir
26560 74 79 42 69 74 73 29 29 3b 0d 0a 20 20 20 20 20  tyBits));..     
26570 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
265d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
265e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
265f0 6e 76 65 72 74 73 20 74 68 65 20 73 70 65 63 69  nverts the speci
26600 66 69 65 64 20 6e 61 74 69 76 65 20 55 54 46 2d  fied native UTF-
26610 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
26620 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
26630 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  d..        /// l
26640 65 6e 67 74 68 20 69 6e 74 6f 20 61 20 6d 61 6e  ength into a man
26650 61 67 65 64 20 73 74 72 69 6e 67 2e 0d 0a 20 20  aged string...  
26660 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
26670 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
26680 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
26690 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  Value">..       
266a0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
266b0 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f 69  UTF-8 string poi
266c0 6e 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  nter...        /
266d0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
266e0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
266f0 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 0d 0a  name="length">..
26700 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
26710 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 6e 61  length of the na
26720 74 69 76 65 20 73 74 72 69 6e 67 2c 20 69 6e 20  tive string, in 
26730 62 79 74 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  bytes...        
26740 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
26750 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
26760 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
26770 20 54 68 65 20 6d 61 6e 61 67 65 64 20 73 74 72   The managed str
26780 69 6e 67 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e  ing or null upon
26790 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
267a0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
267b0 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
267c0 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
267d0 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
267e0 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
267f0 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65     IntPtr pValue
26800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
26810 6e 74 20 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20  nt length..     
26820 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
26830 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26840 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49   if (pValue == I
26850 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
26860 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26870 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
26880 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e           if (len
26890 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
268a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
268b0 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
268c0 62 79 74 65 73 20 3d 20 6e 65 77 20 62 79 74 65  bytes = new byte
268d0 5b 6c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20  [length];....   
268e0 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72               Mar
268f0 73 68 61 6c 2e 43 6f 70 79 28 70 56 61 6c 75 65  shal.Copy(pValue
26900 2c 20 62 79 74 65 73 2c 20 30 2c 20 6c 65 6e 67  , bytes, 0, leng
26910 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  th);....        
26920 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
26930 65 74 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38  etStringFromUtf8
26940 42 79 74 65 73 28 62 79 74 65 73 29 3b 0d 0a 20  Bytes(bytes);.. 
26950 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26960 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26970 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b  rn String.Empty;
26980 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
26990 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
269a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
269e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
269f0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
26a00 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74 68   /// Converts th
26a10 65 20 73 70 65 63 69 66 69 65 64 20 6d 61 6e 61  e specified mana
26a20 67 65 64 20 73 74 72 69 6e 67 20 69 6e 74 6f 20  ged string into 
26a30 61 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72  a native NUL-ter
26a40 6d 69 6e 61 74 65 64 0d 0a 20 20 20 20 20 20 20  minated..       
26a50 20 2f 2f 2f 20 55 54 46 2d 38 20 73 74 72 69 6e   /// UTF-8 strin
26a60 67 20 70 6f 69 6e 74 65 72 20 75 73 69 6e 67 20  g pointer using 
26a70 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
26a80 66 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20  from the SQLite 
26a90 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  core..        //
26aa0 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  / library...    
26ab0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
26ac0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
26ad0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
26ae0 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ue">..        //
26af0 2f 20 54 68 65 20 6d 61 6e 61 67 65 64 20 73 74  / The managed st
26b00 72 69 6e 67 20 74 6f 20 63 6f 6e 76 65 72 74 2e  ring to convert.
26b10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
26b20 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
26b30 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
26b40 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
26b50 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69 6e  ative NUL-termin
26b60 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
26b70 67 20 70 6f 69 6e 74 65 72 20 6f 72 0d 0a 20 20  g pointer or..  
26b80 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
26b90 72 65 66 3d 22 49 6e 74 50 74 72 2e 5a 65 72 6f  ref="IntPtr.Zero
26ba0 22 20 2f 3e 20 75 70 6f 6e 20 66 61 69 6c 75 72  " /> upon failur
26bb0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
26bc0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
26bd0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
26be0 63 20 49 6e 74 50 74 72 20 55 74 66 38 49 6e 74  c IntPtr Utf8Int
26bf0 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a  PtrFromString(..
26c00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
26c10 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ng value..      
26c20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
26c30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26c40 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
26c50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
26c60 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74      return IntPt
26c70 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
26c80 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 72 65         IntPtr re
26c90 73 75 6c 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65  sult = IntPtr.Ze
26ca0 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
26cb0 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20   byte[] bytes = 
26cc0 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d  GetUtf8BytesFrom
26cd0 53 74 72 69 6e 67 28 76 61 6c 75 65 29 3b 0d 0a  String(value);..
26ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
26cf0 20 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29   (bytes == null)
26d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26d10 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e    return IntPtr.
26d20 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
26d30 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20       int length 
26d40 3d 20 62 79 74 65 73 2e 4c 65 6e 67 74 68 3b 0d  = bytes.Length;.
26d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
26d60 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 4d 65  esult = SQLiteMe
26d70 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28 6c 65  mory.Allocate(le
26d80 6e 67 74 68 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20  ngth + 1);....  
26d90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
26da0 73 75 6c 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  sult == IntPtr.Z
26db0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
26dc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
26dd0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
26de0 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
26df0 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 30 2c 20  .Copy(bytes, 0, 
26e00 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68 29 3b  result, length);
26e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
26e20 72 73 68 61 6c 2e 57 72 69 74 65 42 79 74 65 28  rshal.WriteByte(
26e30 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68 2c 20  result, length, 
26e40 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  0);....         
26e50 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
26e60 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
26e70 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
26e80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
26e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ed0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
26ee0 72 65 67 69 6f 6e 20 55 54 46 2d 38 20 53 74 72  region UTF-8 Str
26ef0 69 6e 67 20 41 72 72 61 79 20 48 65 6c 70 65 72  ing Array Helper
26f00 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
26f10 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
26f20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
26f30 76 65 72 74 73 20 61 20 6c 6f 67 69 63 61 6c 20  verts a logical 
26f40 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20  array of native 
26f50 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55  NUL-terminated U
26f60 54 46 2d 38 20 73 74 72 69 6e 67 0d 0a 20 20 20  TF-8 string..   
26f70 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65 72       /// pointer
26f80 73 20 69 6e 74 6f 20 61 6e 20 61 72 72 61 79 20  s into an array 
26f90 6f 66 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e  of managed strin
26fa0 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  gs...        ///
26fb0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
26fc0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
26fd0 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20  name="argc">..  
26fe0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75        /// The nu
26ff0 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
27000 20 69 6e 20 74 68 65 20 6c 6f 67 69 63 61 6c 20   in the logical 
27010 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65 0d  array of native.
27020 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 55 4c  .        /// NUL
27030 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
27040 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
27050 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
27060 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
27070 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
27080 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20  e="argv">..     
27090 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
270a0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
270b0 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f   logical array o
270c0 66 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72  f native NUL-ter
270d0 6d 69 6e 61 74 65 64 0d 0a 20 20 20 20 20 20 20  minated..       
270e0 20 2f 2f 2f 20 55 54 46 2d 38 20 73 74 72 69 6e   /// UTF-8 strin
270f0 67 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 6f  g pointers to co
27100 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20  nvert...        
27110 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
27120 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
27130 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
27140 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 6d 61   The array of ma
27150 6e 61 67 65 64 20 73 74 72 69 6e 67 73 20 6f 72  naged strings or
27160 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75   null upon failu
27170 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
27180 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
27190 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
271a0 69 63 20 73 74 72 69 6e 67 5b 5d 20 53 74 72 69  ic string[] Stri
271b0 6e 67 41 72 72 61 79 46 72 6f 6d 55 74 66 38 53  ngArrayFromUtf8S
271c0 69 7a 65 41 6e 64 49 6e 74 50 74 72 28 0d 0a 20  izeAndIntPtr(.. 
271d0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61             int a
271e0 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgc,..          
271f0 20 20 49 6e 74 50 74 72 20 61 72 67 76 0d 0a 20    IntPtr argv.. 
27200 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
27210 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27220 20 20 20 20 20 69 66 20 28 61 72 67 63 20 3c 20       if (argc < 
27230 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
27240 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
27250 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27260 69 66 20 28 61 72 67 76 20 3d 3d 20 49 6e 74 50  if (argv == IntP
27270 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
27280 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27290 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
272a0 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 72        string[] r
272b0 65 73 75 6c 74 20 3d 20 6e 65 77 20 73 74 72 69  esult = new stri
272c0 6e 67 5b 61 72 67 63 5d 3b 0d 0a 0d 0a 20 20 20  ng[argc];....   
272d0 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
272e0 74 20 69 6e 64 65 78 20 3d 20 30 2c 20 6f 66 66  t index = 0, off
272f0 73 65 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  set = 0;..      
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
27310 64 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e  dex < result.Len
27320 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gth;..          
27330 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b            index+
27340 2b 2c 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74  +, offset += Int
27350 50 74 72 2e 53 69 7a 65 29 0d 0a 20 20 20 20 20  Ptr.Size)..     
27360 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27370 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
27380 20 70 41 72 67 20 3d 20 53 51 4c 69 74 65 4d 61   pArg = SQLiteMa
27390 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72  rshal.ReadIntPtr
273a0 28 61 72 67 76 2c 20 6f 66 66 73 65 74 29 3b 0d  (argv, offset);.
273b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
273c0 20 20 20 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d     result[index]
273d0 20 3d 20 28 70 41 72 67 20 21 3d 20 49 6e 74 50   = (pArg != IntP
273e0 74 72 2e 5a 65 72 6f 29 20 3f 0d 0a 20 20 20 20  tr.Zero) ?..    
273f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27400 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
27410 74 50 74 72 28 70 41 72 67 29 20 3a 20 6e 75 6c  tPtr(pArg) : nul
27420 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
27430 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27440 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
27450 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
27460 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
274b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
274c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
274d0 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 6e 20  /// Converts an 
274e0 61 72 72 61 79 20 6f 66 20 6d 61 6e 61 67 65 64  array of managed
274f0 20 73 74 72 69 6e 67 73 20 69 6e 74 6f 20 61 6e   strings into an
27500 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65   array of native
27510 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 55  ..        /// NU
27520 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  L-terminated UTF
27530 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  -8 string pointe
27540 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  rs...        ///
27550 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
27560 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
27570 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a  name="values">..
27580 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
27590 61 72 72 61 79 20 6f 66 20 6d 61 6e 61 67 65 64  array of managed
275a0 20 73 74 72 69 6e 67 73 20 74 6f 20 63 6f 6e 76   strings to conv
275b0 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ert...        //
275c0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
275d0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
275e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
275f0 68 65 20 61 72 72 61 79 20 6f 66 20 6e 61 74 69  he array of nati
27600 76 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65  ve NUL-terminate
27610 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70  d UTF-8 string p
27620 6f 69 6e 74 65 72 73 20 6f 72 20 6e 75 6c 6c 0d  ointers or null.
27630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 70 6f  .        /// upo
27640 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20  n failure...    
27650 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
27660 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
27670 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72  ic static IntPtr
27680 5b 5d 20 55 74 66 38 49 6e 74 50 74 72 41 72 72  [] Utf8IntPtrArr
27690 61 79 46 72 6f 6d 53 74 72 69 6e 67 41 72 72 61  ayFromStringArra
276a0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
276b0 73 74 72 69 6e 67 5b 5d 20 76 61 6c 75 65 73 0d  string[] values.
276c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
276d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
276e0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
276f0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
27700 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27710 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
27720 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d          IntPtr[]
27730 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 49 6e   result = new In
27740 74 50 74 72 5b 76 61 6c 75 65 73 2e 4c 65 6e 67  tPtr[values.Leng
27750 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  th];....        
27760 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
27770 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
27780 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 20 69  result.Length; i
27790 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20  ndex++)..       
277a0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 5b           result[
277b0 69 6e 64 65 78 5d 20 3d 20 55 74 66 38 49 6e 74  index] = Utf8Int
277c0 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 76 61  PtrFromString(va
277d0 6c 75 65 73 5b 69 6e 64 65 78 5d 29 3b 0d 0a 0d  lues[index]);...
277e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
277f0 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
27800 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
27810 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
27820 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
27830 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
27840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27880 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
27890 69 6f 6e 20 53 51 4c 69 74 65 42 79 74 65 73 20  ion SQLiteBytes 
278a0 53 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20 20  Static Class..  
278b0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
278c0 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
278d0 61 73 73 20 63 6f 6e 74 61 69 6e 73 20 73 74 61  ass contains sta
278e0 74 69 63 20 6d 65 74 68 6f 64 73 20 74 68 61 74  tic methods that
278f0 20 61 72 65 20 75 73 65 64 20 74 6f 20 64 65 61   are used to dea
27900 6c 20 77 69 74 68 20 6e 61 74 69 76 65 0d 0a 20  l with native.. 
27910 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65 72 73 20     /// pointers 
27920 74 6f 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 73  to memory blocks
27930 20 74 68 61 74 20 6c 6f 67 69 63 61 6c 6c 79 20   that logically 
27940 63 6f 6e 74 61 69 6e 20 61 72 72 61 79 73 20 6f  contain arrays o
27950 66 20 62 79 74 65 73 20 74 6f 20 62 65 0d 0a 20  f bytes to be.. 
27960 20 20 20 2f 2f 2f 20 75 73 65 64 20 77 69 74 68     /// used with
27970 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
27980 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
27990 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
279a0 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
279b0 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 42  ic class SQLiteB
279c0 79 74 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ytes..    {..   
279d0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 42 79 74       #region Byt
279e0 65 20 41 72 72 61 79 20 48 65 6c 70 65 72 20 4d  e Array Helper M
279f0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
27a00 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
27a10 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65         /// Conve
27a20 72 74 73 20 61 20 6e 61 74 69 76 65 20 70 6f 69  rts a native poi
27a30 6e 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63 61  nter to a logica
27a40 6c 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73  l array of bytes
27a50 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
27a60 20 2f 2f 2f 20 73 70 65 63 69 66 69 65 64 20 6c   /// specified l
27a70 65 6e 67 74 68 20 69 6e 74 6f 20 61 20 6d 61 6e  ength into a man
27a80 61 67 65 64 20 62 79 74 65 20 61 72 72 61 79 2e  aged byte array.
27a90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
27aa0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
27ab0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
27ac0 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20 20  e="pValue">..   
27ad0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
27ae0 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
27af0 68 65 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79  he logical array
27b00 20 6f 66 20 62 79 74 65 73 20 74 6f 20 63 6f 6e   of bytes to con
27b10 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  vert...        /
27b20 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
27b30 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
27b40 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 0d 0a  name="length">..
27b50 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
27b60 6c 65 6e 67 74 68 2c 20 69 6e 20 62 79 74 65 73  length, in bytes
27b70 2c 20 6f 66 20 74 68 65 20 6c 6f 67 69 63 61 6c  , of the logical
27b80 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 20   array of bytes 
27b90 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
27ba0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
27bb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
27bc0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
27bd0 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65    /// The manage
27be0 64 20 62 79 74 65 20 61 72 72 61 79 20 6f 72 20  d byte array or 
27bf0 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72  null upon failur
27c00 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
27c10 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
27c20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
27c30 63 20 62 79 74 65 5b 5d 20 46 72 6f 6d 49 6e 74  c byte[] FromInt
27c40 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
27c50 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65 2c    IntPtr pValue,
27c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
27c70 74 20 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20 20  t length..      
27c80 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
27c90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27ca0 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e  if (pValue == In
27cb0 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
27cc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27cd0 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
27ce0 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67          if (leng
27cf0 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  th == 0)..      
27d00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27d10 20 6e 65 77 20 62 79 74 65 5b 30 5d 3b 0d 0a 0d   new byte[0];...
27d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74  .            byt
27d30 65 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  e[] result = new
27d40 20 62 79 74 65 5b 6c 65 6e 67 74 68 5d 3b 0d 0a   byte[length];..
27d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
27d60 72 73 68 61 6c 2e 43 6f 70 79 28 70 56 61 6c 75  rshal.Copy(pValu
27d70 65 2c 20 72 65 73 75 6c 74 2c 20 30 2c 20 6c 65  e, result, 0, le
27d80 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ngth);....      
27d90 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
27da0 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
27db0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
27dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27e00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
27e10 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
27e20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74       /// Convert
27e30 73 20 61 20 6d 61 6e 61 67 65 64 20 62 79 74 65  s a managed byte
27e40 20 61 72 72 61 79 20 69 6e 74 6f 20 61 20 6e 61   array into a na
27e50 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
27e60 61 20 6c 6f 67 69 63 61 6c 0d 0a 20 20 20 20 20  a logical..     
27e70 20 20 20 2f 2f 2f 20 61 72 72 61 79 20 6f 66 20     /// array of 
27e80 62 79 74 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  bytes...        
27e90 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
27ea0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
27eb0 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e  am name="value">
27ec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
27ed0 65 20 6d 61 6e 61 67 65 64 20 62 79 74 65 20 61  e managed byte a
27ee0 72 72 61 79 20 74 6f 20 63 6f 6e 76 65 72 74 2e  rray to convert.
27ef0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
27f00 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
27f10 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
27f20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
27f30 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
27f40 20 61 20 6c 6f 67 69 63 61 6c 20 62 79 74 65 20   a logical byte 
27f50 61 72 72 61 79 20 6f 72 20 6e 75 6c 6c 20 75 70  array or null up
27f60 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20  on failure...   
27f70 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
27f80 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
27f90 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74  lic static IntPt
27fa0 72 20 54 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20  r ToIntPtr(..   
27fb0 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
27fc0 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
27fd0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
27fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
27ff0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
28000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28010 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a   return IntPtr.Z
28020 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
28030 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d      int length =
28040 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 3b 0d 0a   value.Length;..
28050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28060 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a   (length == 0)..
28070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28080 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65  return IntPtr.Ze
28090 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ro;....         
280a0 20 20 20 49 6e 74 50 74 72 20 72 65 73 75 6c 74     IntPtr result
280b0 20 3d 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e   = SQLiteMemory.
280c0 41 6c 6c 6f 63 61 74 65 28 6c 65 6e 67 74 68 29  Allocate(length)
280d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
280e0 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 49   if (result == I
280f0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
28100 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28110 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  urn IntPtr.Zero;
28120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28130 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 76 61 6c  Marshal.Copy(val
28140 75 65 2c 20 30 2c 20 72 65 73 75 6c 74 2c 20 6c  ue, 0, result, l
28150 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20  ength);....     
28160 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
28170 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
28180 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
28190 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
281a0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
281b0 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28200 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
28210 4c 69 74 65 4d 61 72 73 68 61 6c 20 53 74 61 74  LiteMarshal Stat
28220 69 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  ic Class..    //
28230 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
28240 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
28250 63 6f 6e 74 61 69 6e 73 20 73 74 61 74 69 63 20  contains static 
28260 6d 65 74 68 6f 64 73 20 74 68 61 74 20 61 72 65  methods that are
28270 20 75 73 65 64 20 74 6f 20 70 65 72 66 6f 72 6d   used to perform
28280 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 2f 2f   several..    //
28290 2f 20 6c 6f 77 2d 6c 65 76 65 6c 20 64 61 74 61  / low-level data
282a0 20 6d 61 72 73 68 61 6c 6c 69 6e 67 20 74 61 73   marshalling tas
282b0 6b 73 20 62 65 74 77 65 65 6e 20 6e 61 74 69 76  ks between nativ
282c0 65 20 61 6e 64 20 6d 61 6e 61 67 65 64 20 63 6f  e and managed co
282d0 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  de...    /// </s
282e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74  ummary>..    int
282f0 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61  ernal static cla
28300 73 73 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c  ss SQLiteMarshal
28310 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
28320 20 23 72 65 67 69 6f 6e 20 49 6e 74 50 74 72 20   #region IntPtr 
28330 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
28340 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
28350 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
28360 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 6e 65 77  // Returns a new
28370 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
28380 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  tr" /> object in
28390 73 74 61 6e 63 65 20 62 61 73 65 64 20 6f 6e 20  stance based on 
283a0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
283b0 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20   specified <see 
283c0 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
283d0 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
283e0 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 0d   and an integer.
283f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66 66  .        /// off
28400 73 65 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  set...        //
28410 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
28420 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
28430 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e   name="pointer">
28440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
28450 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  e <see cref="Int
28460 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  Ptr" /> object i
28470 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e  nstance represen
28480 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20  ting the base.. 
28490 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72         /// memor
284a0 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  y location...   
284b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
284c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
284d0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73  param name="offs
284e0 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  et">..        //
284f0 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66  / The integer of
28500 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61  fset from the ba
28510 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  se memory locati
28520 6f 6e 20 74 68 61 74 20 74 68 65 20 6e 65 77 0d  on that the new.
28530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
28540 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
28550 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
28560 63 65 20 73 68 6f 75 6c 64 20 70 6f 69 6e 74 20  ce should point 
28570 74 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  to...        ///
28580 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
28590 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
285a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
285b0 65 20 6e 65 77 20 3c 73 65 65 20 63 72 65 66 3d  e new <see cref=
285c0 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65  "IntPtr" /> obje
285d0 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
285e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
285f0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
28600 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50  blic static IntP
28610 74 72 20 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  tr IntPtrForOffs
28620 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et(..           
28630 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c   IntPtr pointer,
28640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
28650 74 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20 20  t offset..      
28660 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
28670 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28680 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 50 74  return new IntPt
28690 72 28 70 6f 69 6e 74 65 72 2e 54 6f 49 6e 74 36  r(pointer.ToInt6
286a0 34 28 29 20 2b 20 6f 66 66 73 65 74 29 3b 0d 0a  4() + offset);..
286b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
286c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
286d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28710 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
28720 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
28730 2f 2f 20 52 6f 75 6e 64 73 20 75 70 20 61 6e 20  // Rounds up an 
28740 69 6e 74 65 67 65 72 20 73 69 7a 65 20 74 6f 20  integer size to 
28750 74 68 65 20 6e 65 78 74 20 6d 75 6c 74 69 70 6c  the next multipl
28760 65 20 6f 66 20 74 68 65 20 61 6c 69 67 6e 6d 65  e of the alignme
28770 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
28780 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
28790 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
287a0 6e 61 6d 65 3d 22 73 69 7a 65 22 3e 0d 0a 20 20  name="size">..  
287b0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 69        /// The si
287c0 7a 65 2c 20 69 6e 20 62 79 74 65 73 2c 20 74 6f  ze, in bytes, to
287d0 20 62 65 20 72 6f 75 6e 64 65 64 20 75 70 2e 0d   be rounded up..
287e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
287f0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
28800 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28810 61 6c 69 67 6e 6d 65 6e 74 22 3e 0d 0a 20 20 20  alignment">..   
28820 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 71       /// The req
28830 75 69 72 65 64 20 61 6c 69 67 6e 6d 65 6e 74 20  uired alignment 
28840 66 6f 72 20 74 68 65 20 72 65 74 75 72 6e 20 76  for the return v
28850 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
28860 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
28870 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
28880 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
28890 54 68 65 20 73 69 7a 65 2c 20 69 6e 20 62 79 74  The size, in byt
288a0 65 73 2c 20 72 6f 75 6e 64 65 64 20 75 70 20 74  es, rounded up t
288b0 6f 20 74 68 65 20 6e 65 78 74 20 6d 75 6c 74 69  o the next multi
288c0 70 6c 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ple of the..    
288d0 20 20 20 20 2f 2f 2f 20 61 6c 69 67 6e 6d 65 6e      /// alignmen
288e0 74 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 6d  t.  This value m
288f0 61 79 20 65 6e 64 20 75 70 20 62 65 69 6e 67 20  ay end up being 
28900 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
28910 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20 20 20  original..      
28920 20 20 2f 2f 2f 20 73 69 7a 65 2e 0d 0a 20 20 20    /// size...   
28930 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
28940 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
28950 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 52  lic static int R
28960 6f 75 6e 64 55 70 28 0d 0a 20 20 20 20 20 20 20  oundUp(..       
28970 20 20 20 20 20 69 6e 74 20 73 69 7a 65 2c 0d 0a       int size,..
28980 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
28990 61 6c 69 67 6e 6d 65 6e 74 0d 0a 20 20 20 20 20  alignment..     
289a0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
289b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
289c0 20 69 6e 74 20 61 6c 69 67 6e 6d 65 6e 74 4d 69   int alignmentMi
289d0 6e 75 73 4f 6e 65 20 3d 20 61 6c 69 67 6e 6d 65  nusOne = alignme
289e0 6e 74 20 2d 20 31 3b 0d 0a 20 20 20 20 20 20 20  nt - 1;..       
289f0 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 73 69       return ((si
28a00 7a 65 20 2b 20 61 6c 69 67 6e 6d 65 6e 74 4d 69  ze + alignmentMi
28a10 6e 75 73 4f 6e 65 29 20 26 20 7e 61 6c 69 67 6e  nusOne) & ~align
28a20 6d 65 6e 74 4d 69 6e 75 73 4f 6e 65 29 3b 0d 0a  mentMinusOne);..
28a30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28a40 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28a90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
28aa0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
28ab0 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68  // Determines th
28ac0 65 20 6f 66 66 73 65 74 2c 20 69 6e 20 62 79 74  e offset, in byt
28ad0 65 73 2c 20 6f 66 20 74 68 65 20 6e 65 78 74 20  es, of the next 
28ae0 73 74 72 75 63 74 75 72 65 20 6d 65 6d 62 65 72  structure member
28af0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
28b00 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
28b10 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
28b20 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20  me="offset">..  
28b30 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 66        /// The of
28b40 66 73 65 74 2c 20 69 6e 20 62 79 74 65 73 2c 20  fset, in bytes, 
28b50 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  of the current s
28b60 74 72 75 63 74 75 72 65 20 6d 65 6d 62 65 72 2e  tructure member.
28b70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
28b80 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
28b90 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
28ba0 22 73 69 7a 65 22 3e 0d 0a 20 20 20 20 20 20 20  "size">..       
28bb0 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65 2c 20 69   /// The size, i
28bc0 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20  n bytes, of the 
28bd0 63 75 72 72 65 6e 74 20 73 74 72 75 63 74 75 72  current structur
28be0 65 20 6d 65 6d 62 65 72 2e 0d 0a 20 20 20 20 20  e member...     
28bf0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
28c00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
28c10 72 61 6d 20 6e 61 6d 65 3d 22 61 6c 69 67 6e 6d  ram name="alignm
28c20 65 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ent">..        /
28c30 2f 2f 20 54 68 65 20 61 6c 69 67 6e 6d 65 6e 74  // The alignment
28c40 2c 20 69 6e 20 62 79 74 65 73 2c 20 6f 66 20 74  , in bytes, of t
28c50 68 65 20 6e 65 78 74 20 73 74 72 75 63 74 75 72  he next structur
28c60 65 20 6d 65 6d 62 65 72 2e 0d 0a 20 20 20 20 20  e member...     
28c70 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
28c80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
28c90 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
28ca0 2f 2f 2f 20 54 68 65 20 6f 66 66 73 65 74 2c 20  /// The offset, 
28cb0 69 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65  in bytes, of the
28cc0 20 6e 65 78 74 20 73 74 72 75 63 74 75 72 65 20   next structure 
28cd0 6d 65 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20  member...       
28ce0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
28cf0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
28d00 73 74 61 74 69 63 20 69 6e 74 20 4e 65 78 74 4f  static int NextO
28d10 66 66 73 65 74 4f 66 28 0d 0a 20 20 20 20 20 20  ffsetOf(..      
28d20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
28d30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
28d40 6e 74 20 73 69 7a 65 2c 0d 0a 20 20 20 20 20 20  nt size,..      
28d50 20 20 20 20 20 20 69 6e 74 20 61 6c 69 67 6e 6d        int alignm
28d60 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ent..           
28d70 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
28d80 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28d90 6e 20 52 6f 75 6e 64 55 70 28 6f 66 66 73 65 74  n RoundUp(offset
28da0 20 2b 20 73 69 7a 65 2c 20 61 6c 69 67 6e 6d 65   + size, alignme
28db0 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  nt);..        }.
28dc0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
28dd0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
28de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
28e30 20 20 23 72 65 67 69 6f 6e 20 4d 61 72 73 68 61    #region Marsha
28e40 6c 20 52 65 61 64 20 48 65 6c 70 65 72 20 4d 65  l Read Helper Me
28e50 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
28e60 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
28e70 20 20 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20        /// Reads 
28e80 61 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  a <see cref="Int
28e90 33 32 22 20 2f 3e 20 76 61 6c 75 65 20 66 72 6f  32" /> value fro
28ea0 6d 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  m the specified 
28eb0 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  memory..        
28ec0 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20  /// location... 
28ed0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
28ee0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
28ef0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28f00 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20  pointer">..     
28f10 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
28f20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
28f30 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
28f40 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
28f50 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20  e base..        
28f60 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  /// memory locat
28f70 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
28f80 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
28f90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
28fa0 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20  ame="offset">.. 
28fb0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69         /// The i
28fc0 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72  nteger offset fr
28fd0 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f  om the base memo
28fe0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72  ry location wher
28ff0 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  e the..        /
29000 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  // <see cref="In
29010 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  t32" /> value to
29020 20 62 65 20 72 65 61 64 20 69 73 20 6c 6f 63 61   be read is loca
29030 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ted...        //
29040 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
29050 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
29060 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
29070 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  he <see cref="In
29080 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20 61 74  t32" /> value at
29090 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d   the specified m
290a0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d  emory location..
290b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
290c0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
290d0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
290e0 6e 74 20 52 65 61 64 49 6e 74 33 32 28 0d 0a 20  nt ReadInt32(.. 
290f0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
29100 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20  r pointer,..    
29110 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
29120 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
29130 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  )..        {..#i
29140 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
29150 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
29160 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29170 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74   Marshal.ReadInt
29180 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  32(pointer, offs
29190 65 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  et);..#else..   
291a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
291b0 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33  Marshal.ReadInt3
291c0 32 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  2(IntPtrForOffse
291d0 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
291e0 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  t));..#endif..  
291f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29200 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
29210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29250 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
29260 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
29270 20 52 65 61 64 73 20 61 20 3c 73 65 65 20 63 72   Reads a <see cr
29280 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20 76  ef="Double" /> v
29290 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 73 70  alue from the sp
292a0 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a  ecified memory..
292b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61          /// loca
292c0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
292d0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
292e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
292f0 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22  m name="pointer"
29300 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
29310 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  he <see cref="In
29320 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tPtr" /> object 
29330 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73 65  instance represe
29340 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a  nting the base..
29350 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f          /// memo
29360 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  ry location...  
29370 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
29380 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
29390 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66  <param name="off
293a0 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  set">..        /
293b0 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f  // The integer o
293c0 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
293d0 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  ase memory locat
293e0 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a 20  ion where the.. 
293f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
29400 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e  cref="Double" />
29410 20 74 6f 20 62 65 20 72 65 61 64 20 69 73 20 6c   to be read is l
29420 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ocated...       
29430 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
29440 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
29450 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
29460 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
29470 22 44 6f 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75  "Double" /> valu
29480 65 20 61 74 20 74 68 65 20 73 70 65 63 69 66 69  e at the specifi
29490 65 64 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  ed memory locati
294a0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
294b0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
294c0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
294d0 69 63 20 64 6f 75 62 6c 65 20 52 65 61 64 44 6f  ic double ReadDo
294e0 75 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  uble(..         
294f0 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65     IntPtr pointe
29500 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
29510 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20 20 20  int offset..    
29520 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
29530 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
29540 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
29550 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
29560 20 20 72 65 74 75 72 6e 20 42 69 74 43 6f 6e 76    return BitConv
29570 65 72 74 65 72 2e 49 6e 74 36 34 42 69 74 73 54  erter.Int64BitsT
29580 6f 44 6f 75 62 6c 65 28 4d 61 72 73 68 61 6c 2e  oDouble(Marshal.
29590 52 65 61 64 49 6e 74 36 34 28 0d 0a 20 20 20 20  ReadInt64(..    
295a0 20 20 20 20 20 20 20 20 20 20 20 20 70 6f 69 6e              poin
295b0 74 65 72 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a  ter, offset));..
295c0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
295d0 20 20 20 72 65 74 75 72 6e 20 42 69 74 43 6f 6e     return BitCon
295e0 76 65 72 74 65 72 2e 54 6f 44 6f 75 62 6c 65 28  verter.ToDouble(
295f0 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 47 65 74  BitConverter.Get
29600 42 79 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Bytes(..        
29610 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
29620 52 65 61 64 49 6e 74 36 34 28 49 6e 74 50 74 72  ReadInt64(IntPtr
29630 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65  ForOffset(pointe
29640 72 2c 20 6f 66 66 73 65 74 29 29 29 2c 20 30 29  r, offset))), 0)
29650 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
29660 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f 2f 2f 2f 2f  ////////////////
296a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
296b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
296c0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
296d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65  ..        /// Re
296e0 61 64 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66  ads an <see cref
296f0 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76 61 6c  ="IntPtr" /> val
29700 75 65 20 66 72 6f 6d 20 74 68 65 20 73 70 65 63  ue from the spec
29710 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20  ified memory..  
29720 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69        /// locati
29730 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
29740 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
29750 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
29760 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d  name="pointer">.
29770 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
29780 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
29790 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  tr" /> object in
297a0 73 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e 74  stance represent
297b0 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20 20  ing the base..  
297c0 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79        /// memory
297d0 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20   location...    
297e0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
297f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
29800 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65  aram name="offse
29810 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
29820 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66 66   The integer off
29830 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61 73  set from the bas
29840 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
29850 6e 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20 20  n where the..   
29860 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
29870 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76  ef="IntPtr" /> v
29880 61 6c 75 65 20 74 6f 20 62 65 20 72 65 61 64 20  alue to be read 
29890 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20  is located...   
298a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
298b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
298c0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
298d0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
298e0 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20  ref="IntPtr" /> 
298f0 76 61 6c 75 65 20 61 74 20 74 68 65 20 73 70 65  value at the spe
29900 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 20 6c 6f  cified memory lo
29910 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
29920 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
29930 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
29940 73 74 61 74 69 63 20 49 6e 74 50 74 72 20 52 65  static IntPtr Re
29950 61 64 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  adIntPtr(..     
29960 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f         IntPtr po
29970 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  inter,..        
29980 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a      int offset..
29990 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
299a0 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
299b0 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
299c0 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
299d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72        return Mar
299e0 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28  shal.ReadIntPtr(
299f0 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29  pointer, offset)
29a00 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
29a10 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72        return Mar
29a20 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28  shal.ReadIntPtr(
29a30 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28  IntPtrForOffset(
29a40 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29  pointer, offset)
29a50 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
29a60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
29a70 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29a80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29ad0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29ae0 4d 61 72 73 68 61 6c 20 57 72 69 74 65 20 48 65  Marshal Write He
29af0 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
29b00 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
29b10 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
29b20 20 57 72 69 74 65 73 20 61 6e 20 3c 73 65 65 20   Writes an <see 
29b30 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20  cref="Int32" /> 
29b40 76 61 6c 75 65 20 74 6f 20 74 68 65 20 73 70 65  value to the spe
29b50 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20  cified memory.. 
29b60 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74         /// locat
29b70 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
29b80 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
29b90 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
29ba0 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e   name="pointer">
29bb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
29bc0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  e <see cref="Int
29bd0 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  Ptr" /> object i
29be0 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e  nstance represen
29bf0 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20  ting the base.. 
29c00 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72         /// memor
29c10 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  y location...   
29c20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
29c30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
29c40 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73  param name="offs
29c50 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  et">..        //
29c60 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66  / The integer of
29c70 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61  fset from the ba
29c80 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  se memory locati
29c90 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20  on where the..  
29ca0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
29cb0 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76  ref="Int32" /> v
29cc0 61 6c 75 65 20 74 6f 20 62 65 20 77 72 69 74 74  alue to be writt
29cd0 65 6e 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a  en is located...
29ce0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
29cf0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
29d00 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
29d10 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  alue">..        
29d20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
29d30 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c  f="Int32" /> val
29d40 75 65 20 74 6f 20 77 72 69 74 65 2e 0d 0a 20 20  ue to write...  
29d50 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
29d60 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  m>..        publ
29d70 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 57  ic static void W
29d80 72 69 74 65 49 6e 74 33 32 28 0d 0a 20 20 20 20  riteInt32(..    
29d90 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
29da0 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20  ointer,..       
29db0 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 2c       int offset,
29dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
29dd0 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  t value..       
29de0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
29df0 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
29e00 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
29e10 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  K..            M
29e20 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 33  arshal.WriteInt3
29e30 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  2(pointer, offse
29e40 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  t, value);..#els
29e50 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  e..            M
29e60 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 33  arshal.WriteInt3
29e70 32 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  2(IntPtrForOffse
29e80 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
29e90 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  t), value);..#en
29ea0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
29eb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
29ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
29f10 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
29f20 20 20 20 20 2f 2f 2f 20 57 72 69 74 65 73 20 61      /// Writes a
29f30 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  n <see cref="Int
29f40 36 34 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20  64" /> value to 
29f50 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 65  the specified me
29f60 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  mory..        //
29f70 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  / location...   
29f80 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
29f90 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
29fa0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f   <param name="po
29fb0 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20  inter">..       
29fc0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
29fd0 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f  ef="IntPtr" /> o
29fe0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72  bject instance r
29ff0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
2a000 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  base..        //
2a010 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  / memory locatio
2a020 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
2a030 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2a040 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2a050 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20  e="offset">..   
2a060 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74       /// The int
2a070 65 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d  eger offset from
2a080 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79   the base memory
2a090 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65 20   location where 
2a0a0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
2a0b0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 36   <see cref="Int6
2a0c0 34 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62  4" /> value to b
2a0d0 65 20 77 72 69 74 74 65 6e 20 69 73 20 6c 6f 63  e written is loc
2a0e0 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ated...        /
2a0f0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2a100 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2a110 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20  name="value">.. 
2a120 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
2a130 73 65 65 20 63 72 65 66 3d 22 49 6e 74 36 34 22  see cref="Int64"
2a140 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 77 72 69   /> value to wri
2a150 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  te...        ///
2a160 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2a170 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2a180 20 76 6f 69 64 20 57 72 69 74 65 49 6e 74 36 34   void WriteInt64
2a190 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
2a1a0 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a  ntPtr pointer,..
2a1b0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
2a1c0 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20  offset,..       
2a1d0 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 0d       long value.
2a1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2a1f0 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
2a200 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
2a210 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
2a220 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57         Marshal.W
2a230 72 69 74 65 49 6e 74 36 34 28 70 6f 69 6e 74 65  riteInt64(pointe
2a240 72 2c 20 6f 66 66 73 65 74 2c 20 76 61 6c 75 65  r, offset, value
2a250 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
2a260 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57         Marshal.W
2a270 72 69 74 65 49 6e 74 36 34 28 49 6e 74 50 74 72  riteInt64(IntPtr
2a280 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65  ForOffset(pointe
2a290 72 2c 20 6f 66 66 73 65 74 29 2c 20 76 61 6c 75  r, offset), valu
2a2a0 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
2a2b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2a2c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2a2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a300 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2a310 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2a320 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2a330 57 72 69 74 65 73 20 61 20 3c 73 65 65 20 63 72  Writes a <see cr
2a340 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20 76  ef="Double" /> v
2a350 61 6c 75 65 20 74 6f 20 74 68 65 20 73 70 65 63  alue to the spec
2a360 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20  ified memory..  
2a370 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69        /// locati
2a380 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
2a390 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2a3a0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2a3b0 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d  name="pointer">.
2a3c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
2a3d0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
2a3e0 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  tr" /> object in
2a3f0 73 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e 74  stance represent
2a400 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20 20  ing the base..  
2a410 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79        /// memory
2a420 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20   location...    
2a430 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2a440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
2a450 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65  aram name="offse
2a460 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
2a470 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66 66   The integer off
2a480 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61 73  set from the bas
2a490 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
2a4a0 6e 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20 20  n where the..   
2a4b0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
2a4c0 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20 76  ef="Double" /> v
2a4d0 61 6c 75 65 20 74 6f 20 62 65 20 77 72 69 74 74  alue to be writt
2a4e0 65 6e 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a  en is located...
2a4f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2a500 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
2a510 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
2a520 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  alue">..        
2a530 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
2a540 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20 76 61  f="Double" /> va
2a550 6c 75 65 20 74 6f 20 77 72 69 74 65 2e 0d 0a 20  lue to write... 
2a560 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2a570 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
2a580 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
2a590 57 72 69 74 65 44 6f 75 62 6c 65 28 0d 0a 20 20  WriteDouble(..  
2a5a0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2a5b0 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20   pointer,..     
2a5c0 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
2a5d0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2a5e0 64 6f 75 62 6c 65 20 76 61 6c 75 65 0d 0a 20 20  double value..  
2a5f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2a600 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
2a610 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
2a620 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
2a630 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74      Marshal.Writ
2a640 65 49 6e 74 36 34 28 70 6f 69 6e 74 65 72 2c 20  eInt64(pointer, 
2a650 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20  offset,..       
2a660 20 20 20 20 20 20 20 20 20 42 69 74 43 6f 6e 76           BitConv
2a670 65 72 74 65 72 2e 44 6f 75 62 6c 65 54 6f 49 6e  erter.DoubleToIn
2a680 74 36 34 42 69 74 73 28 76 61 6c 75 65 29 29 3b  t64Bits(value));
2a690 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
2a6a0 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69       Marshal.Wri
2a6b0 74 65 49 6e 74 36 34 28 49 6e 74 50 74 72 46 6f  teInt64(IntPtrFo
2a6c0 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c  rOffset(pointer,
2a6d0 20 6f 66 66 73 65 74 29 2c 0d 0a 20 20 20 20 20   offset),..     
2a6e0 20 20 20 20 20 20 20 20 20 20 20 42 69 74 43 6f             BitCo
2a6f0 6e 76 65 72 74 65 72 2e 54 6f 49 6e 74 36 34 28  nverter.ToInt64(
2a700 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 47 65 74  BitConverter.Get
2a710 42 79 74 65 73 28 76 61 6c 75 65 29 2c 20 30 29  Bytes(value), 0)
2a720 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
2a730 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a740 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2a750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a780 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2a790 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2a7a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 57  >..        /// W
2a7b0 72 69 74 65 73 20 61 20 3c 73 65 65 20 63 72 65  rites a <see cre
2a7c0 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76 61  f="IntPtr" /> va
2a7d0 6c 75 65 20 74 6f 20 74 68 65 20 73 70 65 63 69  lue to the speci
2a7e0 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20  fied memory..   
2a7f0 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f       /// locatio
2a800 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
2a810 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2a820 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2a830 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a  ame="pointer">..
2a840 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
2a850 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74  <see cref="IntPt
2a860 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  r" /> object ins
2a870 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e 74 69  tance representi
2a880 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20 20 20  ng the base..   
2a890 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20       /// memory 
2a8a0 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  location...     
2a8b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2a8c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
2a8d0 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74  ram name="offset
2a8e0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
2a8f0 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73  The integer offs
2a900 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61 73 65  et from the base
2a910 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
2a920 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20 20 20   where the..    
2a930 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
2a940 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76 61  f="IntPtr" /> va
2a950 6c 75 65 20 74 6f 20 62 65 20 77 72 69 74 74 65  lue to be writte
2a960 6e 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20  n is located... 
2a970 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2a980 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
2a990 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
2a9a0 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  lue">..        /
2a9b0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
2a9c0 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76 61 6c  ="IntPtr" /> val
2a9d0 75 65 20 74 6f 20 77 72 69 74 65 2e 0d 0a 20 20  ue to write...  
2a9e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2a9f0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  m>..        publ
2aa00 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 57  ic static void W
2aa10 72 69 74 65 49 6e 74 50 74 72 28 0d 0a 20 20 20  riteIntPtr(..   
2aa20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2aa30 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20  pointer,..      
2aa40 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
2aa50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
2aa60 6e 74 50 74 72 20 76 61 6c 75 65 0d 0a 20 20 20  ntPtr value..   
2aa70 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2aa80 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
2aa90 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
2aaa0 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
2aab0 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65     Marshal.Write
2aac0 49 6e 74 50 74 72 28 70 6f 69 6e 74 65 72 2c 20  IntPtr(pointer, 
2aad0 6f 66 66 73 65 74 2c 20 76 61 6c 75 65 29 3b 0d  offset, value);.
2aae0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
2aaf0 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74      Marshal.Writ
2ab00 65 49 6e 74 50 74 72 28 49 6e 74 50 74 72 46 6f  eIntPtr(IntPtrFo
2ab10 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c  rOffset(pointer,
2ab20 20 6f 66 66 73 65 74 29 2c 20 76 61 6c 75 65 29   offset), value)
2ab30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
2ab40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2ab50 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2ab60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2ab70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2abb0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4f         #region O
2abc0 62 6a 65 63 74 20 48 65 6c 70 65 72 20 4d 65 74  bject Helper Met
2abd0 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
2abe0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2abf0 20 20 20 20 20 2f 2f 2f 20 47 65 6e 65 72 61 74       /// Generat
2ac00 65 73 20 61 20 68 61 73 68 20 63 6f 64 65 20 76  es a hash code v
2ac10 61 6c 75 65 20 66 6f 72 20 74 68 65 20 6f 62 6a  alue for the obj
2ac20 65 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ect...        //
2ac30 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2ac40 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2ac50 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a   name="value">..
2ac60 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
2ac70 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
2ac80 75 73 65 64 20 74 6f 20 63 61 6c 63 75 6c 61 74  used to calculat
2ac90 65 20 74 68 65 20 68 61 73 68 20 63 6f 64 65 2e  e the hash code.
2aca0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2acb0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2acc0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2acd0 22 69 64 65 6e 74 69 74 79 22 3e 0d 0a 20 20 20  "identity">..   
2ace0 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
2acf0 6f 20 69 66 20 64 69 66 66 65 72 65 6e 74 20 6f  o if different o
2ad00 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20  bject instances 
2ad10 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 76 61  with the same va
2ad20 6c 75 65 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20  lue should..    
2ad30 20 20 20 20 2f 2f 2f 20 67 65 6e 65 72 61 74 65      /// generate
2ad40 20 64 69 66 66 65 72 65 6e 74 20 68 61 73 68 20   different hash 
2ad50 63 6f 64 65 73 2c 20 77 68 65 72 65 20 61 70 70  codes, where app
2ad60 6c 69 63 61 62 6c 65 2e 20 20 54 68 69 73 20 70  licable.  This p
2ad70 61 72 61 6d 65 74 65 72 0d 0a 20 20 20 20 20 20  arameter..      
2ad80 20 20 2f 2f 2f 20 68 61 73 20 6e 6f 20 65 66 66    /// has no eff
2ad90 65 63 74 20 6f 6e 20 74 68 65 20 2e 4e 45 54 20  ect on the .NET 
2ada0 43 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f 72  Compact Framewor
2adb0 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  k...        /// 
2adc0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2add0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2ade0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
2adf0 20 68 61 73 68 20 63 6f 64 65 20 76 61 6c 75 65   hash code value
2ae00 20 2d 4f 52 2d 20 7a 65 72 6f 20 69 66 20 74 68   -OR- zero if th
2ae10 65 20 6f 62 6a 65 63 74 20 69 73 20 6e 75 6c 6c  e object is null
2ae20 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2ae30 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2ae40 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2ae50 20 69 6e 74 20 47 65 74 48 61 73 68 43 6f 64 65   int GetHashCode
2ae60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  (..            o
2ae70 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20  bject value,..  
2ae80 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69            bool i
2ae90 64 65 6e 74 69 74 79 0d 0a 20 20 20 20 20 20 20  dentity..       
2aea0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2aeb0 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
2aec0 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
2aed0 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  K..            i
2aee0 66 20 28 69 64 65 6e 74 69 74 79 29 0d 0a 20 20  f (identity)..  
2aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2af00 74 75 72 6e 20 52 75 6e 74 69 6d 65 48 65 6c 70  turn RuntimeHelp
2af10 65 72 73 2e 47 65 74 48 61 73 68 43 6f 64 65 28  ers.GetHashCode(
2af20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
2af30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2af40 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
2af50 29 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20  ) return 0;..   
2af60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2af70 76 61 6c 75 65 2e 47 65 74 48 61 73 68 43 6f 64  value.GetHashCod
2af80 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e();..        }.
2af90 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2afa0 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
2afb0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
2afc0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2afd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2b010 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
2b020 69 74 65 4d 6f 64 75 6c 65 20 42 61 73 65 20 43  iteModule Base C
2b030 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
2b040 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2b050 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72   This class repr
2b060 65 73 65 6e 74 73 20 61 20 6d 61 6e 61 67 65 64  esents a managed
2b070 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
2b080 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
2b090 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49  tion...    /// I
2b0a0 74 20 69 73 20 6e 6f 74 20 73 65 61 6c 65 64 20  t is not sealed 
2b0b0 61 6e 64 20 6d 75 73 74 20 62 65 20 75 73 65 64  and must be used
2b0c0 20 61 73 20 74 68 65 20 62 61 73 65 20 63 6c 61   as the base cla
2b0d0 73 73 20 66 6f 72 20 61 6e 79 0d 0a 20 20 20 20  ss for any..    
2b0e0 2f 2f 2f 20 75 73 65 72 2d 64 65 66 69 6e 65 64  /// user-defined
2b0f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
2b100 6f 64 75 6c 65 20 63 6c 61 73 73 65 73 20 69 6d  odule classes im
2b110 70 6c 65 6d 65 6e 74 65 64 20 69 6e 20 6d 61 6e  plemented in man
2b120 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20  aged code...    
2b130 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2b140 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
2b150 61 63 74 20 63 6c 61 73 73 20 53 51 4c 69 74 65  act class SQLite
2b160 4d 6f 64 75 6c 65 20 3a 0d 0a 20 20 20 20 20 20  Module :..      
2b170 20 20 20 20 20 20 49 53 51 4c 69 74 65 4d 61 6e        ISQLiteMan
2b180 61 67 65 64 4d 6f 64 75 6c 65 2c 20 2f 2a 49 53  agedModule, /*IS
2b190 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2b1a0 65 2c 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  e,*/..          
2b1b0 20 20 49 44 69 73 70 6f 73 61 62 6c 65 20 2f 2a    IDisposable /*
2b1c0 20 4e 4f 54 20 53 45 41 4c 45 44 20 2a 2f 0d 0a   NOT SEALED */..
2b1d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
2b1e0 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4e 61 74  region SQLiteNat
2b1f0 69 76 65 4d 6f 64 75 6c 65 20 50 72 69 76 61 74  iveModule Privat
2b200 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  e Class..       
2b210 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2b220 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
2b230 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74   class implement
2b240 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  s the <see cref=
2b250 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2b260 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20  dule" />..      
2b270 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65 20    /// interface 
2b280 62 79 20 66 6f 72 77 61 72 64 69 6e 67 20 74 68  by forwarding th
2b290 6f 73 65 20 6d 65 74 68 6f 64 20 63 61 6c 6c 73  ose method calls
2b2a0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
2b2b0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
2b2c0 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e  SQLiteModule" />
2b2d0 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
2b2e0 20 69 74 20 63 6f 6e 74 61 69 6e 73 2e 20 20 49   it contains.  I
2b2f0 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
2b300 2f 2f 20 63 6f 6e 74 61 69 6e 65 64 20 3c 73 65  // contained <se
2b310 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
2b320 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20  dule" /> object 
2b330 69 6e 73 74 61 6e 63 65 20 69 73 20 6e 75 6c 6c  instance is null
2b340 2c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f  , all..        /
2b350 2f 2f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  // the <see cref
2b360 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2b370 6f 64 75 6c 65 22 20 2f 3e 20 6d 65 74 68 6f 64  odule" /> method
2b380 73 20 73 69 6d 70 6c 79 20 67 65 6e 65 72 61 74  s simply generat
2b390 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e an..        //
2b3a0 2f 20 65 72 72 6f 72 2e 0d 0a 20 20 20 20 20 20  / error...      
2b3b0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2b3c0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2b3d0 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  e sealed class S
2b3e0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2b3f0 65 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e :..           
2b400 20 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69       ISQLiteNati
2b410 76 65 4d 6f 64 75 6c 65 2c 20 49 44 69 73 70 6f  veModule, IDispo
2b420 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b  sable..        {
2b430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2b440 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
2b450 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20  nstants..       
2b460 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2b470 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2b480 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65 20  /// This is the 
2b490 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 61 6c  value that is al
2b4a0 77 61 79 73 20 75 73 65 64 20 66 6f 72 20 74 68  ways used for th
2b4b0 65 20 22 6c 6f 67 45 72 72 6f 72 73 22 0d 0a 20  e "logErrors".. 
2b4c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 70             /// p
2b4d0 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68 65 20  arameter to the 
2b4e0 76 61 72 69 6f 75 73 20 73 74 61 74 69 63 20 65  various static e
2b4f0 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 6d 65  rror handling me
2b500 74 68 6f 64 73 20 70 72 6f 76 69 64 65 64 0d 0a  thods provided..
2b510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b520 62 79 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  by the <see cref
2b530 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20  ="SQLiteModule" 
2b540 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  /> class...     
2b550 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2b560 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2b570 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2b580 20 62 6f 6f 6c 20 44 65 66 61 75 6c 74 4c 6f 67   bool DefaultLog
2b590 45 72 72 6f 72 73 20 3d 20 74 72 75 65 3b 0d 0a  Errors = true;..
2b5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2b600 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2b610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b620 54 68 69 73 20 69 73 20 74 68 65 20 76 61 6c 75  This is the valu
2b630 65 20 74 68 61 74 20 69 73 20 61 6c 77 61 79 73  e that is always
2b640 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 22 6c   used for the "l
2b650 6f 67 45 78 63 65 70 74 69 6f 6e 73 22 0d 0a 20  ogExceptions".. 
2b660 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 70             /// p
2b670 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68 65 20  arameter to the 
2b680 76 61 72 69 6f 75 73 20 73 74 61 74 69 63 20 65  various static e
2b690 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 6d 65  rror handling me
2b6a0 74 68 6f 64 73 20 70 72 6f 76 69 64 65 64 0d 0a  thods provided..
2b6b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b6c0 62 79 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  by the <see cref
2b6d0 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20  ="SQLiteModule" 
2b6e0 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  /> class...     
2b6f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2b700 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2b710 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2b720 20 62 6f 6f 6c 20 44 65 66 61 75 6c 74 4c 6f 67   bool DefaultLog
2b730 45 78 63 65 70 74 69 6f 6e 73 20 3d 20 74 72 75  Exceptions = tru
2b740 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2b750 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2b760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b790 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2b7a0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2b7b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2b7c0 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65 20  /// This is the 
2b7d0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65  error message te
2b7e0 78 74 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  xt used when the
2b7f0 20 63 6f 6e 74 61 69 6e 65 64 0d 0a 20 20 20 20   contained..    
2b800 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
2b810 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64   cref="SQLiteMod
2b820 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ule" /> object i
2b830 6e 73 74 61 6e 63 65 20 69 73 20 6e 6f 74 20 61  nstance is not a
2b840 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20  vailable..      
2b850 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 61 6e        /// for an
2b860 79 20 72 65 61 73 6f 6e 2e 0d 0a 20 20 20 20 20  y reason...     
2b870 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2b880 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2b890 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2b8a0 20 73 74 72 69 6e 67 20 4d 6f 64 75 6c 65 4e 6f   string ModuleNo
2b8b0 74 41 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d  tAvailableErrorM
2b8c0 65 73 73 61 67 65 20 3d 0d 0a 20 20 20 20 20 20  essage =..      
2b8d0 20 20 20 20 20 20 20 20 20 20 22 6e 61 74 69 76            "nativ
2b8e0 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
2b8f0 6e 74 61 74 69 6f 6e 20 6e 6f 74 20 61 76 61 69  ntation not avai
2b900 6c 61 62 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20  lable";..       
2b910 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2b920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b970 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2b980 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
2b990 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  e Data..        
2b9a0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2b9b0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2b9c0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
2b9d0 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20  ="SQLiteModule" 
2b9e0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
2b9f0 63 65 20 75 73 65 64 20 74 6f 20 70 72 6f 76 69  ce used to provi
2ba00 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  de..            
2ba10 2f 2f 2f 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74  /// an implement
2ba20 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c 73 65  ation of the <se
2ba30 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2ba40 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d  ativeModule" />.
2ba50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ba60 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20   interface...   
2ba70 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
2ba80 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ba90 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
2baa0 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
2bab0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
2bac0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2bad0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2bae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2baf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2bb20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2bb30 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
2bb40 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
2bb50 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2bb60 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2bb70 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
2bb80 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
2bb90 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  is class...     
2bba0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2bbb0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2bbc0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2bbd0 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
2bbe0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68            /// Th
2bbf0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
2bc00 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62  iteModule" /> ob
2bc10 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 75 73  ject instance us
2bc20 65 64 20 74 6f 20 70 72 6f 76 69 64 65 0d 0a 20  ed to provide.. 
2bc30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 61             /// a
2bc40 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
2bc50 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63 72 65   of the <see cre
2bc60 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2bc70 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20  Module" />..    
2bc80 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65          /// inte
2bc90 72 66 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  rface...        
2bca0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2bcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2bcc0 62 6c 69 63 20 53 51 4c 69 74 65 4e 61 74 69 76  blic SQLiteNativ
2bcd0 65 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20  eModule(..      
2bce0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
2bcf0 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20  Module module.. 
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2bd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2bd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd30 20 74 68 69 73 2e 6d 6f 64 75 6c 65 20 3d 20 6d   this.module = m
2bd40 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  odule;..        
2bd50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2bd60 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2bd70 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2bd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bdc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2bdd0 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
2bde0 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Static Methods..
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2be00 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2be10 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20         /// Sets 
2be20 74 68 65 20 74 61 62 6c 65 20 65 72 72 6f 72 20  the table error 
2be30 6d 65 73 73 61 67 65 20 74 6f 20 6f 6e 65 20 74  message to one t
2be40 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68  hat indicates th
2be50 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  e native..      
2be60 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65        /// module
2be70 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2be80 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
2be90 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2bea0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2beb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2bec0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
2bed0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
2bee0 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
2bef0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
2bf00 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
2bf10 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
2bf20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2bf30 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2bf40 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2bf50 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2bf60 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 6f   /// The value o
2bf70 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
2bf80 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
2bf90 6f 72 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20  or" />...       
2bfa0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2bfb0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2bfc0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2bfd0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2bfe0 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2bff0 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20  leTableError(.. 
2c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2c010 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
2c020 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2c030 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2c050 65 74 54 61 62 6c 65 45 72 72 6f 72 28 6e 75 6c  etTableError(nul
2c060 6c 2c 20 70 56 74 61 62 2c 20 44 65 66 61 75 6c  l, pVtab, Defaul
2c070 74 4c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20  tLogErrors,..   
2c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c090 20 44 65 66 61 75 6c 74 4c 6f 67 45 78 63 65 70   DefaultLogExcep
2c0a0 74 69 6f 6e 73 2c 20 4d 6f 64 75 6c 65 4e 6f 74  tions, ModuleNot
2c0b0 41 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65  AvailableErrorMe
2c0c0 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  ssage);....     
2c0d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c0e0 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
2c0f0 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
2c100 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c110 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2c120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c160 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2c170 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2c180 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
2c190 65 20 74 61 62 6c 65 20 65 72 72 6f 72 20 6d 65  e table error me
2c1a0 73 73 61 67 65 20 74 6f 20 6f 6e 65 20 74 68 61  ssage to one tha
2c1b0 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  t indicates the 
2c1c0 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
2c1d0 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 69      /// module i
2c1e0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
2c1f0 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2e 0d   not available..
2c200 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c210 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2c220 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2c230 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
2c240 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r">..           
2c250 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
2c260 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
2c270 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2c280 6f 72 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20  or derived..    
2c290 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75          /// stru
2c2a0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
2c2b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2c2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c2d0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2c2e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65           /// The
2c2f0 20 76 61 6c 75 65 20 6f 66 20 3c 73 65 65 20 63   value of <see c
2c300 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72  ref="SQLiteError
2c310 43 6f 64 65 2e 45 72 72 6f 72 22 20 2f 3e 2e 0d  Code.Error" />..
2c320 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c330 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2c340 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2c350 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 45 72   static SQLiteEr
2c360 72 6f 72 43 6f 64 65 20 4d 6f 64 75 6c 65 4e 6f  rorCode ModuleNo
2c370 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72  tAvailableCursor
2c380 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20  Error(..        
2c390 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2c3a0 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  Cursor..        
2c3b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2c3c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c3d0 20 20 20 20 20 20 20 20 20 20 53 65 74 43 75 72            SetCur
2c3e0 73 6f 72 45 72 72 6f 72 28 6e 75 6c 6c 2c 20 70  sorError(null, p
2c3f0 43 75 72 73 6f 72 2c 20 44 65 66 61 75 6c 74 4c  Cursor, DefaultL
2c400 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20  ogErrors,..     
2c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
2c420 65 66 61 75 6c 74 4c 6f 67 45 78 63 65 70 74 69  efaultLogExcepti
2c430 6f 6e 73 2c 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  ons, ModuleNotAv
2c440 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73 73  ailableErrorMess
2c450 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  age);....       
2c460 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c470 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
2c480 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
2c490 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2c4a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2c4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c500 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c510 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e  #region ISQLiteN
2c520 61 74 69 76 65 4d 6f 64 75 6c 65 20 4d 65 6d 62  ativeModule Memb
2c530 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
2c540 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2c550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c560 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2c570 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2c580 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20  Module.xCreate" 
2c590 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2c5a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2c5b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2c5c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2c5d0 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20  ame="pDb">..    
2c5e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2c5f0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2c600 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2c610 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d  le.xCreate" /> m
2c620 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2c630 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2c640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c650 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2c660 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  Aux">..         
2c670 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2c680 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2c690 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
2c6a0 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
2c6b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c6c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2c6d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2c6e0 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
2c6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c700 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2c710 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2c720 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
2c730 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2c740 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2c750 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2c760 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2c770 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20  ame="argv">..   
2c780 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2c790 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2c7a0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2c7b0 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
2c7c0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2c7d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2c7e0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c7f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2c800 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
2c810 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2c820 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2c830 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2c840 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68  xCreate" /> meth
2c850 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2c860 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2c870 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c880 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45 72 72  param name="pErr
2c890 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  or">..          
2c8a0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2c8b0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2c8c0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
2c8d0 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  eate" /> method.
2c8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c8f0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2c900 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2c910 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2c920 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2c930 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2c940 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
2c950 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
2c960 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c970 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2c980 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2c990 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2c9a0 65 20 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20  e xCreate(..    
2c9b0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2c9c0 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20  tr pDb,..       
2c9d0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2c9e0 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  pAux,..         
2c9f0 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c         int argc,
2ca00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ca10 20 20 49 6e 74 50 74 72 20 61 72 67 76 2c 0d 0a    IntPtr argv,..
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca30 72 65 66 20 49 6e 74 50 74 72 20 70 56 74 61 62  ref IntPtr pVtab
2ca40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ca50 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 45     ref IntPtr pE
2ca60 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2ca70 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2ca80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ca90 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2caa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2cab0 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e  OTE: Called by n
2cac0 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20  ative code...   
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2cae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2caf0 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65   // CheckDispose
2cb00 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a  d(); /* EXEMPT *
2cb10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2cb20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2cb30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2cb40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb60 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65   pError = SQLite
2cb70 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
2cb80 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20  rFromString(..  
2cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cba0 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41        ModuleNotA
2cbb0 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73  vailableErrorMes
2cbc0 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sage);....      
2cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2cbe0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
2cbf0 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
2cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2cc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cc20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2cc30 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20  xCreate(..      
2cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
2cc50 62 2c 20 70 41 75 78 2c 20 61 72 67 63 2c 20 61  b, pAux, argc, a
2cc60 72 67 76 2c 20 72 65 66 20 70 56 74 61 62 2c 20  rgv, ref pVtab, 
2cc70 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20  ref pError);..  
2cc80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2cc90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2cca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ccb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ccc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ccd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2cce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ccf0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2cd00 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2cd10 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2cd20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2cd30 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
2cd40 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2cd50 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2cd60 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2cd70 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2cd80 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20  e="pDb">..      
2cd90 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2cda0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2cdb0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2cdc0 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  .xConnect" /> me
2cdd0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2cde0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2cdf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ce00 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41   <param name="pA
2ce10 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ux">..          
2ce20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2ce30 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2ce40 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
2ce50 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
2ce60 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ce70 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2ce80 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2ce90 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
2cea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ceb0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2cec0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2ced0 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
2cee0 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2cef0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2cf00 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2cf10 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2cf20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20  name="argv">..  
2cf30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2cf40 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2cf50 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2cf60 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
2cf70 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2cf80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2cf90 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2cfa0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2cfb0 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2cfc0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2cfd0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2cfe0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2cff0 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
2d000 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2d010 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2d020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d030 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2d040 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  Error">..       
2d050 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2d060 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2d070 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2d080 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  xConnect" /> met
2d090 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2d0a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d0c0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
2d0d0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2d0e0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2d0f0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2d100 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
2d110 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2d120 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2d130 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2d140 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2d150 6f 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63 74 28  orCode xConnect(
2d160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d170 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
2d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2d190 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
2d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2d1b0 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
2d1c0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61          IntPtr a
2d1d0 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgv,..          
2d1e0 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
2d1f0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
2d200 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
2d210 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20  Ptr pError..    
2d220 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2d230 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2d250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d260 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65    // NOTE: Calle
2d270 64 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64 65  d by native code
2d280 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d290 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2d2a0 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2d2b0 69 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58  isposed(); /* EX
2d2c0 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  EMPT */....     
2d2d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2d2e0 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d310 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
2d320 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
2d330 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
2d340 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
2d350 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75              Modu
2d360 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72  leNotAvailableEr
2d370 72 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a  rorMessage);....
2d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d390 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
2d3a0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
2d3b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d3c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2d3d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
2d3e0 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 28 0d  odule.xConnect(.
2d3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d400 20 20 20 20 20 70 44 62 2c 20 70 41 75 78 2c 20       pDb, pAux, 
2d410 61 72 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20  argc, argv, ref 
2d420 70 56 74 61 62 2c 20 72 65 66 20 70 45 72 72 6f  pVtab, ref pErro
2d430 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2d440 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d450 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2d460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d490 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2d4a0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2d4b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2d4c0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d4d0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d4e0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74  tiveModule.xBest
2d4f0 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
2d500 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2d510 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2d520 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d530 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
2d540 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
2d550 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2d560 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2d570 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73  ativeModule.xBes
2d580 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f  tIndex" /> metho
2d590 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2d5a0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2d5b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2d5c0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65  aram name="pInde
2d5d0 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x">..           
2d5e0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2d5f0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2d600 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73  ativeModule.xBes
2d610 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f  tIndex" /> metho
2d620 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2d630 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2d640 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2d650 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2d660 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2d670 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2d680 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2d690 78 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d  xBestIndex" /> m
2d6a0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2d6b0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2d6c0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2d6d0 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2d6e0 6f 72 43 6f 64 65 20 78 42 65 73 74 49 6e 64 65  orCode xBestInde
2d6f0 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x(..            
2d700 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
2d710 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d720 20 20 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78     IntPtr pIndex
2d730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d740 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2d750 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d760 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2d770 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2d780 20 43 61 6c 6c 65 64 20 62 79 20 6e 61 74 69 76   Called by nativ
2d790 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  e code...       
2d7a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2d7c0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2d7d0 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d   /* EXEMPT */...
2d7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d7f0 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2d800 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2d810 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d820 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2d830 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56  bleTableError(pV
2d840 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
2d850 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d860 6d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  module.xBestInde
2d870 78 28 70 56 74 61 62 2c 20 70 49 6e 64 65 78 29  x(pVtab, pIndex)
2d880 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d890 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2d8f0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2d900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d910 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2d920 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2d930 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e  veModule.xDiscon
2d940 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
2d950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d960 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2d970 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2d980 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
2d990 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2d9a0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d9b0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d9c0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63  tiveModule.xDisc
2d9d0 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
2d9e0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2d9f0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2da00 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2da10 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2da20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2da30 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2da40 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2da50 78 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20  xDisconnect" /> 
2da60 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2da70 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2da80 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2da90 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2daa0 72 6f 72 43 6f 64 65 20 78 44 69 73 63 6f 6e 6e  rorCode xDisconn
2dab0 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
2dac0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
2dad0 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
2dae0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
2daf0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2db00 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2db10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2db20 45 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e 61 74  E: Called by nat
2db30 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  ive code...     
2db40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2db60 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2db70 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d  ); /* EXEMPT */.
2db80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2db90 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2dba0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2dbc0 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
2dbd0 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
2dbe0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
2dbf0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2dc00 6e 20 6d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e  n module.xDiscon
2dc10 6e 65 63 74 28 70 56 74 61 62 29 3b 0d 0a 20 20  nect(pVtab);..  
2dc20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2dc30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2dc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2dc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2dc90 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2dca0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2dcb0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2dcc0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2dcd0 75 6c 65 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e  ule.xDestroy" />
2dce0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2dcf0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2dd00 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2dd10 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2dd20 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
2dd30 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2dd40 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2dd50 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2dd60 6c 65 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e 20  le.xDestroy" /> 
2dd70 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2dd80 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2dd90 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2dda0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
2ddb0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2ddc0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2ddd0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2dde0 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 22 20 2f  dule.xDestroy" /
2ddf0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2de00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2de10 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2de20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
2de30 45 72 72 6f 72 43 6f 64 65 20 78 44 65 73 74 72  ErrorCode xDestr
2de40 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oy(..           
2de50 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
2de60 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b..             
2de70 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2de80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2de90 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2dea0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2deb0 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e 61 74 69  : Called by nati
2dec0 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  ve code...      
2ded0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2def0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2df00 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a  ; /* EXEMPT */..
2df10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2df20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
2df30 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2df40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2df50 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
2df60 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70  ableTableError(p
2df70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
2df80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2df90 20 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79   module.xDestroy
2dfa0 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20  (pVtab);..      
2dfb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2dfc0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2dfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2e010 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2e020 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2e030 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2e040 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2e050 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2e060 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  xOpen" /> method
2e070 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e080 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2e090 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e0a0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
2e0b0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
2e0c0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2e0d0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2e0e0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65  ativeModule.xOpe
2e0f0 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
2e100 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e110 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2e120 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2e130 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
2e140 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e150 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2e160 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2e170 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f  eModule.xOpen" /
2e180 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2e190 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2e1a0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2e1b0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2e1c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e1d0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2e1e0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2e1f0 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e  Module.xOpen" />
2e200 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2e210 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
2e220 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2e230 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45    public SQLiteE
2e240 72 72 6f 72 43 6f 64 65 20 78 4f 70 65 6e 28 0d  rrorCode xOpen(.
2e250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e260 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
2e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e280 72 65 66 20 49 6e 74 50 74 72 20 70 43 75 72 73  ref IntPtr pCurs
2e290 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
2e2a0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
2e2b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e2c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2e2d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2e2e0 45 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e 61 74  E: Called by nat
2e2f0 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  ive code...     
2e300 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e320 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2e330 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d  ); /* EXEMPT */.
2e340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e350 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
2e360 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e370 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e380 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
2e390 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
2e3a0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
2e3b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e3c0 6e 20 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 28 70  n module.xOpen(p
2e3d0 56 74 61 62 2c 20 72 65 66 20 70 43 75 72 73 6f  Vtab, ref pCurso
2e3e0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2e3f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2e400 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e440 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2e450 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2e460 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2e470 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2e480 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2e490 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73  tiveModule.xClos
2e4a0 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
2e4b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e4c0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2e4d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2e4e0 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
2e4f0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2e500 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2e510 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2e520 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  iveModule.xClose
2e530 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2e540 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2e550 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2e560 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2e570 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2e580 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2e590 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2e5a0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  iveModule.xClose
2e5b0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2e5c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2e5d0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2e5e0 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2e5f0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6c  iteErrorCode xCl
2e600 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ose(..          
2e610 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
2e620 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
2e630 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2e640 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e650 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2e660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2e670 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e  OTE: Called by n
2e680 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20  ative code...   
2e690 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2e6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e6b0 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65   // CheckDispose
2e6c0 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a  d(); /* EXEMPT *
2e6d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2e6e0 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2e6f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2e710 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2e720 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72  ailableCursorErr
2e730 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  or(pCursor);....
2e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e750 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43  return module.xC
2e760 6c 6f 73 65 28 70 43 75 72 73 6f 72 29 3b 0d 0a  lose(pCursor);..
2e770 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2e780 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e7e0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2e7f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2e800 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2e810 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2e820 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
2e830 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2e840 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2e850 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2e860 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2e870 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
2e880 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2e890 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2e8a0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2e8b0 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
2e8c0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2e8d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2e8e0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2e8f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2e900 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20 20 20 20  ="idxNum">..    
2e910 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2e920 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2e930 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2e940 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d  le.xFilter" /> m
2e950 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2e960 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2e970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e980 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
2e990 64 78 53 74 72 22 3e 0d 0a 20 20 20 20 20 20 20  dxStr">..       
2e9a0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2e9b0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2e9c0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2e9d0 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68  xFilter" /> meth
2e9e0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2e9f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2ea00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ea10 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
2ea20 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2ea30 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2ea40 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2ea50 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74  tiveModule.xFilt
2ea60 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  er" /> method...
2ea70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ea80 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2ea90 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2eaa0 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20   name="argv">.. 
2eab0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2eac0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2ead0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2eae0 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f  odule.xFilter" /
2eaf0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2eb00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2eb10 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2eb20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2eb40 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2eb50 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2eb60 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2eb70 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2eb80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
2eb90 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2eba0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2ebb0 65 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c 74  eErrorCode xFilt
2ebc0 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
2ebd0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2ebe0 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
2ebf0 20 20 20 20 20 20 69 6e 74 20 69 64 78 4e 75 6d        int idxNum
2ec00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ec10 20 20 20 49 6e 74 50 74 72 20 69 64 78 53 74 72     IntPtr idxStr
2ec20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ec30 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
2ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2ec50 74 50 74 72 20 61 72 67 76 0d 0a 20 20 20 20 20  tPtr argv..     
2ec60 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2ec70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2ec90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eca0 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64   // NOTE: Called
2ecb0 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2e   by native code.
2ecc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ecd0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2ece0 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69        // CheckDi
2ecf0 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58 45  sposed(); /* EXE
2ed00 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  MPT */....      
2ed10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2ed20 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed40 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2ed50 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73  NotAvailableCurs
2ed60 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f 72 29  orError(pCursor)
2ed70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ed80 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75       return modu
2ed90 6c 65 2e 78 46 69 6c 74 65 72 28 70 43 75 72 73  le.xFilter(pCurs
2eda0 6f 72 2c 20 69 64 78 4e 75 6d 2c 20 69 64 78 53  or, idxNum, idxS
2edb0 74 72 2c 20 61 72 67 63 2c 20 61 72 67 76 29 3b  tr, argc, argv);
2edc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2edd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ede0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2edf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2ee30 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2ee40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ee50 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2ee60 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2ee70 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 22 20 2f  eModule.xNext" /
2ee80 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2ee90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2eea0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2eeb0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2eec0 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20  me="pCursor">.. 
2eed0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2eee0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2eef0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2ef00 6f 64 75 6c 65 2e 78 4e 65 78 74 22 20 2f 3e 20  odule.xNext" /> 
2ef10 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2ef20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2ef30 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2ef40 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
2ef50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2ef60 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2ef70 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2ef80 64 75 6c 65 2e 78 4e 65 78 74 22 20 2f 3e 20 6d  dule.xNext" /> m
2ef90 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2efa0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2efb0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2efc0 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2efd0 6f 72 43 6f 64 65 20 78 4e 65 78 74 28 0d 0a 20  orCode xNext(.. 
2efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2eff0 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
2f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2f010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2f020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f030 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2f040 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61       // NOTE: Ca
2f050 6c 6c 65 64 20 62 79 20 6e 61 74 69 76 65 20 63  lled by native c
2f060 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ode...          
2f070 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2f080 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2f090 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 2f 2a  ckDisposed(); /*
2f0a0 20 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20   EXEMPT */....  
2f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2f0c0 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
2f0d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f0e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
2f0f0 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2f100 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75 72  CursorError(pCur
2f110 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sor);....       
2f120 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f130 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 28 70 43 75  module.xNext(pCu
2f140 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rsor);..        
2f150 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2f160 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2f170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2f1b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2f1c0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2f1d0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2f1e0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2f1f0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45  eNativeModule.xE
2f200 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  of" /> method...
2f210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f220 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2f230 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2f240 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
2f250 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2f260 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2f270 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2f280 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22  tiveModule.xEof"
2f290 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2f2a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2f2b0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2f2c0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2f2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f2e0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2f2f0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2f300 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22 20 2f  veModule.xEof" /
2f310 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2f320 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2f330 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2f340 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 78 45     public int xE
2f350 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  of(..           
2f360 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2f370 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
2f380 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2f390 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f3a0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2f3b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
2f3c0 54 45 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e 61  TE: Called by na
2f3d0 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20  tive code...    
2f3e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f400 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2f410 28 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f  (); /* EXEMPT */
2f420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f430 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2f440 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2f450 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f470 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2f480 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43  leCursorError(pC
2f490 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  ursor);..       
2f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f4b0 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20 20  urn 1;..        
2f4c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f4e0 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 45 6f 66 28  urn module.xEof(
2f4f0 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20  pCursor);..     
2f500 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f510 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2f520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2f560 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2f570 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2f580 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2f590 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2f5a0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2f5b0 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74  .xColumn" /> met
2f5c0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2f5d0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2f5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f5f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2f600 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
2f610 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2f620 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2f630 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2f640 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74  .xColumn" /> met
2f650 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2f660 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2f670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f680 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6f  <param name="pCo
2f690 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20  ntext">..       
2f6a0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2f6b0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2f6c0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2f6d0 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68  xColumn" /> meth
2f6e0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2f6f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2f700 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2f710 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65  param name="inde
2f720 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x">..           
2f730 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2f740 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2f750 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c  ativeModule.xCol
2f760 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  umn" /> method..
2f770 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2f780 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2f790 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
2f7a0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2f7b0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2f7c0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2f7d0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
2f7e0 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lumn" /> method.
2f7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f800 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2f810 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2f820 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2f830 20 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20   xColumn(..     
2f840 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2f850 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20  r pCursor,..    
2f860 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2f870 74 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20  tr pContext,..  
2f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2f890 74 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20  t index..       
2f8a0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2f8b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f8c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f8e0 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62  / NOTE: Called b
2f8f0 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a  y native code...
2f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f910 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2f920 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70      // CheckDisp
2f930 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50  osed(); /* EXEMP
2f940 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  T */....        
2f950 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
2f960 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f980 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f   return ModuleNo
2f990 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72  tAvailableCursor
2f9a0 45 72 72 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d  Error(pCursor);.
2f9b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f9c0 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
2f9d0 2e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 73 6f 72  .xColumn(pCursor
2f9e0 2c 20 70 43 6f 6e 74 65 78 74 2c 20 69 6e 64 65  , pContext, inde
2f9f0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x);..           
2fa00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2fa10 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2fa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2fa60 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2fa70 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2fa80 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2fa90 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2faa0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49  tiveModule.xRowI
2fab0 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  d" /> method... 
2fac0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2fad0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2fae0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2faf0 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
2fb00 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2fb10 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2fb20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2fb30 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64  iveModule.xRowId
2fb40 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2fb50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2fb60 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2fb70 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2fb80 61 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20  ame="rowId">..  
2fb90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2fba0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2fbb0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2fbc0 64 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20  dule.xRowId" /> 
2fbd0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2fbe0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2fbf0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2fc00 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
2fc10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2fc20 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2fc30 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2fc40 64 75 6c 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20  dule.xRowId" /> 
2fc50 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2fc60 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2fc70 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2fc80 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2fc90 72 6f 72 43 6f 64 65 20 78 52 6f 77 49 64 28 0d  rorCode xRowId(.
2fca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fcb0 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c   IntPtr pCursor,
2fcc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fcd0 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64    ref long rowId
2fce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fcf0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2fd00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2fd10 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2fd20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2fd30 20 43 61 6c 6c 65 64 20 62 79 20 6e 61 74 69 76   Called by nativ
2fd40 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  e code...       
2fd50 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2fd70 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2fd80 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d   /* EXEMPT */...
2fd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fda0 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2fdb0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2fdc0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2fdd0 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2fde0 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70  bleCursorError(p
2fdf0 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  Cursor);....    
2fe00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2fe10 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64  rn module.xRowId
2fe20 28 70 43 75 72 73 6f 72 2c 20 72 65 66 20 72 6f  (pCursor, ref ro
2fe30 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  wId);..         
2fe40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2fe50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2fea0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2feb0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2fec0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2fed0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2fee0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70  NativeModule.xUp
2fef0 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  date" /> method.
2ff00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ff10 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2ff20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2ff30 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
2ff40 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2ff50 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2ff60 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2ff70 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
2ff80 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
2ff90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ffa0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2ffb0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2ffc0 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20   name="argc">.. 
2ffd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2ffe0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2fff0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
30000 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f  odule.xUpdate" /
30010 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
30020 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
30030 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
30040 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
30050 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20  ="argv">..      
30060 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
30070 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
30080 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
30090 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74  .xUpdate" /> met
300a0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
300b0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
300c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
300d0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77  <param name="row
300e0 49 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  Id">..          
300f0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
30100 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
30110 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70  NativeModule.xUp
30120 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  date" /> method.
30130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30140 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
30150 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
30160 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
30170 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
30180 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
30190 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55  eNativeModule.xU
301a0 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  pdate" /> method
301b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
301c0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
301d0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
301e0 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
301f0 65 20 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20  e xUpdate(..    
30200 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
30210 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
30220 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61             int a
30230 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgc,..          
30240 20 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67        IntPtr arg
30250 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  v,..            
30260 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
30270 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
30280 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
30290 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
302a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
302b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
302c0 45 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e 61 74  E: Called by nat
302d0 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  ive code...     
302e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
302f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30300 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
30310 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d  ); /* EXEMPT */.
30320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30330 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
30340 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30350 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30360 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69  rn ModuleNotAvai
30370 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28  lableTableError(
30380 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
30390 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
303a0 6e 20 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65  n module.xUpdate
303b0 28 70 56 74 61 62 2c 20 61 72 67 63 2c 20 61 72  (pVtab, argc, ar
303c0 67 76 2c 20 72 65 66 20 72 6f 77 49 64 29 3b 0d  gv, ref rowId);.
303d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
303e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
303f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30430 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
30440 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
30450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
30460 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
30470 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
30480 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f  Module.xBegin" /
30490 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
304a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
304b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
304c0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
304d0 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
304e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
304f0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
30500 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
30510 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d  ule.xBegin" /> m
30520 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
30530 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
30540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30550 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
30560 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
30570 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
30580 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
30590 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e 20 6d  ule.xBegin" /> m
305a0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
305b0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
305c0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
305d0 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
305e0 6f 72 43 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a  orCode xBegin(..
305f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30600 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
30610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
30620 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
30630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30640 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
30650 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c      // NOTE: Cal
30660 6c 65 64 20 62 79 20 6e 61 74 69 76 65 20 63 6f  led by native co
30670 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de...           
30680 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
30690 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
306a0 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20  kDisposed(); /* 
306b0 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20  EXEMPT */....   
306c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
306d0 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (module == null)
306e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
306f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64        return Mod
30700 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54  uleNotAvailableT
30710 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29  ableError(pVtab)
30720 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30730 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75       return modu
30740 6c 65 2e 78 42 65 67 69 6e 28 70 56 74 61 62 29  le.xBegin(pVtab)
30750 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
30760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
307c0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
307d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
307e0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
307f0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
30800 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20  veModule.xSync" 
30810 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
30820 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
30830 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
30840 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
30850 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20  ame="pVtab">..  
30860 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
30870 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
30880 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
30890 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20 6d  dule.xSync" /> m
308a0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
308b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
308c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
308d0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
308e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
308f0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
30900 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
30910 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20 6d 65  ule.xSync" /> me
30920 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
30930 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
30940 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
30950 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
30960 72 43 6f 64 65 20 78 53 79 6e 63 28 0d 0a 20 20  rCode xSync(..  
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
30980 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
30990 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
309a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
309c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
309d0 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65    // NOTE: Calle
309e0 64 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64 65  d by native code
309f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30a00 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
30a10 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
30a20 69 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58  isposed(); /* EX
30a30 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  EMPT */....     
30a40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
30a50 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
30a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a70 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c      return Modul
30a80 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62  eNotAvailableTab
30a90 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d  leError(pVtab);.
30aa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30ab0 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
30ac0 2e 78 53 79 6e 63 28 70 56 74 61 62 29 3b 0d 0a  .xSync(pVtab);..
30ad0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
30af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30b40 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
30b50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
30b60 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
30b70 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
30b80 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f  odule.xCommit" /
30b90 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
30ba0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
30bb0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
30bc0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
30bd0 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
30be0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
30bf0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
30c00 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
30c10 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20  ule.xCommit" /> 
30c20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
30c30 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
30c40 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
30c50 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
30c60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
30c70 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
30c80 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
30c90 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e  dule.xCommit" />
30ca0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
30cb0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
30cc0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
30cd0 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45    public SQLiteE
30ce0 72 72 6f 72 43 6f 64 65 20 78 43 6f 6d 6d 69 74  rrorCode xCommit
30cf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30d00 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
30d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
30d30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30d40 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
30d50 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
30d60 43 61 6c 6c 65 64 20 62 79 20 6e 61 74 69 76 65  Called by native
30d70 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
30d80 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
30d90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
30da0 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
30db0 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a  /* EXEMPT */....
30dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30dd0 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
30de0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
30df0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30e00 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
30e10 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  leTableError(pVt
30e20 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
30e30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
30e40 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 28 70 56  odule.xCommit(pV
30e50 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tab);..         
30e60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30e70 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30eb0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
30ec0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
30ed0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
30ee0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
30ef0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
30f00 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  NativeModule.xRo
30f10 6c 6c 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f  llback" /> metho
30f20 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
30f30 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
30f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
30f50 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
30f60 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ab">..          
30f70 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
30f80 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
30f90 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  NativeModule.xRo
30fa0 6c 6c 62 61 63 6b 22 20 2f 3e 20 6d 65 74 68 6f  llback" /> metho
30fb0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
30fc0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
30fd0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
30fe0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
30ff0 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
31000 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
31010 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
31020 78 52 6f 6c 6c 62 61 63 6b 22 20 2f 3e 20 6d 65  xRollback" /> me
31030 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
31040 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
31050 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
31060 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
31070 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b 28  rCode xRollback(
31080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31090 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
310c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
310d0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
310e0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43        // NOTE: C
310f0 61 6c 6c 65 64 20 62 79 20 6e 61 74 69 76 65 20  alled by native 
31100 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  code...         
31110 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
31120 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
31130 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 2f  eckDisposed(); /
31140 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20  * EXEMPT */.... 
31150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31160 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
31170 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
31180 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
31190 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
311a0 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
311b0 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
311c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
311d0 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 28 70  dule.xRollback(p
311e0 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  Vtab);..        
311f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
31200 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
31210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31240 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
31250 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
31260 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
31270 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
31280 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
31290 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
312a0 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  indFunction" /> 
312b0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
312c0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
312d0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
312e0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
312f0 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
31300 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
31310 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
31320 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
31330 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22  e.xFindFunction"
31340 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
31350 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
31360 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
31370 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
31380 6d 65 3d 22 6e 41 72 67 22 3e 0d 0a 20 20 20 20  me="nArg">..    
31390 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
313a0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
313b0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
313c0 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
313d0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
313e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
313f0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
31400 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
31410 61 6d 65 3d 22 7a 4e 61 6d 65 22 3e 0d 0a 20 20  ame="zName">..  
31420 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
31430 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
31440 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
31450 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69  dule.xFindFuncti
31460 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  on" /> method...
31470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
31480 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
31490 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
314a0 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22   name="callback"
314b0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
314c0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
314d0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
314e0 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  iveModule.xFindF
314f0 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68  unction" /> meth
31500 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
31510 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
31520 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
31530 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69  param name="pCli
31540 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20  entData">..     
31550 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
31560 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
31570 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
31580 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22  e.xFindFunction"
31590 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
315a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
315b0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
315c0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
315d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
315e0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
315f0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
31600 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  veModule.xFindFu
31610 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  nction" /> metho
31620 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
31630 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
31640 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
31650 69 63 20 69 6e 74 20 78 46 69 6e 64 46 75 6e 63  ic int xFindFunc
31660 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
31670 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
31680 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
31690 20 20 20 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d        int nArg,.
316a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
316b0 20 49 6e 74 50 74 72 20 7a 4e 61 6d 65 2c 0d 0a   IntPtr zName,..
316c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316d0 72 65 66 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  ref SQLiteCallba
316e0 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31700 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74  f IntPtr pClient
31710 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
31720 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
31730 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31740 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
31750 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
31760 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e  OTE: Called by n
31770 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20  ative code...   
31780 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
31790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
317a0 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65   // CheckDispose
317b0 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a  d(); /* EXEMPT *
317c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
317d0 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
317e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
317f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31810 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
31820 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56  bleTableError(pV
31830 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tab);..         
31840 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31850 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n 0;..          
31860 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31870 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31880 6e 20 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  n module.xFindFu
31890 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
318a0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74               pVt
318b0 61 62 2c 20 6e 41 72 67 2c 20 7a 4e 61 6d 65 2c  ab, nArg, zName,
318c0 20 72 65 66 20 63 61 6c 6c 62 61 63 6b 2c 20 72   ref callback, r
318d0 65 66 20 70 43 6c 69 65 6e 74 44 61 74 61 29 3b  ef pClientData);
318e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
318f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
31900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31940 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
31950 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
31960 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
31970 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
31980 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
31990 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22  eModule.xRename"
319a0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
319b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
319c0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
319d0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
319e0 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
319f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
31a00 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
31a10 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
31a20 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f  odule.xRename" /
31a30 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
31a40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
31a50 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
31a60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
31a70 3d 22 7a 4e 65 77 22 3e 0d 0a 20 20 20 20 20 20  ="zNew">..      
31a80 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
31a90 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
31aa0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
31ab0 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74  .xRename" /> met
31ac0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
31ad0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
31ae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
31af0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
31b00 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
31b10 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
31b20 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
31b30 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65  e.xRename" /> me
31b40 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
31b50 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
31b60 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
31b70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f  ublic SQLiteErro
31b80 72 43 6f 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a  rCode xRename(..
31b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ba0 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
31bc0 6e 74 50 74 72 20 7a 4e 65 77 0d 0a 20 20 20 20  ntPtr zNew..    
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
31be0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31c10 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65    // NOTE: Calle
31c20 64 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64 65  d by native code
31c30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31c40 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
31c50 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
31c60 69 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58  isposed(); /* EX
31c70 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  EMPT */....     
31c80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
31c90 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cb0 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c      return Modul
31cc0 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62  eNotAvailableTab
31cd0 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d  leError(pVtab);.
31ce0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31cf0 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
31d00 2e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20  .xRename(pVtab, 
31d10 7a 4e 65 77 29 3b 0d 0a 20 20 20 20 20 20 20 20  zNew);..        
31d20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
31d30 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
31d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
31d80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
31d90 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
31da0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
31db0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
31dc0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53  eNativeModule.xS
31dd0 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74  avepoint" /> met
31de0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
31df0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
31e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
31e10 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
31e20 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
31e30 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
31e40 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
31e50 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
31e60 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65  Savepoint" /> me
31e70 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
31e80 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
31e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
31ea0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 53   <param name="iS
31eb0 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20 20  avepoint">..    
31ec0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
31ed0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
31ee0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
31ef0 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f  le.xSavepoint" /
31f00 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
31f10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
31f20 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
31f30 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
31f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
31f50 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
31f60 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
31f70 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  Module.xSavepoin
31f80 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
31f90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
31fa0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
31fb0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
31fc0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53  LiteErrorCode xS
31fd0 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20  avepoint(..     
31fe0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
31ff0 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
32000 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53            int iS
32010 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20  avepoint..      
32020 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
32030 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
32050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32060 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64 20  // NOTE: Called 
32070 62 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d  by native code..
32080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32090 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
320a0 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
320b0 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58 45 4d  posed(); /* EXEM
320c0 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  PT */....       
320d0 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
320e0 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32100 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
32110 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
32120 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d  Error(pVtab);...
32130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32140 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
32150 53 61 76 65 70 6f 69 6e 74 28 70 56 74 61 62 2c  Savepoint(pVtab,
32160 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20   iSavepoint);.. 
32170 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
32190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
321d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
321e0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
321f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
32200 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
32210 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
32220 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f  dule.xRelease" /
32230 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
32240 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
32250 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
32260 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
32270 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
32280 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
32290 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
322a0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
322b0 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f 3e  ule.xRelease" />
322c0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
322d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
322e0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
322f0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
32300 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20  "iSavepoint">.. 
32310 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
32320 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
32330 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
32340 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20  odule.xRelease" 
32350 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
32360 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
32370 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
32380 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
32390 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
323a0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
323b0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
323c0 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65  eModule.xRelease
323d0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
323e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
323f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
32400 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
32410 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 65  iteErrorCode xRe
32420 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20  lease(..        
32430 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
32440 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
32450 20 20 20 20 20 20 20 69 6e 74 20 69 53 61 76 65         int iSave
32460 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  point..         
32470 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
32480 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32490 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
324a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
324b0 4e 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62 79 20  NOTE: Called by 
324c0 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20  native code...  
324d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
324e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
324f0 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
32500 65 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20  ed(); /* EXEMPT 
32510 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
32520 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
32530 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
32540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32550 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
32560 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
32570 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
32580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
32590 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 65 6c  turn module.xRel
325a0 65 61 73 65 28 70 56 74 61 62 2c 20 69 53 61 76  ease(pVtab, iSav
325b0 65 70 6f 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20  epoint);..      
325c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
325d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
325e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
32620 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
32630 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
32640 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
32650 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
32660 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
32670 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20  xRollbackTo" /> 
32680 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
32690 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
326a0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
326b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
326c0 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
326d0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
326e0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
326f0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
32700 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f  e.xRollbackTo" /
32710 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
32720 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
32730 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
32740 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
32750 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a  ="iSavepoint">..
32760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
32770 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
32780 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
32790 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
327a0 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  To" /> method...
327b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
327c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
327d0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
327e0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
327f0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
32800 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
32810 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c  ativeModule.xRol
32820 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68  lbackTo" /> meth
32830 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
32840 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
32850 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
32860 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
32870 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28  ode xRollbackTo(
32880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32890 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
328a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
328b0 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d   int iSavepoint.
328c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
328d0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
328e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
328f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
32900 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
32910 43 61 6c 6c 65 64 20 62 79 20 6e 61 74 69 76 65  Called by native
32920 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
32930 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
32940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
32950 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
32960 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a  /* EXEMPT */....
32970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32980 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
32990 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
329a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
329b0 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
329c0 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  leTableError(pVt
329d0 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
329e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
329f0 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54  odule.xRollbackT
32a00 6f 28 70 56 74 61 62 2c 20 69 53 61 76 65 70 6f  o(pVtab, iSavepo
32a10 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  int);..         
32a20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
32a30 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
32a40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
32a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
32a90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
32aa0 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
32ab0 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  le Members..    
32ac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
32ad0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
32ae0 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20     /// Disposes 
32af0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  of this object i
32b00 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
32b10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
32b20 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
32b30 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69    public void Di
32b40 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  spose()..       
32b50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32b60 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
32b70 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
32b80 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72          GC.Suppr
32b90 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73  essFinalize(this
32ba0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
32bb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
32bc0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
32bd0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
32be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32c20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
32c30 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
32c40 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
32c50 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
32c60 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70  rivate bool disp
32c70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  osed;..         
32c80 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
32c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
32ca0 2f 20 54 68 72 6f 77 73 20 61 6e 20 3c 73 65 65  / Throws an <see
32cb0 20 63 72 65 66 3d 22 4f 62 6a 65 63 74 44 69 73   cref="ObjectDis
32cc0 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 22 20  posedException" 
32cd0 2f 3e 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63  /> if this objec
32ce0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  t..            /
32cf0 2f 2f 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20  // instance has 
32d00 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a  been disposed...
32d10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
32d20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
32d30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
32d40 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
32d50 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
32d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
32d70 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
32d80 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
32d90 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
32da0 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
32db0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
32dd0 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
32de0 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
32df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32e00 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
32e10 28 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  (SQLiteNativeMod
32e20 75 6c 65 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20  ule).Name);..   
32e30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32e40 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
32e50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32e60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
32e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ea0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
32eb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
32ec0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
32ed0 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20     /// Disposes 
32ee0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  of this object i
32ef0 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
32f00 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
32f10 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
32f20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
32f30 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a  e="disposing">..
32f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
32f50 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73  Non-zero if this
32f60 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67   method is being
32f70 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   called from the
32f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
32f90 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44 69 73  / <see cref="Dis
32fa0 70 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74 68 6f  pose()" /> metho
32fb0 64 2e 20 20 5a 65 72 6f 20 69 66 20 74 68 69 73  d.  Zero if this
32fc0 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67   method is being
32fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
32fe0 2f 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74 68  / called from th
32ff0 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a 20 20  e finalizer...  
33000 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
33010 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
33020 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70      private /* p
33030 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
33040 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65   */ void Dispose
33050 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
33060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33080 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d   if (!disposed).
33090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
330a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
330b0 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69          //if (di
330c0 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
330d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
330e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
330f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f         //    ///
33100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33120 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
33130 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
33140 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
33150 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
33160 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33170 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f         //    ///
33180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
331a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
331b0 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
331c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
331e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
331f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
33200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33210 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
33220 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
33230 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
33240 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
33250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33280 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
33290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332a0 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f 64  // NOTE: The mod
332b0 75 6c 65 20 69 73 20 6e 6f 74 20 6f 77 6e 65 64  ule is not owned
332c0 20 62 79 20 75 73 3b 20 74 68 65 72 65 66 6f 72   by us; therefor
332d0 65 2c 20 64 6f 20 6e 6f 74 0d 0a 20 20 20 20 20  e, do not..     
332e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
332f0 2f 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 20  /       dispose 
33300 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it...           
33310 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
33320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33330 20 69 66 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e   if (module != n
33340 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
33350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
33360 64 75 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  dule = null;....
33370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33380 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
33390 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
333a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
333b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
333c0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
333d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
333e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
333f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33420 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
33430 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63   #region Destruc
33440 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tor..           
33450 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
33460 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
33470 46 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f  Finalizes this o
33480 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
33490 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
334a0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
334b0 20 20 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65           ~SQLite
334c0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 0d 0a  NativeModule()..
334d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
334e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
334f0 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a  ispose(false);..
33500 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
33510 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
33520 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
33530 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
33540 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
33550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33590 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
335a0 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
335b0 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  te Constants..  
335c0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
335d0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
335e0 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 65 72   The default ver
335f0 73 69 6f 6e 20 6f 66 20 74 68 65 20 6e 61 74 69  sion of the nati
33600 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ve sqlite3_modul
33610 65 20 73 74 72 75 63 74 75 72 65 20 69 6e 20 75  e structure in u
33620 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
33630 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
33640 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
33650 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 69 6e 74  tic readonly int
33660 20 44 65 66 61 75 6c 74 4d 6f 64 75 6c 65 56 65   DefaultModuleVe
33670 72 73 69 6f 6e 20 3d 20 32 3b 0d 0a 20 20 20 20  rsion = 2;..    
33680 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
33690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
336a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
336f0 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
33700 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  a..        /// <
33710 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
33720 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64    /// This field
33730 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
33740 65 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  e the native sql
33750 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75  ite3_module stru
33760 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 2f  cture..        /
33770 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
33780 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  th this object i
33790 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
337a0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
337b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
337c0 65 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e UnsafeNativeMe
337d0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f  thods.sqlite3_mo
337e0 64 75 6c 65 20 6e 61 74 69 76 65 4d 6f 64 75 6c  dule nativeModul
337f0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
33800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33840 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
33850 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
33860 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
33870 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 74   field is used t
33880 6f 20 73 74 6f 72 65 20 74 68 65 20 64 65 73 74  o store the dest
33890 72 75 63 74 6f 72 20 64 65 6c 65 67 61 74 65 20  ructor delegate 
338a0 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 0d  to be passed to.
338b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
338c0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
338d0 72 61 72 79 20 76 69 61 20 74 68 65 20 73 71 6c  rary via the sql
338e0 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70  ite3_create_disp
338f0 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 29 0d  osable_module().
33900 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 75 6e  .        /// fun
33910 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ction...        
33920 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
33930 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
33940 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
33950 6f 64 73 2e 78 44 65 73 74 72 6f 79 4d 6f 64 75  ods.xDestroyModu
33960 6c 65 20 64 65 73 74 72 6f 79 4d 6f 64 75 6c 65  le destroyModule
33970 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
33980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
339a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
339b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
339c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
339d0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
339e0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
339f0 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 74 6f  field is used to
33a00 20 73 74 6f 72 65 20 61 20 70 6f 69 6e 74 65 72   store a pointer
33a10 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 73   to the native s
33a20 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 0d 0a 20  qlite3_module.. 
33a30 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63         /// struc
33a40 74 75 72 65 20 72 65 74 75 72 6e 65 64 20 62 79  ture returned by
33a50 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65   the sqlite3_cre
33a60 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d  ate_disposable_m
33a70 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  odule..        /
33a80 2f 2f 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20  // function...  
33a90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
33aa0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
33ab0 69 76 61 74 65 20 49 6e 74 50 74 72 20 64 69 73  ivate IntPtr dis
33ac0 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 3b 0d 0a  posableModule;..
33ad0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
33ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b20 2f 0d 0a 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52  /....#if PLATFOR
33b30 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
33b40 52 4b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  RK..        /// 
33b50 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
33b60 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c     /// This fiel
33b70 64 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  d is used to hol
33b80 64 20 74 68 65 20 62 6c 6f 63 6b 20 6f 66 20 6e  d the block of n
33b90 61 74 69 76 65 20 6d 65 6d 6f 72 79 20 74 68 61  ative memory tha
33ba0 74 20 63 6f 6e 74 61 69 6e 73 0d 0a 20 20 20 20  t contains..    
33bb0 20 20 20 20 2f 2f 2f 20 74 68 65 20 6e 61 74 69      /// the nati
33bc0 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ve sqlite3_modul
33bd0 65 20 73 74 72 75 63 74 75 72 65 20 61 73 73 6f  e structure asso
33be0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
33bf0 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20   object..       
33c00 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 77 68   /// instance wh
33c10 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74 68  en running on th
33c20 65 20 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46  e .NET Compact F
33c30 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20  ramework...     
33c40 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
33c50 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
33c60 74 65 20 49 6e 74 50 74 72 20 70 4e 61 74 69 76  te IntPtr pNativ
33c70 65 4d 6f 64 75 6c 65 3b 0d 0a 23 65 6e 64 69 66  eModule;..#endif
33c80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
33c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33cd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
33ce0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
33cf0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66        /// This f
33d00 69 65 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20  ield is used to 
33d10 73 74 6f 72 65 20 74 68 65 20 76 69 72 74 75 61  store the virtua
33d20 6c 20 74 61 62 6c 65 20 69 6e 73 74 61 6e 63 65  l table instance
33d30 73 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  s associated..  
33d40 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
33d50 68 69 73 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  his module.  The
33d60 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
33d70 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
33d80 74 61 62 20 64 65 72 69 76 65 64 0d 0a 20 20 20  tab derived..   
33d90 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75       /// structu
33da0 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65  re is used to ke
33db0 79 20 69 6e 74 6f 20 74 68 69 73 20 63 6f 6c 6c  y into this coll
33dc0 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  ection...       
33dd0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
33de0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
33df0 20 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50   Dictionary<IntP
33e00 74 72 2c 20 53 51 4c 69 74 65 56 69 72 74 75 61  tr, SQLiteVirtua
33e10 6c 54 61 62 6c 65 3e 20 74 61 62 6c 65 73 3b 0d  lTable> tables;.
33e20 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
33e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
33e80 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
33e90 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 69       /// This fi
33ea0 65 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20 73  eld is used to s
33eb0 74 6f 72 65 20 74 68 65 20 76 69 72 74 75 61 6c  tore the virtual
33ec0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 6e   table cursor in
33ed0 73 74 61 6e 63 65 73 0d 0a 20 20 20 20 20 20 20  stances..       
33ee0 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
33ef0 77 69 74 68 20 74 68 69 73 20 6d 6f 64 75 6c 65  with this module
33f00 2e 20 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  .  The native po
33f10 69 6e 74 65 72 20 74 6f 20 74 68 65 0d 0a 20 20  inter to the..  
33f20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
33f30 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65  3_vtab_cursor de
33f40 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 20  rived structure 
33f50 69 73 20 75 73 65 64 20 74 6f 20 6b 65 79 20 69  is used to key i
33f60 6e 74 6f 20 74 68 69 73 0d 0a 20 20 20 20 20 20  nto this..      
33f70 20 20 2f 2f 2f 20 63 6f 6c 6c 65 63 74 69 6f 6e    /// collection
33f80 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
33f90 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
33fa0 20 20 20 70 72 69 76 61 74 65 20 44 69 63 74 69     private Dicti
33fb0 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20 53 51  onary<IntPtr, SQ
33fc0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
33fd0 43 75 72 73 6f 72 3e 20 63 75 72 73 6f 72 73 3b  Cursor> cursors;
33fe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
33ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34030 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
34040 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
34050 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66        /// This f
34060 69 65 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20  ield is used to 
34070 73 74 6f 72 65 20 74 68 65 20 76 69 72 74 75 61  store the virtua
34080 6c 20 74 61 62 6c 65 20 66 75 6e 63 74 69 6f 6e  l table function
34090 20 69 6e 73 74 61 6e 63 65 73 0d 0a 20 20 20 20   instances..    
340a0 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
340b0 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 6f 64  ed with this mod
340c0 75 6c 65 2e 20 20 54 68 65 20 63 61 73 65 2d 69  ule.  The case-i
340d0 6e 73 65 6e 73 69 74 69 76 65 20 66 75 6e 63 74  nsensitive funct
340e0 69 6f 6e 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ion name..      
340f0 20 20 2f 2f 2f 20 61 6e 64 20 74 68 65 20 6e 75    /// and the nu
34100 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
34110 73 20 28 77 69 74 68 20 2d 31 20 6d 65 61 6e 69  s (with -1 meani
34120 6e 67 20 22 61 6e 79 22 29 20 61 72 65 20 75 73  ng "any") are us
34130 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  ed to..        /
34140 2f 2f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  // construct the
34150 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
34160 75 73 65 64 20 74 6f 20 6b 65 79 20 69 6e 74 6f  used to key into
34170 20 74 68 69 73 20 63 6f 6c 6c 65 63 74 69 6f 6e   this collection
34180 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
34190 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
341a0 20 20 20 70 72 69 76 61 74 65 20 44 69 63 74 69     private Dicti
341b0 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51  onary<string, SQ
341c0 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 66 75  LiteFunction> fu
341d0 6e 63 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20  nctions;..      
341e0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
341f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
34200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
34240 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
34250 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
34260 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
34270 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
34280 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
34290 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
342a0 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e  e of this class.
342b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
342c0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
342d0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
342e0 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20  e="name">..     
342f0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
34300 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20  of the module.  
34310 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 63  This parameter c
34320 61 6e 6e 6f 74 20 62 65 20 6e 75 6c 6c 2e 0d 0a  annot be null...
34330 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
34340 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
34350 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c  blic SQLiteModul
34360 65 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a  e(string name)..
34370 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34380 20 20 20 20 20 20 20 69 66 20 28 6e 61 6d 65 20         if (name 
34390 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
343a0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
343b0 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
343c0 45 78 63 65 70 74 69 6f 6e 28 22 6e 61 6d 65 22  Exception("name"
343d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
343e0 20 20 74 68 69 73 2e 6e 61 6d 65 20 3d 20 6e 61    this.name = na
343f0 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
34400 20 74 68 69 73 2e 74 61 62 6c 65 73 20 3d 20 6e   this.tables = n
34410 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e  ew Dictionary<In
34420 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69 72 74  tPtr, SQLiteVirt
34430 75 61 6c 54 61 62 6c 65 3e 28 29 3b 0d 0a 20 20  ualTable>();..  
34440 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63            this.c
34450 75 72 73 6f 72 73 20 3d 20 6e 65 77 20 44 69 63  ursors = new Dic
34460 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20  tionary<IntPtr, 
34470 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
34480 6c 65 43 75 72 73 6f 72 3e 28 29 3b 0d 0a 20 20  leCursor>();..  
34490 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 66            this.f
344a0 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 44  unctions = new D
344b0 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
344c0 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  , SQLiteFunction
344d0 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  >();..        }.
344e0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
344f0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
34500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34540 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
34550 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e    #region Intern
34560 61 6c 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  al Methods..    
34570 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
34580 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
34590 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
345a0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
345b0 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
345c0 63 72 65 61 74 65 20 61 20 6e 65 77 0d 0a 20 20  create a new..  
345d0 20 20 20 20 20 20 2f 2f 2f 20 64 69 73 70 6f 73        /// dispos
345e0 61 62 6c 65 20 6d 6f 64 75 6c 65 20 63 6f 6e 74  able module cont
345f0 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65  aining the imple
34600 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76  mentation of a v
34610 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
34620 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
34630 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
34640 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
34650 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  pDb">..        /
34660 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 64 61  // The native da
34670 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
34680 6e 20 70 6f 69 6e 74 65 72 20 74 6f 20 75 73 65  n pointer to use
34690 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
346a0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
346b0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
346c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
346d0 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65 73  zero upon succes
346e0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
346f0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
34700 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 62 6f 6f      internal boo
34710 6c 20 43 72 65 61 74 65 44 69 73 70 6f 73 61 62  l CreateDisposab
34720 6c 65 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20  leModule(..     
34730 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44         IntPtr pD
34740 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
34750 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
34760 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
34770 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 20 21 3d  posableModule !=
34780 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
34790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
347a0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20  eturn true;.... 
347b0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
347c0 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72  r pName = IntPtr
347d0 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
347e0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
347f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34800 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20            pName 
34810 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
34820 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
34830 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  ing(name);....  
34840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
34850 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
34860 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  s.sqlite3_module
34870 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 0d   nativeModule =.
34880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34890 20 20 20 20 20 41 6c 6c 6f 63 61 74 65 4e 61 74       AllocateNat
348a0 69 76 65 4d 6f 64 75 6c 65 28 29 3b 0d 0a 0d 0a  iveModule();....
348b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348c0 64 65 73 74 72 6f 79 4d 6f 64 75 6c 65 20 3d 20  destroyModule = 
348d0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
348e0 4d 65 74 68 6f 64 73 2e 78 44 65 73 74 72 6f 79  Methods.xDestroy
348f0 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20  Module(..       
34900 20 20 20 20 20 20 20 20 20 20 20 20 20 78 44 65               xDe
34910 73 74 72 6f 79 4d 6f 64 75 6c 65 29 3b 0d 0a 0d  stroyModule);...
34920 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
34930 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
34940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34950 20 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c   disposableModul
34960 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
34970 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
34980 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
34990 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70  ite3_create_disp
349a0 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 0d 0a  osable_module(..
349b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349c0 20 20 20 20 20 20 20 20 70 44 62 2c 20 70 4e 61          pDb, pNa
349d0 6d 65 2c 20 72 65 66 20 6e 61 74 69 76 65 4d 6f  me, ref nativeMo
349e0 64 75 6c 65 2c 20 49 6e 74 50 74 72 2e 5a 65 72  dule, IntPtr.Zer
349f0 6f 2c 20 64 65 73 74 72 6f 79 4d 6f 64 75 6c 65  o, destroyModule
34a00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34a10 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 64 69        return (di
34a20 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 20 21  sposableModule !
34a30 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  = IntPtr.Zero);.
34a40 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
34a50 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
34a60 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 61           disposa
34a70 62 6c 65 4d 6f 64 75 6c 65 20 3d 0d 0a 20 20 20  bleModule =..   
34a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a90 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
34aa0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
34ab0 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d  ate_disposable_m
34ac0 6f 64 75 6c 65 5f 69 6e 74 65 72 6f 70 28 0d 0a  odule_interop(..
34ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ae0 20 20 20 20 20 20 20 70 44 62 2c 20 70 4e 61 6d         pDb, pNam
34af0 65 2c 20 41 6c 6c 6f 63 61 74 65 4e 61 74 69 76  e, AllocateNativ
34b00 65 4d 6f 64 75 6c 65 49 6e 74 65 72 6f 70 28 29  eModuleInterop()
34b10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34b20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
34b30 4d 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f 6e 2c  Module.iVersion,
34b40 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43   nativeModule.xC
34b50 72 65 61 74 65 2c 0d 0a 20 20 20 20 20 20 20 20  reate,..        
34b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
34b70 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
34b80 6e 65 63 74 2c 20 6e 61 74 69 76 65 4d 6f 64 75  nect, nativeModu
34b90 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 2c 0d 0a  le.xBestIndex,..
34ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34bb0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
34bc0 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 2c  ule.xDisconnect,
34bd0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44   nativeModule.xD
34be0 65 73 74 72 6f 79 2c 0d 0a 20 20 20 20 20 20 20  estroy,..       
34bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c00 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70  nativeModule.xOp
34c10 65 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65  en, nativeModule
34c20 2e 78 43 6c 6f 73 65 2c 0d 0a 20 20 20 20 20 20  .xClose,..      
34c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c40 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46   nativeModule.xF
34c50 69 6c 74 65 72 2c 20 6e 61 74 69 76 65 4d 6f 64  ilter, nativeMod
34c60 75 6c 65 2e 78 4e 65 78 74 2c 0d 0a 20 20 20 20  ule.xNext,..    
34c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c80 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
34c90 78 45 6f 66 2c 20 6e 61 74 69 76 65 4d 6f 64 75  xEof, nativeModu
34ca0 6c 65 2e 78 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20  le.xColumn,..   
34cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cc0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
34cd0 2e 78 52 6f 77 49 64 2c 20 6e 61 74 69 76 65 4d  .xRowId, nativeM
34ce0 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 2c 0d 0a  odule.xUpdate,..
34cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d00 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
34d10 75 6c 65 2e 78 42 65 67 69 6e 2c 20 6e 61 74 69  ule.xBegin, nati
34d20 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 2c 0d  veModule.xSync,.
34d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d40 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
34d50 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 2c 20 6e 61  dule.xCommit, na
34d60 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
34d70 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
34d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
34d90 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64  tiveModule.xFind
34da0 46 75 6e 63 74 69 6f 6e 2c 20 6e 61 74 69 76 65  Function, native
34db0 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 2c 0d  Module.xRename,.
34dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34dd0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
34de0 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 2c  dule.xSavepoint,
34df0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
34e00 65 6c 65 61 73 65 2c 0d 0a 20 20 20 20 20 20 20  elease,..       
34e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  nativeModule.xRo
34e30 6c 6c 62 61 63 6b 54 6f 2c 20 49 6e 74 50 74 72  llbackTo, IntPtr
34e40 2e 5a 65 72 6f 2c 20 64 65 73 74 72 6f 79 4d 6f  .Zero, destroyMo
34e50 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dule);....      
34e60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34e70 20 28 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75   (disposableModu
34e80 6c 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  le != IntPtr.Zer
34e90 6f 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  o);..#else..    
34ea0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
34eb0 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
34ec0 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
34ed0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
34ee0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
34ef0 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
34f00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34f10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
34f20 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72  (pName != IntPtr
34f30 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
34f40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
34f60 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
34f70 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  (pName);..      
34f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e                pN
34f90 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ame = IntPtr.Zer
34fa0 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
34fb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
34fc0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
34fd0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
34fe0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
34ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35030 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
35040 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
35050 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  e Methods..     
35060 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
35070 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
35080 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
35090 6c 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  led by the SQLit
350a0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77  e core library w
350b0 68 65 6e 20 74 68 65 20 6e 61 74 69 76 65 0d 0a  hen the native..
350c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75          /// modu
350d0 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
350e0 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  th this object i
350f0 6e 73 74 61 6e 63 65 20 69 73 20 62 65 69 6e 67  nstance is being
35100 20 64 65 73 74 72 6f 79 65 64 20 64 75 65 0d 0a   destroyed due..
35110 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 69          /// to i
35120 74 73 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63  ts parent connec
35130 74 69 6f 6e 20 62 65 69 6e 67 20 63 6c 6f 73 65  tion being close
35140 64 2e 20 20 49 74 20 6d 61 79 20 61 6c 73 6f 20  d.  It may also 
35150 62 65 20 63 61 6c 6c 65 64 20 62 79 0d 0a 20 20  be called by..  
35160 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 22 76        /// the "v
35170 74 73 68 69 6d 22 20 6d 6f 64 75 6c 65 20 69 66  tshim" module if
35180 2f 77 68 65 6e 20 74 68 65 20 73 71 6c 69 74 65  /when the sqlite
35190 33 5f 64 69 73 70 6f 73 65 5f 6d 6f 64 75 6c 65  3_dispose_module
351a0 28 29 20 66 75 6e 63 74 69 6f 6e 0d 0a 20 20 20  () function..   
351b0 20 20 20 20 20 2f 2f 2f 20 69 73 20 63 61 6c 6c       /// is call
351c0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
351d0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
351e0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
351f0 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74  name="pClientDat
35200 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  a">..        ///
35210 20 54 68 65 20 6e 61 74 69 76 65 20 75 73 65 72   The native user
35220 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73  -data pointer as
35230 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
35240 69 73 20 6d 6f 64 75 6c 65 2c 20 61 73 20 69 74  is module, as it
35250 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f   was..        //
35260 2f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68  / provided to th
35270 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
35280 62 72 61 72 79 20 77 68 65 6e 20 74 68 65 20 6e  brary when the n
35290 61 74 69 76 65 20 6d 6f 64 75 6c 65 20 69 6e 73  ative module ins
352a0 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  tance..        /
352b0 2f 2f 20 77 61 73 20 63 72 65 61 74 65 64 2e 0d  // was created..
352c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
352d0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70  aram>..        p
352e0 72 69 76 61 74 65 20 76 6f 69 64 20 78 44 65 73  rivate void xDes
352f0 74 72 6f 79 4d 6f 64 75 6c 65 28 0d 0a 20 20 20  troyModule(..   
35300 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
35310 70 43 6c 69 65 6e 74 44 61 74 61 20 2f 2a 20 4e  pClientData /* N
35320 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20  OT USED */..    
35330 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
35340 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35350 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
35360 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 74 20 74 68    // NOTE: At th
35370 69 73 20 70 6f 69 6e 74 2c 20 6a 75 73 74 20 6d  is point, just m
35380 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
35390 69 73 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65  is native module
353a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
353b0 20 20 20 20 20 20 20 68 61 6e 64 6c 65 20 69 73         handle is
353c0 20 6e 6f 74 20 72 65 75 73 65 64 2c 20 6e 6f 72   not reused, nor
353d0 20 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65   passed into the
353e0 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20   native..       
353f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 71       //       sq
35400 6c 69 74 65 33 5f 64 69 73 70 6f 73 65 5f 6d 6f  lite3_dispose_mo
35410 64 75 6c 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  dule() function 
35420 6c 61 74 65 72 20 28 69 2e 65 2e 20 69 66 2f 77  later (i.e. if/w
35430 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  hen..           
35440 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 44 69   //       the Di
35450 73 70 6f 73 65 28 29 20 6d 65 74 68 6f 64 20 6f  spose() method o
35460 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
35470 73 74 61 6e 63 65 20 69 73 20 63 61 6c 6c 65 64  stance is called
35480 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
35490 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
354a0 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65  disposableModule
354b0 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
354c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
354d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
354e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
35520 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
35530 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
35540 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 64 20  /// Creates and 
35550 72 65 74 75 72 6e 73 20 74 68 65 20 6e 61 74 69  returns the nati
35560 76 65 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65  ve sqlite_module
35570 20 73 74 72 75 63 74 75 72 65 20 75 73 69 6e 67   structure using
35580 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
35590 2f 20 63 6f 6e 66 69 67 75 72 65 64 20 28 6f 72  / configured (or
355a0 20 64 65 66 61 75 6c 74 29 20 3c 73 65 65 20 63   default) <see c
355b0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
355c0 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20  veModule" />..  
355d0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66        /// interf
355e0 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ace implementati
355f0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
35600 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
35610 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
35620 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
35630 54 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74  The native sqlit
35640 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  e_module structu
35650 72 65 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  re using the con
35660 66 69 67 75 72 65 64 20 28 6f 72 0d 0a 20 20 20  figured (or..   
35670 20 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c 74       /// default
35680 29 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  ) <see cref="ISQ
35690 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
356a0 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65 0d 0a  " /> interface..
356b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
356c0 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
356d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
356e0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ns>..        pri
356f0 76 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69 76  vate UnsafeNativ
35700 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
35710 5f 6d 6f 64 75 6c 65 20 41 6c 6c 6f 63 61 74 65  _module Allocate
35720 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 0d 0a  NativeModule()..
35730 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35740 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 6c         return Al
35750 6c 6f 63 61 74 65 4e 61 74 69 76 65 4d 6f 64 75  locateNativeModu
35760 6c 65 28 47 65 74 4e 61 74 69 76 65 4d 6f 64 75  le(GetNativeModu
35770 6c 65 49 6d 70 6c 28 29 29 3b 0d 0a 20 20 20 20  leImpl());..    
35780 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35790 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
357a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
357b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
357c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
357d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20  ////////....#if 
357e0 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
357f0 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
35800 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
35810 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 72  ..        /// Cr
35820 65 61 74 65 73 20 61 6e 64 20 72 65 74 75 72 6e  eates and return
35830 73 20 61 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b  s a memory block
35840 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74   obtained from t
35850 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a  he SQLite core..
35860 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62 72          /// libr
35870 61 72 79 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ary used to stor
35880 65 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  e the native sql
35890 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75  ite3_module stru
358a0 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 0d 0a  cture for this..
358b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65          /// obje
358c0 63 74 20 69 6e 73 74 61 6e 63 65 20 77 68 65 6e  ct instance when
358d0 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74 68 65 20   running on the 
358e0 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46 72 61  .NET Compact Fra
358f0 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20  mework...       
35900 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
35910 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
35920 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
35930 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70  /// The native p
35940 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
35950 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64  tive sqlite3_mod
35960 75 6c 65 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ule structure...
35970 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
35980 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
35990 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20 41  private IntPtr A
359a0 6c 6c 6f 63 61 74 65 4e 61 74 69 76 65 4d 6f 64  llocateNativeMod
359b0 75 6c 65 49 6e 74 65 72 6f 70 28 29 0d 0a 20 20  uleInterop()..  
359c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
359d0 20 20 20 20 20 69 66 20 28 70 4e 61 74 69 76 65       if (pNative
359e0 4d 6f 64 75 6c 65 20 3d 3d 20 49 6e 74 50 74 72  Module == IntPtr
359f0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
35a00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35a10 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
35a20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
35a30 43 4b 3a 20 4e 6f 20 65 61 73 79 20 77 61 79 20  CK: No easy way 
35a40 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
35a50 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6e 61 74   size of the nat
35a60 69 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ive..           
35a70 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 71       //       sq
35a80 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75  lite_module stru
35a90 63 74 75 72 65 20 77 68 65 6e 20 72 75 6e 6e 69  cture when runni
35aa0 6e 67 20 6f 6e 20 74 68 65 20 2e 4e 45 54 0d 0a  ng on the .NET..
35ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ac0 2f 2f 20 20 20 20 20 20 20 43 6f 6d 70 61 63 74  //       Compact
35ad0 20 46 72 61 6d 65 77 6f 72 6b 3b 20 74 68 65 72   Framework; ther
35ae0 65 66 6f 72 65 2c 20 6a 75 73 74 20 62 61 73 65  efore, just base
35af0 20 74 68 65 20 73 69 7a 65 0d 0a 20 20 20 20 20   the size..     
35b00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
35b10 20 20 20 20 6f 6e 20 77 68 61 74 20 77 65 20 6b      on what we k
35b20 6e 6f 77 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  now:..          
35b30 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
35b40 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
35b50 20 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20     There is one 
35b60 69 6e 74 65 67 65 72 20 6d 65 6d 62 65 72 2e 0d  integer member..
35b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35b80 20 2f 2f 20 20 20 20 20 20 20 54 68 65 72 65 20   //       There 
35b90 61 72 65 20 32 32 20 66 75 6e 63 74 69 6f 6e 20  are 22 function 
35ba0 70 6f 69 6e 74 65 72 20 6d 65 6d 62 65 72 73 2e  pointer members.
35bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35bc0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
35bd0 20 20 20 20 20 20 70 4e 61 74 69 76 65 4d 6f 64        pNativeMod
35be0 75 6c 65 20 3d 20 53 51 4c 69 74 65 4d 65 6d 6f  ule = SQLiteMemo
35bf0 72 79 2e 41 6c 6c 6f 63 61 74 65 28 32 33 20 2a  ry.Allocate(23 *
35c00 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 3b 0d 0a   IntPtr.Size);..
35c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35c20 20 20 69 66 20 28 70 4e 61 74 69 76 65 4d 6f 64    if (pNativeMod
35c30 75 6c 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ule == IntPtr.Ze
35c40 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
35c50 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
35c60 65 77 20 4f 75 74 4f 66 4d 65 6d 6f 72 79 45 78  ew OutOfMemoryEx
35c70 63 65 70 74 69 6f 6e 28 22 73 71 6c 69 74 65 33  ception("sqlite3
35c80 5f 6d 6f 64 75 6c 65 22 29 3b 0d 0a 20 20 20 20  _module");..    
35c90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35ca0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35cb0 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a  pNativeModule;..
35cc0 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
35cd0 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  f....        ///
35ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
35d30 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
35d40 20 20 20 20 20 20 20 2f 2f 2f 20 43 72 65 61 74         /// Creat
35d50 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  es and returns t
35d60 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
35d70 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72  _module structur
35d80 65 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  e using the..   
35d90 20 20 20 20 20 2f 2f 2f 20 73 70 65 63 69 66 69       /// specifi
35da0 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  ed <see cref="IS
35db0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
35dc0 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65 0d  e" /> interface.
35dd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70  .        /// imp
35de0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20  lementation...  
35df0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
35e00 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
35e10 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
35e20 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  odule">..       
35e30 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
35e40 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
35e50 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65  eModule" /> inte
35e60 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61  rface implementa
35e70 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 20  tion to..       
35e80 20 2f 2f 2f 20 75 73 65 2e 0d 0a 20 20 20 20 20   /// use...     
35e90 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
35ea0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
35eb0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
35ec0 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 73  /// The native s
35ed0 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72  qlite_module str
35ee0 75 63 74 75 72 65 20 75 73 69 6e 67 20 74 68 65  ucture using the
35ef0 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20   specified..    
35f00 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
35f10 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
35f20 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72  Module" /> inter
35f30 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  face implementat
35f40 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
35f50 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
35f60 20 20 20 20 20 20 70 72 69 76 61 74 65 20 55 6e        private Un
35f70 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
35f80 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  s.sqlite3_module
35f90 20 41 6c 6c 6f 63 61 74 65 4e 61 74 69 76 65 4d   AllocateNativeM
35fa0 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  odule(..        
35fb0 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76      ISQLiteNativ
35fc0 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a  eModule module..
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
35fe0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35ff0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
36000 6c 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  le = new UnsafeN
36010 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
36020 69 74 65 33 5f 6d 6f 64 75 6c 65 28 29 3b 0d 0a  ite3_module();..
36030 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
36040 76 65 4d 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f  veModule.iVersio
36050 6e 20 3d 20 44 65 66 61 75 6c 74 4d 6f 64 75 6c  n = DefaultModul
36060 65 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  eVersion;....   
36070 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
36080 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule != null)..  
36090 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
360a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
360b0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
360c0 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
360d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 72 65  tiveMethods.xCre
360e0 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
360f0 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
36100 78 43 72 65 61 74 65 29 3b 0d 0a 0d 0a 20 20 20  xCreate);....   
36110 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
36120 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65  iveModule.xConne
36130 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ct = new UnsafeN
36140 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
36150 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
36160 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
36170 6c 65 2e 78 43 6f 6e 6e 65 63 74 29 3b 0d 0a 0d  le.xConnect);...
36180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36190 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42   nativeModule.xB
361a0 65 73 74 49 6e 64 65 78 20 3d 20 6e 65 77 20 55  estIndex = new U
361b0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
361c0 64 73 2e 78 42 65 73 74 49 6e 64 65 78 28 0d 0a  ds.xBestIndex(..
361d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361e0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 42 65 73 74      module.xBest
361f0 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  Index);....     
36200 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
36210 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e  eModule.xDisconn
36220 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ect = new Unsafe
36230 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44  NativeMethods.xD
36240 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20  isconnect(..    
36250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36260 6d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65  module.xDisconne
36270 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ct);....        
36280 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
36290 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20 3d 20  dule.xDestroy = 
362a0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
362b0 4d 65 74 68 6f 64 73 2e 78 44 65 73 74 72 6f 79  Methods.xDestroy
362c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
362d0 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 44         module.xD
362e0 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20  estroy);....    
362f0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
36300 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3d  veModule.xOpen =
36310 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
36320 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65 6e 28 0d  eMethods.xOpen(.
36330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36340 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 4f 70 65       module.xOpe
36350 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
36360 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
36370 75 6c 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77  ule.xClose = new
36380 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
36390 68 6f 64 73 2e 78 43 6c 6f 73 65 28 0d 0a 20 20  hods.xClose(..  
363a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363b0 20 20 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 29    module.xClose)
363c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
363d0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
363e0 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65 77 20  e.xFilter = new 
363f0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
36400 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a 20 20  ods.xFilter(..  
36410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36420 20 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72    module.xFilter
36430 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
36440 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
36450 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20 55  le.xNext = new U
36460 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
36470 64 73 2e 78 4e 65 78 74 28 0d 0a 20 20 20 20 20  ds.xNext(..     
36480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
36490 6f 64 75 6c 65 2e 78 4e 65 78 74 29 3b 0d 0a 0d  odule.xNext);...
364a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
364b0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45   nativeModule.xE
364c0 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  of = new UnsafeN
364d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 45 6f  ativeMethods.xEo
364e0 66 28 6d 6f 64 75 6c 65 2e 78 45 6f 66 29 3b 0d  f(module.xEof);.
364f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36500 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
36510 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20 55 6e  xColumn = new Un
36520 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
36530 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20  s.xColumn(..    
36540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36550 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 29 3b  module.xColumn);
36560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36570 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
36580 2e 78 52 6f 77 49 64 20 3d 20 6e 65 77 20 55 6e  .xRowId = new Un
36590 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
365a0 73 2e 78 52 6f 77 49 64 28 0d 0a 20 20 20 20 20  s.xRowId(..     
365b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
365c0 6f 64 75 6c 65 2e 78 52 6f 77 49 64 29 3b 0d 0a  odule.xRowId);..
365d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
365e0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
365f0 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55 6e 73  Update = new Uns
36600 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
36610 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20  .xUpdate(..     
36620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
36630 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 29 3b 0d  odule.xUpdate);.
36640 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36650 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
36660 78 42 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e 73  xBegin = new Uns
36670 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
36680 2e 78 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20  .xBegin(..      
36690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
366a0 64 75 6c 65 2e 78 42 65 67 69 6e 29 3b 0d 0a 0d  dule.xBegin);...
366b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
366c0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53   nativeModule.xS
366d0 79 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ync = new Unsafe
366e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53  NativeMethods.xS
366f0 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ync(..          
36700 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
36710 2e 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20  .xSync);....    
36720 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
36730 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74  veModule.xCommit
36740 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
36750 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6d 6d  iveMethods.xComm
36760 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it(..           
36770 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
36780 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20  xCommit);....   
36790 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
367a0 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  iveModule.xRollb
367b0 61 63 6b 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ack = new Unsafe
367c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52  NativeMethods.xR
367d0 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  ollback(..      
367e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
367f0 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 29 3b  dule.xRollback);
36800 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36810 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
36820 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d  .xFindFunction =
36830 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
36840 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64 46 75  eMethods.xFindFu
36850 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
36860 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
36870 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
36880 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
36890 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
368a0 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3d 20 6e 65  ule.xRename = ne
368b0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
368c0 74 68 6f 64 73 2e 78 52 65 6e 61 6d 65 28 0d 0a  thods.xRename(..
368d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368e0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 65 6e 61      module.xRena
368f0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
36900 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
36910 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 20  dule.xSavepoint 
36920 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
36930 76 65 4d 65 74 68 6f 64 73 2e 78 53 61 76 65 70  veMethods.xSavep
36940 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  oint(..         
36950 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
36960 65 2e 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a  e.xSavepoint);..
36970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36980 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
36990 52 65 6c 65 61 73 65 20 3d 20 6e 65 77 20 55 6e  Release = new Un
369a0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
369b0 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20  s.xRelease(..   
369c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369d0 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65   module.xRelease
369e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
369f0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
36a00 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d  le.xRollbackTo =
36a10 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
36a20 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61  eMethods.xRollba
36a30 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20  ckTo(..         
36a40 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
36a50 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d  e.xRollbackTo);.
36a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
36a70 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
36a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
36a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36aa0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43   nativeModule.xC
36ab0 72 65 61 74 65 20 3d 20 6e 65 77 20 55 6e 73 61  reate = new Unsa
36ac0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
36ad0 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20  xCreate(..      
36ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 43                xC
36af0 72 65 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  reate);....     
36b00 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
36b10 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
36b20 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
36b30 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6e 6e  iveMethods.xConn
36b40 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
36b50 20 20 20 20 20 20 20 20 20 20 78 43 6f 6e 6e 65            xConne
36b60 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ct);....        
36b70 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
36b80 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 20  dule.xBestIndex 
36b90 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
36ba0 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 73 74 49  veMethods.xBestI
36bb0 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
36bc0 20 20 20 20 20 20 20 20 20 20 20 78 42 65 73 74             xBest
36bd0 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  Index);....     
36be0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
36bf0 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e  eModule.xDisconn
36c00 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ect = new Unsafe
36c10 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44  NativeMethods.xD
36c20 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20  isconnect(..    
36c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c40 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d 0a 0d  xDisconnect);...
36c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36c60 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44   nativeModule.xD
36c70 65 73 74 72 6f 79 20 3d 20 6e 65 77 20 55 6e 73  estroy = new Uns
36c80 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
36c90 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20  .xDestroy(..    
36ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cb0 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20  xDestroy);....  
36cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
36cd0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e  tiveModule.xOpen
36ce0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
36cf0 69 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65 6e  iveMethods.xOpen
36d00 28 78 4f 70 65 6e 29 3b 0d 0a 20 20 20 20 20 20  (xOpen);..      
36d10 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
36d20 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3d 20  Module.xClose = 
36d30 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
36d40 4d 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65 28 78  Methods.xClose(x
36d50 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  Close);....     
36d60 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
36d70 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20  eModule.xFilter 
36d80 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
36d90 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c 74 65  veMethods.xFilte
36da0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
36db0 20 20 20 20 20 20 20 20 78 46 69 6c 74 65 72 29          xFilter)
36dc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36dd0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
36de0 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20 55 6e  e.xNext = new Un
36df0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
36e00 73 2e 78 4e 65 78 74 28 78 4e 65 78 74 29 3b 0d  s.xNext(xNext);.
36e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36e20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45   nativeModule.xE
36e30 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  of = new UnsafeN
36e40 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 45 6f  ativeMethods.xEo
36e50 66 28 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20 20 20  f(xEof);....    
36e60 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
36e70 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e  veModule.xColumn
36e80 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
36e90 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6c 75  iveMethods.xColu
36ea0 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn(..           
36eb0 20 20 20 20 20 20 20 20 20 78 43 6f 6c 75 6d 6e           xColumn
36ec0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
36ed0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
36ee0 6c 65 2e 78 52 6f 77 49 64 20 3d 20 6e 65 77 20  le.xRowId = new 
36ef0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
36f00 6f 64 73 2e 78 52 6f 77 49 64 28 78 52 6f 77 49  ods.xRowId(xRowI
36f10 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  d);....         
36f20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
36f30 75 6c 65 2e 78 55 70 64 61 74 65 20 3d 20 6e 65  ule.xUpdate = ne
36f40 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
36f50 74 68 6f 64 73 2e 78 55 70 64 61 74 65 28 0d 0a  thods.xUpdate(..
36f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f70 20 20 20 20 78 55 70 64 61 74 65 29 3b 0d 0a 0d      xUpdate);...
36f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36f90 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42   nativeModule.xB
36fa0 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66  egin = new Unsaf
36fb0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
36fc0 42 65 67 69 6e 28 78 42 65 67 69 6e 29 3b 0d 0a  Begin(xBegin);..
36fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fe0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79  nativeModule.xSy
36ff0 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  nc = new UnsafeN
37000 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 79  ativeMethods.xSy
37010 6e 63 28 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20  nc(xSync);....  
37020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
37030 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d  tiveModule.xComm
37040 69 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  it = new UnsafeN
37050 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
37060 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  mmit(..         
37070 20 20 20 20 20 20 20 20 20 20 20 78 43 6f 6d 6d             xComm
37080 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  it);....        
37090 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
370a0 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d  dule.xRollback =
370b0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
370c0 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61  eMethods.xRollba
370d0 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
370e0 20 20 20 20 20 20 20 20 20 78 52 6f 6c 6c 62 61           xRollba
370f0 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ck);....        
37100 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
37110 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69  dule.xFindFuncti
37120 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  on = new UnsafeN
37130 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69  ativeMethods.xFi
37140 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
37150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37160 20 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29 3b   xFindFunction);
37170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37180 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
37190 2e 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20 55  .xRename = new U
371a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
371b0 64 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20  ds.xRename(..   
371c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371d0 20 78 52 65 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   xRename);....  
371e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
371f0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65  tiveModule.xSave
37200 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e 73 61  point = new Unsa
37210 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
37220 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20  xSavepoint(..   
37230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37240 20 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d   xSavepoint);...
37250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37260 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
37270 65 6c 65 61 73 65 20 3d 20 6e 65 77 20 55 6e 73  elease = new Uns
37280 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
37290 2e 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20  .xRelease(..    
372a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372b0 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a 20 20  xRelease);....  
372c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
372d0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
372e0 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20 55 6e 73  backTo = new Uns
372f0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
37300 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20  .xRollbackTo(.. 
37310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37320 20 20 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 29 3b     xRollbackTo);
37330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
37340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
37350 65 74 75 72 6e 20 6e 61 74 69 76 65 4d 6f 64 75  eturn nativeModu
37360 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  le;..        }..
37370 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
37380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
373d0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
373e0 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
373f0 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 73 70  a copy of the sp
37400 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20  ecified..       
37410 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
37420 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
37430 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ods.sqlite3_modu
37440 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
37450 73 74 61 6e 63 65 2c 0d 0a 20 20 20 20 20 20 20  stance,..       
37460 20 2f 2f 2f 20 75 73 69 6e 67 20 64 65 66 61 75   /// using defau
37470 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  lt implementatio
37480 6e 73 20 66 6f 72 20 74 68 65 20 63 6f 6e 74 61  ns for the conta
37490 69 6e 65 64 20 64 65 6c 65 67 61 74 65 73 20 77  ined delegates w
374a0 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  hen..        ///
374b0 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20   necessary...   
374c0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
374d0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
374e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
374f0 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  dule">..        
37500 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
37510 66 3d 22 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  f="UnsafeNativeM
37520 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
37530 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  odule" /> object
37540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
37550 73 74 61 6e 63 65 20 74 6f 20 63 6f 70 79 2e 0d  stance to copy..
37560 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
37570 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
37580 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
37590 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65        /// The ne
375a0 77 20 3c 73 65 65 20 63 72 65 66 3d 22 55 6e 73  w <see cref="Uns
375b0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
375c0 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22  .sqlite3_module"
375d0 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20   /> object..    
375e0 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
375f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
37600 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
37610 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61 66     private Unsaf
37620 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
37630 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 43 6f  qlite3_module Co
37640 70 79 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 0d  pyNativeModule(.
37650 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
37660 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
37670 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  .sqlite3_module 
37680 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20  module..        
37690 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
376a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
376b0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
376c0 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  s.sqlite3_module
376d0 20 6e 65 77 4d 6f 64 75 6c 65 20 3d 0d 0a 20 20   newModule =..  
376e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
376f0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
37700 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f  thods.sqlite3_mo
37710 64 75 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  dule();....     
37720 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
37730 2e 69 56 65 72 73 69 6f 6e 20 3d 20 6d 6f 64 75  .iVersion = modu
37740 6c 65 2e 69 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a  le.iVersion;....
37750 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d              newM
37760 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20  odule.xCreate = 
37770 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
37780 4d 65 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28  Methods.xCreate(
37790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
377a0 20 20 28 6d 6f 64 75 6c 65 2e 78 43 72 65 61 74    (module.xCreat
377b0 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  e != null) ? mod
377c0 75 6c 65 2e 78 43 72 65 61 74 65 20 3a 20 78 43  ule.xCreate : xC
377d0 72 65 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  reate);....     
377e0 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
377f0 2e 78 43 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20  .xConnect = new 
37800 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
37810 6f 64 73 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a 20  ods.xConnect(.. 
37820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
37830 6d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20  module.xConnect 
37840 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
37850 65 2e 78 43 6f 6e 6e 65 63 74 20 3a 20 78 43 6f  e.xConnect : xCo
37860 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  nnect);....     
37870 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
37880 2e 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65  .xBestIndex = ne
37890 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
378a0 74 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78  thods.xBestIndex
378b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
378c0 20 20 20 28 6d 6f 64 75 6c 65 2e 78 42 65 73 74     (module.xBest
378d0 49 6e 64 65 78 20 21 3d 20 6e 75 6c 6c 29 20 3f  Index != null) ?
378e0 20 6d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64   module.xBestInd
378f0 65 78 20 3a 20 78 42 65 73 74 49 6e 64 65 78 29  ex : xBestIndex)
37900 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37910 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 44 69 73 63   newModule.xDisc
37920 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73  onnect = new Uns
37930 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
37940 2e 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20  .xDisconnect(.. 
37950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
37960 6d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65  module.xDisconne
37970 63 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f  ct != null) ? mo
37980 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74  dule.xDisconnect
37990 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
379a0 20 20 20 20 78 44 69 73 63 6f 6e 6e 65 63 74 29      xDisconnect)
379b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
379c0 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 44 65 73 74   newModule.xDest
379d0 72 6f 79 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  roy = new Unsafe
379e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44  NativeMethods.xD
379f0 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20  estroy(..       
37a00 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
37a10 2e 78 44 65 73 74 72 6f 79 20 21 3d 20 6e 75 6c  .xDestroy != nul
37a20 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 44 65 73  l) ? module.xDes
37a30 74 72 6f 79 20 3a 20 78 44 65 73 74 72 6f 79 29  troy : xDestroy)
37a40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37a50 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e   newModule.xOpen
37a60 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
37a70 69 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65 6e  iveMethods.xOpen
37a80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37a90 20 20 20 28 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e     (module.xOpen
37aa0 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
37ab0 6c 65 2e 78 4f 70 65 6e 20 3a 20 78 4f 70 65 6e  le.xOpen : xOpen
37ac0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37ad0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 6c 6f    newModule.xClo
37ae0 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  se = new UnsafeN
37af0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6c  ativeMethods.xCl
37b00 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ose(..          
37b10 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43        (module.xC
37b20 6c 6f 73 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  lose != null) ? 
37b30 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3a 20  module.xClose : 
37b40 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  xClose);....    
37b50 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
37b60 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65 77 20  e.xFilter = new 
37b70 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
37b80 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a 20 20  ods.xFilter(..  
37b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
37ba0 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20 21 3d  odule.xFilter !=
37bb0 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
37bc0 78 46 69 6c 74 65 72 20 3a 20 78 46 69 6c 74 65  xFilter : xFilte
37bd0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
37be0 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 4e 65     newModule.xNe
37bf0 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  xt = new UnsafeN
37c00 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e 65  ativeMethods.xNe
37c10 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt(..           
37c20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 4e 65       (module.xNe
37c30 78 74 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f  xt != null) ? mo
37c40 64 75 6c 65 2e 78 4e 65 78 74 20 3a 20 78 4e 65  dule.xNext : xNe
37c50 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
37c60 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 45      newModule.xE
37c70 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  of = new UnsafeN
37c80 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 45 6f  ativeMethods.xEo
37c90 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f(..            
37ca0 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 45 6f 66      (module.xEof
37cb0 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
37cc0 6c 65 2e 78 45 6f 66 20 3a 20 78 45 6f 66 29 3b  le.xEof : xEof);
37cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37ce0 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  newModule.xColum
37cf0 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
37d00 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6c  tiveMethods.xCol
37d10 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  umn(..          
37d20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43        (module.xC
37d30 6f 6c 75 6d 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f  olumn != null) ?
37d40 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20   module.xColumn 
37d50 3a 20 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20  : xColumn);.... 
37d60 20 20 2